ng-hub-ui-forms 22.7.0 → 22.8.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/utils/utils.ts","../../../projects/forms/src/lib/shared/hub-form-control.ts","../../../projects/forms/src/lib/directives/form-text.directive.ts","../../../projects/forms/src/lib/directives/validation-error.directive.ts","../../../projects/forms/src/lib/interfaces/datepicker.interface.ts","../../../projects/forms/src/lib/utils/file-size.ts","../../../projects/forms/src/lib/interfaces/file-input.interface.ts","../../../projects/forms/src/lib/shared/hub-error-display.ts","../../../projects/forms/src/lib/services/forms-config.ts","../../../projects/forms/src/lib/shared/hub-field-control.ts","../../../projects/forms/src/lib/shared/hub-group-control.ts","../../../projects/forms/src/lib/services/file-uploader.ts","../../../projects/forms/src/lib/interfaces/common.interface.ts","../../../projects/forms/src/lib/interfaces/input.interface.ts","../../../projects/forms/src/lib/directives/input-prefix.directive.ts","../../../projects/forms/src/lib/directives/input-suffix.directive.ts","../../../projects/forms/src/lib/utils/mask.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/shared/resolve-hub-accent.ts","../../../projects/forms/src/lib/components/segmented/segmented.component.ts","../../../projects/forms/src/lib/components/segmented/segmented.component.html","../../../projects/forms/src/lib/directives/legend.directive.ts","../../../projects/forms/src/lib/components/fieldset/fieldset.component.ts","../../../projects/forms/src/lib/components/fieldset/fieldset.component.html","../../../projects/forms/src/lib/components/form/form.component.ts","../../../projects/forms/src/lib/components/form/form.component.html","../../../projects/forms/src/lib/components/legend/legend.component.ts","../../../projects/forms/src/lib/interfaces/select.interface.ts","../../../projects/forms/src/lib/select/vendor/lib/value-utils.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-templates.directive.ts","../../../projects/forms/src/lib/select/vendor/lib/config.service.ts","../../../projects/forms/src/lib/select/vendor/lib/console.service.ts","../../../projects/forms/src/lib/select/vendor/lib/id.ts","../../../projects/forms/src/lib/select/vendor/lib/search-helper.ts","../../../projects/forms/src/lib/select/vendor/lib/items-list.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-dropdown-panel.service.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-dropdown-panel.component.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-option.component.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-select.types.ts","../../../projects/forms/src/lib/select/vendor/lib/selection-model.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-select.component.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-select.component.html","../../../projects/forms/src/lib/select/select.component.ts","../../../projects/forms/src/lib/select/select.component.html","../../../projects/forms/src/lib/components/datepicker/date-utils.ts","../../../projects/forms/src/lib/components/datepicker/datepicker.component.ts","../../../projects/forms/src/lib/components/datepicker/datepicker.component.html","../../../projects/forms/src/lib/directives/file-icon.directive.ts","../../../projects/forms/src/lib/directives/file-dropzone-notice.directive.ts","../../../projects/forms/src/lib/directives/file-preview.directive.ts","../../../projects/forms/src/lib/utils/file-accept.ts","../../../projects/forms/src/lib/utils/file-key.ts","../../../projects/forms/src/lib/utils/file-value.ts","../../../projects/forms/src/lib/components/file-input/file-input.component.ts","../../../projects/forms/src/lib/components/file-input/file-input.component.html","../../../projects/forms/src/lib/pipes/invert-color.pipe.ts","../../../projects/forms/src/lib/pipes/join-but-last.pipe.ts","../../../projects/forms/src/lib/pipes/map.pipe.ts","../../../projects/forms/src/lib/pipes/safe-url.pipe.ts","../../../projects/forms/src/lib/pipes/snake-upper.pipe.ts","../../../projects/forms/src/lib/pipes/ucfirst.pipe.ts","../../../projects/forms/src/lib/validators/are-equal.validator.ts","../../../projects/forms/src/lib/validators/accepted-files.validator.ts","../../../projects/forms/src/lib/validators/max-file-size.validator.ts","../../../projects/forms/src/lib/validators/min-file-size.validator.ts","../../../projects/forms/src/lib/validators/max-total-size.validator.ts","../../../projects/forms/src/lib/validators/max-files.validator.ts","../../../projects/forms/src/lib/validators/min-files.validator.ts","../../../projects/forms/src/lib/integrations/form-control-adapter.ts","../../../projects/forms/src/public-api.ts","../../../projects/forms/src/ng-hub-ui-forms.ts"],"sourcesContent":["import { NgZone } from '@angular/core';\nimport { AbstractControl, FormControl } from '@angular/forms';\nimport { Observable, OperatorFunction } from 'rxjs';\n\n/**\n * Checks if a value is a string.\n *\n * @param value - Value to test.\n * @returns `true` when `value` is a string.\n */\nexport function isString(value: any): value is string {\n\treturn typeof value === 'string';\n}\n\n/**\n * Checks if a value is defined and not null.\n *\n * @param value - Value to test.\n * @returns `true` when `value` is neither `undefined` nor `null`.\n */\nexport function isDefined(value: any): boolean {\n\treturn value !== undefined && value !== null;\n}\n\n/**\n * Operator that runs the source observable within a specified Angular zone.\n *\n * @param zone - The `NgZone` instance used to run emissions.\n * @returns An `OperatorFunction` that re-enters the given zone for every notification.\n */\nexport function runInZone<T>(zone: NgZone): OperatorFunction<T, T> {\n\treturn (source) => {\n\t\treturn new Observable((observer) => {\n\t\t\tconst onNext = (value: T) => zone.run(() => observer.next(value));\n\t\t\tconst onError = (e: any) => zone.run(() => observer.error(e));\n\t\t\tconst onComplete = () => zone.run(() => observer.complete());\n\n\t\t\treturn source.subscribe(onNext, onError, onComplete);\n\t\t});\n\t};\n}\n\n/**\n * Joins an array of strings using a separator for all but the last element, which uses `lastSeparator`.\n *\n * @param texts - Strings to join.\n * @param separator - Separator used between all but the last element. Defaults to `', '`.\n * @param lastSeparator - Separator used before the last element. Defaults to `' and '`.\n * @returns The joined string.\n */\nexport function joinButLast(texts: string[], separator = ', ', lastSeparator = ' and '): string {\n\tif (texts.length < 2) {\n\t\treturn texts.join();\n\t}\n\n\treturn `${texts.slice(0, texts.length - 1).join(separator)} ${lastSeparator} ${texts[texts.length - 1]}`;\n}\n\n/**\n * Checks if two values are equal, taking different types into account.\n *\n * Primitives are compared with strict equality; everything else is compared by JSON serialization.\n *\n * @param first - First value.\n * @param second - Second value.\n * @returns `true` when both values are considered equal.\n */\nexport function areEqual(first: any, second: any): boolean {\n\tconst primitives = ['string', 'number', 'boolean'];\n\n\tif (!primitives.includes(typeof first) || !primitives.includes(typeof second)) {\n\t\treturn JSON.stringify(first) === JSON.stringify(second);\n\t} else {\n\t\treturn first === second;\n\t}\n}\n\n/**\n * Checks whether a control declares a `min` or `max` validator.\n *\n * @param control - The control to inspect.\n * @param type - Either `'min'` or `'max'`.\n * @returns `true` when the validator is present.\n */\nexport function controlHasMinOrMaxValidator(control: AbstractControl, type: 'min' | 'max'): boolean {\n\tconst validator = control.validator;\n\n\tif (validator === null) {\n\t\treturn false;\n\t}\n\n\tconst value = type === 'max' ? Infinity : -Infinity;\n\tconst errors = validator(new FormControl(value)) ?? {};\n\n\treturn type in errors;\n}\n\n/**\n * Reads the configured `min`/`max` value from a control's validator.\n *\n * @param control - The control to inspect.\n * @param type - Either `'min'` or `'max'`.\n * @returns The configured bound, or `null` when not present.\n */\nexport function getMinOrMaxValueFromValidator(control: AbstractControl, type: 'min' | 'max'): number | null {\n\tconst validator = control.validator;\n\n\tif (validator === null) {\n\t\treturn null;\n\t}\n\n\tconst value = type === 'max' ? Infinity : -Infinity;\n\tconst errors = validator(new FormControl(value)) ?? {};\n\n\treturn type in errors ? errors[type][type] : null;\n}\n\n/**\n * Retrieves a value from an object following a dot-separated path, with an optional fallback.\n *\n * @param object - Source object.\n * @param path - Dot-separated path (e.g. `'a.b.c'`).\n * @param fallback - Value returned when the path cannot be resolved. Defaults to `null`.\n * @returns The resolved value, or the fallback.\n */\nexport function get(object: { [key: string]: any }, path: string, fallback: any = null): any {\n\tconst dotIndex = path.indexOf('.');\n\n\tif (!isDefined(object)) {\n\t\treturn fallback || undefined;\n\t}\n\n\tif (dotIndex === -1) {\n\t\tif (path.length && path in object) {\n\t\t\treturn object[path];\n\t\t}\n\n\t\treturn fallback || undefined;\n\t}\n\n\treturn get(object[path.substring(0, dotIndex)], path.substring(dotIndex + 1), fallback);\n}\n\n/**\n * Converts a camelCase string to UPPER_SNAKE_CASE.\n *\n * @param value - camelCase identifier.\n * @returns The UPPER_SNAKE_CASE representation.\n */\nexport function camelToSnakeUpper(value: string): string {\n\treturn value.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\n/**\n * Generates a UUID using `crypto.randomUUID()` when available, falling back to a timestamp-based id.\n *\n * @returns A unique string identifier.\n */\nexport function uuid(): string {\n\ttry {\n\t\treturn crypto.randomUUID();\n\t} catch (error) {\n\t\treturn (Date.now() + Math.floor(Math.random() * 10000)).toString();\n\t}\n}\n\n/**\n * Returns the active element within the given root, descending into shadow roots when needed.\n *\n * @param root - The document or shadow root to search. Defaults to `document`.\n * @returns The deepest active element, or `null`.\n */\nexport function getActiveElement(root: Document | ShadowRoot = document): Element | null {\n\tconst activeEl = root?.activeElement;\n\n\tif (!activeEl) {\n\t\treturn null;\n\t}\n\n\treturn activeEl.shadowRoot ? getActiveElement(activeEl.shadowRoot) : activeEl;\n}\n","import { AfterContentInit, Directive, input, model, OnDestroy, OnInit } from '@angular/core';\nimport { ControlContainer, FormControlStatus, NgControl, Validators } from '@angular/forms';\nimport { Subject, takeUntil, tap } from 'rxjs';\nimport { isDefined } from '../utils/utils';\n\n/**\n * Base class for every form field in `ng-hub-ui-forms`.\n *\n * Provides the shared `ControlValueAccessor`-adjacent plumbing used by the field components:\n * reactive `required` tracking derived from the bound control's validators, programmatic\n * show/hide/toggle helpers exposed on the underlying `AbstractControl`, and lifecycle wiring.\n *\n * Subclasses must provide the injected `NgControl` and `ControlContainer` instances.\n */\n@Directive({\n\thost: {\n\t\t'[class.hidden-control]': 'hidden'\n\t}\n})\nexport abstract class HubFormControl implements OnInit, AfterContentInit, OnDestroy {\n\t/**\n\t * Name of the form control when used within a form group/array.\n\t */\n\treadonly formControlName = input<string>();\n\n\t/**\n\t * Whether the control is required. Derived from the bound control's validators when reactive.\n\t */\n\treadonly required = model<boolean | null>(null);\n\n\t/**\n\t * Whether the control is hidden.\n\t */\n\thidden: boolean = false;\n\n\tprotected _destroy$ = new Subject();\n\tprotected _isFormControl: boolean = false;\n\tprotected abstract _control: NgControl;\n\tprotected abstract _controlContainer: ControlContainer;\n\n\t/**\n\t * Shows the control.\n\t */\n\tshow = () => {\n\t\tthis.hidden = false;\n\t};\n\n\t/**\n\t * Hides the control.\n\t */\n\thide = () => {\n\t\tthis.hidden = true;\n\t};\n\n\t/**\n\t * Toggles the control visibility.\n\t */\n\ttoggle = () => {\n\t\tthis.hidden = !this.hidden;\n\t};\n\n\tngOnInit(): void {\n\t\tif (this._control) {\n\t\t\tthis.setShowAndHideFunctions();\n\t\t\tthis._isFormControl = !!this.formControlName();\n\t\t}\n\t}\n\n\tngAfterContentInit(): void {\n\t\tconst formControlName = this.formControlName();\n\n\t\tif (this._control && !this._control.control && formControlName) {\n\t\t\tthrow new Error(`Can't find form control with name ${formControlName}`);\n\t\t}\n\n\t\tif (this._control?.control && formControlName) {\n\t\t\tconst control = this._control.control;\n\n\t\t\tif (isDefined(this.required())) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`You're using the inline property \"required\" with a reactive control. The property will be overwritten with the validators of the control.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.required.set(control.hasValidator(Validators.required));\n\t\t\tcontrol.statusChanges\n\t\t\t\t.pipe(\n\t\t\t\t\ttakeUntil(this._destroy$),\n\t\t\t\t\ttap((status: FormControlStatus) => {\n\t\t\t\t\t\tthis.required.set(control.hasValidator(Validators.required));\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.subscribe();\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._destroy$.next(null);\n\t\tthis._destroy$.complete();\n\t}\n\n\t/**\n\t * Attaches `show`, `hide` and `toggle` helpers to the underlying form control object.\n\t *\n\t * Best-effort: if the control cannot be resolved (e.g. the container is not yet initialized),\n\t * the helpers are simply not attached. This never throws — a missing convenience must not break\n\t * rendering.\n\t */\n\tprotected setShowAndHideFunctions() {\n\t\tconst formControlName = this.formControlName();\n\n\t\tif (!formControlName) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst control = this._controlContainer?.control?.get(formControlName) as any;\n\n\t\tif (!control) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontrol['show'] = this.show;\n\t\tcontrol['hide'] = this.hide;\n\t\tcontrol['toggle'] = this.toggle;\n\t}\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Marks a template as form helper text projected into a form field.\n *\n * @example\n * ```html\n * <hub-input formControlName=\"email\">\n * <ng-template hubFormText>We'll never share your email.</ng-template>\n * </hub-input>\n * ```\n */\n@Directive({\n\tselector: '[hubFormText]'\n})\nexport class HubFormTextDirective {\n\t/** Template reference for the helper text. */\n\treadonly template = inject(TemplateRef);\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n/**\n * Marks a template as the validation error message for a specific error key.\n *\n * Used by form fields and form containers to override the default message rendered\n * for a given validation error (e.g. `required`, `min`, `equal`).\n *\n * @example\n * ```html\n * <hub-input formControlName=\"age\">\n * <ng-template hubValidationError key=\"min\">Must be at least 18.</ng-template>\n * </hub-input>\n * ```\n */\n@Directive({\n\tselector: '[hubValidationError]'\n})\nexport class HubValidationErrorDirective {\n\t/** Unique key for the validation error (e.g. `'required'`, `'min'`). */\n\treadonly key = input.required<string>();\n\n\t/** Template reference for the error message. */\n\treadonly template = inject(TemplateRef);\n}\n","/** Selection mode for `<hub-datepicker>`. */\nexport type HubDatepickerMode = 'single' | 'range';\n\n/** A selected date range (ISO `YYYY-MM-DD` strings, or `null` while incomplete). */\nexport interface HubDateRange {\n\tstart: string | null;\n\tend: string | null;\n}\n\n/** The CVA value of `<hub-datepicker>`: an ISO string in `single` mode, a range in `range` mode. */\nexport type HubDateValue = string | HubDateRange | null;\n\n/**\n * Localizable, overridable labels for the datepicker (button text + accessibility names).\n * Month and weekday names come from the `Intl` API and need no 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}\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/** 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};\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\tlabels: defaultHubDatepickerLabels\n};\n","/** Binary size units, ascending. */\nconst FILE_SIZE_UNITS = ['B', 'KB', 'MB', 'GB', 'TB'] as const;\n\n/**\n * Formats a byte count as human-readable text using binary multiples (1 KB = 1024 B).\n *\n * Values below 10 in their unit keep one decimal (`1.4 MB`); larger ones are rounded (`24 MB`).\n * The decimal separator follows the given locale, or the runtime's default when omitted.\n *\n * @param bytes - The size in bytes.\n * @param locale - BCP 47 locale used to format the number. Defaults to the runtime locale.\n * @returns The formatted size, or an empty string when `bytes` is not a finite, non-negative number.\n */\nexport function formatFileSize(bytes: number, locale?: string): string {\n\tif (!Number.isFinite(bytes) || bytes < 0) {\n\t\treturn '';\n\t}\n\n\tif (bytes < 1024) {\n\t\treturn `${bytes} ${FILE_SIZE_UNITS[0]}`;\n\t}\n\n\tlet value = bytes;\n\tlet unit = 0;\n\n\twhile (value >= 1024 && unit < FILE_SIZE_UNITS.length - 1) {\n\t\tvalue /= 1024;\n\t\tunit++;\n\t}\n\n\tconst formatted = new Intl.NumberFormat(locale, { maximumFractionDigits: value < 10 ? 1 : 0 }).format(value);\n\n\treturn `${formatted} ${FILE_SIZE_UNITS[unit]}`;\n}\n","import { formatFileSize } from '../utils/file-size';\n\n/** Why a file was refused by `<hub-file-input>` before it ever reached the form value. */\nexport type HubFileRejectionReason = 'accept' | 'maxSize' | 'minSize' | 'maxFiles' | 'maxTotalSize' | 'duplicate';\n\n/** A file the component refused, together with the constraint that refused it. */\nexport interface HubFileRejection {\n\t/** The refused file. */\n\tfile: File;\n\t/** The constraint that refused it. */\n\treason: HubFileRejectionReason;\n\t/** The configured limit that was violated (`accept` string, byte count, file count), when applicable. */\n\tlimit: string | number | null;\n}\n\n/** Lifecycle of a single accepted file. `uploading`/`done`/`error` only occur when an uploader is registered. */\nexport type HubFileStatus = 'ready' | 'uploading' | 'done' | 'error';\n\n/**\n * The rich, per-file state exposed by `<hub-file-input>` through its `files()` signal.\n *\n * This is deliberately **not** the form-control value: the control holds plain `File` objects so it\n * can be handed straight to a `FormData`. Preview URLs, upload status and progress live here.\n */\nexport interface HubFileItem {\n\t/** Stable id for the lifetime of the item; used by `remove`, `cancel` and `retry`. */\n\treadonly id: string;\n\t/** The underlying native file. */\n\treadonly file: File;\n\t/** Object URL of the thumbnail, for image files in a browser. `null` otherwise. */\n\treadonly previewUrl: string | null;\n\t/** Current lifecycle status. */\n\treadonly status: HubFileStatus;\n\t/**\n\t * Upload progress from 0 to 100, or `null` when the total size is unknown — the case when the\n\t * transport does not report a total (e.g. `HttpClient` emits `total: undefined`). A `null`\n\t * progress must render as an indeterminate bar, never as 0%.\n\t */\n\treadonly progress: number | null;\n\t/** The error thrown by the uploader, when `status` is `'error'`. */\n\treadonly error: unknown | null;\n\t/**\n\t * The body the uploader reported on `done` — typically the record the server created, whose id\n\t * the application needs to reference the stored file. `null` until the upload succeeds, and\n\t * again after a `retry` restarts it.\n\t */\n\treadonly response: unknown | null;\n}\n\n/** How the accepted files are previewed below the dropzone. */\nexport type HubFilePreview = 'none' | 'list' | 'grid';\n\n/** The active restrictions of a `<hub-file-input>`, handed to the `constraints` label. */\nexport interface HubFileConstraints {\n\t/** The `accept` specification, or `null` when everything is allowed. */\n\taccept: string | null;\n\t/** Maximum size per file in bytes, or `null`. */\n\tmaxSize: number | null;\n\t/** Maximum number of files, or `null`. */\n\tmaxFiles: number | null;\n}\n\n/**\n * Localizable, overridable labels for `<hub-file-input>`.\n *\n * Set them globally through {@link provideHubForms}; they cover both visible text and the\n * accessible names of the internal buttons.\n */\nexport interface HubFileInputLabels {\n\t/** Text of the button that opens the native file dialog. */\n\tbrowse: string;\n\t/** Invitation rendered inside the dropzone. */\n\tdropHere: string;\n\t/**\n\t * Second line of the invitation, under {@link dropHere}. Empty by default, so it renders\n\t * nothing. A dropzone that sets it usually stacks the prompt too, with\n\t * `--hub-file-input-prompt-direction: column`.\n\t */\n\tdropSubtext: string;\n\t/** Accessible name of the per-file remove button. */\n\tremove: string;\n\t/** Text + accessible name of the \"remove all\" button. */\n\tclear: string;\n\t/** Accessible name of the per-file retry button (uploader only). */\n\tretry: string;\n\t/** Accessible name of the per-file cancel button (uploader only). */\n\tcancel: string;\n\t/** Screen-reader summary of the current selection. */\n\tfilesSelected: (count: number) => string;\n\t/** Renders a byte count as human-readable text. */\n\tformatSize: (bytes: number) => string;\n\t/** Renders the reason a file was refused; announced in the live region. */\n\trejection: (rejection: HubFileRejection) => string;\n\t/** Renders the hint that summarizes the active restrictions under the dropzone. */\n\tconstraints: (constraints: HubFileConstraints) => string;\n}\n\n/** Built-in (English) file-input labels. */\nexport const defaultHubFileInputLabels: HubFileInputLabels = {\n\tbrowse: 'Browse files',\n\tdropHere: 'Drag files here, or',\n\tdropSubtext: '',\n\tremove: 'Remove file',\n\tclear: 'Remove all',\n\tretry: 'Retry upload',\n\tcancel: 'Cancel upload',\n\tfilesSelected: (count: number) => (count === 1 ? '1 file selected' : `${count} files selected`),\n\tformatSize: (bytes: number) => formatFileSize(bytes),\n\trejection: ({ file, reason, limit }: HubFileRejection) => {\n\t\tswitch (reason) {\n\t\t\tcase 'accept':\n\t\t\t\treturn `${file.name}: file type not allowed.`;\n\t\t\tcase 'maxSize':\n\t\t\t\treturn `${file.name}: exceeds the maximum size of ${formatFileSize(Number(limit))}.`;\n\t\t\tcase 'minSize':\n\t\t\t\treturn `${file.name}: below the minimum size of ${formatFileSize(Number(limit))}.`;\n\t\t\tcase 'maxFiles':\n\t\t\t\treturn `${file.name}: at most ${limit} files can be selected.`;\n\t\t\tcase 'maxTotalSize':\n\t\t\t\treturn `${file.name}: the total size would exceed ${formatFileSize(Number(limit))}.`;\n\t\t\tcase 'duplicate':\n\t\t\t\treturn `${file.name}: already selected.`;\n\t\t\tdefault:\n\t\t\t\treturn `${file.name}: rejected.`;\n\t\t}\n\t},\n\tconstraints: ({ accept, maxSize, maxFiles }: HubFileConstraints) => {\n\t\tconst parts: string[] = [];\n\n\t\tif (accept) {\n\t\t\tparts.push(accept);\n\t\t}\n\n\t\tif (maxSize != null) {\n\t\t\tparts.push(`up to ${formatFileSize(maxSize)} each`);\n\t\t}\n\n\t\tif (maxFiles != null) {\n\t\t\tparts.push(maxFiles === 1 ? '1 file max' : `${maxFiles} files max`);\n\t\t}\n\n\t\treturn parts.join(' · ');\n\t}\n};\n","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 { 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\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};\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\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: HUB_FORMS_CONFIG,\n\t\t\tuseValue: { ...defaultHubFormsConfig, ...config, datepicker, fileInput } as HubFormsConfig\n\t\t}\n\t]);\n}\n\n/** Recursively-optional version of a type, for partial config overrides. */\ntype DeepPartial<T> = {\n\t[K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];\n};\n","import {\n\tAfterContentInit,\n\tChangeDetectorRef,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\tElementRef,\n\tinject,\n\tinput,\n\tmodel,\n\tsignal,\n\tTemplateRef\n} from '@angular/core';\nimport { ControlContainer, ControlValueAccessor, NgControl, ValidationErrors } from '@angular/forms';\nimport { takeUntil } from 'rxjs';\nimport { HubFormTextDirective } from '../directives/form-text.directive';\nimport { HubValidationErrorDirective } from '../directives/validation-error.directive';\nimport { HUB_FORMS_CONFIG } from '../services/forms-config';\nimport { HubFormControl } from './hub-form-control';\nimport { isDefined, uuid } from '../utils/utils';\n\n/**\n * Shared base for single-value form fields (input, textarea, slider, select…).\n *\n * Extends {@link HubFormControl} with the `ControlValueAccessor` plumbing and the automatic\n * validation-error display that every field shares:\n *\n * - Injects the bound `NgControl` / `ControlContainer` and registers itself as value accessor.\n * - Exposes `isInvalid` / `errors`, resolving from the reactive control or from native validity.\n * - Collects projected `hubValidationError` templates and resolves messages through the per-field\n * override, the global {@link provideHubForms} config, or the built-in defaults.\n * - Keeps the (OnPush) view in sync with the control via `control.events` + `markForCheck`.\n *\n * Subclasses only implement the value-specific bits: the `_value` signal, `writeValue`, the change\n * handler and their own template/inputs.\n */\n@Directive({\n\thost: {\n\t\t'(focusout)': 'handleBlur($event)'\n\t}\n})\nexport abstract class HubFieldControl extends HubFormControl implements ControlValueAccessor, AfterContentInit {\n\tprotected readonly _elementRef = inject(ElementRef);\n\treadonly #config = inject(HUB_FORMS_CONFIG);\n\treadonly #cdr = inject(ChangeDetectorRef);\n\n\tprotected readonly _control = inject(NgControl, { self: true, optional: true })!;\n\tprotected readonly _controlContainer = inject(ControlContainer, { skipSelf: true, host: true, optional: true })!;\n\n\t/** Resolved templates that override the default message of a given error key. */\n\tprotected _errorTemplates: { [key: string]: TemplateRef<any> } = {};\n\n\t/** Stable unique id linking the label and the control. */\n\treadonly id = uuid();\n\n\t/** Query for a projected `hubFormText` helper template. */\n\treadonly formTextTmp = contentChild(HubFormTextDirective, { read: TemplateRef });\n\n\t/** Query for projected `hubValidationError` templates. */\n\treadonly errorTpts = contentChildren(HubValidationErrorDirective);\n\n\t/** Whether the field is disabled. */\n\treadonly disabled = model(false);\n\n\t/** Per-field override for the invalid-feedback message builder. */\n\treadonly invalidFeedbackTemplateFn = input<((key: string, value: any) => string) | null>(null);\n\n\t/**\n\t * Opt-in success state. When `true`, a touched + valid field renders the\n\t * `--valid` styling (success border + ring). Defaults to the global\n\t * {@link HubFormsConfig.showValid}; the success state is never automatic\n\t * unless enabled. Has no effect while the field is invalid.\n\t */\n\treadonly showValid = input(this.#config.showValid);\n\n\t/** Optional success message shown below the control while {@link showsValid}. */\n\treadonly validFeedback = input<string | null>(null);\n\n\tonChange: (value: any) => void = () => {};\n\tonTouched: () => void = () => {};\n\n\tprotected readonly _nativeErrors = signal<ValidationErrors | null>(null);\n\tprotected readonly _nativeTouched = signal(false);\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tif (this._control) {\n\t\t\tthis._control.valueAccessor = this;\n\t\t}\n\t}\n\n\t/** Whether the field should display its error feedback (touched + invalid). */\n\tget isInvalid(): boolean {\n\t\tif (this._control) {\n\t\t\treturn !!this._control.touched && !!this._control.invalid;\n\t\t}\n\n\t\treturn this._nativeTouched() && !!this._nativeErrors();\n\t}\n\n\t/** Whether the field is touched and valid (independent of the opt-in). */\n\tget isValid(): boolean {\n\t\tif (this._control) {\n\t\t\treturn !!this._control.touched && !!this._control.valid;\n\t\t}\n\n\t\treturn this._nativeTouched() && !this._nativeErrors();\n\t}\n\n\t/** Whether the opt-in success state should be displayed (touched + valid + `showValid`). */\n\tget showsValid(): boolean {\n\t\treturn this.showValid() && this.isValid;\n\t}\n\n\t/** Current validation errors, from the reactive control or from native validity. */\n\tget errors(): ValidationErrors | null {\n\t\tif (this._control) {\n\t\t\treturn this._control.errors ?? null;\n\t\t}\n\n\t\treturn this._nativeErrors();\n\t}\n\n\toverride ngAfterContentInit(): void {\n\t\tsuper.ngAfterContentInit();\n\n\t\t(this.errorTpts() ?? []).forEach((tpt: HubValidationErrorDirective) => {\n\t\t\tthis._errorTemplates[tpt.key()] = tpt.template;\n\t\t});\n\n\t\t// Re-render on touched/pristine/status/value changes of the bound reactive control.\n\t\t// `markAllAsTouched()` on a parent form would otherwise not reach this OnPush component,\n\t\t// leaving the error feedback stale.\n\t\tthis._control?.control?.events.pipe(takeUntil(this._destroy$)).subscribe(() => this.#cdr.markForCheck());\n\t}\n\n\t/**\n\t * Marks the field as touched when focus leaves it.\n\t *\n\t * @param event - The originating focus event.\n\t */\n\thandleBlur(event?: FocusEvent): void {\n\t\tif (!this._control) {\n\t\t\tthis._nativeTouched.set(true);\n\t\t\tthis.updateNativeErrors(event?.target ?? null);\n\t\t}\n\n\t\tthis.onTouched?.();\n\t}\n\n\tregisterOnChange(fn: (value: any) => void): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.disabled.set(isDisabled);\n\t}\n\n\t/**\n\t * Resolves the message for a given validation error, honoring per-field and global overrides.\n\t *\n\t * @param key - The validation error key.\n\t * @param value - The error payload.\n\t * @returns The resolved message (HTML allowed).\n\t */\n\tgetInvalidFeedbackTemplate(key: string, value: any): string {\n\t\tconst fn = this.invalidFeedbackTemplateFn();\n\n\t\tif (fn) {\n\t\t\treturn fn(key, value);\n\t\t}\n\n\t\treturn this.#config.invalidFeedbackTemplateFn(key, value);\n\t}\n\n\tabstract writeValue(value: any): void;\n\n\t/**\n\t * Derives native validation errors when the field is used without a reactive control.\n\t *\n\t * @param target - The DOM element to read validity from, if available.\n\t */\n\tprotected updateNativeErrors(target?: EventTarget | null): void {\n\t\tif (this._control) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet el = target as HTMLInputElement | HTMLTextAreaElement | null;\n\n\t\tif (!el || !('validity' in el)) {\n\t\t\tel = this._elementRef.nativeElement.querySelector(`[id=\"${this.id}\"]`) as\n\t\t\t\t| HTMLInputElement\n\t\t\t\t| HTMLTextAreaElement\n\t\t\t\t| null;\n\t\t}\n\n\t\tif (!el || !('validity' in el)) {\n\t\t\tthis._nativeErrors.set(null);\n\t\t\treturn;\n\t\t}\n\n\t\tconst validity = el.validity;\n\t\tconst errors: ValidationErrors = {};\n\t\tconst valueLength = (el.value ?? '').length;\n\n\t\tif (validity.valueMissing) errors['required'] = true;\n\t\tif (validity.typeMismatch) errors[el.type || 'type'] = true;\n\t\tif (validity.patternMismatch) errors['pattern'] = true;\n\t\tif (validity.tooShort) errors['minlength'] = { requiredLength: el.minLength, actualLength: valueLength };\n\t\tif (validity.tooLong) errors['maxlength'] = { requiredLength: el.maxLength, actualLength: valueLength };\n\t\tif (validity.rangeUnderflow && 'min' in el) errors['min'] = { min: (el as HTMLInputElement).min, actual: el.value };\n\t\tif (validity.rangeOverflow && 'max' in el) errors['max'] = { max: (el as HTMLInputElement).max, actual: el.value };\n\t\tif (validity.stepMismatch && 'step' in el) errors['step'] = { step: (el as HTMLInputElement).step, actual: el.value };\n\t\tif (validity.badInput) errors['badInput'] = true;\n\n\t\tthis._nativeErrors.set(isDefined(errors) && Object.keys(errors).length ? errors : null);\n\t}\n}\n","import {\n\tAfterContentInit,\n\tChangeDetectorRef,\n\tcomputed,\n\tcontentChildren,\n\tDirective,\n\teffect,\n\tinject,\n\tinput,\n\tOnDestroy,\n\tsignal,\n\tTemplateRef\n} from '@angular/core';\nimport { AbstractControl, ControlContainer, ValidationErrors } from '@angular/forms';\nimport { Subject, takeUntil } from 'rxjs';\nimport { HubValidationErrorDirective } from '../directives/validation-error.directive';\nimport { HUB_FORMS_CONFIG } from '../services/forms-config';\n\n/** When a container reveals its group-level validation errors. */\nexport type HubGroupErrorTrigger = 'touched' | 'submit' | 'always';\n\n/**\n * Shared base for form *containers* (`hub-form`, `hub-fieldset`, `hub-legend`).\n *\n * Resolves a target `FormGroup`/`FormArray` — provided explicitly via the `group` input or by name\n * from the parent `ControlContainer` — and automatically surfaces its **group-level** validation\n * errors (those set on the group itself by cross-field validators such as `hubAreEqual`), the same\n * way the field components surface control-level errors.\n *\n * It intentionally ignores child-control errors: those are rendered by the individual fields.\n */\n@Directive()\nexport abstract class HubGroupControl implements AfterContentInit, OnDestroy {\n\tprotected readonly _config = inject(HUB_FORMS_CONFIG);\n\treadonly #cdr = inject(ChangeDetectorRef);\n\tprivate readonly _parent = inject(ControlContainer, { optional: true, skipSelf: true });\n\tprivate readonly _self = inject(ControlContainer, { optional: true, self: true });\n\n\tprotected _destroy$ = new Subject<void>();\n\n\t/** Explicit target group/array. Takes precedence over name resolution. */\n\treadonly group = input<AbstractControl | null>(null);\n\n\t/** Name of the target group/array within the parent container (alternative to `group`). */\n\treadonly groupName = input<string>();\n\n\t/** When to reveal the group-level errors. `touched` (default) or `always`. */\n\treadonly errorTrigger = input<HubGroupErrorTrigger>('touched');\n\n\t/** Per-container override for the invalid-feedback message builder. */\n\treadonly invalidFeedbackTemplateFn = input<((key: string, value: any) => string) | null>(null);\n\n\t/** Query for projected `hubValidationError` templates. */\n\treadonly errorTpts = contentChildren(HubValidationErrorDirective);\n\n\tprotected _errorTemplates: { [key: string]: TemplateRef<any> } = {};\n\n\t/**\n\t * The currently bound group control. A `computed` (not an `effect`-fed signal) so it resolves\n\t * synchronously on first render — otherwise a `<form [formGroup]>` would briefly bind `null` and\n\t * the projected `formControlName` fields would fail to locate their controls.\n\t */\n\tprotected readonly _control = computed<AbstractControl | null>(() => {\n\t\tconst explicit = this.group();\n\n\t\tif (explicit) {\n\t\t\treturn explicit;\n\t\t}\n\n\t\tconst name = this.groupName();\n\n\t\tif (name) {\n\t\t\treturn this._parent?.control?.get(name) ?? null;\n\t\t}\n\n\t\t// `_self` covers `form[hubForm]` (the `formGroup` directive lives on the same host);\n\t\t// `_parent` covers a container nested inside an outer form/group.\n\t\treturn this._self?.control ?? this._parent?.control ?? null;\n\t});\n\n\t/** Whether the owning form has been submitted (set by `hub-form`; drives the `submit` trigger). */\n\tprotected readonly _submitted = signal(false);\n\n\tconstructor() {\n\t\t// Keep the OnPush view in sync with the resolved control's touched/status changes.\n\t\teffect(() => this.#subscribe(this._control()));\n\t}\n\n\t/** Whether the group's own (cross-field) errors should be displayed. */\n\tget isInvalid(): boolean {\n\t\tconst control = this._control();\n\n\t\tif (!control || !control.errors) {\n\t\t\treturn false;\n\t\t}\n\n\t\tswitch (this.errorTrigger()) {\n\t\t\tcase 'always':\n\t\t\t\treturn true;\n\t\t\tcase 'submit':\n\t\t\t\treturn this._submitted();\n\t\t\tdefault:\n\t\t\t\treturn control.touched || this._submitted();\n\t\t}\n\t}\n\n\t/** The group's own validation errors (excludes child-control errors). */\n\tget errors(): ValidationErrors | null {\n\t\treturn this._control()?.errors ?? null;\n\t}\n\n\tngAfterContentInit(): void {\n\t\t(this.errorTpts() ?? []).forEach((tpt: HubValidationErrorDirective) => {\n\t\t\tthis._errorTemplates[tpt.key()] = tpt.template;\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._destroy$.next();\n\t\tthis._destroy$.complete();\n\t}\n\n\t/**\n\t * Resolves the message for a given group-level validation error.\n\t *\n\t * @param key - The validation error key.\n\t * @param value - The error payload.\n\t * @returns The resolved message (HTML allowed).\n\t */\n\tgetInvalidFeedbackTemplate(key: string, value: any): string {\n\t\tconst fn = this.invalidFeedbackTemplateFn();\n\n\t\tif (fn) {\n\t\t\treturn fn(key, value);\n\t\t}\n\n\t\treturn this._config.invalidFeedbackTemplateFn(key, value);\n\t}\n\n\t/**\n\t * (Re)subscribes to the bound control's events so the OnPush view refreshes on touched/status\n\t * changes (e.g. a parent `markAllAsTouched()`).\n\t *\n\t * @param control - The newly resolved control, if any.\n\t */\n\t#subscribe(control: AbstractControl | null): void {\n\t\tthis._destroy$.next();\n\n\t\tcontrol?.events.pipe(takeUntil(this._destroy$)).subscribe(() => this.#cdr.markForCheck());\n\t}\n}\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders, Type } from '@angular/core';\nimport { HubFileUploader } from '../interfaces/file-uploader.interface';\n\n/**\n * Injection token holding the {@link HubFileUploader} that `<hub-file-input>` delegates uploads to.\n *\n * It has **no default**: when nothing is registered, the component resolves it as `null` and behaves\n * as a pure picker — no automatic upload, no progress bar, no cancel or retry. Register one with\n * {@link provideHubFileUploader}.\n */\nexport const HUB_FILE_UPLOADER = new InjectionToken<HubFileUploader>('HUB_FILE_UPLOADER');\n\n/**\n * Registers the uploader that `<hub-file-input>` uses to send files.\n *\n * The library defines the contract, not the transport: an uploader that knows your endpoint, field\n * name, headers and retry policy is application code. Implement {@link HubFileUploader} there and\n * hand it over here.\n *\n * Passing a class provides it in the same injector and aliases the token to that single instance, so\n * the uploader can inject `HttpClient` and hold its own state.\n *\n * @param uploader - The uploader class (dependency-injected) or a ready-made instance.\n * @returns Environment providers to add to `bootstrapApplication` (or a route's `providers`).\n *\n * @example\n * ```ts\n * bootstrapApplication(App, {\n * providers: [provideHttpClient(), provideHubFileUploader(ApiFileUploader)]\n * });\n * ```\n */\nexport function provideHubFileUploader(uploader: HubFileUploader | Type<HubFileUploader>): EnvironmentProviders {\n\tif (typeof uploader === 'function') {\n\t\tconst uploaderType = uploader as Type<HubFileUploader>;\n\n\t\treturn makeEnvironmentProviders([uploaderType, { provide: HUB_FILE_UPLOADER, useExisting: uploaderType }]);\n\t}\n\n\treturn makeEnvironmentProviders([{ provide: HUB_FILE_UPLOADER, useValue: uploader }]);\n}\n","/**\n * Possible display types for form helper text.\n */\nexport type FormTextType = 'bottom' | 'tooltip';\n\n/**\n * Enum for form helper text display types.\n */\nexport enum FormTextTypes {\n\tBottom = 'bottom',\n\tTooltip = 'tooltip'\n}\n\n/**\n * Possible label display types shared by the form field components.\n */\nexport type HubLabelType = 'floating' | 'stacked' | 'horizontal';\n\n/**\n * Enum for label display types.\n */\nexport enum HubLabelTypes {\n\tFloating = 'floating',\n\tStacked = 'stacked',\n\tHorizontal = 'horizontal'\n}\n","/**\n * Supported formats (native input types) for the `<hub-input>` component.\n */\nexport type HubInputFormat =\n\t| 'text'\n\t| 'number'\n\t| 'password'\n\t| 'email'\n\t| 'tel'\n\t| 'url'\n\t| 'color'\n\t| 'checkbox'\n\t| 'switch'\n\t| 'counter'\n\t| '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","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","/**\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 { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tisDevMode,\n\tmodel,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tviewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormsModule, Validators } from '@angular/forms';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubInputFormat, HubInputFormats } from '../../interfaces/input.interface';\nimport { HubInputPrefixDirective } from '../../directives/input-prefix.directive';\nimport { HubInputSuffixDirective } from '../../directives/input-suffix.directive';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { controlHasMinOrMaxValidator, isDefined } from '../../utils/utils';\nimport { applyMask, isMaskActive } from '../../utils/mask';\n\n/** Value held by a `<hub-input>` across its supported formats. */\ntype HubInputValue = number | string | boolean | File | FileList | null;\n\n/**\n * Accessible form field with automatic validation-error display.\n *\n * Works both with Reactive Forms (`formControlName` / `[formControl]`) and as a standalone\n * value-bound control. When invalid and touched, it renders the control's errors using the\n * default messages, the global {@link provideHubForms} config, the per-field\n * `invalidFeedbackTemplateFn` input, or projected `hubValidationError` templates.\n *\n * Formats: `text`, `number`, `password`, `email`, `tel`, `url`, `color`, `checkbox`, `switch`,\n * `counter` and `file`. Label types: `stacked`, `floating`, `horizontal`. Text-like formats support\n * prepend / append addons (input groups). Numeric formats auto-attach `min`/`max` validators when\n * bound to a reactive control.\n *\n * The `file` format is **deprecated since 22.6.0** in favour of `<hub-file-input>`: it is a bare\n * picker that cannot enforce `accept` on a drop, and has no size limits, no preview and no per-file\n * removal. It keeps working until the next major.\n *\n * @example\n * ```html\n * <hub-input formControlName=\"email\" type=\"email\" label=\"Email\" />\n * <hub-input formControlName=\"accept\" type=\"switch\" label=\"Accept terms\" />\n * <hub-input formControlName=\"qty\" type=\"counter\" label=\"Quantity\" [min]=\"1\" [max]=\"9\" />\n * ```\n */\n@Component({\n\tselector: 'hub-input',\n\timports: [NgTemplateOutlet, KeyValuePipe, FormsModule],\n\ttemplateUrl: './input.component.html',\n\tstyleUrl: './input.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-input-host]': 'true'\n\t}\n})\nexport class HubInputComponent extends HubFieldControl {\n\tprotected readonly _inputFormats = HubInputFormats;\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _value = signal<HubInputValue>('');\n\n\t/** Whether the password value is currently revealed (password format only). */\n\tshowPassword = false;\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/** Minimum value (numeric / counter inputs). */\n\treadonly min = model<number | undefined>(undefined);\n\n\t/** Maximum value (numeric / counter inputs). */\n\treadonly max = model<number | undefined>(undefined);\n\n\t/** Step value (numeric / counter inputs). */\n\treadonly step = input(1, { transform: numberAttribute });\n\n\t/** Whether the input is read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Text shown before the control as an input-group addon (text-like formats). */\n\treadonly prepend = input<string | string[]>('');\n\n\t/** Text shown after the control as an input-group addon (text-like formats). */\n\treadonly append = input<string | string[]>('');\n\n\t/** Projected inline-start affix (`[hubInputPrefix]`) — e.g. a `<hub-icon>`, when present. */\n\tprotected readonly prefixDir = contentChild(HubInputPrefixDirective);\n\n\t/** Projected inline-end affix (`[hubInputSuffix]`) — e.g. a `<hub-icon>`, when present. */\n\tprotected readonly suffixDir = contentChild(HubInputSuffixDirective);\n\n\t/**\n\t * When true, a clear (✕) button is rendered inside the field once it holds a\n\t * value; activating it resets the control. The glyph comes from the\n\t * `--hub-input-clear-icon` CSS token, so it can be restyled without touching\n\t * the template.\n\t */\n\treadonly clearable = input(false, { transform: booleanAttribute });\n\n\t/** Whether the internal clear button should be shown right now. */\n\tprotected readonly showClear = computed<boolean>(\n\t\t() => this.clearable() && !this.disabled() && !this.readonly() && this._value() != null && this._value() !== ''\n\t);\n\n\t/** Whether an inline-start affix (projected prefix) is present. */\n\tprotected readonly hasPrefix = computed<boolean>(() => !!this.prefixDir());\n\n\t/** Whether an inline-end affix (projected suffix or the clear button) is present. */\n\tprotected readonly hasSuffix = computed<boolean>(() => !!this.suffixDir() || this.showClear());\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/**\n\t * Pattern mask for text-like formats. Tokens: `0` = digit, `A` = letter, `*` =\n\t * alphanumeric; any other character is an auto-inserted literal separator.\n\t * Example: `0000 0000 0000 0000` (card), `00/00/0000` (date).\n\t */\n\treadonly mask = input<string>('');\n\n\t/**\n\t * When a `mask` is set, controls the form value: `false` (default) stores the\n\t * formatted text (e.g. `1234 5678`); `true` stores only the typed characters\n\t * (e.g. `12345678`).\n\t */\n\treadonly unmaskValue = input(false, { transform: booleanAttribute });\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<HubInputValue>();\n\n\t/** Emits the current value when Enter is pressed. */\n\treadonly enter = output<HubInputValue>();\n\n\t/** Debounce in milliseconds before {@link search} fires. `0` emits on every keystroke. */\n\treadonly debounceTime = input(0, { transform: numberAttribute });\n\n\t/**\n\t * Debounced typeahead event: emits the current term (stringified) `debounceTime`\n\t * ms after the user stops typing. Wire it to drive search / autocomplete without\n\t * rolling your own debounce. Text-like formats only; `valueChange` stays synchronous.\n\t */\n\treadonly search = output<string>();\n\n\t/** Pending typeahead-debounce timer. */\n\t#searchTimer?: ReturnType<typeof setTimeout>;\n\n\t/** Last term emitted via {@link search}, used to skip duplicate emits. */\n\t#lastSearchTerm: string | null = null;\n\n\t/** Clears any pending debounce timer when the component is destroyed. */\n\tprivate readonly _searchCleanup = inject(DestroyRef).onDestroy(() => clearTimeout(this.#searchTimer));\n\n\t/**\n\t * Accepted file types (file format), e.g. `image/*,.pdf`.\n\t *\n\t * @deprecated Since 22.6.0. Use `<hub-file-input>`, which enforces `accept` on drops and pastes\n\t * too. Removed in the next major.\n\t */\n\treadonly accept = input<string>('*');\n\n\t/**\n\t * Whether multiple files can be selected (file format).\n\t *\n\t * @deprecated Since 22.6.0. Use `<hub-file-input>`. Removed in the next major.\n\t */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Text of the file-picker button (file format).\n\t *\n\t * @deprecated Since 22.6.0. Use `<hub-file-input>` and its `buttonLabel`. Removed in the next major.\n\t */\n\treadonly buttonLabel = input<string>('Choose file');\n\n\t/** Reference to the hidden native file input. */\n\tprotected readonly fileInput = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n\t/** Whether the current format renders a checkable control (checkbox / switch). */\n\tprotected readonly isCheckable = computed<boolean>(\n\t\t() => this.type() === this._inputFormats.Checkbox || this.type() === this._inputFormats.Switch\n\t);\n\n\t/** Whether the current format renders a typeable text-like control (drives the `search` event). */\n\tprotected readonly isTextLike = computed<boolean>(() => {\n\t\tconst t = this.type();\n\t\treturn (\n\t\t\tt !== this._inputFormats.Checkbox &&\n\t\t\tt !== this._inputFormats.Switch &&\n\t\t\tt !== this._inputFormats.Counter &&\n\t\t\tt !== this._inputFormats.Color &&\n\t\t\tt !== this._inputFormats.File\n\t\t);\n\t});\n\n\t/** Display label for the selected file(s). */\n\tprotected readonly fileLabel = computed<string>(() => {\n\t\tconst v = this._value();\n\n\t\tif (v instanceof File) {\n\t\t\treturn v.name;\n\t\t}\n\n\t\tif (typeof FileList !== 'undefined' && v instanceof FileList) {\n\t\t\treturn v.length === 1 ? v[0].name : `${v.length} files`;\n\t\t}\n\n\t\treturn '';\n\t});\n\n\t/** Normalized list of prepend addons. */\n\tprotected readonly _prepend = computed<string[]>(() => this.#toAddonList(this.prepend()));\n\n\t/** Normalized list of append addons. */\n\tprotected readonly _append = computed<string[]>(() => this.#toAddonList(this.append()));\n\n\t/** Whether the control is wrapped in an input group (has addons). */\n\tprotected readonly hasGroup = computed<boolean>(() => this._prepend().length > 0 || 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\tif (this.readonly()) {\n\t\t\treturn this._inputFormats.Text;\n\t\t}\n\n\t\tif (this.type() === this._inputFormats.Password) {\n\t\t\treturn this.showPassword ? 'text' : 'password';\n\t\t}\n\n\t\tif (this.type() === this._inputFormats.Counter) {\n\t\t\treturn this._inputFormats.Number;\n\t\t}\n\n\t\treturn this.type();\n\t});\n\n\toverride ngAfterContentInit(): void {\n\t\tsuper.ngAfterContentInit();\n\t\tthis.#attachNumericValidators();\n\t\tthis.#warnDeprecatedFileFormat();\n\t}\n\n\twriteValue(value: HubInputValue): void {\n\t\tif (this.isCheckable()) {\n\t\t\tthis._value.set(!!value);\n\t\t\treturn;\n\t\t}\n\n\t\t// Display masked values formatted, regardless of whether the form stores the\n\t\t// masked or unmasked representation.\n\t\tif (isMaskActive(this.mask()) && value != null && typeof value === 'string') {\n\t\t\tthis._value.set(applyMask(value, this.mask()).masked);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._value.set(value ?? '');\n\t}\n\n\t/**\n\t * Reads the new value from an input/model event and propagates it to the form and outputs.\n\t *\n\t * @param event - A DOM event or the raw value emitted by `ngModelChange`.\n\t */\n\tsetValue(event: any): void {\n\t\tconst hasTarget = !!event?.target;\n\t\tlet newValue: HubInputValue;\n\n\t\tif (this.isCheckable()) {\n\t\t\tnewValue = hasTarget ? !!event.target.checked : !!event;\n\t\t} else if (this.type() === this._inputFormats.Number || this.type() === this._inputFormats.Counter) {\n\t\t\tnewValue = hasTarget\n\t\t\t\t? isNaN(event.target.valueAsNumber)\n\t\t\t\t\t? null\n\t\t\t\t\t: event.target.valueAsNumber\n\t\t\t\t: isNaN(Number(event))\n\t\t\t\t\t? null\n\t\t\t\t\t: Number(event);\n\t\t} else {\n\t\t\tnewValue = hasTarget ? event.target.value : event;\n\t\t}\n\n\t\t// Apply the pattern mask for text-like formats: the field shows the formatted\n\t\t// value while the form receives the formatted or unmasked value per `unmaskValue`.\n\t\tif (isMaskActive(this.mask()) && typeof newValue === 'string') {\n\t\t\tconst { masked, unmasked } = applyMask(newValue, this.mask());\n\t\t\tthis._value.set(masked);\n\t\t\tif (hasTarget && event.target) {\n\t\t\t\tevent.target.value = masked;\n\t\t\t}\n\t\t\tconst formValue = this.unmaskValue() ? unmasked : masked;\n\t\t\tthis.updateNativeErrors(event?.target ?? null);\n\t\t\tthis.onChange?.(formValue);\n\t\t\tthis.valueChange.emit(formValue);\n\t\t\tthis.#scheduleSearch(masked);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._value.set(newValue);\n\t\tthis.updateNativeErrors(event?.target ?? null);\n\t\tthis.onChange?.(newValue);\n\t\tthis.valueChange.emit(newValue);\n\t\tthis.#scheduleSearch(newValue);\n\t}\n\n\t/**\n\t * Schedules a debounced {@link search} emit for text-like formats. Coalesces rapid\n\t * keystrokes into a single emit after {@link debounceTime} ms and skips no-op repeats.\n\t *\n\t * @param value - The latest control value.\n\t */\n\t#scheduleSearch(value: HubInputValue): void {\n\t\tif (!this.isTextLike()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst term = value == null ? '' : String(value);\n\t\tclearTimeout(this.#searchTimer);\n\t\tthis.#searchTimer = setTimeout(() => {\n\t\t\tif (term === this.#lastSearchTerm) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#lastSearchTerm = term;\n\t\t\tthis.search.emit(term);\n\t\t}, this.debounceTime());\n\t}\n\n\t/** Increments the counter value, clamped to `max`. */\n\tprotected add(): void {\n\t\tconst current = Number(this._value() ?? this.min() ?? 0);\n\t\tconst next = current + this.step();\n\t\tconst max = this.max();\n\n\t\tthis.setValue(isDefined(max) && next > max! ? max! : next);\n\t}\n\n\t/** Decrements the counter value, clamped to `min`. */\n\tprotected subtract(): void {\n\t\tconst current = Number(this._value() ?? this.max() ?? 0);\n\t\tconst next = current - this.step();\n\t\tconst min = this.min();\n\n\t\tthis.setValue(isDefined(min) && next < min! ? min! : next);\n\t}\n\n\t/** Toggles password visibility. */\n\tprotected togglePassword(): void {\n\t\tif (!this.disabled()) {\n\t\t\tthis.showPassword = !this.showPassword;\n\t\t}\n\t}\n\n\t/** Opens the native file dialog. */\n\tprotected triggerFile(): void {\n\t\tif (!this.disabled() && !this.readonly()) {\n\t\t\tthis.fileInput()?.nativeElement.click();\n\t\t}\n\t}\n\n\t/**\n\t * Reads the selected file(s) from the native input and propagates them.\n\t *\n\t * @param event - The native `change` event of the file input.\n\t */\n\tprotected setFileValue(event: Event): void {\n\t\tconst files = (event.target as HTMLInputElement).files;\n\t\tconst value: HubInputValue = !files || files.length === 0 ? null : this.multiple() ? files : files.item(0);\n\n\t\tthis._value.set(value);\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n\n\t/** Resets a text-like control to empty via the internal clear button. */\n\tprotected clear(): void {\n\t\tclearTimeout(this.#searchTimer);\n\t\tthis._value.set('');\n\t\tthis.onChange?.('');\n\t\tthis.valueChange.emit('');\n\t\tthis.search.emit('');\n\t}\n\n\t/** Clears the selected file(s). */\n\tprotected clearFile(): void {\n\t\tconst native = this.fileInput()?.nativeElement;\n\n\t\tif (native) {\n\t\t\tnative.value = '';\n\t\t}\n\n\t\tthis._value.set(null);\n\t\tthis.onChange?.(null);\n\t\tthis.valueChange.emit(null);\n\t}\n\n\t/**\n\t * Warns once, in development only, that the `file` format is deprecated.\n\t *\n\t * It still works, but it cannot enforce `accept` on a drop, has no size limits, no preview and\n\t * no per-file removal. `<hub-file-input>` supersedes it.\n\t */\n\t#warnDeprecatedFileFormat(): void {\n\t\tif (isDevMode() && this.type() === this._inputFormats.File) {\n\t\t\tconsole.warn(\n\t\t\t\t'[ng-hub-ui-forms] <hub-input type=\"file\"> is deprecated since 22.6.0 and will be removed in the next major. Use <hub-file-input> instead.'\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Auto-attaches `Validators.min` / `Validators.max` to the bound reactive control when `min` /\n\t * `max` are set and not already present, so the inline bounds become real validation.\n\t */\n\t#attachNumericValidators(): void {\n\t\tconst control = this._control?.control;\n\n\t\tif (!control || !this._isFormControl) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\t\tlet changed = false;\n\n\t\tif (isDefined(min) && !controlHasMinOrMaxValidator(control, 'min')) {\n\t\t\tcontrol.addValidators(Validators.min(min!));\n\t\t\tchanged = true;\n\t\t}\n\n\t\tif (isDefined(max) && !controlHasMinOrMaxValidator(control, 'max')) {\n\t\t\tcontrol.addValidators(Validators.max(max!));\n\t\t\tchanged = true;\n\t\t}\n\n\t\tif (changed) {\n\t\t\tcontrol.updateValueAndValidity({ emitEvent: false });\n\t\t}\n\t}\n\n\t/**\n\t * Normalizes an addon input (string or string[]) to a string list.\n\t *\n\t * @param value - The raw addon input.\n\t * @returns The list of addon strings (empty when none).\n\t */\n\t#toAddonList(value: string | string[]): string[] {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.filter((item) => item != null && item !== '');\n\t\t}\n\n\t\treturn value ? [value] : [];\n\t}\n}\n","<div\n\tclass=\"hub-field hub-input\"\n\t[class.hub-field--horizontal]=\"!isCheckable() && (labelType() === _labelTypes.Horizontal || (!label() && required()))\"\n\t[class.hub-input--checkable]=\"isCheckable()\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (isCheckable()) {\n\t\t<label class=\"hub-input__check\" [class.hub-input__check--switch]=\"type() === _inputFormats.Switch\">\n\t\t\t<input\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\tclass=\"hub-input__check-input\"\n\t\t\t\t[class.hub-input__check-input--switch]=\"type() === _inputFormats.Switch\"\n\t\t\t\t[class.hub-input__check-input--invalid]=\"isInvalid\"\n\t\t\t\t[attr.role]=\"type() === _inputFormats.Switch ? 'switch' : null\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[checked]=\"$any(_value())\"\n\t\t\t\t(change)=\"setValue($event)\"\n\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t/>\n\t\t\t@if (label() || required()) {\n\t\t\t\t<span class=\"hub-input__check-label\">\n\t\t\t\t\t{{ label() }}\n\t\t\t\t\t@if (required()) {\n\t\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t}\n\t\t\t\t</span>\n\t\t\t}\n\t\t</label>\n\t} @else {\n\t\t@if ((label() || required()) && labelType() !== _labelTypes.Floating) {\n\t\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t\t{{ label() }}\n\t\t\t\t@if (required()) {\n\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t}\n\t\t\t</label>\n\t\t}\n\n\t\t<div class=\"hub-field__body hub-input__row\">\n\t\t\t@switch (type()) {\n\t\t\t\t@case (_inputFormats.Counter) {\n\t\t\t\t\t<div class=\"hub-input__group hub-input__counter\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-input__counter-btn\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly() || (min() != null && $any(_value()) <= $any(min()))\"\n\t\t\t\t\t\t\taria-label=\"Decrease\"\n\t\t\t\t\t\t\t(click)=\"subtract()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t−\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[min]=\"min() ?? null\"\n\t\t\t\t\t\t\t[max]=\"max() ?? null\"\n\t\t\t\t\t\t\t[step]=\"step()\"\n\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t[readonly]=\"readonly()\"\n\t\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-input__counter-btn\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly() || (max() != null && $any(_value()) >= $any(max()))\"\n\t\t\t\t\t\t\taria-label=\"Increase\"\n\t\t\t\t\t\t\t(click)=\"add()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t+\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@case (_inputFormats.Color) {\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\tclass=\"hub-field__control hub-input__control--color\"\n\t\t\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t[ngModel]=\"_value()\"\n\t\t\t\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t(blur)=\"handleBlur($event)\"\n\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\t@case (_inputFormats.File) {\n\t\t\t\t\t<div class=\"hub-input__file\" [class.hub-input__file--invalid]=\"isInvalid\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t#fileInput\n\t\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\t\tclass=\"hub-input__file-native\"\n\t\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t\t[accept]=\"accept()\"\n\t\t\t\t\t\t\t[multiple]=\"multiple()\"\n\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t(change)=\"setFileValue($event)\"\n\t\t\t\t\t\t\t(blur)=\"handleBlur($event)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-input__file-button\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t\t\t(click)=\"triggerFile()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ buttonLabel() }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<span class=\"hub-input__file-name\">{{ fileLabel() || placeholder() }}</span>\n\t\t\t\t\t\t@if (fileLabel() && !disabled() && !readonly()) {\n\t\t\t\t\t\t\t<button type=\"button\" class=\"hub-input__file-clear\" aria-label=\"Clear\" (click)=\"clearFile()\">×</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>\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[placeholder]=\"labelType() === _labelTypes.Floating ? (placeholder() || ' ') : placeholder()\"\n\t\t\t\t\t\t\t[min]=\"min() ?? null\"\n\t\t\t\t\t\t\t[max]=\"max() ?? null\"\n\t\t\t\t\t\t\t[step]=\"step()\"\n\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t[readonly]=\"readonly()\"\n\t\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t\t/>\n\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\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\n\t\t\t\t\t@if (type() === _inputFormats.Password) {\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__password-toggle\"\n\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t[attr.aria-label]=\"showPassword ? 'Hide password' : 'Show password'\"\n\t\t\t\t\t\t\t[attr.aria-pressed]=\"showPassword\"\n\t\t\t\t\t\t\t(click)=\"togglePassword()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"hub-input__password-icon\" [class.hub-input__password-icon--visible]=\"showPassword\"></span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n","import { KeyValuePipe } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, computed, ElementRef, input, numberAttribute, output, signal, viewChildren, ViewEncapsulation } from '@angular/core';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\n\n/** Character set accepted by the OTP field. */\nexport type HubOtpMode = 'numeric' | 'alphanumeric' | 'alpha';\n\n/**\n * Segmented one-time-code input (`hub-otp-input`): a row of single-character cells for\n * entering verification / 2FA codes. Supports auto-advance, backspace navigation, arrow\n * keys, and pasting the whole code at once. Implements `ControlValueAccessor`, so the\n * form value is the concatenated string.\n *\n * ```html\n * <hub-otp-input formControlName=\"code\" [length]=\"6\" label=\"Verification code\" />\n * <hub-otp-input formControlName=\"pin\" [length]=\"4\" mode=\"numeric\" [secret]=\"true\" />\n * ```\n */\n@Component({\n\tselector: 'hub-otp-input',\n\tstandalone: true,\n\timports: [KeyValuePipe],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-otp-host]': 'true'\n\t},\n\ttemplate: `\n\t\t<div\n\t\t\tclass=\"hub-field hub-otp\"\n\t\t\t[class.hub-field--horizontal]=\"labelType() === _labelTypes.Horizontal\"\n\t\t\t[class.hub-field--disabled]=\"disabled()\"\n\t\t\t[class.hub-field--invalid]=\"isInvalid\"\n\t\t\t[class.hub-field--valid]=\"showsValid\"\n\t\t>\n\t\t\t@if (label() || required()) {\n\t\t\t\t<label class=\"hub-field__label\">\n\t\t\t\t\t{{ label() }}\n\t\t\t\t\t@if (required()) {\n\t\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t}\n\t\t\t\t</label>\n\t\t\t}\n\n\t\t\t<div class=\"hub-field__body\">\n\t\t\t\t<div class=\"hub-otp__cells\" role=\"group\" [attr.aria-label]=\"label() || null\" (focusout)=\"onFocusOut($event)\">\n\t\t\t\t\t@for (index of cells(); track index) {\n\t\t\t\t\t\t@if (separatorEvery() && index > 0 && index % separatorEvery() === 0) {\n\t\t\t\t\t\t\t<span class=\"hub-otp__separator\" aria-hidden=\"true\">{{ separator() }}</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t#cell\n\t\t\t\t\t\t\tclass=\"hub-field__control hub-otp__cell\"\n\t\t\t\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t\t\t\t[type]=\"secret() ? 'password' : 'text'\"\n\t\t\t\t\t\t\t[attr.inputmode]=\"mode() === 'numeric' ? 'numeric' : 'text'\"\n\t\t\t\t\t\t\t[attr.autocomplete]=\"index === 0 ? 'one-time-code' : 'off'\"\n\t\t\t\t\t\t\t[attr.aria-label]=\"ariaCellLabel() + ' ' + (index + 1)\"\n\t\t\t\t\t\t\tmaxlength=\"1\"\n\t\t\t\t\t\t\t[value]=\"chars()[index]\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t\t\t(input)=\"onInput(index, $event)\"\n\t\t\t\t\t\t\t(keydown)=\"onKeydown(index, $event)\"\n\t\t\t\t\t\t\t(paste)=\"onPaste(index, $event)\"\n\t\t\t\t\t\t\t(focus)=\"select(index)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\n\t\t\t\t@if (formText()) {\n\t\t\t\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">{{ formText() }}</div>\n\t\t\t\t}\n\n\t\t\t\t@if (isInvalid) {\n\t\t\t\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\">{{ getInvalidFeedbackTemplate(error.key, error.value) }}</span>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\n\t\t\t\t@if (showsValid && validFeedback()) {\n\t\t\t\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t`,\n\tstyleUrl: './otp.component.scss'\n})\nexport class HubOtpInputComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\n\t/** Number of cells / characters in the code. */\n\treadonly length = input(6, { transform: numberAttribute });\n\n\t/** Accepted character set. */\n\treadonly mode = input<HubOtpMode>('numeric');\n\n\t/** Field label. */\n\treadonly label = input<string>('');\n\n\t/** Label placement. */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Helper text shown below the cells. */\n\treadonly formText = input<string>('');\n\n\t/** Helper-text placement. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Masks the characters like a password. */\n\treadonly secret = input(false, { transform: booleanAttribute });\n\n\t/** Renders the cells read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Inserts a visual separator every N cells (0 = none). */\n\treadonly separatorEvery = input(0, { transform: numberAttribute });\n\n\t/** The separator character shown between groups. */\n\treadonly separator = input<string>('-');\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<string>();\n\n\t/** Emits the full code once every cell is filled. */\n\treadonly completed = output<string>();\n\n\t/** The current value, stored as a plain string. */\n\treadonly #value = signal<string>('');\n\n\t/** References to the cell inputs, for focus management. */\n\tprivate readonly _cells = viewChildren<ElementRef<HTMLInputElement>>('cell');\n\n\t/** Index list driving the `@for`. */\n\treadonly cells = computed<number[]>(() => Array.from({ length: Math.max(1, this.length()) }, (_, index) => index));\n\n\t/** Per-cell characters derived from the current value. */\n\treadonly chars = computed<string[]>(() => {\n\t\tconst value = this.#value();\n\t\treturn Array.from({ length: Math.max(1, this.length()) }, (_, index) => value[index] ?? '');\n\t});\n\n\t/** Regex matching a single accepted character for the active mode. */\n\treadonly #pattern = computed<RegExp>(() => {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'alpha':\n\t\t\t\treturn /[a-zA-Z]/;\n\t\t\tcase 'alphanumeric':\n\t\t\t\treturn /[a-zA-Z0-9]/;\n\t\t\tdefault:\n\t\t\t\treturn /[0-9]/;\n\t\t}\n\t});\n\n\t/** ARIA label prefix for each cell. */\n\treadonly ariaCellLabel = computed<string>(() => (this.mode() === 'numeric' ? 'Digit' : 'Character'));\n\n\twriteValue(value: unknown): void {\n\t\tconst raw = typeof value === 'string' ? value : value == null ? '' : String(value);\n\t\tthis.#value.set(this.#sanitize(raw).slice(0, this.length()));\n\t}\n\n\t/** Handles typing into a cell: keep the last valid char, advance focus, and emit. */\n\tprotected onInput(index: number, event: Event): void {\n\t\tconst target = event.target as HTMLInputElement;\n\t\tconst typed = this.#sanitize(target.value);\n\t\tconst char = typed.slice(-1);\n\t\tconst chars = [...this.chars()];\n\n\t\tif (!char) {\n\t\t\tchars[index] = '';\n\t\t\ttarget.value = '';\n\t\t\tthis.#commit(chars.join(''));\n\t\t\treturn;\n\t\t}\n\n\t\tchars[index] = char;\n\t\ttarget.value = char;\n\t\tthis.#commit(chars.join(''));\n\t\tthis.#focus(index + 1);\n\t}\n\n\t/** Handles navigation / deletion keys. */\n\tprotected onKeydown(index: number, event: KeyboardEvent): void {\n\t\tconst chars = [...this.chars()];\n\n\t\tif (event.key === 'Backspace') {\n\t\t\tif (chars[index]) {\n\t\t\t\tchars[index] = '';\n\t\t\t\tthis.#commit(chars.join(''));\n\t\t\t} else if (index > 0) {\n\t\t\t\tchars[index - 1] = '';\n\t\t\t\tthis.#commit(chars.join(''));\n\t\t\t\tthis.#focus(index - 1);\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t} else if (event.key === 'ArrowLeft' && index > 0) {\n\t\t\tthis.#focus(index - 1);\n\t\t\tevent.preventDefault();\n\t\t} else if (event.key === 'ArrowRight' && index < this.length() - 1) {\n\t\t\tthis.#focus(index + 1);\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\t/** Distributes a pasted code across the cells starting at the current one. */\n\tprotected onPaste(index: number, event: ClipboardEvent): void {\n\t\tevent.preventDefault();\n\t\tconst pasted = this.#sanitize(event.clipboardData?.getData('text') ?? '');\n\t\tif (!pasted) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst chars = [...this.chars()];\n\t\tlet cursor = index;\n\t\tfor (const char of pasted) {\n\t\t\tif (cursor >= this.length()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tchars[cursor] = char;\n\t\t\tcursor++;\n\t\t}\n\t\tthis.#commit(chars.join(''));\n\t\tthis.#focus(Math.min(cursor, this.length() - 1));\n\t}\n\n\t/** Selects the cell content on focus for quick overwrite. */\n\tprotected select(index: number): void {\n\t\tthis._cells()[index]?.nativeElement.select();\n\t}\n\n\t/** Marks the field as touched when focus leaves the whole group. */\n\tprotected onFocusOut(event: FocusEvent): void {\n\t\tconst next = event.relatedTarget as Node | null;\n\t\tconst group = event.currentTarget as HTMLElement;\n\t\tif (!next || !group.contains(next)) {\n\t\t\tthis.onTouched();\n\t\t}\n\t}\n\n\t/** Keeps only characters allowed by the active mode. */\n\t#sanitize(value: string): string {\n\t\tconst pattern = this.#pattern();\n\t\treturn [...value].filter((char) => pattern.test(char)).join('');\n\t}\n\n\t/** Stores, propagates and (when full) signals completion. */\n\t#commit(value: string): void {\n\t\tconst next = value.slice(0, this.length());\n\t\tthis.#value.set(next);\n\t\tthis.onChange?.(next);\n\t\tthis.valueChange.emit(next);\n\t\tif (next.length === this.length()) {\n\t\t\tthis.completed.emit(next);\n\t\t}\n\t}\n\n\t/** Moves focus to the cell at `index`, if it exists. */\n\t#focus(index: number): void {\n\t\tthis._cells()[index]?.nativeElement.focus();\n\t}\n}\n","import { booleanAttribute, Directive, ElementRef, inject, input, OnInit } from '@angular/core';\n\n/**\n * Auto-resizes a `<textarea>` to fit its content height.\n *\n * @example\n * ```html\n * <textarea hubAutoresize></textarea>\n * ```\n */\n@Directive({\n\tselector: 'textarea[hubAutoresize]',\n\thost: {\n\t\t'(:focusin)': 'onChange()',\n\t\t'(:focusout)': 'onChange()',\n\t\t'(:input)': 'onChange()'\n\t}\n})\nexport class HubAutoresizeDirective implements OnInit {\n\treadonly #elementRef = inject<ElementRef<HTMLTextAreaElement>>(ElementRef);\n\n\t/** Whether auto-resizing is enabled. */\n\treadonly hubAutoresize = input(true, { transform: booleanAttribute });\n\n\tonChange(): void {\n\t\tthis.resize();\n\t}\n\n\tngOnInit(): void {\n\t\tif (this.#elementRef.nativeElement.scrollHeight) {\n\t\t\tsetTimeout(() => this.resize(), 1);\n\t\t}\n\t}\n\n\t/** Resizes the textarea to fit its content. */\n\tresize(): void {\n\t\tif (this.hubAutoresize()) {\n\t\t\tconst el = this.#elementRef.nativeElement;\n\t\t\tel.style.height = '0';\n\t\t\tel.style.height = el.scrollHeight + 4 + 'px';\n\t\t}\n\t}\n}\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HubAutoresizeDirective } from '../../directives/autoresize.directive';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\n\n/**\n * Accessible multi-line text field with optional auto-resize, character counter and automatic\n * validation-error display.\n *\n * Shares all the form plumbing (CVA, error feedback, touched tracking) with the other\n * `ng-hub-ui-forms` fields through {@link HubFieldControl}.\n *\n * @example\n * ```html\n * <hub-textarea formControlName=\"bio\" label=\"Biography\" [rows]=\"4\" [maxlength]=\"280\" [counter]=\"true\" />\n * ```\n */\n@Component({\n\tselector: 'hub-textarea',\n\timports: [NgTemplateOutlet, KeyValuePipe, FormsModule, HubAutoresizeDirective],\n\ttemplateUrl: './textarea.component.html',\n\tstyleUrl: './textarea.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-textarea-host]': 'true'\n\t}\n})\nexport class HubTextareaComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _value = signal<string>('');\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `horizontal`). */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Placeholder text. */\n\treadonly placeholder = input<string>('');\n\n\t/** Number of visible text rows. */\n\treadonly rows = input<number | undefined, string | number>(undefined, { transform: numberAttribute });\n\n\t/** Number of visible columns. When set, the textarea stops stretching to full width. */\n\treadonly cols = input<number | undefined, string | number>(undefined, { transform: numberAttribute });\n\n\t/** Maximum number of characters. Drives both the native limit and the counter. */\n\treadonly maxlength = input<number | undefined, string | number>(undefined, { transform: numberAttribute });\n\n\t/** Whether the textarea grows to fit its content. */\n\treadonly autoresize = input(false, { transform: booleanAttribute });\n\n\t/** Whether to show a character counter below the control. */\n\treadonly counter = input(false, { transform: booleanAttribute });\n\n\t/** Whether the textarea is read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported in the MVP. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<string>();\n\n\t/** Current character counter text (e.g. `12 / 280`). */\n\tprotected readonly counterText = computed<string>(() => {\n\t\tconst length = (this._value() ?? '').length;\n\t\tconst max = this.maxlength();\n\n\t\treturn max != null ? `${length} / ${max}` : `${length}`;\n\t});\n\n\twriteValue(value: string | null): void {\n\t\tthis._value.set(value ?? '');\n\t}\n\n\t/**\n\t * Updates the value from the textarea and propagates it to the form and outputs.\n\t *\n\t * @param value - The new textarea value.\n\t */\n\tsetValue(value: string): void {\n\t\tthis._value.set(value ?? '');\n\t\tthis.updateNativeErrors(this._elementRef.nativeElement.querySelector(`[id=\"${this.id}\"]`));\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n}\n","<div\n\tclass=\"hub-field hub-textarea\"\n\t[class.hub-field--horizontal]=\"labelType() === _labelTypes.Horizontal || (!label() && required())\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t<textarea\n\t\t\tclass=\"hub-field__control hub-textarea__control\"\n\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t[id]=\"id\"\n\t\t\t[hubAutoresize]=\"autoresize()\"\n\t\t\t[ngModel]=\"_value()\"\n\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t[attr.rows]=\"rows()\"\n\t\t\t[attr.cols]=\"cols()\"\n\t\t\t[attr.maxlength]=\"maxlength()\"\n\t\t\t[placeholder]=\"placeholder()\"\n\t\t\t[disabled]=\"disabled()\"\n\t\t\t[readonly]=\"readonly()\"\n\t\t\t[required]=\"!!required()\"\n\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t[style.width]=\"cols() ? 'auto' : '100%'\"\n\t\t></textarea>\n\t</div>\n\n\t@if (counter()) {\n\t\t<div class=\"hub-textarea__counter\" [class.hub-field__form-text--disabled]=\"disabled()\">{{ counterText() }}</div>\n\t}\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\n\n/** Value of `<hub-slider>`: a number in single mode, a `[lower, upper]` tuple in range mode. */\nexport type HubSliderValue = number | [number, number];\n\n/**\n * Accessible numeric slider with an optional value bubble. Supports a single thumb or a\n * **dual-thumb range** (`range`), whose value is a `[lower, upper]` tuple.\n *\n * Shares the form plumbing (CVA, error feedback, touched tracking) with the other\n * `ng-hub-ui-forms` fields through {@link HubFieldControl}. The filled track and bubbles are\n * positioned from the `--hub-slider-from` / `--hub-slider-to` percentages.\n *\n * @example\n * ```html\n * <hub-slider formControlName=\"volume\" label=\"Volume\" [min]=\"0\" [max]=\"100\" [step]=\"5\" />\n * <hub-slider formControlName=\"price\" label=\"Price\" [range]=\"true\" [min]=\"0\" [max]=\"1000\" />\n * ```\n */\n@Component({\n\tselector: 'hub-slider',\n\timports: [NgTemplateOutlet, KeyValuePipe, FormsModule],\n\ttemplateUrl: './slider.component.html',\n\tstyleUrl: './slider.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-slider-host]': 'true'\n\t}\n})\nexport class HubSliderComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _value = signal<HubSliderValue>(0);\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `horizontal`). */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Whether the slider selects a `[lower, upper]` range with two thumbs. */\n\treadonly range = input(false, { transform: booleanAttribute });\n\n\t/** Minimum value. */\n\treadonly min = input<number, string | number>(0, { transform: numberAttribute });\n\n\t/** Maximum value. */\n\treadonly max = input<number, string | number>(100, { transform: numberAttribute });\n\n\t/** Step increment. */\n\treadonly step = input<number, string | number>(1, { transform: numberAttribute });\n\n\t/** Whether to show the value bubble(s) above the thumb(s). */\n\treadonly showValue = input(true, { transform: booleanAttribute });\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<HubSliderValue>();\n\n\t/** Current single value (single mode). */\n\tprotected readonly single = computed<number>(() => {\n\t\tconst v = this._value();\n\t\treturn Array.isArray(v) ? v[0] : v;\n\t});\n\n\t/** Lower bound of the current range (range mode). */\n\tprotected readonly lower = computed<number>(() => {\n\t\tconst v = this._value();\n\t\treturn Array.isArray(v) ? v[0] : this.min();\n\t});\n\n\t/** Upper bound of the current range (range mode). */\n\tprotected readonly upper = computed<number>(() => {\n\t\tconst v = this._value();\n\t\treturn Array.isArray(v) ? v[1] : this.max();\n\t});\n\n\t/** Single-thumb position as a clamped 0–100 percentage. */\n\tprotected readonly percent = computed<number>(() => this.#toPercent(this.single()));\n\n\t/** Lower-thumb position as a clamped 0–100 percentage. */\n\tprotected readonly lowerPercent = computed<number>(() => this.#toPercent(this.lower()));\n\n\t/** Upper-thumb position as a clamped 0–100 percentage. */\n\tprotected readonly upperPercent = computed<number>(() => this.#toPercent(this.upper()));\n\n\twriteValue(value: HubSliderValue | null): void {\n\t\tif (this.range()) {\n\t\t\tconst tuple = Array.isArray(value) ? value : [this.min(), this.max()];\n\t\t\tthis._value.set([+tuple[0], +tuple[1]]);\n\t\t} else {\n\t\t\tthis._value.set(+((value as number) ?? 0));\n\t\t}\n\t}\n\n\t/**\n\t * Updates the single value and propagates it.\n\t *\n\t * @param value - The new value (string from the DOM or number).\n\t */\n\tsetValue(value: string | number): void {\n\t\tthis.#emit(+value);\n\t}\n\n\t/**\n\t * Updates the lower thumb (clamped not to cross the upper thumb).\n\t *\n\t * @param value - The new lower value.\n\t */\n\tsetLower(value: string | number): void {\n\t\tconst next = Math.min(+value, this.upper());\n\t\tthis.#emit([next, this.upper()]);\n\t}\n\n\t/**\n\t * Updates the upper thumb (clamped not to cross the lower thumb).\n\t *\n\t * @param value - The new upper value.\n\t */\n\tsetUpper(value: string | number): void {\n\t\tconst next = Math.max(+value, this.lower());\n\t\tthis.#emit([this.lower(), next]);\n\t}\n\n\t#emit(value: HubSliderValue): void {\n\t\tthis._value.set(value);\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n\n\t#toPercent(value: number): number {\n\t\tconst span = this.max() - this.min();\n\t\tconst ratio = span === 0 ? 0 : ((value - this.min()) / span) * 100;\n\n\t\treturn Math.min(100, Math.max(0, ratio));\n\t}\n}\n","<div\n\tclass=\"hub-field hub-slider\"\n\t[class.hub-field--horizontal]=\"label() && labelType() === _labelTypes.Horizontal\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n\t[style.--hub-slider-percent]=\"percent()\"\n\t[style.--hub-slider-from]=\"lowerPercent()\"\n\t[style.--hub-slider-to]=\"upperPercent()\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div\n\t\tclass=\"hub-field__body hub-slider__range\"\n\t\t[class.hub-slider__range--dual]=\"range()\"\n\t\t[class.hub-slider__range--flush]=\"!showValue()\"\n\t>\n\t\t@if (range()) {\n\t\t\t<div class=\"hub-slider__rail\" aria-hidden=\"true\"></div>\n\n\t\t\t<input\n\t\t\t\ttype=\"range\"\n\t\t\t\tclass=\"hub-slider__track hub-slider__track--lower\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[min]=\"min()\"\n\t\t\t\t[max]=\"max()\"\n\t\t\t\t[step]=\"step()\"\n\t\t\t\t[value]=\"lower()\"\n\t\t\t\t(input)=\"setLower($any($event.target).value)\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\taria-label=\"Range start\"\n\t\t\t\t[attr.aria-valuetext]=\"lower()\"\n\t\t\t/>\n\t\t\t<input\n\t\t\t\ttype=\"range\"\n\t\t\t\tclass=\"hub-slider__track hub-slider__track--upper\"\n\t\t\t\t[min]=\"min()\"\n\t\t\t\t[max]=\"max()\"\n\t\t\t\t[step]=\"step()\"\n\t\t\t\t[value]=\"upper()\"\n\t\t\t\t(input)=\"setUpper($any($event.target).value)\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\taria-label=\"Range end\"\n\t\t\t\t[attr.aria-valuetext]=\"upper()\"\n\t\t\t/>\n\n\t\t\t@if (showValue()) {\n\t\t\t\t<span class=\"hub-slider__bubble hub-slider__bubble--lower\" aria-hidden=\"true\">{{ lower() }}</span>\n\t\t\t\t<span class=\"hub-slider__bubble hub-slider__bubble--upper\" aria-hidden=\"true\">{{ upper() }}</span>\n\t\t\t}\n\t\t} @else {\n\t\t\t<input\n\t\t\t\ttype=\"range\"\n\t\t\t\tclass=\"hub-slider__track\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[min]=\"min()\"\n\t\t\t\t[max]=\"max()\"\n\t\t\t\t[step]=\"step()\"\n\t\t\t\t[value]=\"single()\"\n\t\t\t\t(input)=\"setValue($any($event.target).value)\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t[attr.aria-valuetext]=\"single()\"\n\t\t\t/>\n\n\t\t\t@if (showValue()) {\n\t\t\t\t<span class=\"hub-slider__bubble\" aria-hidden=\"true\">{{ single() }}</span>\n\t\t\t}\n\t\t}\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></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 * Resolves a user-supplied accent value to a paintable CSS colour for a `--hub-*-accent` slot.\n *\n * A bareword (a built-in semantic name such as `primary` / `success`, or any registered accent /\n * named CSS colour) becomes a `--hub-sys-color-*` design-system token with the word itself as the\n * raw fallback, so named CSS colours keep working when no token is registered. A literal colour\n * (`#ff0000`, `rgb(...)`, `oklch(...)`, `var(...)`) is passed through unchanged. Empty / whitespace\n * input resolves to `null` so the caller can keep its neutral default.\n *\n * @param value - The raw accent value (e.g. from a `color` input).\n * @returns The resolved CSS colour, or `null` when no accent is provided.\n */\nexport function resolveHubAccent(value: string | null | undefined): string | null {\n\tconst color = value?.trim();\n\tif (!color) return null;\n\treturn /^[a-zA-Z][\\w-]*$/.test(color) ? `var(--hub-sys-color-${color}, ${color})` : color;\n}\n","import {\n\tafterNextRender,\n\tafterRenderEffect,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\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 { HubFieldControl } from '../../shared/hub-field-control';\nimport { resolveHubAccent } from '../../shared/resolve-hub-accent';\n\n/** A single choice rendered by {@link HubSegmentedComponent}. */\nexport interface HubSegmentedOption {\n\t/** Value written to the form control when this option is selected. */\n\tvalue: unknown;\n\t/** Visible label for the segment. */\n\tlabel: string;\n\t/** When `true`, the segment is rendered but cannot be selected. */\n\tdisabled?: boolean;\n}\n\n/** Density of the segmented control. */\nexport type HubSegmentedSize = 'sm' | 'md' | 'lg';\n\n/**\n * Segmented button bar (`hub-segmented`): a compact group of 2..n options rendered as an inline\n * (or vertical) segmented control. A full `ng-hub-ui-forms` field — it extends\n * {@link HubFieldControl}, so it binds with `formControlName` / `ngModel` and shares the label,\n * helper text and validation chrome with every other field.\n *\n * Two selection modes:\n * - **single** (default): exclusive choice following the WAI-ARIA radiogroup pattern\n * (`role=\"radiogroup\"` wrapping `role=\"radio\"` buttons). Arrow keys move focus **and** select.\n * The value is the scalar of the chosen option.\n * - **multiple** (`[multiple]=\"true\"`): a toggle group (`role=\"group\"` wrapping\n * `aria-pressed` buttons). Clicking toggles membership; arrow keys only move focus.\n * The value is an array of the selected option values.\n *\n * ```html\n * <hub-segmented\n * formControlName=\"view\"\n * [options]=\"[{ value: 'list', label: 'List' }, { value: 'grid', label: 'Grid' }]\"\n * />\n *\n * <hub-segmented formControlName=\"tags\" [multiple]=\"true\" [vertical]=\"true\" [options]=\"tags\" />\n * ```\n */\n@Component({\n\tselector: 'hub-segmented',\n\tstandalone: true,\n\timports: [NgTemplateOutlet, KeyValuePipe],\n\ttemplateUrl: './segmented.component.html',\n\tstyleUrl: './segmented.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class.hub-segmented-host]': 'true'\n\t}\n})\nexport class HubSegmentedComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\n\t/** The selectable options, in render order. */\n\treadonly options = input<HubSegmentedOption[]>([]);\n\n\t/** Visual density. */\n\treadonly size = input<HubSegmentedSize>('md');\n\n\t/**\n\t * Accent for the selected pill. Accepts ANY colour value:\n\t * - a built-in semantic name (`primary`, `success`, …) or any registered accent → resolves to\n\t * the matching `--hub-sys-color-*` design-system token;\n\t * - a literal colour (`#ff0000`, `rgb(...)`, `oklch(...)`, `rebeccapurple`) → used as-is.\n\t * Both the sliding indicator and the multiple-mode pill follow it, and the selected label gets a\n\t * derived contrast colour automatically. Empty string (default) keeps the neutral white-pill look.\n\t */\n\treadonly color = input<string>('');\n\n\t/**\n\t * Resolves {@link color} to a paintable accent for the `--hub-segmented-accent` slot: a bareword\n\t * becomes a `--hub-sys-color-*` token with the word as raw fallback (so named CSS colours work\n\t * too), while a literal `#hex` / `rgb()` / `oklch()` / `var()` is passed through unchanged.\n\t */\n\tprotected readonly accentVar = computed<string | null>(() => resolveHubAccent(this.color()));\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `horizontal`). */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** When `true`, options toggle independently and the value is an array. */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/** When `true`, the segments stack vertically instead of sitting in a row. */\n\treadonly vertical = input(false, { transform: booleanAttribute });\n\n\t/** Currently selected value — a scalar in single mode, an array in multiple mode. */\n\treadonly value = model<unknown>();\n\n\t/** The rendered option buttons, used to move focus during keyboard navigation. */\n\tprivate readonly _buttons = viewChildren<ElementRef<HTMLButtonElement>>('optionButton');\n\n\t/** The segmented bar element — the positioning context for the sliding indicator. */\n\tprivate readonly _bar = viewChild<ElementRef<HTMLElement>>('segmentedBar');\n\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// The sliding indicator is a browser-only affordance (it measures rendered geometry) and\n\t\t// applies to single mode only. Guard SSR so no DOM reads happen off the browser.\n\t\tif (this._isBrowser) {\n\t\t\t// Re-measure whenever anything that moves or resizes the selected pill changes.\n\t\t\tafterRenderEffect(() => {\n\t\t\t\t// Track the geometry-affecting state so the effect re-runs on any of them.\n\t\t\t\tthis.value();\n\t\t\t\tthis.options();\n\t\t\t\tthis.size();\n\t\t\t\tthis.vertical();\n\t\t\t\tthis.multiple();\n\t\t\t\tthis._buttons();\n\t\t\t\tthis.updateIndicator();\n\t\t\t});\n\n\t\t\t// Initial placement plus a ResizeObserver so the pill follows layout/reflow changes\n\t\t\t// (container resize, font swaps, wrapping) that no signal reports.\n\t\t\tafterNextRender(() => {\n\t\t\t\tconst bar = this._bar()?.nativeElement;\n\t\t\t\tif (!bar) return;\n\n\t\t\t\tif (typeof ResizeObserver !== 'undefined') {\n\t\t\t\t\tconst observer = new ResizeObserver(() => this.updateIndicator());\n\t\t\t\t\tobserver.observe(bar);\n\t\t\t\t\tthis._destroyRef.onDestroy(() => observer.disconnect());\n\t\t\t\t}\n\n\t\t\t\tthis.updateIndicator();\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Index of the option that owns the group's tab stop (roving tabindex): the first selected\n\t * option, or the first enabled option when nothing is selected yet.\n\t */\n\treadonly rovingIndex = computed<number>(() => {\n\t\tconst options = this.options();\n\t\tconst selected = options.findIndex((option) => this.isSelected(option));\n\t\tif (selected >= 0) return selected;\n\t\treturn options.findIndex((option) => !option.disabled);\n\t});\n\n\t/** Whether the given option is currently selected (mode-aware). */\n\tisSelected(option: HubSegmentedOption): boolean {\n\t\tif (this.multiple()) {\n\t\t\tconst current = this.value();\n\t\t\treturn Array.isArray(current) && current.some((entry) => this.#isSameValue(entry, option.value));\n\t\t}\n\n\t\treturn this.#isSameValue(option.value, this.value());\n\t}\n\n\t/**\n\t * Selects (single) or toggles (multiple) an option and notifies the form. No-op when the\n\t * control or the option is disabled.\n\t */\n\tselect(option: HubSegmentedOption): void {\n\t\tif (this.disabled() || option.disabled) return;\n\n\t\tif (this.multiple()) {\n\t\t\tconst current = Array.isArray(this.value()) ? (this.value() as unknown[]) : [];\n\t\t\tconst exists = current.some((entry) => this.#isSameValue(entry, option.value));\n\t\t\tconst next = exists\n\t\t\t\t? current.filter((entry) => !this.#isSameValue(entry, option.value))\n\t\t\t\t: [...current, option.value];\n\t\t\tthis.value.set(next);\n\t\t\tthis.onChange(next);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.#isSameValue(option.value, this.value())) return;\n\t\tthis.value.set(option.value);\n\t\tthis.onChange(option.value);\n\t}\n\n\t/**\n\t * Keyboard navigation. In single mode the arrow keys move to (and select) the next / previous\n\t * enabled option (radiogroup pattern); in multiple mode they only move focus and selection is\n\t * left to the native button click (`Space` / `Enter`). `Home` / `End` jump to the first / last\n\t * enabled option.\n\t */\n\tonKeydown(event: KeyboardEvent): void {\n\t\tif (this.disabled()) return;\n\t\tconst options = this.options();\n\t\tif (options.length === 0) return;\n\n\t\tconst current = this.rovingIndex();\n\t\tlet target: number | null = null;\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowRight':\n\t\t\tcase 'ArrowDown':\n\t\t\t\ttarget = this.#nextEnabled(current, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowLeft':\n\t\t\tcase 'ArrowUp':\n\t\t\t\ttarget = this.#nextEnabled(current, -1);\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\ttarget = this.#nextEnabled(-1, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\ttarget = this.#nextEnabled(options.length, -1);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tif (target === null) return;\n\t\tevent.preventDefault();\n\n\t\tif (!this.multiple()) {\n\t\t\tthis.select(options[target]);\n\t\t}\n\n\t\tthis._buttons()[target]?.nativeElement.focus();\n\t}\n\n\t/** Writes an incoming value from the form model (coerces to an array in multiple mode). */\n\toverride writeValue(value: unknown): void {\n\t\tif (this.multiple()) {\n\t\t\tthis.value.set(Array.isArray(value) ? value : []);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.value.set(value);\n\t}\n\n\t/**\n\t * Measures the selected option (single mode) and writes its position and size onto the bar as\n\t * `--hub-segmented-indicator-{x,y,width,height}` px custom properties, which the sliding\n\t * indicator reads. Collapses the indicator (width/height 0) in multiple mode or when nothing is\n\t * selected. Browser-only — invoked from `afterRenderEffect` / `afterNextRender` / the\n\t * `ResizeObserver`, so the DOM is always up to date when it runs.\n\t */\n\tprivate updateIndicator(): void {\n\t\tconst bar = this._bar()?.nativeElement;\n\t\tif (!bar) return;\n\n\t\tconst collapse = (): void => {\n\t\t\tbar.style.setProperty('--hub-segmented-indicator-width', '0px');\n\t\t\tbar.style.setProperty('--hub-segmented-indicator-height', '0px');\n\t\t};\n\n\t\tif (this.multiple()) {\n\t\t\tcollapse();\n\t\t\treturn;\n\t\t}\n\n\t\tconst index = this.options().findIndex((option) => this.isSelected(option));\n\t\tconst button = index >= 0 ? this._buttons()[index]?.nativeElement : undefined;\n\n\t\tif (!button) {\n\t\t\tcollapse();\n\t\t\treturn;\n\t\t}\n\n\t\tbar.style.setProperty('--hub-segmented-indicator-x', `${button.offsetLeft}px`);\n\t\tbar.style.setProperty('--hub-segmented-indicator-y', `${button.offsetTop}px`);\n\t\tbar.style.setProperty('--hub-segmented-indicator-width', `${button.offsetWidth}px`);\n\t\tbar.style.setProperty('--hub-segmented-indicator-height', `${button.offsetHeight}px`);\n\t}\n\n\t/**\n\t * Finds the next enabled option starting from `from`, moving in `step` direction.\n\t * Wraps around the ends and returns `null` when no enabled option exists.\n\t */\n\t#nextEnabled(from: number, step: number): number | null {\n\t\tconst options = this.options();\n\t\tconst count = options.length;\n\t\tfor (let offset = 1; offset <= count; offset++) {\n\t\t\tconst index = (((from + step * offset) % count) + count) % count;\n\t\t\tif (!options[index].disabled) return index;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Value equality used across selection — reference / `Object.is` semantics. */\n\t#isSameValue(a: unknown, b: unknown): boolean {\n\t\treturn Object.is(a, b);\n\t}\n}\n","<div\n\tclass=\"hub-field hub-segmented-field\"\n\t[class.hub-field--horizontal]=\"label() && labelType() === _labelTypes.Horizontal\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t<div\n\t\t\t#segmentedBar\n\t\t\t[id]=\"id\"\n\t\t\tclass=\"hub-segmented\"\n\t\t\t[class.hub-segmented--sm]=\"size() === 'sm'\"\n\t\t\t[class.hub-segmented--lg]=\"size() === 'lg'\"\n\t\t\t[class.hub-segmented--vertical]=\"vertical()\"\n\t\t\t[class.hub-segmented--multiple]=\"multiple()\"\n\t\t\t[class.hub-segmented--disabled]=\"disabled()\"\n\t\t\t[attr.data-variant]=\"color() || null\"\n\t\t\t[style.--hub-segmented-accent]=\"accentVar()\"\n\t\t\t[attr.role]=\"multiple() ? 'group' : 'radiogroup'\"\n\t\t\t[attr.aria-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{{ option.label }}\n\t\t\t\t</button>\n\t\t\t}\n\t\t</div>\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Marks a template as the legend content of a `<hub-fieldset>`.\n *\n * @example\n * ```html\n * <hub-fieldset formGroupName=\"address\">\n * <ng-template hubLegend>Shipping address <span class=\"badge\">required</span></ng-template>\n * </hub-fieldset>\n * ```\n */\n@Directive({\n\tselector: '[hubLegend]'\n})\nexport class HubLegendDirective {\n\t/** Template reference for the legend content. */\n\treadonly template = inject(TemplateRef);\n}\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, contentChild, input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { HubLegendDirective } from '../../directives/legend.directive';\nimport { HubGroupControl } from '../../shared/hub-group-control';\n\n/**\n * Groups related fields under a `<fieldset>`/`<legend>` and **automatically displays the\n * group-level (cross-field) validation errors** of the bound `FormGroup`/`FormArray`.\n *\n * Bind the target group explicitly with `[group]` (recommended) or by `groupName` resolved from the\n * parent container. Errors set on the group itself — e.g. by `hubAreEqual` — are rendered without\n * any extra wiring, mirroring how the field components show control-level errors.\n *\n * @example\n * ```html\n * <hub-fieldset legend=\"Credentials\" [group]=\"form.controls.credentials\">\n * <hub-input formControlName=\"password\" type=\"password\" label=\"Password\" />\n * <hub-input formControlName=\"confirm\" type=\"password\" label=\"Confirm\" />\n * </hub-fieldset>\n * ```\n */\n@Component({\n\tselector: 'hub-fieldset',\n\timports: [NgTemplateOutlet, KeyValuePipe],\n\ttemplateUrl: './fieldset.component.html',\n\tstyleUrl: './fieldset.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-fieldset-host]': 'true'\n\t}\n})\nexport class HubFieldsetComponent extends HubGroupControl {\n\t/** Legend text. Ignored when a `hubLegend` template is projected. */\n\treadonly legend = input<string>('');\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Query for a projected `hubLegend` template. */\n\treadonly legendTmp = contentChild(HubLegendDirective, { read: TemplateRef });\n}\n","<fieldset class=\"hub-fieldset\" [class.hub-fieldset--invalid]=\"isInvalid\">\n\t@if (legend() || legendTmp()) {\n\t\t<legend class=\"hub-fieldset__legend\">\n\t\t\t@if (legendTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"legendTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ legend() }}\n\t\t\t}\n\t\t</legend>\n\t}\n\n\t<div class=\"hub-fieldset__content\">\n\t\t<ng-content></ng-content>\n\t</div>\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n</fieldset>\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { HubGroupControl } from '../../shared/hub-group-control';\n\n/**\n * Applied to a reactive `<form [formGroup]>`, **automatically displays the form-level validation\n * errors** (cross-field errors set on the root group) and centralizes submit handling.\n *\n * Because it sits on the same host as the `formGroup` directive, projected `formControlName` fields\n * resolve their control normally — no extra wiring. On submit it prevents the default navigation,\n * marks the whole tree as touched (so every field reveals its errors) and reveals the form-level\n * errors. Bind the form's own `(submit)` event for your handler — there is no custom output, which\n * keeps the API idiomatic and avoids the double-emit you get when a directive output shadows the\n * native `submit` event on a `<form>`.\n *\n * @example\n * ```html\n * <form [formGroup]=\"form\" hubForm (submit)=\"save()\">\n * <hub-input formControlName=\"email\" type=\"email\" label=\"Email\" />\n * <button type=\"submit\">Save</button>\n * </form>\n * ```\n */\n@Component({\n\tselector: 'form[hubForm]',\n\timports: [NgTemplateOutlet, KeyValuePipe],\n\ttemplateUrl: './form.component.html',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class.hub-form-host]': 'true',\n\t\t'[class.hub-form--invalid]': 'isInvalid',\n\t\t'(submit)': 'handleSubmit($event)'\n\t}\n})\nexport class HubFormComponent extends HubGroupControl {\n\t/**\n\t * Augments the native form submit: prevents the default navigation, marks the tree as touched\n\t * and flips the submitted state so form-level errors appear. The consumer's own `(submit)`\n\t * binding still fires for their handler.\n\t *\n\t * @param event - The native submit event.\n\t */\n\tprotected handleSubmit(event: Event): void {\n\t\tevent.preventDefault();\n\t\tthis._control()?.markAllAsTouched();\n\t\tthis._submitted.set(true);\n\t}\n}\n","<ng-content></ng-content>\n\n@if (isInvalid) {\n\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t<ul>\n\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t<li>\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t></ng-container>\n\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></span>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</li>\n\t\t\t}\n\t\t</ul>\n\t</div>\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Presentational legend for a `<hub-fieldset>` (or any grouped section), with optional\n * required/invalid state styling.\n *\n * Use it inside a `hubLegend` template, or standalone as a section title.\n *\n * @example\n * ```html\n * <hub-fieldset [group]=\"form.controls.address\">\n * <ng-template hubLegend>\n * <hub-legend [required]=\"true\" [invalid]=\"form.controls.address.invalid\">Shipping address</hub-legend>\n * </ng-template>\n * </hub-fieldset>\n * ```\n */\n@Component({\n\tselector: 'hub-legend',\n\ttemplate: `<span class=\"hub-legend\" [class.hub-legend--invalid]=\"invalid()\">\n\t\t<ng-content></ng-content>\n\t\t@if (required()) {\n\t\t\t<span class=\"hub-legend__required\" aria-hidden=\"true\">*</span>\n\t\t}\n\t</span>`,\n\tstyleUrl: './legend.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: { '[class.hub-legend-host]': 'true' }\n})\nexport class HubLegendComponent {\n\t/** Whether to render the required indicator. */\n\treadonly required = input(false, { transform: booleanAttribute });\n\n\t/** Whether to render the invalid state styling. */\n\treadonly invalid = input(false, { transform: booleanAttribute });\n}\n","/**\n * Rendering formats for `<hub-select>`.\n *\n * - `dropdown` — the ng-select engine (search, virtual scroll, tags…).\n * - `buttons` — a toggle-button group (single or multiple, per `multiple`).\n * - `checkbox` — a list of checkboxes (always multiple).\n * - `radio` — a list of radios (always single).\n */\nexport type HubSelectFormat = 'dropdown' | 'buttons' | 'checkbox' | 'radio';\n\n/**\n * Enum mirror of {@link HubSelectFormat} for ergonomic template usage.\n */\nexport enum HubSelectFormats {\n\tDropdown = 'dropdown',\n\tButtons = 'buttons',\n\tCheckbox = 'checkbox',\n\tRadio = 'radio'\n}\n","// @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()\n\t\t\t\t? escapeHTML(this.ngItemLabel())\n\t\t\t\t: this.ngItemLabel();\n\t\t})\n\t}\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-option-tmp]',\n\tstandalone: true,\n})\nexport class NgOptionTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-optgroup-tmp]',\n\tstandalone: true,\n})\nexport class NgOptgroupTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-label-tmp]',\n\tstandalone: true,\n})\nexport class NgLabelTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-multi-label-tmp]',\n\tstandalone: true,\n})\nexport class NgMultiLabelTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-header-tmp]',\n\tstandalone: true,\n})\nexport class NgHeaderTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-footer-tmp]',\n\tstandalone: true,\n})\nexport class NgFooterTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-notfound-tmp]',\n\tstandalone: true,\n})\nexport class NgNotFoundTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-placeholder-tmp]',\n\tstandalone: true,\n})\nexport class NgPlaceholderTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-typetosearch-tmp]',\n\tstandalone: true,\n})\nexport class NgTypeToSearchTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-loadingtext-tmp]',\n\tstandalone: true,\n})\nexport class NgLoadingTextTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-tag-tmp]',\n\tstandalone: true,\n})\nexport class NgTagTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-loadingspinner-tmp]',\n\tstandalone: true,\n})\nexport class NgLoadingSpinnerTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n// eslint-disable-next-line @angular-eslint/directive-selector\n@Directive({ selector: '[ng-clearbutton-tmp]', standalone: true })\nexport class NgClearButtonTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class NgSelectConfig {\n\tplaceholder: string;\n\tfixedPlaceholder = true;\n\tnotFoundText = 'No items found';\n\ttypeToSearchText = 'Type to search';\n\taddTagText = 'Add item';\n\tloadingText = 'Loading...';\n\tclearAllText = 'Clear all';\n\tariaLabelDropdown = 'Options List';\n\tdisableVirtualScroll = true;\n\topenOnEnter = true;\n\tappendTo: string;\n\tbindValue: string;\n\tbindLabel: string;\n\tappearance = 'underline';\n\tclearSearchOnAdd: boolean;\n\tdeselectOnClick: boolean;\n\ttabFocusOnClear = true;\n\t/**\n\t * Controls which DOM event is used to detect outside clicks for closing the dropdown.\n\t * Defaults to 'click'. Set to 'mousedown' to handle early outside interactions\n\t * (useful when backdrops load on click and would otherwise close the dropdown).\n\t */\n\toutsideClickEvent: 'click' | 'mousedown' = 'click';\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ConsoleService {\n\twarn(message: string) {\n\t\tconsole.warn(message);\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nexport function newId() {\n\t// First character is an 'a', it's good practice to tag id to begin with a letter\n\treturn 'axxxxxxxxxxx'.replace(/[x]/g, () => {\n\t\tconst val = (Math.random() * 16) | 0;\n\t\treturn val.toString(16);\n\t});\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nconst diacritics = {\n\t'\\u24B6': 'A',\n\t'\\uFF21': 'A',\n\t'\\u00C0': 'A',\n\t'\\u00C1': 'A',\n\t'\\u00C2': 'A',\n\t'\\u1EA6': 'A',\n\t'\\u1EA4': 'A',\n\t'\\u1EAA': 'A',\n\t'\\u1EA8': 'A',\n\t'\\u00C3': 'A',\n\t'\\u0100': 'A',\n\t'\\u0102': 'A',\n\t'\\u1EB0': 'A',\n\t'\\u1EAE': 'A',\n\t'\\u1EB4': 'A',\n\t'\\u1EB2': 'A',\n\t'\\u0226': 'A',\n\t'\\u01E0': 'A',\n\t'\\u00C4': 'A',\n\t'\\u01DE': 'A',\n\t'\\u1EA2': 'A',\n\t'\\u00C5': 'A',\n\t'\\u01FA': 'A',\n\t'\\u01CD': 'A',\n\t'\\u0200': 'A',\n\t'\\u0202': 'A',\n\t'\\u1EA0': 'A',\n\t'\\u1EAC': 'A',\n\t'\\u1EB6': 'A',\n\t'\\u1E00': 'A',\n\t'\\u0104': 'A',\n\t'\\u023A': 'A',\n\t'\\u2C6F': 'A',\n\t'\\uA732': 'AA',\n\t'\\u00C6': 'AE',\n\t'\\u01FC': 'AE',\n\t'\\u01E2': 'AE',\n\t'\\uA734': 'AO',\n\t'\\uA736': 'AU',\n\t'\\uA738': 'AV',\n\t'\\uA73A': 'AV',\n\t'\\uA73C': 'AY',\n\t'\\u24B7': 'B',\n\t'\\uFF22': 'B',\n\t'\\u1E02': 'B',\n\t'\\u1E04': 'B',\n\t'\\u1E06': 'B',\n\t'\\u0243': 'B',\n\t'\\u0182': 'B',\n\t'\\u0181': 'B',\n\t'\\u24B8': 'C',\n\t'\\uFF23': 'C',\n\t'\\u0106': 'C',\n\t'\\u0108': 'C',\n\t'\\u010A': 'C',\n\t'\\u010C': 'C',\n\t'\\u00C7': 'C',\n\t'\\u1E08': 'C',\n\t'\\u0187': 'C',\n\t'\\u023B': 'C',\n\t'\\uA73E': 'C',\n\t'\\u24B9': 'D',\n\t'\\uFF24': 'D',\n\t'\\u1E0A': 'D',\n\t'\\u010E': 'D',\n\t'\\u1E0C': 'D',\n\t'\\u1E10': 'D',\n\t'\\u1E12': 'D',\n\t'\\u1E0E': 'D',\n\t'\\u0110': 'D',\n\t'\\u018B': 'D',\n\t'\\u018A': 'D',\n\t'\\u0189': 'D',\n\t'\\uA779': 'D',\n\t'\\u01F1': 'DZ',\n\t'\\u01C4': 'DZ',\n\t'\\u01F2': 'Dz',\n\t'\\u01C5': 'Dz',\n\t'\\u24BA': 'E',\n\t'\\uFF25': 'E',\n\t'\\u00C8': 'E',\n\t'\\u00C9': 'E',\n\t'\\u00CA': 'E',\n\t'\\u1EC0': 'E',\n\t'\\u1EBE': 'E',\n\t'\\u1EC4': 'E',\n\t'\\u1EC2': 'E',\n\t'\\u1EBC': 'E',\n\t'\\u0112': 'E',\n\t'\\u1E14': 'E',\n\t'\\u1E16': 'E',\n\t'\\u0114': 'E',\n\t'\\u0116': 'E',\n\t'\\u00CB': 'E',\n\t'\\u1EBA': 'E',\n\t'\\u011A': 'E',\n\t'\\u0204': 'E',\n\t'\\u0206': 'E',\n\t'\\u1EB8': 'E',\n\t'\\u1EC6': 'E',\n\t'\\u0228': 'E',\n\t'\\u1E1C': 'E',\n\t'\\u0118': 'E',\n\t'\\u1E18': 'E',\n\t'\\u1E1A': 'E',\n\t'\\u0190': 'E',\n\t'\\u018E': 'E',\n\t'\\u24BB': 'F',\n\t'\\uFF26': 'F',\n\t'\\u1E1E': 'F',\n\t'\\u0191': 'F',\n\t'\\uA77B': 'F',\n\t'\\u24BC': 'G',\n\t'\\uFF27': 'G',\n\t'\\u01F4': 'G',\n\t'\\u011C': 'G',\n\t'\\u1E20': 'G',\n\t'\\u011E': 'G',\n\t'\\u0120': 'G',\n\t'\\u01E6': 'G',\n\t'\\u0122': 'G',\n\t'\\u01E4': 'G',\n\t'\\u0193': 'G',\n\t'\\uA7A0': 'G',\n\t'\\uA77D': 'G',\n\t'\\uA77E': 'G',\n\t'\\u24BD': 'H',\n\t'\\uFF28': 'H',\n\t'\\u0124': 'H',\n\t'\\u1E22': 'H',\n\t'\\u1E26': 'H',\n\t'\\u021E': 'H',\n\t'\\u1E24': 'H',\n\t'\\u1E28': 'H',\n\t'\\u1E2A': 'H',\n\t'\\u0126': 'H',\n\t'\\u2C67': 'H',\n\t'\\u2C75': 'H',\n\t'\\uA78D': 'H',\n\t'\\u24BE': 'I',\n\t'\\uFF29': 'I',\n\t'\\u00CC': 'I',\n\t'\\u00CD': 'I',\n\t'\\u00CE': 'I',\n\t'\\u0128': 'I',\n\t'\\u012A': 'I',\n\t'\\u012C': 'I',\n\t'\\u0130': 'I',\n\t'\\u00CF': 'I',\n\t'\\u1E2E': 'I',\n\t'\\u1EC8': 'I',\n\t'\\u01CF': 'I',\n\t'\\u0208': 'I',\n\t'\\u020A': 'I',\n\t'\\u1ECA': 'I',\n\t'\\u012E': 'I',\n\t'\\u1E2C': 'I',\n\t'\\u0197': 'I',\n\t'\\u24BF': 'J',\n\t'\\uFF2A': 'J',\n\t'\\u0134': 'J',\n\t'\\u0248': 'J',\n\t'\\u24C0': 'K',\n\t'\\uFF2B': 'K',\n\t'\\u1E30': 'K',\n\t'\\u01E8': 'K',\n\t'\\u1E32': 'K',\n\t'\\u0136': 'K',\n\t'\\u1E34': 'K',\n\t'\\u0198': 'K',\n\t'\\u2C69': 'K',\n\t'\\uA740': 'K',\n\t'\\uA742': 'K',\n\t'\\uA744': 'K',\n\t'\\uA7A2': 'K',\n\t'\\u24C1': 'L',\n\t'\\uFF2C': 'L',\n\t'\\u013F': 'L',\n\t'\\u0139': 'L',\n\t'\\u013D': 'L',\n\t'\\u1E36': 'L',\n\t'\\u1E38': 'L',\n\t'\\u013B': 'L',\n\t'\\u1E3C': 'L',\n\t'\\u1E3A': 'L',\n\t'\\u0141': 'L',\n\t'\\u023D': 'L',\n\t'\\u2C62': 'L',\n\t'\\u2C60': 'L',\n\t'\\uA748': 'L',\n\t'\\uA746': 'L',\n\t'\\uA780': 'L',\n\t'\\u01C7': 'LJ',\n\t'\\u01C8': 'Lj',\n\t'\\u24C2': 'M',\n\t'\\uFF2D': 'M',\n\t'\\u1E3E': 'M',\n\t'\\u1E40': 'M',\n\t'\\u1E42': 'M',\n\t'\\u2C6E': 'M',\n\t'\\u019C': 'M',\n\t'\\u24C3': 'N',\n\t'\\uFF2E': 'N',\n\t'\\u01F8': 'N',\n\t'\\u0143': 'N',\n\t'\\u00D1': 'N',\n\t'\\u1E44': 'N',\n\t'\\u0147': 'N',\n\t'\\u1E46': 'N',\n\t'\\u0145': 'N',\n\t'\\u1E4A': 'N',\n\t'\\u1E48': 'N',\n\t'\\u0220': 'N',\n\t'\\u019D': 'N',\n\t'\\uA790': 'N',\n\t'\\uA7A4': 'N',\n\t'\\u01CA': 'NJ',\n\t'\\u01CB': 'Nj',\n\t'\\u24C4': 'O',\n\t'\\uFF2F': 'O',\n\t'\\u00D2': 'O',\n\t'\\u00D3': 'O',\n\t'\\u00D4': 'O',\n\t'\\u1ED2': 'O',\n\t'\\u1ED0': 'O',\n\t'\\u1ED6': 'O',\n\t'\\u1ED4': 'O',\n\t'\\u00D5': 'O',\n\t'\\u1E4C': 'O',\n\t'\\u022C': 'O',\n\t'\\u1E4E': 'O',\n\t'\\u014C': 'O',\n\t'\\u1E50': 'O',\n\t'\\u1E52': 'O',\n\t'\\u014E': 'O',\n\t'\\u022E': 'O',\n\t'\\u0230': 'O',\n\t'\\u00D6': 'O',\n\t'\\u022A': 'O',\n\t'\\u1ECE': 'O',\n\t'\\u0150': 'O',\n\t'\\u01D1': 'O',\n\t'\\u020C': 'O',\n\t'\\u020E': 'O',\n\t'\\u01A0': 'O',\n\t'\\u1EDC': 'O',\n\t'\\u1EDA': 'O',\n\t'\\u1EE0': 'O',\n\t'\\u1EDE': 'O',\n\t'\\u1EE2': 'O',\n\t'\\u1ECC': 'O',\n\t'\\u1ED8': 'O',\n\t'\\u01EA': 'O',\n\t'\\u01EC': 'O',\n\t'\\u00D8': 'O',\n\t'\\u01FE': 'O',\n\t'\\u0186': 'O',\n\t'\\u019F': 'O',\n\t'\\uA74A': 'O',\n\t'\\uA74C': 'O',\n\t'\\u01A2': 'OI',\n\t'\\uA74E': 'OO',\n\t'\\u0222': 'OU',\n\t'\\u24C5': 'P',\n\t'\\uFF30': 'P',\n\t'\\u1E54': 'P',\n\t'\\u1E56': 'P',\n\t'\\u01A4': 'P',\n\t'\\u2C63': 'P',\n\t'\\uA750': 'P',\n\t'\\uA752': 'P',\n\t'\\uA754': 'P',\n\t'\\u24C6': 'Q',\n\t'\\uFF31': 'Q',\n\t'\\uA756': 'Q',\n\t'\\uA758': 'Q',\n\t'\\u024A': 'Q',\n\t'\\u24C7': 'R',\n\t'\\uFF32': 'R',\n\t'\\u0154': 'R',\n\t'\\u1E58': 'R',\n\t'\\u0158': 'R',\n\t'\\u0210': 'R',\n\t'\\u0212': 'R',\n\t'\\u1E5A': 'R',\n\t'\\u1E5C': 'R',\n\t'\\u0156': 'R',\n\t'\\u1E5E': 'R',\n\t'\\u024C': 'R',\n\t'\\u2C64': 'R',\n\t'\\uA75A': 'R',\n\t'\\uA7A6': 'R',\n\t'\\uA782': 'R',\n\t'\\u24C8': 'S',\n\t'\\uFF33': 'S',\n\t'\\u1E9E': 'S',\n\t'\\u015A': 'S',\n\t'\\u1E64': 'S',\n\t'\\u015C': 'S',\n\t'\\u1E60': 'S',\n\t'\\u0160': 'S',\n\t'\\u1E66': 'S',\n\t'\\u1E62': 'S',\n\t'\\u1E68': 'S',\n\t'\\u0218': 'S',\n\t'\\u015E': 'S',\n\t'\\u2C7E': 'S',\n\t'\\uA7A8': 'S',\n\t'\\uA784': 'S',\n\t'\\u24C9': 'T',\n\t'\\uFF34': 'T',\n\t'\\u1E6A': 'T',\n\t'\\u0164': 'T',\n\t'\\u1E6C': 'T',\n\t'\\u021A': 'T',\n\t'\\u0162': 'T',\n\t'\\u1E70': 'T',\n\t'\\u1E6E': 'T',\n\t'\\u0166': 'T',\n\t'\\u01AC': 'T',\n\t'\\u01AE': 'T',\n\t'\\u023E': 'T',\n\t'\\uA786': 'T',\n\t'\\uA728': 'TZ',\n\t'\\u24CA': 'U',\n\t'\\uFF35': 'U',\n\t'\\u00D9': 'U',\n\t'\\u00DA': 'U',\n\t'\\u00DB': 'U',\n\t'\\u0168': 'U',\n\t'\\u1E78': 'U',\n\t'\\u016A': 'U',\n\t'\\u1E7A': 'U',\n\t'\\u016C': 'U',\n\t'\\u00DC': 'U',\n\t'\\u01DB': 'U',\n\t'\\u01D7': 'U',\n\t'\\u01D5': 'U',\n\t'\\u01D9': 'U',\n\t'\\u1EE6': 'U',\n\t'\\u016E': 'U',\n\t'\\u0170': 'U',\n\t'\\u01D3': 'U',\n\t'\\u0214': 'U',\n\t'\\u0216': 'U',\n\t'\\u01AF': 'U',\n\t'\\u1EEA': 'U',\n\t'\\u1EE8': 'U',\n\t'\\u1EEE': 'U',\n\t'\\u1EEC': 'U',\n\t'\\u1EF0': 'U',\n\t'\\u1EE4': 'U',\n\t'\\u1E72': 'U',\n\t'\\u0172': 'U',\n\t'\\u1E76': 'U',\n\t'\\u1E74': 'U',\n\t'\\u0244': 'U',\n\t'\\u24CB': 'V',\n\t'\\uFF36': 'V',\n\t'\\u1E7C': 'V',\n\t'\\u1E7E': 'V',\n\t'\\u01B2': 'V',\n\t'\\uA75E': 'V',\n\t'\\u0245': 'V',\n\t'\\uA760': 'VY',\n\t'\\u24CC': 'W',\n\t'\\uFF37': 'W',\n\t'\\u1E80': 'W',\n\t'\\u1E82': 'W',\n\t'\\u0174': 'W',\n\t'\\u1E86': 'W',\n\t'\\u1E84': 'W',\n\t'\\u1E88': 'W',\n\t'\\u2C72': 'W',\n\t'\\u24CD': 'X',\n\t'\\uFF38': 'X',\n\t'\\u1E8A': 'X',\n\t'\\u1E8C': 'X',\n\t'\\u24CE': 'Y',\n\t'\\uFF39': 'Y',\n\t'\\u1EF2': 'Y',\n\t'\\u00DD': 'Y',\n\t'\\u0176': 'Y',\n\t'\\u1EF8': 'Y',\n\t'\\u0232': 'Y',\n\t'\\u1E8E': 'Y',\n\t'\\u0178': 'Y',\n\t'\\u1EF6': 'Y',\n\t'\\u1EF4': 'Y',\n\t'\\u01B3': 'Y',\n\t'\\u024E': 'Y',\n\t'\\u1EFE': 'Y',\n\t'\\u24CF': 'Z',\n\t'\\uFF3A': 'Z',\n\t'\\u0179': 'Z',\n\t'\\u1E90': 'Z',\n\t'\\u017B': 'Z',\n\t'\\u017D': 'Z',\n\t'\\u1E92': 'Z',\n\t'\\u1E94': 'Z',\n\t'\\u01B5': 'Z',\n\t'\\u0224': 'Z',\n\t'\\u2C7F': 'Z',\n\t'\\u2C6B': 'Z',\n\t'\\uA762': 'Z',\n\t'\\u24D0': 'a',\n\t'\\uFF41': 'a',\n\t'\\u1E9A': 'a',\n\t'\\u00E0': 'a',\n\t'\\u00E1': 'a',\n\t'\\u00E2': 'a',\n\t'\\u1EA7': 'a',\n\t'\\u1EA5': 'a',\n\t'\\u1EAB': 'a',\n\t'\\u1EA9': 'a',\n\t'\\u00E3': 'a',\n\t'\\u0101': 'a',\n\t'\\u0103': 'a',\n\t'\\u1EB1': 'a',\n\t'\\u1EAF': 'a',\n\t'\\u1EB5': 'a',\n\t'\\u1EB3': 'a',\n\t'\\u0227': 'a',\n\t'\\u01E1': 'a',\n\t'\\u00E4': 'a',\n\t'\\u01DF': 'a',\n\t'\\u1EA3': 'a',\n\t'\\u00E5': 'a',\n\t'\\u01FB': 'a',\n\t'\\u01CE': 'a',\n\t'\\u0201': 'a',\n\t'\\u0203': 'a',\n\t'\\u1EA1': 'a',\n\t'\\u1EAD': 'a',\n\t'\\u1EB7': 'a',\n\t'\\u1E01': 'a',\n\t'\\u0105': 'a',\n\t'\\u2C65': 'a',\n\t'\\u0250': 'a',\n\t'\\uA733': 'aa',\n\t'\\u00E6': 'ae',\n\t'\\u01FD': 'ae',\n\t'\\u01E3': 'ae',\n\t'\\uA735': 'ao',\n\t'\\uA737': 'au',\n\t'\\uA739': 'av',\n\t'\\uA73B': 'av',\n\t'\\uA73D': 'ay',\n\t'\\u24D1': 'b',\n\t'\\uFF42': 'b',\n\t'\\u1E03': 'b',\n\t'\\u1E05': 'b',\n\t'\\u1E07': 'b',\n\t'\\u0180': 'b',\n\t'\\u0183': 'b',\n\t'\\u0253': 'b',\n\t'\\u24D2': 'c',\n\t'\\uFF43': 'c',\n\t'\\u0107': 'c',\n\t'\\u0109': 'c',\n\t'\\u010B': 'c',\n\t'\\u010D': 'c',\n\t'\\u00E7': 'c',\n\t'\\u1E09': 'c',\n\t'\\u0188': 'c',\n\t'\\u023C': 'c',\n\t'\\uA73F': 'c',\n\t'\\u2184': 'c',\n\t'\\u24D3': 'd',\n\t'\\uFF44': 'd',\n\t'\\u1E0B': 'd',\n\t'\\u010F': 'd',\n\t'\\u1E0D': 'd',\n\t'\\u1E11': 'd',\n\t'\\u1E13': 'd',\n\t'\\u1E0F': 'd',\n\t'\\u0111': 'd',\n\t'\\u018C': 'd',\n\t'\\u0256': 'd',\n\t'\\u0257': 'd',\n\t'\\uA77A': 'd',\n\t'\\u01F3': 'dz',\n\t'\\u01C6': 'dz',\n\t'\\u24D4': 'e',\n\t'\\uFF45': 'e',\n\t'\\u00E8': 'e',\n\t'\\u00E9': 'e',\n\t'\\u00EA': 'e',\n\t'\\u1EC1': 'e',\n\t'\\u1EBF': 'e',\n\t'\\u1EC5': 'e',\n\t'\\u1EC3': 'e',\n\t'\\u1EBD': 'e',\n\t'\\u0113': 'e',\n\t'\\u1E15': 'e',\n\t'\\u1E17': 'e',\n\t'\\u0115': 'e',\n\t'\\u0117': 'e',\n\t'\\u00EB': 'e',\n\t'\\u1EBB': 'e',\n\t'\\u011B': 'e',\n\t'\\u0205': 'e',\n\t'\\u0207': 'e',\n\t'\\u1EB9': 'e',\n\t'\\u1EC7': 'e',\n\t'\\u0229': 'e',\n\t'\\u1E1D': 'e',\n\t'\\u0119': 'e',\n\t'\\u1E19': 'e',\n\t'\\u1E1B': 'e',\n\t'\\u0247': 'e',\n\t'\\u025B': 'e',\n\t'\\u01DD': 'e',\n\t'\\u24D5': 'f',\n\t'\\uFF46': 'f',\n\t'\\u1E1F': 'f',\n\t'\\u0192': 'f',\n\t'\\uA77C': 'f',\n\t'\\u24D6': 'g',\n\t'\\uFF47': 'g',\n\t'\\u01F5': 'g',\n\t'\\u011D': 'g',\n\t'\\u1E21': 'g',\n\t'\\u011F': 'g',\n\t'\\u0121': 'g',\n\t'\\u01E7': 'g',\n\t'\\u0123': 'g',\n\t'\\u01E5': 'g',\n\t'\\u0260': 'g',\n\t'\\uA7A1': 'g',\n\t'\\u1D79': 'g',\n\t'\\uA77F': 'g',\n\t'\\u24D7': 'h',\n\t'\\uFF48': 'h',\n\t'\\u0125': 'h',\n\t'\\u1E23': 'h',\n\t'\\u1E27': 'h',\n\t'\\u021F': 'h',\n\t'\\u1E25': 'h',\n\t'\\u1E29': 'h',\n\t'\\u1E2B': 'h',\n\t'\\u1E96': 'h',\n\t'\\u0127': 'h',\n\t'\\u2C68': 'h',\n\t'\\u2C76': 'h',\n\t'\\u0265': 'h',\n\t'\\u0195': 'hv',\n\t'\\u24D8': 'i',\n\t'\\uFF49': 'i',\n\t'\\u00EC': 'i',\n\t'\\u00ED': 'i',\n\t'\\u00EE': 'i',\n\t'\\u0129': 'i',\n\t'\\u012B': 'i',\n\t'\\u012D': 'i',\n\t'\\u00EF': 'i',\n\t'\\u1E2F': 'i',\n\t'\\u1EC9': 'i',\n\t'\\u01D0': 'i',\n\t'\\u0209': 'i',\n\t'\\u020B': 'i',\n\t'\\u1ECB': 'i',\n\t'\\u012F': 'i',\n\t'\\u1E2D': 'i',\n\t'\\u0268': 'i',\n\t'\\u0131': 'i',\n\t'\\u24D9': 'j',\n\t'\\uFF4A': 'j',\n\t'\\u0135': 'j',\n\t'\\u01F0': 'j',\n\t'\\u0249': 'j',\n\t'\\u24DA': 'k',\n\t'\\uFF4B': 'k',\n\t'\\u1E31': 'k',\n\t'\\u01E9': 'k',\n\t'\\u1E33': 'k',\n\t'\\u0137': 'k',\n\t'\\u1E35': 'k',\n\t'\\u0199': 'k',\n\t'\\u2C6A': 'k',\n\t'\\uA741': 'k',\n\t'\\uA743': 'k',\n\t'\\uA745': 'k',\n\t'\\uA7A3': 'k',\n\t'\\u24DB': 'l',\n\t'\\uFF4C': 'l',\n\t'\\u0140': 'l',\n\t'\\u013A': 'l',\n\t'\\u013E': 'l',\n\t'\\u1E37': 'l',\n\t'\\u1E39': 'l',\n\t'\\u013C': 'l',\n\t'\\u1E3D': 'l',\n\t'\\u1E3B': 'l',\n\t'\\u017F': 'l',\n\t'\\u0142': 'l',\n\t'\\u019A': 'l',\n\t'\\u026B': 'l',\n\t'\\u2C61': 'l',\n\t'\\uA749': 'l',\n\t'\\uA781': 'l',\n\t'\\uA747': 'l',\n\t'\\u01C9': 'lj',\n\t'\\u24DC': 'm',\n\t'\\uFF4D': 'm',\n\t'\\u1E3F': 'm',\n\t'\\u1E41': 'm',\n\t'\\u1E43': 'm',\n\t'\\u0271': 'm',\n\t'\\u026F': 'm',\n\t'\\u24DD': 'n',\n\t'\\uFF4E': 'n',\n\t'\\u01F9': 'n',\n\t'\\u0144': 'n',\n\t'\\u00F1': 'n',\n\t'\\u1E45': 'n',\n\t'\\u0148': 'n',\n\t'\\u1E47': 'n',\n\t'\\u0146': 'n',\n\t'\\u1E4B': 'n',\n\t'\\u1E49': 'n',\n\t'\\u019E': 'n',\n\t'\\u0272': 'n',\n\t'\\u0149': 'n',\n\t'\\uA791': 'n',\n\t'\\uA7A5': 'n',\n\t'\\u01CC': 'nj',\n\t'\\u24DE': 'o',\n\t'\\uFF4F': 'o',\n\t'\\u00F2': 'o',\n\t'\\u00F3': 'o',\n\t'\\u00F4': 'o',\n\t'\\u1ED3': 'o',\n\t'\\u1ED1': 'o',\n\t'\\u1ED7': 'o',\n\t'\\u1ED5': 'o',\n\t'\\u00F5': 'o',\n\t'\\u1E4D': 'o',\n\t'\\u022D': 'o',\n\t'\\u1E4F': 'o',\n\t'\\u014D': 'o',\n\t'\\u1E51': 'o',\n\t'\\u1E53': 'o',\n\t'\\u014F': 'o',\n\t'\\u022F': 'o',\n\t'\\u0231': 'o',\n\t'\\u00F6': 'o',\n\t'\\u022B': 'o',\n\t'\\u1ECF': 'o',\n\t'\\u0151': 'o',\n\t'\\u01D2': 'o',\n\t'\\u020D': 'o',\n\t'\\u020F': 'o',\n\t'\\u01A1': 'o',\n\t'\\u1EDD': 'o',\n\t'\\u1EDB': 'o',\n\t'\\u1EE1': 'o',\n\t'\\u1EDF': 'o',\n\t'\\u1EE3': 'o',\n\t'\\u1ECD': 'o',\n\t'\\u1ED9': 'o',\n\t'\\u01EB': 'o',\n\t'\\u01ED': 'o',\n\t'\\u00F8': 'o',\n\t'\\u01FF': 'o',\n\t'\\u0254': 'o',\n\t'\\uA74B': 'o',\n\t'\\uA74D': 'o',\n\t'\\u0275': 'o',\n\t'\\u01A3': 'oi',\n\t'\\u0223': 'ou',\n\t'\\uA74F': 'oo',\n\t'\\u24DF': 'p',\n\t'\\uFF50': 'p',\n\t'\\u1E55': 'p',\n\t'\\u1E57': 'p',\n\t'\\u01A5': 'p',\n\t'\\u1D7D': 'p',\n\t'\\uA751': 'p',\n\t'\\uA753': 'p',\n\t'\\uA755': 'p',\n\t'\\u24E0': 'q',\n\t'\\uFF51': 'q',\n\t'\\u024B': 'q',\n\t'\\uA757': 'q',\n\t'\\uA759': 'q',\n\t'\\u24E1': 'r',\n\t'\\uFF52': 'r',\n\t'\\u0155': 'r',\n\t'\\u1E59': 'r',\n\t'\\u0159': 'r',\n\t'\\u0211': 'r',\n\t'\\u0213': 'r',\n\t'\\u1E5B': 'r',\n\t'\\u1E5D': 'r',\n\t'\\u0157': 'r',\n\t'\\u1E5F': 'r',\n\t'\\u024D': 'r',\n\t'\\u027D': 'r',\n\t'\\uA75B': 'r',\n\t'\\uA7A7': 'r',\n\t'\\uA783': 'r',\n\t'\\u24E2': 's',\n\t'\\uFF53': 's',\n\t'\\u00DF': 's',\n\t'\\u015B': 's',\n\t'\\u1E65': 's',\n\t'\\u015D': 's',\n\t'\\u1E61': 's',\n\t'\\u0161': 's',\n\t'\\u1E67': 's',\n\t'\\u1E63': 's',\n\t'\\u1E69': 's',\n\t'\\u0219': 's',\n\t'\\u015F': 's',\n\t'\\u023F': 's',\n\t'\\uA7A9': 's',\n\t'\\uA785': 's',\n\t'\\u1E9B': 's',\n\t'\\u24E3': 't',\n\t'\\uFF54': 't',\n\t'\\u1E6B': 't',\n\t'\\u1E97': 't',\n\t'\\u0165': 't',\n\t'\\u1E6D': 't',\n\t'\\u021B': 't',\n\t'\\u0163': 't',\n\t'\\u1E71': 't',\n\t'\\u1E6F': 't',\n\t'\\u0167': 't',\n\t'\\u01AD': 't',\n\t'\\u0288': 't',\n\t'\\u2C66': 't',\n\t'\\uA787': 't',\n\t'\\uA729': 'tz',\n\t'\\u24E4': 'u',\n\t'\\uFF55': 'u',\n\t'\\u00F9': 'u',\n\t'\\u00FA': 'u',\n\t'\\u00FB': 'u',\n\t'\\u0169': 'u',\n\t'\\u1E79': 'u',\n\t'\\u016B': 'u',\n\t'\\u1E7B': 'u',\n\t'\\u016D': 'u',\n\t'\\u00FC': 'u',\n\t'\\u01DC': 'u',\n\t'\\u01D8': 'u',\n\t'\\u01D6': 'u',\n\t'\\u01DA': 'u',\n\t'\\u1EE7': 'u',\n\t'\\u016F': 'u',\n\t'\\u0171': 'u',\n\t'\\u01D4': 'u',\n\t'\\u0215': 'u',\n\t'\\u0217': 'u',\n\t'\\u01B0': 'u',\n\t'\\u1EEB': 'u',\n\t'\\u1EE9': 'u',\n\t'\\u1EEF': 'u',\n\t'\\u1EED': 'u',\n\t'\\u1EF1': 'u',\n\t'\\u1EE5': 'u',\n\t'\\u1E73': 'u',\n\t'\\u0173': 'u',\n\t'\\u1E77': 'u',\n\t'\\u1E75': 'u',\n\t'\\u0289': 'u',\n\t'\\u24E5': 'v',\n\t'\\uFF56': 'v',\n\t'\\u1E7D': 'v',\n\t'\\u1E7F': 'v',\n\t'\\u028B': 'v',\n\t'\\uA75F': 'v',\n\t'\\u028C': 'v',\n\t'\\uA761': 'vy',\n\t'\\u24E6': 'w',\n\t'\\uFF57': 'w',\n\t'\\u1E81': 'w',\n\t'\\u1E83': 'w',\n\t'\\u0175': 'w',\n\t'\\u1E87': 'w',\n\t'\\u1E85': 'w',\n\t'\\u1E98': 'w',\n\t'\\u1E89': 'w',\n\t'\\u2C73': 'w',\n\t'\\u24E7': 'x',\n\t'\\uFF58': 'x',\n\t'\\u1E8B': 'x',\n\t'\\u1E8D': 'x',\n\t'\\u24E8': 'y',\n\t'\\uFF59': 'y',\n\t'\\u1EF3': 'y',\n\t'\\u00FD': 'y',\n\t'\\u0177': 'y',\n\t'\\u1EF9': 'y',\n\t'\\u0233': 'y',\n\t'\\u1E8F': 'y',\n\t'\\u00FF': 'y',\n\t'\\u1EF7': 'y',\n\t'\\u1E99': 'y',\n\t'\\u1EF5': 'y',\n\t'\\u01B4': 'y',\n\t'\\u024F': 'y',\n\t'\\u1EFF': 'y',\n\t'\\u24E9': 'z',\n\t'\\uFF5A': 'z',\n\t'\\u017A': 'z',\n\t'\\u1E91': 'z',\n\t'\\u017C': 'z',\n\t'\\u017E': 'z',\n\t'\\u1E93': 'z',\n\t'\\u1E95': 'z',\n\t'\\u01B6': 'z',\n\t'\\u0225': 'z',\n\t'\\u0240': 'z',\n\t'\\u2C6C': 'z',\n\t'\\uA763': 'z',\n\t'\\u0386': '\\u0391',\n\t'\\u0388': '\\u0395',\n\t'\\u0389': '\\u0397',\n\t'\\u038A': '\\u0399',\n\t'\\u03AA': '\\u0399',\n\t'\\u038C': '\\u039F',\n\t'\\u038E': '\\u03A5',\n\t'\\u03AB': '\\u03A5',\n\t'\\u038F': '\\u03A9',\n\t'\\u03AC': '\\u03B1',\n\t'\\u03AD': '\\u03B5',\n\t'\\u03AE': '\\u03B7',\n\t'\\u03AF': '\\u03B9',\n\t'\\u03CA': '\\u03B9',\n\t'\\u0390': '\\u03B9',\n\t'\\u03CC': '\\u03BF',\n\t'\\u03CD': '\\u03C5',\n\t'\\u03CB': '\\u03C5',\n\t'\\u03B0': '\\u03C5',\n\t'\\u03C9': '\\u03C9',\n\t'\\u03C2': '\\u03C3',\n};\n\nexport function stripSpecialChars(text: string): string {\n\tconst match = (a: string): string => diacritics[a] || a;\n\t// eslint-disable-next-line no-control-regex\n\treturn text.replace(/[^\\u0000-\\u007E]/g, match);\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { newId } from './id';\nimport { NgSelectComponent } from './ng-select.component';\nimport { NgOption } from './ng-select.types';\nimport * as searchHelper from './search-helper';\nimport { SelectionModel } from './selection-model';\nimport { isDefined, isFunction, isObject } from './value-utils';\n\ntype OptionGroups = Map<string | NgOption, NgOption[]>;\n\nexport class ItemsList {\n\tprivate _groups: OptionGroups;\n\n\tconstructor(\n\t\tprivate _ngSelect: NgSelectComponent,\n\t\tprivate _selectionModel: SelectionModel,\n\t) {}\n\n\tprivate _items: NgOption[] = [];\n\n\tget items(): NgOption[] {\n\t\treturn this._items;\n\t}\n\n\tprivate _filteredItems: NgOption[] = [];\n\n\tget filteredItems(): NgOption[] {\n\t\treturn this._filteredItems;\n\t}\n\n\tprivate _markedIndex = -1;\n\n\tget markedIndex(): number {\n\t\treturn this._markedIndex;\n\t}\n\n\tget selectedItems() {\n\t\treturn this._selectionModel.value;\n\t}\n\n\tget markedItem(): NgOption {\n\t\treturn this._filteredItems[this._markedIndex];\n\t}\n\n\tget noItemsToSelect(): boolean {\n\t\treturn this._ngSelect.hideSelected() && this._items.length === this.selectedItems.length;\n\t}\n\n\tget maxItemsSelected(): boolean {\n\t\treturn this._ngSelect.multiple() && this._ngSelect.maxSelectedItems() <= this.selectedItems.length;\n\t}\n\n\tget lastSelectedItem() {\n\t\tlet i = this.selectedItems.length - 1;\n\t\tfor (; i >= 0; i--) {\n\t\t\tconst item = this.selectedItems[i];\n\t\t\tif (!item.disabled) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tsetItems(items: readonly any[]) {\n\t\tthis._items = items.map((item, index) => this.mapItem(item, index));\n\t\tconst groupBy = this._ngSelect.groupBy();\n\t\tif (groupBy) {\n\t\t\tthis._groups = this._groupBy(this._items, groupBy);\n\t\t\tthis._items = this._flatten(this._groups);\n\t\t} else {\n\t\t\tthis._groups = new Map();\n\t\t\tthis._groups.set(undefined, this._items);\n\t\t}\n\t\tthis._filteredItems = [...this._items];\n\t}\n\n\tselect(item: NgOption) {\n\t\tif (item.selected || this.maxItemsSelected) {\n\t\t\treturn;\n\t\t}\n\t\tconst multiple = this._ngSelect.multiple();\n\t\tif (!multiple) {\n\t\t\tthis.clearSelected(false);\n\t\t}\n\n\t\tthis._selectionModel.select(item, multiple, this._ngSelect.selectableGroupAsModel());\n\t\tif (this._ngSelect.hideSelected()) {\n\t\t\tthis._hideSelected(item);\n\t\t}\n\t}\n\n\tunselect(item: NgOption) {\n\t\tif (!item.selected) {\n\t\t\treturn;\n\t\t}\n\t\tconst multiple = this._ngSelect.multiple();\n\t\tthis._selectionModel.unselect(item, multiple);\n\t\tif (this._ngSelect.hideSelected() && isDefined(item.index) && multiple) {\n\t\t\tthis._showSelected(item);\n\t\t}\n\t}\n\n\tfindItem(value: any): NgOption {\n\t\tlet findBy: (item: NgOption) => boolean;\n\t\tif (this._ngSelect.compareWith()) {\n\t\t\tfindBy = (item) => this._ngSelect.compareWith()(item.value, value);\n\t\t} else if (this._ngSelect.bindValue()) {\n\t\t\tfindBy = (item) => !item.children && this.resolveNested(item.value, this._ngSelect.bindValue()) === value;\n\t\t} else {\n\t\t\tfindBy = (item) =>\n\t\t\t\titem.value === value || (!item.children && item.label && item.label === this.resolveNested(value, this._ngSelect.bindLabel()));\n\t\t}\n\t\treturn this._items.find((item) => findBy(item));\n\t}\n\n\taddItem(item: any) {\n\t\tconst option = this.mapItem(item, this._items.length);\n\t\tthis._items.push(option);\n\t\tthis._filteredItems.push(option);\n\t\treturn option;\n\t}\n\n\tclearSelected(keepDisabled: boolean) {\n\t\tthis._selectionModel.clear(keepDisabled);\n\t\tthis._items.forEach((item) => {\n\t\t\titem.selected = keepDisabled && item.selected && item.disabled;\n\t\t\titem.marked = false;\n\t\t});\n\t\tif (this._ngSelect.hideSelected()) {\n\t\t\tthis.resetFilteredItems();\n\t\t}\n\t}\n\n\tfindByLabel(term: string) {\n\t\tterm = searchHelper.stripSpecialChars(term).toLocaleLowerCase();\n\t\treturn this.filteredItems.find((item) => {\n\t\t\tconst label = searchHelper.stripSpecialChars(item.label).toLocaleLowerCase();\n\t\t\treturn label.substr(0, term.length) === term;\n\t\t});\n\t}\n\n\tfilter(term: string): void {\n\t\tif (!term) {\n\t\t\tthis.resetFilteredItems();\n\t\t\treturn;\n\t\t}\n\n\t\tthis._filteredItems = [];\n\t\tterm = this._ngSelect.searchFn() ? term : searchHelper.stripSpecialChars(term).toLocaleLowerCase();\n\t\tconst match = this._ngSelect.searchFn() || this._defaultSearchFn;\n\t\tconst hideSelected = this._ngSelect.hideSelected();\n\n\t\tfor (const key of Array.from(this._groups.keys())) {\n\t\t\tconst matchedItems = [];\n\t\t\tfor (const item of this._groups.get(key)) {\n\t\t\t\tif (hideSelected && ((item.parent && item.parent.selected) || item.selected)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst searchItem = this._ngSelect.searchFn() ? item.value : item;\n\t\t\t\tif (match(term, searchItem)) {\n\t\t\t\t\tmatchedItems.push(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (matchedItems.length > 0) {\n\t\t\t\tconst [last] = matchedItems.slice(-1);\n\t\t\t\tif (last.parent) {\n\t\t\t\t\tconst head = this._items.find((x) => x === last.parent);\n\t\t\t\t\tthis._filteredItems.push(head);\n\t\t\t\t}\n\t\t\t\tthis._filteredItems.push(...matchedItems);\n\t\t\t}\n\t\t}\n\t}\n\n\tresetFilteredItems() {\n\t\tif (this._filteredItems.length === this._items.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._ngSelect.hideSelected() && this.selectedItems.length > 0) {\n\t\t\tthis._filteredItems = this._items.filter((x) => !x.selected);\n\t\t} else {\n\t\t\tthis._filteredItems = this._items;\n\t\t}\n\t}\n\n\tunmarkItem() {\n\t\tthis._markedIndex = -1;\n\t}\n\n\tmarkNextItem() {\n\t\tthis._stepToItem(+1);\n\t}\n\n\tmarkPreviousItem() {\n\t\tthis._stepToItem(-1);\n\t}\n\n\tmarkItem(item: NgOption) {\n\t\tthis._markedIndex = this._filteredItems.indexOf(item);\n\t}\n\n\tmarkSelectedOrDefault(markDefault?: boolean) {\n\t\tif (this._filteredItems.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lastMarkedIndex = this._getLastMarkedIndex();\n\t\tif (lastMarkedIndex > -1) {\n\t\t\tthis._markedIndex = lastMarkedIndex;\n\t\t} else {\n\t\t\tthis._markedIndex = markDefault ? this.filteredItems.findIndex((x) => !x.disabled) : -1;\n\t\t}\n\t}\n\n\tresolveNested(option: any, key: string): any {\n\t\tif (!isObject(option)) {\n\t\t\treturn option;\n\t\t}\n\t\tif (key.indexOf('.') === -1) {\n\t\t\treturn option[key];\n\t\t} else {\n\t\t\tconst keys: string[] = key.split('.');\n\t\t\tlet value = option;\n\t\t\tfor (let i = 0, len = keys.length; i < len; ++i) {\n\t\t\t\tif (value == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tvalue = value[keys[i]];\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t}\n\n\tmapItem(item: any, index: number): NgOption {\n\t\tconst hasNgOptionLabel = isObject(item) && '$ngOptionLabel' in item;\n\t\tconst hasNgOptionValue = isObject(item) && '$ngOptionValue' in item;\n\t\tconst label = hasNgOptionLabel ? item.$ngOptionLabel : this.resolveNested(item, this._ngSelect.bindLabel());\n\t\tconst value = hasNgOptionValue ? item.$ngOptionValue : item;\n\t\treturn {\n\t\t\tindex,\n\t\t\tlabel: isDefined(label) ? label.toString() : '',\n\t\t\tvalue,\n\t\t\tdisabled: item && item.disabled ? item.disabled : false,\n\t\t\thtmlId: `${this._ngSelect.dropdownId}-${index}`,\n\t\t};\n\t}\n\n\tmapSelectedItems() {\n\t\tconst multiple = this._ngSelect.multiple();\n\t\tfor (const selected of this.selectedItems) {\n\t\t\tconst bindValue = this._ngSelect.bindValue();\n\t\t\tconst value = bindValue ? this.resolveNested(selected.value, bindValue) : selected.value;\n\t\t\tconst valueFound = isDefined(value);\n\t\t\tlet item = valueFound ? this.findItem(value) : null;\n\n\t\t\tif (!item && !valueFound && this._ngSelect.compareWith()) {\n\t\t\t\titem = this._items.find((item) => this._ngSelect.compareWith()(item.value, selected.value));\n\t\t\t}\n\n\t\t\tthis._selectionModel.unselect(selected, multiple);\n\t\t\tthis._selectionModel.select(item || selected, multiple, this._ngSelect.selectableGroupAsModel());\n\t\t}\n\n\t\tif (this._ngSelect.hideSelected()) {\n\t\t\tthis._filteredItems = this.filteredItems.filter((x) => this.selectedItems.indexOf(x) === -1);\n\t\t}\n\t}\n\n\tprivate _showSelected(item: NgOption) {\n\t\tthis._filteredItems.push(item);\n\t\tif (item.parent) {\n\t\t\tconst parent = item.parent;\n\t\t\tconst parentExists = this._filteredItems.find((x) => x === parent);\n\t\t\tif (!parentExists) {\n\t\t\t\tthis._filteredItems.push(parent);\n\t\t\t}\n\t\t} else if (item.children) {\n\t\t\tfor (const child of item.children) {\n\t\t\t\tchild.selected = false;\n\t\t\t\tthis._filteredItems.push(child);\n\t\t\t}\n\t\t}\n\t\tthis._filteredItems = [...this._filteredItems.sort((a, b) => a.index - b.index)];\n\t}\n\n\tprivate _hideSelected(item: NgOption) {\n\t\tthis._filteredItems = this._filteredItems.filter((x) => x !== item);\n\t\tif (item.parent) {\n\t\t\tconst children = item.parent.children;\n\t\t\tif (children.every((x) => x.selected)) {\n\t\t\t\tthis._filteredItems = this._filteredItems.filter((x) => x !== item.parent);\n\t\t\t}\n\t\t} else if (item.children) {\n\t\t\tthis._filteredItems = this.filteredItems.filter((x) => x.parent !== item);\n\t\t}\n\t}\n\n\tprivate _defaultSearchFn(search: string, opt: NgOption) {\n\t\tconst label = searchHelper.stripSpecialChars(opt.label).toLocaleLowerCase();\n\t\treturn label.indexOf(search) > -1;\n\t}\n\n\tprivate _getNextItemIndex(steps: number) {\n\t\tif (steps > 0) {\n\t\t\treturn this._markedIndex >= this._filteredItems.length - 1 ? 0 : this._markedIndex + 1;\n\t\t}\n\t\treturn this._markedIndex <= 0 ? this._filteredItems.length - 1 : this._markedIndex - 1;\n\t}\n\n\tprivate _stepToItem(steps: number) {\n\t\tif (this._filteredItems.length === 0 || this._filteredItems.every((x) => x.disabled)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._markedIndex = this._getNextItemIndex(steps);\n\t\tif (this.markedItem.disabled) {\n\t\t\tthis._stepToItem(steps);\n\t\t}\n\t}\n\n\tprivate _getLastMarkedIndex() {\n\t\tif (this._ngSelect.hideSelected()) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif (this._markedIndex > -1 && this.markedItem === undefined) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst selectedIndex = this._filteredItems.indexOf(this.lastSelectedItem);\n\t\tif (this.lastSelectedItem && selectedIndex < 0) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn Math.max(this.markedIndex, selectedIndex);\n\t}\n\n\tprivate _groupBy(items: NgOption[], prop: string | ((value: any) => any)): OptionGroups {\n\t\tconst groups = new Map<string | NgOption, NgOption[]>();\n\t\tif (items.length === 0) {\n\t\t\treturn groups;\n\t\t}\n\n\t\t// Check if items are already grouped by given key.\n\t\tconst firstValue = items[0].value;\n\t\tif (firstValue != null && Array.isArray(firstValue[<string>prop])) {\n\t\t\tfor (const item of items) {\n\t\t\t\tconst children = (item.value?.[<string>prop] || []).map((x, index) => this.mapItem(x, index));\n\t\t\t\tgroups.set(item, children);\n\t\t\t}\n\t\t\treturn groups;\n\t\t}\n\n\t\tconst isFnKey = isFunction(this._ngSelect.groupBy());\n\t\tconst keyFn = (item: NgOption) => {\n\t\t\tconst key = isFnKey ? (<(value: any) => any>prop)(item.value) : item.value?.[<string>prop];\n\t\t\treturn isDefined(key) ? key : undefined;\n\t\t};\n\n\t\t// Group items by key.\n\t\tfor (const item of items) {\n\t\t\tconst key = keyFn(item);\n\t\t\tconst group = groups.get(key);\n\t\t\tif (group) {\n\t\t\t\tgroup.push(item);\n\t\t\t} else {\n\t\t\t\tgroups.set(key, [item]);\n\t\t\t}\n\t\t}\n\t\treturn groups;\n\t}\n\n\tprivate _flatten(groups: OptionGroups) {\n\t\tconst isGroupByFn = isFunction(this._ngSelect.groupBy());\n\t\tconst items = [];\n\t\tfor (const key of Array.from(groups.keys())) {\n\t\t\tlet i = items.length;\n\t\t\tif (key === undefined) {\n\t\t\t\tconst withoutGroup = groups.get(undefined) || [];\n\t\t\t\titems.push(\n\t\t\t\t\t...withoutGroup.map((x) => {\n\t\t\t\t\t\tx.index = i++;\n\t\t\t\t\t\treturn x;\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst isObjectKey = isObject(key);\n\t\t\tconst parent: NgOption = {\n\t\t\t\tlabel: isObjectKey ? '' : String(key),\n\t\t\t\tchildren: undefined,\n\t\t\t\tparent: null,\n\t\t\t\tindex: i++,\n\t\t\t\tdisabled: !this._ngSelect.selectableGroup(),\n\t\t\t\thtmlId: newId(),\n\t\t\t};\n\t\t\tconst groupKey = isGroupByFn ? this._ngSelect.bindLabel() : <string>this._ngSelect.groupBy();\n\t\t\tconst groupValue =\n\t\t\t\tthis._ngSelect.groupValue() ||\n\t\t\t\t(() => {\n\t\t\t\t\tif (isObjectKey) {\n\t\t\t\t\t\treturn (<NgOption>key).value;\n\t\t\t\t\t}\n\t\t\t\t\treturn { [groupKey]: key };\n\t\t\t\t});\n\t\t\tconst children = groups.get(key).map((x) => {\n\t\t\t\tx.parent = parent;\n\t\t\t\tx.children = undefined;\n\t\t\t\tx.index = i++;\n\t\t\t\treturn x;\n\t\t\t});\n\t\t\tparent.children = children;\n\t\t\tparent.value = groupValue(\n\t\t\t\tkey,\n\t\t\t\tchildren.map((x) => x.value),\n\t\t\t);\n\t\t\titems.push(parent);\n\t\t\titems.push(...children);\n\t\t}\n\t\treturn items;\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { Injectable } from '@angular/core';\nexport interface ItemsRangeResult {\n\tscrollHeight: number;\n\ttopPadding: number;\n\tstart: number;\n\tend: number;\n}\n\nexport interface PanelDimensions {\n\titemHeight: number;\n\tpanelHeight: number;\n\titemsPerViewport: number;\n}\n\n@Injectable()\nexport class NgDropdownPanelService {\n\tprivate _dimensions: PanelDimensions = {\n\t\titemHeight: 0,\n\t\tpanelHeight: 0,\n\t\titemsPerViewport: 0,\n\t};\n\n\tget dimensions() {\n\t\treturn this._dimensions;\n\t}\n\n\tcalculateItems(scrollPos: number, itemsLength: number, buffer: number): ItemsRangeResult {\n\t\tconst d = this._dimensions;\n\t\tconst scrollHeight = d.itemHeight * itemsLength;\n\n\t\tconst scrollTop = Math.max(0, scrollPos);\n\t\tconst indexByScrollTop = (scrollTop / scrollHeight) * itemsLength;\n\t\tlet end = Math.min(itemsLength, Math.ceil(indexByScrollTop) + (d.itemsPerViewport + 1));\n\n\t\tconst maxStartEnd = end;\n\t\tconst maxStart = Math.max(0, maxStartEnd - d.itemsPerViewport);\n\t\tlet start = Math.min(maxStart, Math.floor(indexByScrollTop));\n\n\t\tlet topPadding = d.itemHeight * Math.ceil(start) - d.itemHeight * Math.min(start, buffer);\n\t\ttopPadding = !isNaN(topPadding) ? topPadding : 0;\n\t\tstart = !isNaN(start) ? start : -1;\n\t\tend = !isNaN(end) ? end : -1;\n\t\tstart -= buffer;\n\t\tstart = Math.max(0, start);\n\t\tend += buffer;\n\t\tend = Math.min(itemsLength, end);\n\n\t\treturn {\n\t\t\ttopPadding,\n\t\t\tscrollHeight,\n\t\t\tstart,\n\t\t\tend,\n\t\t};\n\t}\n\n\tsetDimensions(itemHeight: number, panelHeight: number) {\n\t\tconst itemsPerViewport = Math.max(1, Math.floor(panelHeight / itemHeight));\n\t\tthis._dimensions = {\n\t\t\titemHeight,\n\t\t\tpanelHeight,\n\t\t\titemsPerViewport,\n\t\t};\n\t}\n\n\tgetScrollTo(itemTop: number, itemHeight: number, lastScroll: number) {\n\t\tconst { panelHeight } = this.dimensions;\n\t\tconst itemBottom = itemTop + itemHeight;\n\t\tconst top = lastScroll;\n\t\tconst bottom = top + panelHeight;\n\n\t\tif (panelHeight >= itemBottom && lastScroll === itemTop) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (itemBottom > bottom) {\n\t\t\treturn top + itemBottom - bottom;\n\t\t} else if (itemTop <= top) {\n\t\t\treturn itemTop;\n\t\t}\n\n\t\treturn null;\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tNgZone,\n\tOnChanges,\n\tOnInit,\n\toutput,\n\tRenderer2,\n\tSimpleChanges,\n\tTemplateRef,\n\tviewChild,\n\tViewEncapsulation,\n} from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { animationFrameScheduler, asapScheduler, fromEvent } from 'rxjs';\nimport { auditTime } from 'rxjs/operators';\nimport { NgDropdownPanelService, PanelDimensions } from './ng-dropdown-panel.service';\n\nimport { DropdownPosition, NgOption } from './ng-select.types';\nimport { isDefined } from './value-utils';\n\nconst CSS_POSITIONS: readonly string[] = ['top', 'right', 'bottom', 'left'];\nconst SCROLL_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? animationFrameScheduler : asapScheduler;\n\n@Component({\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\tselector: 'ng-dropdown-panel',\n\ttemplate: `\n\t\t@if (headerTemplate()) {\n\t\t\t<div class=\"ng-dropdown-header\">\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"headerTemplate()\" [ngTemplateOutletContext]=\"{ searchTerm: filterValue() }\" />\n\t\t\t</div>\n\t\t}\n\t\t<div #scroll role=\"listbox\" class=\"ng-dropdown-panel-items scroll-host\" [attr.aria-label]=\"ariaLabelDropdown()\">\n\t\t\t<div #padding [class.total-padding]=\"virtualScroll()\"></div>\n\t\t\t<div #content [class.scrollable-content]=\"virtualScroll() && items().length\">\n\t\t\t\t<ng-content />\n\t\t\t</div>\n\t\t</div>\n\t\t@if (footerTemplate()) {\n\t\t\t<div class=\"ng-dropdown-footer\">\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"footerTemplate()\" [ngTemplateOutletContext]=\"{ searchTerm: filterValue() }\" />\n\t\t\t</div>\n\t\t}\n\t`,\n\timports: [NgTemplateOutlet],\n})\nexport class NgDropdownPanelComponent implements OnInit, OnChanges {\n\treadonly items = input<NgOption[]>([]);\n\treadonly showAddTag = input(false, { transform: booleanAttribute });\n\treadonly markedItem = input<NgOption>(undefined);\n\treadonly position = input<DropdownPosition>('auto');\n\treadonly appendTo = input<string>(undefined);\n\treadonly bufferAmount = input<number>(undefined);\n\treadonly virtualScroll = input(false, { transform: booleanAttribute });\n\treadonly headerTemplate = input<TemplateRef<any> | undefined>(undefined);\n\treadonly footerTemplate = input<TemplateRef<any> | undefined>(undefined);\n\treadonly filterValue = input<string>(null);\n\treadonly ariaLabelDropdown = input<string | null>(null);\n\t/**\n\t * Which DOM event to listen to for outside click detection\n\t */\n\treadonly outsideClickEvent = input<'click' | 'mousedown'>('click');\n\treadonly popover = input(false, { transform: booleanAttribute });\n\treadonly update = output<any[]>();\n\treadonly scroll = output<{\n\t\tstart: number;\n\t\tend: number;\n\t}>();\n\treadonly scrollToEnd = output<void>();\n\treadonly outsideClick = output<void>();\n\tprivate _renderer = inject(Renderer2);\n\tprivate _zone = inject(NgZone);\n\tprivate _panelService = inject(NgDropdownPanelService);\n\tprivate _document = inject(DOCUMENT, { optional: true })!;\n\tprivate _destroyRef = inject(DestroyRef);\n\tprivate _dropdown = inject(ElementRef<HTMLElement>).nativeElement;\n\tprivate readonly contentElementRef = viewChild('content', { read: ElementRef });\n\tprivate readonly scrollElementRef = viewChild('scroll', { read: ElementRef });\n\tprivate readonly paddingElementRef = viewChild('padding', { read: ElementRef });\n\n\tprivate readonly _virtualPadding = computed(() => this.paddingElementRef()?.nativeElement);\n\tprivate readonly _scrollablePanel = computed(() => this.scrollElementRef()?.nativeElement);\n\tprivate readonly _contentPanel = computed(() => this.contentElementRef()?.nativeElement);\n\n\tprivate _select: HTMLElement | undefined;\n\tprivate _parent: HTMLElement;\n\tprivate _scrollToEndFired = false;\n\tprivate _updateScrollHeight = false;\n\tprivate _lastScrollPosition = 0;\n\n\tconstructor() {\n\t\tthis._destroyRef.onDestroy(() => {\n\t\t\tif (this.appendTo()) {\n\t\t\t\tthis._renderer.removeChild(this._dropdown.parentNode, this._dropdown);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _currentPosition: DropdownPosition;\n\n\tget currentPosition(): DropdownPosition {\n\t\treturn this._currentPosition;\n\t}\n\n\tprivate _itemsLength: number;\n\n\tprivate get itemsLength() {\n\t\treturn this._itemsLength;\n\t}\n\n\tprivate set itemsLength(value: number) {\n\t\tif (value !== this._itemsLength) {\n\t\t\tthis._itemsLength = value;\n\t\t\tthis._onItemsLengthChanged();\n\t\t}\n\t}\n\n\tprivate get _startOffset() {\n\t\tif (this.markedItem()) {\n\t\t\tconst { itemHeight, panelHeight } = this._panelService.dimensions;\n\t\t\tconst offset = this.markedItem().index * itemHeight;\n\t\t\treturn panelHeight > offset ? 0 : offset;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tngOnInit() {\n\t\tthis._select = this._dropdown.parentElement;\n\t\tthis._handleScroll();\n\t\tthis._handleOutsideClick();\n\t\tthis._appendDropdown();\n\t\tthis._setupMousedownListener();\n\t\tthis._handleWindowScroll();\n\t\tthis._showPopoverIfNeeded();\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (changes.items) {\n\t\t\tconst change = changes.items;\n\t\t\tthis._onItemsOrShowAddTagChange(change.currentValue, this.showAddTag(), change.firstChange);\n\t\t}\n\t\tif (changes.showAddTag) {\n\t\t\tconst change = changes.showAddTag;\n\t\t\tthis._onItemsOrShowAddTagChange(this.items(), change.currentValue, change.firstChange);\n\t\t}\n\t}\n\n\tscrollTo(option: NgOption, startFromOption = false) {\n\t\tif (!option) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst index = this.items().indexOf(option);\n\t\tif (index < 0 || index >= this.itemsLength) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet scrollTo;\n\t\tif (this.virtualScroll()) {\n\t\t\tconst itemHeight = this._panelService.dimensions.itemHeight;\n\t\t\tscrollTo = this._panelService.getScrollTo(index * itemHeight, itemHeight, this._lastScrollPosition);\n\t\t} else {\n\t\t\tconst item: HTMLElement = this._dropdown.querySelector(`#${option.htmlId}`);\n\t\t\tconst lastScroll = startFromOption ? item.offsetTop : this._lastScrollPosition;\n\t\t\tscrollTo = this._panelService.getScrollTo(item.offsetTop, item.clientHeight, lastScroll);\n\t\t}\n\n\t\tif (isDefined(scrollTo)) {\n\t\t\tthis._scrollablePanel().scrollTop = scrollTo;\n\t\t}\n\t}\n\n\tscrollToTag() {\n\t\tconst panel = this._scrollablePanel();\n\t\tpanel.scrollTop = panel.scrollHeight - panel.clientHeight;\n\t}\n\n\tadjustPosition() {\n\t\tthis._updateYPosition();\n\t}\n\n\tprivate _handleDropdownPosition() {\n\t\tthis._currentPosition = this._calculateCurrentPosition(this._dropdown);\n\t\tif (CSS_POSITIONS.includes(this._currentPosition)) {\n\t\t\tthis._updateDropdownClass(this._currentPosition);\n\t\t} else {\n\t\t\tthis._updateDropdownClass('bottom');\n\t\t}\n\n\t\tif (this.appendTo() || this.popover()) {\n\t\t\tthis._updateYPosition();\n\t\t}\n\n\t\tthis._dropdown.style.opacity = '1';\n\t}\n\n\tprivate _updateDropdownClass(currentPosition: string) {\n\t\tCSS_POSITIONS.forEach((position) => {\n\t\t\tconst REMOVE_CSS_CLASS = `ng-select-${position}`;\n\t\t\tthis._renderer.removeClass(this._dropdown, REMOVE_CSS_CLASS);\n\t\t\tthis._renderer.removeClass(this._select, REMOVE_CSS_CLASS);\n\t\t});\n\n\t\tconst ADD_CSS_CLASS = `ng-select-${currentPosition}`;\n\t\tthis._renderer.addClass(this._dropdown, ADD_CSS_CLASS);\n\t\tthis._renderer.addClass(this._select, ADD_CSS_CLASS);\n\t}\n\n\tprivate _handleScroll() {\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tconst scrollablePanel = this._scrollablePanel();\n\t\t\tif (!scrollablePanel) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfromEvent(scrollablePanel, 'scroll')\n\t\t\t\t.pipe(takeUntilDestroyed(this._destroyRef), auditTime(0, SCROLL_SCHEDULER))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tif (scrollablePanel && 'scrollTop' in scrollablePanel) {\n\t\t\t\t\t\tthis._onContentScrolled(scrollablePanel.scrollTop);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t});\n\t}\n\n\tprivate _handleOutsideClick() {\n\t\tif (!this._document) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tfromEvent(this._document, this.outsideClickEvent(), { capture: true })\n\t\t\t\t.pipe(takeUntilDestroyed(this._destroyRef))\n\t\t\t\t.subscribe(($event) => this._checkToClose($event));\n\t\t});\n\t}\n\n\tprivate _checkToClose($event: any) {\n\t\tif (this._select.contains($event.target) || this._dropdown.contains($event.target)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst path = $event.path || ($event.composedPath && $event.composedPath());\n\t\tif ($event.target && $event.target.shadowRoot && path && path[0] && this._select.contains(path[0])) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zone.run(() => this.outsideClick.emit());\n\t}\n\n\tprivate _onItemsOrShowAddTagChange(items: NgOption[] = [], showAddTag: boolean, firstChange: boolean) {\n\t\tthis._scrollToEndFired = false;\n\t\tthis.itemsLength = items.length;\n\t\tif (showAddTag && items.length) {\n\t\t\tthis.itemsLength++;\n\t\t}\n\n\t\tif (this.virtualScroll()) {\n\t\t\tthis._updateItemsRange(firstChange);\n\t\t} else {\n\t\t\tthis._setVirtualHeight();\n\t\t\tthis._updateItems(firstChange);\n\t\t}\n\t}\n\n\tprivate _updateItems(firstChange: boolean) {\n\t\tthis.update.emit(this.items());\n\t\tif (firstChange === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tPromise.resolve().then(() => {\n\t\t\t\tconst panelHeight = this._scrollablePanel().clientHeight;\n\t\t\t\tthis._panelService.setDimensions(0, panelHeight);\n\t\t\t\tthis._handleDropdownPosition();\n\t\t\t\tthis.scrollTo(this.markedItem(), firstChange);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate _updateItemsRange(firstChange: boolean) {\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tthis._measureDimensions().then(() => {\n\t\t\t\tif (firstChange) {\n\t\t\t\t\tthis._renderItemsRange(this._startOffset);\n\t\t\t\t\tthis._handleDropdownPosition();\n\t\t\t\t} else {\n\t\t\t\t\tthis._renderItemsRange();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate _onContentScrolled(scrollTop: number) {\n\t\tif (this.virtualScroll()) {\n\t\t\tthis._renderItemsRange(scrollTop);\n\t\t}\n\t\tthis._lastScrollPosition = scrollTop;\n\t\tthis._fireScrollToEnd(scrollTop);\n\t}\n\n\tprivate _updateVirtualHeight(height: number) {\n\t\tif (this._updateScrollHeight) {\n\t\t\tthis._virtualPadding().style.height = `${height}px`;\n\t\t\tthis._updateScrollHeight = false;\n\t\t}\n\t}\n\n\tprivate _setVirtualHeight() {\n\t\tif (!this._virtualPadding()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._virtualPadding().style.height = `0px`;\n\t}\n\n\tprivate _onItemsLengthChanged() {\n\t\tthis._updateScrollHeight = true;\n\t}\n\n\tprivate _renderItemsRange(scrollTop = null) {\n\t\tif (scrollTop && this._lastScrollPosition === scrollTop) {\n\t\t\treturn;\n\t\t}\n\n\t\tscrollTop = scrollTop || this._scrollablePanel().scrollTop;\n\t\tconst range = this._panelService.calculateItems(scrollTop, this.itemsLength, this.bufferAmount());\n\t\tthis._updateVirtualHeight(range.scrollHeight);\n\t\tthis._contentPanel().style.transform = `translateY(${range.topPadding}px)`;\n\n\t\tthis._zone.run(() => {\n\t\t\tthis.update.emit(this.items().slice(range.start, range.end));\n\t\t\tthis.scroll.emit({ start: range.start, end: range.end });\n\t\t});\n\n\t\tif (isDefined(scrollTop) && this._lastScrollPosition === 0) {\n\t\t\tthis._scrollablePanel().scrollTop = scrollTop;\n\t\t\tthis._lastScrollPosition = scrollTop;\n\t\t}\n\t}\n\n\tprivate _measureDimensions(): Promise<PanelDimensions> {\n\t\tif (this._panelService.dimensions.itemHeight > 0 || this.itemsLength === 0) {\n\t\t\treturn Promise.resolve(this._panelService.dimensions);\n\t\t}\n\n\t\tconst [first] = this.items();\n\t\tthis.update.emit([first]);\n\n\t\treturn Promise.resolve().then(() => {\n\t\t\tconst option = this._dropdown.querySelector(`#${first.htmlId}`);\n\t\t\tconst optionHeight = option.clientHeight;\n\t\t\tthis._virtualPadding().style.height = `${optionHeight * this.itemsLength}px`;\n\t\t\tconst panelHeight = this._scrollablePanel().clientHeight;\n\t\t\tthis._panelService.setDimensions(optionHeight, panelHeight);\n\n\t\t\treturn this._panelService.dimensions;\n\t\t});\n\t}\n\n\tprivate _fireScrollToEnd(scrollTop: number) {\n\t\tif (this._scrollToEndFired || scrollTop === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst padding = this.virtualScroll() ? this._virtualPadding() : this._contentPanel();\n\n\t\tif (scrollTop + this._dropdown.clientHeight >= padding.clientHeight - 1) {\n\t\t\tthis._zone.run(() => this.scrollToEnd.emit());\n\t\t\tthis._scrollToEndFired = true;\n\t\t}\n\t}\n\n\tprivate _calculateCurrentPosition(dropdownEl: HTMLElement) {\n\t\tconst position = this.position();\n\t\tif (position !== 'auto') {\n\t\t\treturn position;\n\t\t}\n\t\tconst selectRect: ClientRect = this._select.getBoundingClientRect();\n\t\tconst scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n\t\tconst offsetTop = selectRect.top + window.pageYOffset;\n\t\tconst height = selectRect.height;\n\t\tconst dropdownHeight = dropdownEl.getBoundingClientRect().height;\n\t\tif (offsetTop + height + dropdownHeight > scrollTop + document.documentElement.clientHeight) {\n\t\t\treturn 'top';\n\t\t} else {\n\t\t\treturn 'bottom';\n\t\t}\n\t}\n\n\tprivate _appendDropdown() {\n\t\tif (!this.appendTo()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._parent = this._dropdown.shadowRoot\n\t\t\t? this._dropdown.shadowRoot.querySelector(this.appendTo())\n\t\t\t: document.querySelector(this.appendTo());\n\t\tif (!this._parent) {\n\t\t\tthrow new Error(`appendTo selector ${this.appendTo()} did not found any parent element`);\n\t\t}\n\t\tthis._updateXPosition();\n\t\tthis._parent.appendChild(this._dropdown);\n\t}\n\n\tprivate _updateXPosition() {\n\t\tconst select = this._select.getBoundingClientRect();\n\t\tconst parent = this._parent.getBoundingClientRect();\n\t\tconst isRTL = document.documentElement.dir === 'rtl';\n\t\tconst offsetLeft = select.left - parent.left;\n\n\t\tif (isRTL) {\n\t\t\tconst offsetRight = parent.right - select.right;\n\t\t\tthis._dropdown.style.right = offsetRight + 'px';\n\t\t\tthis._dropdown.style.left = 'auto';\n\t\t} else {\n\t\t\tthis._dropdown.style.left = offsetLeft + 'px';\n\t\t\tthis._dropdown.style.right = 'auto';\n\t\t}\n\n\t\tthis._dropdown.style.width = select.width + 'px';\n\t\tthis._dropdown.style.minWidth = select.width + 'px';\n\t}\n\n\tprivate _updateYPosition() {\n\t\tconst select = this._select.getBoundingClientRect();\n\t\tconst parent = this._parent.getBoundingClientRect();\n\t\tconst selectContainer = this._select.querySelector('.ng-select-container') as HTMLElement;\n\t\tconst containerRect = selectContainer?.getBoundingClientRect() ?? select;\n\n\t\tif (this._currentPosition === 'top') {\n\t\t\tconst offsetBottom = parent.bottom - containerRect.top;\n\t\t\tthis._dropdown.style.bottom = offsetBottom + 'px';\n\t\t\tthis._dropdown.style.top = 'auto';\n\t\t} else if (this._currentPosition === 'bottom') {\n\t\t\tconst offsetTop = containerRect.bottom - parent.top;\n\t\t\tthis._dropdown.style.top = offsetTop + 'px';\n\t\t\tthis._dropdown.style.bottom = 'auto';\n\t\t}\n\t}\n\n\tprivate _setupMousedownListener(): void {\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tfromEvent(this._dropdown, 'mousedown')\n\t\t\t\t.pipe(takeUntilDestroyed(this._destroyRef))\n\t\t\t\t.subscribe((event: MouseEvent) => {\n\t\t\t\t\tconst target = event.target as HTMLElement;\n\t\t\t\t\tif (target.tagName === 'INPUT') {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t});\n\t\t});\n\t}\n\n\tprivate _handleWindowScroll() {\n\t\tif (!this.appendTo() && !this.popover()) {\n\t\t\treturn;\n\t\t}\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tfromEvent(this._document, 'scroll', { capture: true, passive: true })\n\t\t\t\t.pipe(takeUntilDestroyed(this._destroyRef), auditTime(0, SCROLL_SCHEDULER))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tthis._updateXPosition();\n\t\t\t\t\tthis._updateYPosition();\n\t\t\t\t});\n\t\t});\n\t}\n\n\tprivate _showPopoverIfNeeded() {\n\t\tif (!this.popover()) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof this._dropdown.showPopover === 'function') {\n\t\t\tthis._renderer.setAttribute(this._dropdown, 'popover', 'manual');\n\t\t\tthis._dropdown.showPopover();\n\t\t\tthis._parent = globalThis.document.body;\n\t\t\tthis._updateXPosition();\n\t\t\tthis._updateYPosition();\n\t\t}\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport {\n\tafterEveryRender,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\tinject,\n\tinput,\n\tOnInit,\n\tsignal,\n} from '@angular/core';\n\n@Component({\n\tselector: 'ng-option',\n\tstandalone: true,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\ttemplate: `<ng-content />`,\n})\nexport class NgOptionComponent implements OnInit {\n\n\tpublic readonly value = input<any>();\n\tpublic readonly disabled = input(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\tpublic readonly elementRef = inject(ElementRef<HTMLElement>);\n\n\tpublic readonly label = signal<string>('');\n\n\t/** True when this component's inputs are initialized (after first change detection). */\n\tpublic readonly isInitialized = signal<boolean>(false);\n\n\tconstructor() {\n\t\tafterEveryRender(() => {\n\t\t\t// Update label signal after render (innerHTML updated by template bindings)\n\t\t\tconst currentLabel = (this.elementRef.nativeElement.innerHTML || '').trim();\n\t\t\tif (currentLabel !== this.label()) {\n\t\t\t\tthis.label.set(currentLabel);\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit(): void {\n\t\tthis.isInitialized.set(true);\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nexport interface NgOption {\n\t[name: string]: any;\n\n\tindex?: number;\n\thtmlId?: string;\n\tselected?: boolean;\n\tdisabled?: boolean;\n\tmarked?: boolean;\n\tlabel?: string;\n\tvalue?: string | any;\n\tparent?: NgOption;\n\tchildren?: NgOption[];\n}\n\nexport enum KeyCode {\n\tTab = 'Tab',\n\tEnter = 'Enter',\n\tEsc = 'Escape',\n\tSpace = ' ',\n\tArrowUp = 'ArrowUp',\n\tArrowDown = 'ArrowDown',\n\tBackspace = 'Backspace',\n}\n\nexport type DropdownPosition = 'top' | 'right' | 'bottom' | 'left' | 'auto';\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { NgOption } from './ng-select.types';\n\nexport type SelectionModelFactory = () => SelectionModel;\n\nexport function DefaultSelectionModelFactory() {\n\treturn new DefaultSelectionModel();\n}\n\nexport interface SelectionModel {\n\tvalue: NgOption[];\n\tselect(item: NgOption, multiple: boolean, selectableGroupAsModel: boolean);\n\tunselect(item: NgOption, multiple: boolean);\n\tclear(keepDisabled: boolean);\n}\n\nexport class DefaultSelectionModel implements SelectionModel {\n\tprivate _selected: NgOption[] = [];\n\n\tget value(): NgOption[] {\n\t\treturn this._selected;\n\t}\n\n\tselect(item: NgOption, multiple: boolean, groupAsModel: boolean) {\n\t\titem.selected = true;\n\t\tif (!item.children || (!multiple && groupAsModel)) {\n\t\t\tthis._selected.push(item);\n\t\t}\n\t\tif (multiple) {\n\t\t\tif (item.parent) {\n\t\t\t\tconst childrenCount = item.parent.children.length;\n\t\t\t\tconst selectedCount = item.parent.children.filter((x) => x.selected).length;\n\t\t\t\titem.parent.selected = childrenCount === selectedCount;\n\t\t\t} else if (item.children) {\n\t\t\t\tthis._setChildrenSelectedState(item.children, true);\n\t\t\t\tthis._removeChildren(item);\n\t\t\t\tif (groupAsModel && this._activeChildren(item)) {\n\t\t\t\t\tthis._selected = [...this._selected.filter((x) => x.parent !== item), item];\n\t\t\t\t} else {\n\t\t\t\t\tthis._selected = [...this._selected, ...item.children.filter((x) => !x.disabled)];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tunselect(item: NgOption, multiple: boolean) {\n\t\tthis._selected = this._selected.filter((x) => x !== item);\n\t\titem.selected = false;\n\t\tif (multiple) {\n\t\t\tif (item.parent && item.parent.selected) {\n\t\t\t\tconst children = item.parent.children;\n\t\t\t\tthis._removeParent(item.parent);\n\t\t\t\tthis._removeChildren(item.parent);\n\t\t\t\tthis._selected.push(...children.filter((x) => x !== item && !x.disabled));\n\t\t\t\titem.parent.selected = false;\n\t\t\t} else if (item.children) {\n\t\t\t\tthis._setChildrenSelectedState(item.children, false);\n\t\t\t\tthis._removeChildren(item);\n\t\t\t}\n\t\t}\n\t}\n\n\tclear(keepDisabled: boolean) {\n\t\tthis._selected = keepDisabled ? this._selected.filter((x) => x.disabled) : [];\n\t}\n\n\tprivate _setChildrenSelectedState(children: NgOption[], selected: boolean) {\n\t\tfor (const child of children) {\n\t\t\tif (child.disabled) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tchild.selected = selected;\n\t\t}\n\t}\n\n\tprivate _removeChildren(parent: NgOption) {\n\t\tthis._selected = [\n\t\t\t...this._selected.filter((x) => x.parent !== parent),\n\t\t\t...parent.children.filter((x) => x.parent === parent && x.disabled && x.selected),\n\t\t];\n\t}\n\n\tprivate _removeParent(parent: NgOption) {\n\t\tthis._selected = this._selected.filter((x) => x !== parent);\n\t}\n\n\tprivate _activeChildren(item: NgOption): boolean {\n\t\treturn item.children.every((x) => !x.disabled || x.selected);\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport {\n\tAfterViewInit,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDestroyRef,\n\teffect,\n\tElementRef,\n\tforwardRef,\n\tHostAttributeToken,\n\tHostListener,\n\tinject,\n\tInjectionToken,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n\tOnChanges,\n\tOnInit,\n\toutput,\n\tsignal,\n\tSimpleChanges,\n\tTemplateRef,\n\tviewChild,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { debounceTime, filter, map, tap } from 'rxjs/operators';\n\nimport {\n\tNgClearButtonTemplateDirective,\n\tNgFooterTemplateDirective,\n\tNgHeaderTemplateDirective,\n\tNgItemLabelDirective,\n\tNgLabelTemplateDirective,\n\tNgLoadingSpinnerTemplateDirective,\n\tNgLoadingTextTemplateDirective,\n\tNgMultiLabelTemplateDirective,\n\tNgNotFoundTemplateDirective,\n\tNgOptgroupTemplateDirective,\n\tNgOptionTemplateDirective,\n\tNgPlaceholderTemplateDirective,\n\tNgTagTemplateDirective,\n\tNgTypeToSearchTemplateDirective,\n} from './ng-templates.directive';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgSelectConfig } from './config.service';\nimport { ConsoleService } from './console.service';\nimport { newId } from './id';\nimport { ItemsList } from './items-list';\nimport { NgDropdownPanelComponent } from './ng-dropdown-panel.component';\nimport { NgDropdownPanelService } from './ng-dropdown-panel.service';\nimport { NgOptionComponent } from './ng-option.component';\nimport { DropdownPosition, KeyCode, NgOption } from './ng-select.types';\nimport { DefaultSelectionModelFactory, SelectionModelFactory } from './selection-model';\nimport { isDefined, isFunction, isObject, isPromise } from './value-utils';\n\nexport const SELECTION_MODEL_FACTORY = new InjectionToken<SelectionModelFactory>('ng-select-selection-model');\nexport type AddTagFn = (term: string) => any | Promise<any>;\nexport type CompareWithFn = (a: any, b: any) => boolean;\nexport type GroupValueFn = (key: string | any, children: any[]) => string | any;\n\nfunction optionalBooleanAttribute(value: unknown): boolean | undefined {\n\treturn value == null ? undefined : booleanAttribute(value);\n}\n\n@Component({\n\tselector: 'ng-select',\n\texportAs: 'ngSelect',\n\ttemplateUrl: './ng-select.component.html',\n\tstyleUrls: ['./ng-select.component.scss'],\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => NgSelectComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\tNgDropdownPanelService,\n\t],\n\tencapsulation: ViewEncapsulation.None\t,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgTemplateOutlet, NgItemLabelDirective, NgDropdownPanelComponent],\n\thost: {\n\t\t'[class.ng-select]': 'true',\n\t\t'[class.ng-select-single]': '!multiple()',\n\t\t'[class.ng-select-typeahead]': 'typeahead()',\n\t\t'[class.ng-select-multiple]': 'multiple()',\n\t\t'[class.ng-select-taggable]': 'addTag()',\n\t\t'[class.ng-select-searchable]': 'searchable()',\n\t\t'[class.ng-select-clearable]': 'clearable()',\n\t\t'[class.ng-select-opened]': 'isOpen()',\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\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\n\t\tthis._mergeGlobalConfig(config);\n\t\tthis.itemsList = new ItemsList(this, newSelectionModel ? newSelectionModel() : DefaultSelectionModelFactory());\n\t\tthis.element = _elementRef.nativeElement;\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.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._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\ttag.then((item) => this.select(handleTag(item))).catch(() => {});\n\t\t} else if (tag) {\n\t\t\tthis.select(handleTag(tag));\n\t\t}\n\t}\n\n\tshowClear() {\n\t\treturn this.clearable() && (this.hasValue || this.searchTerm) && !this.disabled();\n\t}\n\n\tfocusOnClear() {\n\t\tthis.blur();\n\t\tif (this.clearButton()) {\n\t\t\tthis.clearButton().nativeElement.focus();\n\t\t}\n\t}\n\n\ttrackByOption = (_: number, item: NgOption) => {\n\t\tif (this.trackByFn()) {\n\t\t\treturn this.trackByFn()(item.value);\n\t\t}\n\n\t\treturn item;\n\t};\n\n\tshowNoItemsFound() {\n\t\tconst empty = this.itemsList.filteredItems.length === 0;\n\t\treturn (\n\t\t\t((empty && !this.typeahead()?.observed && !this.loading()) ||\n\t\t\t\t(empty && this.typeahead()?.observed && this._validTerm() && !this.loading())) &&\n\t\t\t!this.showAddTag\n\t\t);\n\t}\n\n\tshowTypeToSearch() {\n\t\tconst empty = this.itemsList.filteredItems.length === 0;\n\t\treturn empty && this.typeahead()?.observed && !this._validTerm() && !this.loading();\n\t}\n\n\tonCompositionStart() {\n\t\tthis._isComposing = true;\n\t}\n\n\tonCompositionEnd(term: string) {\n\t\tthis._isComposing = false;\n\t\tif (this.searchWhileComposing()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.filter(term);\n\t}\n\n\tfilter(term: string) {\n\t\tif (this._isComposing && !this.searchWhileComposing()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._searchTerm.set(term);\n\t\tif (this.typeahead()?.observed && (this._validTerm() || this.minTermLength() === 0)) {\n\t\t\tthis.typeahead().next(term);\n\t\t}\n\n\t\tif (!this.typeahead()?.observed) {\n\t\t\tthis.itemsList.filter(term);\n\t\t\tif (this.isOpen()) {\n\t\t\t\tthis.itemsList.markSelectedOrDefault(this.markFirst());\n\t\t\t}\n\t\t}\n\n\t\tthis.searchEvent.emit({ term, items: this.itemsList.filteredItems.map((x) => x.value) });\n\t\tthis.open();\n\t}\n\n\tonInputFocus($event: FocusEvent) {\n\t\tif (this._focused) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._editableSearchTermActive()) {\n\t\t\tthis._setSearchTermFromItems();\n\t\t}\n\n\t\tthis.element.classList.add('ng-select-focused');\n\t\tthis.focusEvent.emit($event);\n\t\tthis._focused = true;\n\t}\n\n\tonInputBlur($event: FocusEvent) {\n\t\tthis.element.classList.remove('ng-select-focused');\n\t\tthis.blurEvent.emit($event);\n\t\tif (!this.isOpen() && !this.disabled()) {\n\t\t\tthis._onTouched();\n\t\t}\n\t\tif (this._editableSearchTermActive()) {\n\t\t\tthis._setSearchTermFromItems();\n\t\t}\n\t\tthis._focused = false;\n\t}\n\n\tonItemHover(item: NgOption) {\n\t\tif (item.disabled) {\n\t\t\treturn;\n\t\t}\n\t\tthis.itemsList.markItem(item);\n\t}\n\n\tdetectChanges() {\n\t\tif (!(<any>this._cd).destroyed) {\n\t\t\tthis._cd.detectChanges();\n\t\t}\n\t}\n\n\tprivate _onChange = (_: any) => {};\n\n\tprivate _onTouched = () => {};\n\n\tprivate _setSearchTermFromItems() {\n\t\tconst selected = this.selectedItems?.[0];\n\t\tthis._searchTerm.set(selected?.label ?? null);\n\t}\n\n\tprivate _setItems(items: readonly any[]) {\n\t\tconst firstItem = items[0];\n\t\tthis.bindLabel.set(this.bindLabel() || this._defaultLabel);\n\t\tthis._primitive = isDefined(firstItem) ? !isObject(firstItem) : this._primitive || this.bindLabel() === this._defaultLabel;\n\t\tthis.itemsList.setItems(items);\n\t\tif (items.length > 0 && this.hasValue) {\n\t\t\tthis.itemsList.mapSelectedItems();\n\t\t}\n\t\tif (this.isOpen() && isDefined(this.searchTerm) && !this.typeahead()?.observed) {\n\t\t\tthis.itemsList.filter(this.searchTerm);\n\t\t}\n\t\tif (this.typeahead()?.observed || this.isOpen()) {\n\t\t\tthis.itemsList.markSelectedOrDefault(this.markFirst());\n\t\t}\n\t}\n\n\tprivate _setItemsFromNgOptions() {\n\t\teffect(\n\t\t\t() => {\n\t\t\t\tconst options = this.ngOptions();\n\t\t\t\t// Wait until all ng-option inputs are initialized (avoids _groupBy crash when values load async)\n\t\t\t\tif (options.length > 0 && !options.every((opt) => opt.isInitialized())) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.bindLabel.set(this._defaultLabel);\n\t\t\t\tconst items =\n\t\t\t\t\toptions.map((option) => ({\n\t\t\t\t\t\t$ngOptionValue: option.value(),\n\t\t\t\t\t\t$ngOptionLabel: option.elementRef.nativeElement.innerHTML,\n\t\t\t\t\t\tdisabled: option.disabled(),\n\t\t\t\t\t})) ?? [];\n\t\t\t\tthis.items.set(items);\n\t\t\t\tthis.itemsList.setItems(items);\n\t\t\t\tif (this.hasValue) {\n\t\t\t\t\tthis.itemsList.mapSelectedItems();\n\t\t\t\t}\n\t\t\t\tthis._cd.detectChanges();\n\n\t\t\t\toptions\n\t\t\t\t\t// find item for each option\n\t\t\t\t\t.map((option) => ({\n\t\t\t\t\t\toption,\n\t\t\t\t\t\titem: this.itemsList.findItem(option.value()),\n\t\t\t\t\t}))\n\t\t\t\t\t// filter non found items\n\t\t\t\t\t.filter(({ item }) => isDefined(item))\n\t\t\t\t\t// process to update disabled and label\n\t\t\t\t\t.forEach(({ option, item }) => {\n\t\t\t\t\t\titem.disabled = option.disabled();\n\t\t\t\t\t\titem.label = option.label() || item.label;\n\t\t\t\t\t});\n\t\t\t},\n\t\t\t{ injector: this._injector },\n\t\t);\n\t}\n\n\tprivate _isValidWriteValue(value: any): boolean {\n\t\tif (!isDefined(value) || (this.multiple() && value === '') || (Array.isArray(value) && value.length === 0)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst validateBinding = (item: any): boolean => {\n\t\t\tif (!isDefined(this.compareWith()) && isObject(item) && this.bindValue()) {\n\t\t\t\tthis._console.warn(\n\t\t\t\t\t`Setting object(${JSON.stringify(item)}) as your model with bindValue is not allowed unless [compareWith] is used.`,\n\t\t\t\t);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\tif (this.multiple()) {\n\t\t\tif (!Array.isArray(value)) {\n\t\t\t\tthis._console.warn('Multiple select ngModel should be array.');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn value.every((item) => validateBinding(item));\n\t\t} else {\n\t\t\treturn validateBinding(value);\n\t\t}\n\t}\n\n\tprivate _handleWriteValue(ngModel: any | any[]) {\n\t\tif (!this._isValidWriteValue(ngModel)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst select = (val: any) => {\n\t\t\tlet item = this.itemsList.findItem(val);\n\t\t\tif (item) {\n\t\t\t\tthis.itemsList.select(item);\n\t\t\t} else {\n\t\t\t\tconst isValObject = isObject(val);\n\t\t\t\tconst isPrimitive = !isValObject && !this.bindValue();\n\t\t\t\tif (isValObject || isPrimitive) {\n\t\t\t\t\tthis.itemsList.select(this.itemsList.mapItem(val, null));\n\t\t\t\t} else if (this.bindValue()) {\n\t\t\t\t\titem = {\n\t\t\t\t\t\t[this.bindLabel()]: null,\n\t\t\t\t\t\t[this.bindValue()]: val,\n\t\t\t\t\t};\n\t\t\t\t\tthis.itemsList.select(this.itemsList.mapItem(item, null));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (this.multiple()) {\n\t\t\t(<any[]>ngModel).forEach((item) => select(item));\n\t\t} else {\n\t\t\tselect(ngModel);\n\t\t}\n\t}\n\n\tprivate _handleKeyPresses() {\n\t\tif (this.searchable()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._keyPress$\n\t\t\t.pipe(\n\t\t\t\ttakeUntilDestroyed(this._destroyRef),\n\t\t\t\ttap((letter) => this._pressedKeys.push(letter)),\n\t\t\t\tdebounceTime(200),\n\t\t\t\tfilter(() => this._pressedKeys.length > 0),\n\t\t\t\tmap(() => this._pressedKeys.join('')),\n\t\t\t)\n\t\t\t.subscribe((term) => {\n\t\t\t\tconst item = this.itemsList.findByLabel(term);\n\t\t\t\tif (item) {\n\t\t\t\t\tif (this.isOpen()) {\n\t\t\t\t\t\tif (!item.disabled) {\n\t\t\t\t\t\t\tthis.itemsList.markItem(item);\n\t\t\t\t\t\t\tthis._scrollToMarked();\n\t\t\t\t\t\t\tthis._cd.markForCheck();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.select(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._pressedKeys = [];\n\t\t\t});\n\t}\n\n\tprivate _setInputAttributes() {\n\t\tconst input = this.searchInput().nativeElement;\n\t\tconst attributes = {\n\t\t\ttype: 'text',\n\t\t\tautocorrect: 'off',\n\t\t\tautocapitalize: 'off',\n\t\t\tautocomplete: 'off',\n\t\t\t'aria-controls': this.dropdownId,\n\t\t\t...this.inputAttrs(),\n\t\t};\n\n\t\tfor (const key of Object.keys(attributes)) {\n\t\t\tinput.setAttribute(key, attributes[key]);\n\t\t}\n\t}\n\n\tprivate _setTabFocusOnClear() {\n\t\tthis.tabFocusOnClear.set(isDefined(this.tabFocusOnClearButton()) ? !!this.tabFocusOnClearButton() : this.config.tabFocusOnClear);\n\t}\n\n\tprivate _updateNgModel() {\n\t\tconst model = [];\n\t\tfor (const item of this.selectedItems) {\n\t\t\tif (this.bindValue()) {\n\t\t\t\tlet value = null;\n\t\t\t\tif (item.children) {\n\t\t\t\t\tconst groupKey = this.groupValue() ? this.bindValue() : <string>this.groupBy();\n\t\t\t\t\tvalue = item.value[groupKey || <string>this.groupBy()];\n\t\t\t\t} else {\n\t\t\t\t\tvalue = this.itemsList.resolveNested(item.value, this.bindValue());\n\t\t\t\t}\n\t\t\t\tmodel.push(value);\n\t\t\t} else {\n\t\t\t\tmodel.push(item.value);\n\t\t\t}\n\t\t}\n\n\t\tconst selected = this.selectedItems.map((x) => x.value);\n\t\tif (this.multiple()) {\n\t\t\tthis._onChange(model);\n\t\t\tthis.changeEvent.emit(selected);\n\t\t} else {\n\t\t\tthis._onChange(isDefined(model[0]) ? model[0] : null);\n\t\t\tthis.changeEvent.emit(selected[0]);\n\t\t}\n\n\t\tthis._cd.markForCheck();\n\t}\n\n\tprivate _clearSearch() {\n\t\tif (!this.searchTerm) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._changeSearch(null);\n\t\tthis.itemsList.resetFilteredItems();\n\t}\n\n\tprivate _changeSearch(searchTerm: string) {\n\t\tthis._searchTerm.set(searchTerm);\n\t\tif (this.typeahead()?.observed) {\n\t\t\tthis.typeahead().next(searchTerm);\n\t\t}\n\t}\n\n\tprivate _scrollToMarked() {\n\t\tif (!this.isOpen() || !this.dropdownPanel()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.dropdownPanel().scrollTo(this.itemsList.markedItem);\n\t}\n\n\tprivate _scrollToTag() {\n\t\tif (!this.isOpen() || !this.dropdownPanel()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.dropdownPanel().scrollToTag();\n\t}\n\n\tprivate _onSelectionChanged() {\n\t\tconst appendTo = this.appendTo() ?? this.config.appendTo;\n\t\tif (this.isOpen() && this.deselectOnClickValue() && appendTo) {\n\t\t\t// Make sure items are rendered.\n\t\t\tthis._cd.detectChanges();\n\t\t\tthis.dropdownPanel().adjustPosition();\n\t\t}\n\t}\n\n\tprivate _handleTab($event: KeyboardEvent) {\n\t\tif (this.isOpen() === false) {\n\t\t\tif (this.showClear() && !$event.shiftKey && this.tabFocusOnClear()) {\n\t\t\t\tthis.focusOnClear();\n\t\t\t\t$event.preventDefault();\n\t\t\t} else if (!this.addTag()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (this.selectOnTab()) {\n\t\t\tif (this.itemsList.markedItem) {\n\t\t\t\tthis.toggleItem(this.itemsList.markedItem);\n\t\t\t\t$event.preventDefault();\n\t\t\t} else if (this.showAddTag) {\n\t\t\t\tthis.selectTag();\n\t\t\t\t$event.preventDefault();\n\t\t\t} else {\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprivate _handleEnter($event: KeyboardEvent) {\n\t\tconst openOnEnter = this.openOnEnter() ?? this.config.openOnEnter;\n\t\tif (this.isOpen() || this._manualOpen) {\n\t\t\tif (this.itemsList.markedItem) {\n\t\t\t\tthis.toggleItem(this.itemsList.markedItem);\n\t\t\t} else if (this.showAddTag) {\n\t\t\t\tthis.selectTag();\n\t\t\t}\n\t\t} else if (openOnEnter) {\n\t\t\tthis.open();\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\t$event.preventDefault();\n\t}\n\n\tprivate _handleSpace($event: KeyboardEvent) {\n\t\tif (this.isOpen() || this._manualOpen) {\n\t\t\treturn;\n\t\t}\n\t\tthis.open();\n\t\t$event.preventDefault();\n\t}\n\n\tprivate _handleArrowDown($event: KeyboardEvent) {\n\t\tif (this._nextItemIsTag(+1)) {\n\t\t\tthis.itemsList.unmarkItem();\n\t\t\tthis._scrollToTag();\n\t\t} else {\n\t\t\tthis.itemsList.markNextItem();\n\t\t\tthis._scrollToMarked();\n\t\t}\n\t\tthis.open();\n\t\t$event.preventDefault();\n\t}\n\n\tprivate _handleArrowUp($event: KeyboardEvent) {\n\t\tif (!this.isOpen()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._nextItemIsTag(-1)) {\n\t\t\tthis.itemsList.unmarkItem();\n\t\t\tthis._scrollToTag();\n\t\t} else {\n\t\t\tthis.itemsList.markPreviousItem();\n\t\t\tthis._scrollToMarked();\n\t\t}\n\t\t$event.preventDefault();\n\t}\n\n\tprivate _nextItemIsTag(nextStep: number): boolean {\n\t\tconst nextIndex = this.itemsList.markedIndex + nextStep;\n\t\treturn (\n\t\t\tthis.addTag() && this.searchTerm && this.itemsList.markedItem && (nextIndex < 0 || nextIndex === this.itemsList.filteredItems.length)\n\t\t);\n\t}\n\n\tprivate _handleBackspace() {\n\t\tif (this.searchTerm || !this.clearable() || !this.clearOnBackspace() || !this.hasValue) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.multiple()) {\n\t\t\tthis.unselect(this.itemsList.lastSelectedItem);\n\t\t} else {\n\t\t\tthis.clearModel();\n\t\t}\n\t}\n\n\tprivate _mergeGlobalConfig(config: NgSelectConfig) {\n\t\tthis.bindValue.set(this.bindValue() || config.bindValue);\n\t\tthis.bindLabel.set(this.bindLabel() || config.bindLabel);\n\t\tthis.appearance.set(this.appearance() || config.appearance);\n\t\tthis._setTabFocusOnClear();\n\t}\n\n\t/**\n\t * Gets virtual scroll value from input or from config\n\t *\n\t * @param config NgSelectConfig object\n\t *\n\t * @returns `true` if virtual scroll is enabled, `false` otherwise\n\t */\n\tprivate getVirtualScroll(config: NgSelectConfig): boolean {\n\t\treturn isDefined(this._virtualScroll()) ? this._virtualScroll()! : this.isVirtualScrollDisabled(config);\n\t}\n\n\t/**\n\t * Gets disableVirtualScroll value from input or from config\n\t *\n\t * @param config NgSelectConfig object\n\t *\n\t * @returns `true` if disableVirtualScroll is enabled, `false` otherwise\n\t */\n\tprivate isVirtualScrollDisabled(config: NgSelectConfig) {\n\t\treturn isDefined(config.disableVirtualScroll) ? !config.disableVirtualScroll : false;\n\t}\n}\n","<div\n\t(mousedown)=\"handleMousedown($event)\"\n\t[class.ng-appearance-outline]=\"appearance() === 'outline'\"\n\t[class.ng-appearance-fill]=\"appearance() === 'fill'\"\n\t[class.ng-has-value]=\"hasValue\"\n\tclass=\"ng-select-container\">\n\t<div class=\"ng-value-container\">\n\t\t@if ((selectedItems.length === 0 && !searchTerm) || (fixedPlaceholder() ?? config.fixedPlaceholder)) {\n\t\t\t<ng-template #defaultPlaceholderTemplate>\n\t\t\t\t<div class=\"ng-placeholder\">{{ placeholder() ?? config.placeholder }}</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template [ngTemplateOutlet]=\"placeholderTemplate() || defaultPlaceholderTemplate\"> </ng-template>\n\t\t}\n\n\t\t@if ((!multiLabelTemplate() || !multiple()) && selectedItems.length > 0) {\n\t\t\t@for (item of selectedItems; track trackByOption($index, item)) {\n\t\t\t\t<div [class.ng-value-disabled]=\"item.disabled\" class=\"ng-value\">\n\t\t\t\t\t<ng-template #defaultLabelTemplate>\n\t\t\t\t\t\t<span class=\"ng-value-icon left\" (click)=\"unselect(item)\" aria-hidden=\"true\">×</span>\n\t\t\t\t\t\t<span class=\"ng-value-label\" [ngItemLabel]=\"item.label\" [escape]=\"escapeHTML\"></span>\n\t\t\t\t\t</ng-template>\n\t\t\t\t\t<ng-template\n\t\t\t\t\t\t[ngTemplateOutlet]=\"labelTemplate() || defaultLabelTemplate\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ item: item.value, clear: clearItem, label: item.label }\">\n\t\t\t\t\t</ng-template>\n\t\t\t\t</div>\n\t\t\t}\n\t\t}\n\n\t\t@if (multiple() && multiLabelTemplate() && selectedValues.length > 0) {\n\t\t\t<ng-template [ngTemplateOutlet]=\"multiLabelTemplate()\" [ngTemplateOutletContext]=\"{ items: selectedValues, clear: clearItem }\">\n\t\t\t</ng-template>\n\t\t}\n\n\t\t<div class=\"ng-input\">\n\t\t\t<input\n\t\t\t\t#searchInput\n\t\t\t\t(blur)=\"onInputBlur($event)\"\n\t\t\t\t(change)=\"$event.stopPropagation()\"\n\t\t\t\t(compositionend)=\"onCompositionEnd(searchInput.value)\"\n\t\t\t\t(compositionstart)=\"onCompositionStart()\"\n\t\t\t\t(focus)=\"onInputFocus($event)\"\n\t\t\t\t(input)=\"filter(searchInput.value)\"\n\t\t\t\t[attr.aria-activedescendant]=\"isOpen() ? itemsList?.markedItem?.htmlId : null\"\n\t\t\t\t[attr.aria-controls]=\"isOpen() ? dropdownId : null\"\n\t\t\t\t[attr.aria-expanded]=\"isOpen()\"\n\t\t\t\t[attr.aria-label]=\"ariaLabel()\"\n\t\t\t\t[attr.id]=\"labelForId()\"\n\t\t\t\t[attr.tabindex]=\"tabIndex()\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[readOnly]=\"!searchable() || itemsList.maxItemsSelected\"\n\t\t\t\t[value]=\"searchTerm ?? ''\"\n\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\trole=\"combobox\" />\n\t\t</div>\n\t</div>\n\n\t@if (loading()) {\n\t\t<ng-template #defaultLoadingSpinnerTemplate>\n\t\t\t<div class=\"ng-spinner-loader\"></div>\n\t\t</ng-template>\n\t\t<ng-template [ngTemplateOutlet]=\"loadingSpinnerTemplate() || defaultLoadingSpinnerTemplate\"></ng-template>\n\t}\n\n\t@if (showClear()) {\n\t\t<span\n\t\t\tclass=\"ng-clear-wrapper\"\n\t\t\trole=\"button\"\n\t\t\ttabindex=\"0\"\n\t\t\t[attr.tabindex]=\"tabFocusOnClear() ? 0 : -1\"\n\t\t\ttitle=\"{{ clearAllText() || config.clearAllText }}\"\n\t\t\t#clearButton\n\t\t\t(click)=\"handleClearClick($event)\">\n\t\t\t@if (clearButtonTemplate()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"clearButtonTemplate()\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t<span class=\"ng-clear\" aria-hidden=\"true\">×</span>\n\t\t\t}\n\t\t</span>\n\t}\n\n\t<span class=\"ng-arrow-wrapper\">\n\t\t<span class=\"ng-arrow\"></span>\n\t</span>\n</div>\n\n@if (isOpen()) {\n\t@let appendToValue = appendTo() || config.appendTo;\n\t<ng-dropdown-panel\n\t\tclass=\"ng-dropdown-panel\"\n\t\t[virtualScroll]=\"dropdownVirtualScroll()\"\n\t\t[bufferAmount]=\"bufferAmount()\"\n\t\t[appendTo]=\"appendToValue\"\n\t\t[position]=\"dropdownPosition()\"\n\t\t[outsideClickEvent]=\"outsideClickEvent()\"\n\t\t[headerTemplate]=\"headerTemplate()\"\n\t\t[footerTemplate]=\"footerTemplate()\"\n\t\t[filterValue]=\"searchTerm\"\n\t\t[items]=\"itemsList.filteredItems\"\n\t\t[showAddTag]=\"showAddTag\"\n\t\t[markedItem]=\"itemsList.markedItem\"\n\t\t(update)=\"viewPortItems = $event\"\n\t\t(scroll)=\"scroll.emit($event)\"\n\t\t(scrollToEnd)=\"scrollToEnd.emit($event)\"\n\t\t(outsideClick)=\"close()\"\n\t\t[class.ng-select-multiple]=\"multiple()\"\n\t\t[class]=\"appendToValue ? (ngClass() ? ngClass() : classes) : null\"\n\t\t[id]=\"dropdownId\"\n\t\t[ariaLabelDropdown]=\"ariaLabelDropdown() ?? config.ariaLabelDropdown\"\n\t\t[popover]=\"popover()\">\n\t\t<ng-container>\n\t\t\t@for (item of viewPortItems; track trackByOption($index, item)) {\n\t\t\t\t<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus, @angular-eslint/template/mouse-events-have-key-events -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"ng-option\"\n\t\t\t\t\t[attr.role]=\"item.children ? 'group' : 'option'\"\n\t\t\t\t\t(click)=\"toggleItem(item)\"\n\t\t\t\t\t(mouseover)=\"onItemHover(item)\"\n\t\t\t\t\t[class.ng-option-disabled]=\"item.disabled\"\n\t\t\t\t\t[class.ng-option-selected]=\"item.selected\"\n\t\t\t\t\t[class.ng-optgroup]=\"item.children\"\n\t\t\t\t\t[class.ng-option]=\"!item.children\"\n\t\t\t\t\t[class.ng-option-child]=\"!!item.parent\"\n\t\t\t\t\t[class.ng-option-marked]=\"item === itemsList.markedItem\"\n\t\t\t\t\t[attr.aria-selected]=\"item.selected\"\n\t\t\t\t\t[attr.id]=\"item?.htmlId\"\n\t\t\t\t\t[attr.aria-setsize]=\"itemsList.filteredItems.length\"\n\t\t\t\t\t[attr.aria-posinset]=\"(item.index ?? 0) + 1\">\n\t\t\t\t\t<ng-template #defaultOptionTemplate>\n\t\t\t\t\t\t<span class=\"ng-option-label\" [ngItemLabel]=\"item.label\" [escape]=\"escapeHTML\"></span>\n\t\t\t\t\t</ng-template>\n\t\t\t\t\t<ng-template\n\t\t\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\t\t\titem.children ? optgroupTemplate() || defaultOptionTemplate : optionTemplate() || defaultOptionTemplate\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ item: item.value, item$: item, index: item.index, searchTerm: searchTerm }\">\n\t\t\t\t\t</ng-template>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@if (showAddTag) {\n\t\t\t\t<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus, @angular-eslint/template/mouse-events-have-key-events -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"ng-option\"\n\t\t\t\t\t[class.ng-option-marked]=\"!itemsList.markedItem\"\n\t\t\t\t\t(mouseover)=\"itemsList.unmarkItem()\"\n\t\t\t\t\trole=\"option\"\n\t\t\t\t\t[attr.aria-selected]=\"false\"\n\t\t\t\t\t(click)=\"selectTag()\">\n\t\t\t\t\t<ng-template #defaultTagTemplate>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t><span class=\"ng-tag-label\">{{ addTagText() || config.addTagText }}</span\n\t\t\t\t\t\t\t>\"{{ searchTerm }}\"</span\n\t\t\t\t\t\t>\n\t\t\t\t\t</ng-template>\n\t\t\t\t\t<ng-template\n\t\t\t\t\t\t[ngTemplateOutlet]=\"tagTemplate() || defaultTagTemplate\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n\t\t\t\t\t</ng-template>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</ng-container>\n\t\t@if (showNoItemsFound()) {\n\t\t\t<ng-template #defaultNotFoundTemplate>\n\t\t\t\t<div class=\"ng-option ng-option-disabled\">{{ notFoundText() ?? config.notFoundText }}</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template\n\t\t\t\t[ngTemplateOutlet]=\"notFoundTemplate() || defaultNotFoundTemplate\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n\t\t\t</ng-template>\n\t\t}\n\t\t@if (showTypeToSearch()) {\n\t\t\t<ng-template #defaultTypeToSearchTemplate>\n\t\t\t\t<div class=\"ng-option ng-option-disabled\">{{ typeToSearchText() || config.typeToSearchText }}</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template [ngTemplateOutlet]=\"typeToSearchTemplate() || defaultTypeToSearchTemplate\"></ng-template>\n\t\t}\n\t\t@if (loading() && itemsList.filteredItems.length === 0) {\n\t\t\t<ng-template #defaultLoadingTextTemplate>\n\t\t\t\t<div class=\"ng-option ng-option-disabled\">{{ loadingText() || config.loadingText }}</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template\n\t\t\t\t[ngTemplateOutlet]=\"loadingTextTemplate() || defaultLoadingTextTemplate\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n\t\t\t</ng-template>\n\t\t}\n\t</ng-dropdown-panel>\n}\n\n<!-- Always present aria-live region -->\n<div aria-atomic=\"true\" aria-live=\"polite\" class=\"ng-visually-hidden\" role=\"status\">\n\t@if (isOpen() && showNoItemsFound()) {\n\t\t{{ notFoundText() ?? config.notFoundText }}\n\t}\n</div>\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tinput,\n\toutput,\n\tsignal,\n\tTemplateRef,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../interfaces/common.interface';\nimport { HubSelectFormat, HubSelectFormats } from '../interfaces/select.interface';\nimport { HubFieldControl } from '../shared/hub-field-control';\nimport { areEqual, get } from '../utils/utils';\nimport { NgSelectComponent } from './vendor/lib/ng-select.component';\nimport { NgOptionComponent } from './vendor/lib/ng-option.component';\nimport {\n\tNgFooterTemplateDirective,\n\tNgHeaderTemplateDirective,\n\tNgLabelTemplateDirective,\n\tNgMultiLabelTemplateDirective,\n\tNgNotFoundTemplateDirective,\n\tNgOptgroupTemplateDirective,\n\tNgOptionTemplateDirective\n} from './vendor/lib/ng-templates.directive';\n\n/**\n * Accessible select / multiselect / autocomplete built on the vendored ng-select engine, with the\n * `ng-hub-ui-forms` conventions on top: CVA binding, automatic error display (via\n * {@link HubFieldControl}), label, helper text and `--hub-select-*` token theming.\n *\n * The underlying ng-select DOM is themed in place from this component's stylesheet\n * (`ViewEncapsulation.None`) using hub tokens — no external `::ng-deep` overrides, and the vendored\n * source stays untouched so the upstream sync remains automatic.\n *\n * @example\n * ```html\n * <hub-select formControlName=\"country\" label=\"Country\" [items]=\"countries\" bindLabel=\"name\" bindValue=\"code\" />\n * ```\n */\n@Component({\n\tselector: 'hub-select',\n\timports: [\n\t\tNgTemplateOutlet,\n\t\tKeyValuePipe,\n\t\tFormsModule,\n\t\tNgSelectComponent,\n\t\tNgOptionComponent,\n\t\tNgOptionTemplateDirective,\n\t\tNgOptgroupTemplateDirective,\n\t\tNgLabelTemplateDirective,\n\t\tNgMultiLabelTemplateDirective,\n\t\tNgHeaderTemplateDirective,\n\t\tNgFooterTemplateDirective,\n\t\tNgNotFoundTemplateDirective\n\t],\n\ttemplateUrl: './select.component.html',\n\tstyleUrl: './select.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-select-host]': 'true'\n\t}\n})\nexport class HubSelectComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _selectFormats = HubSelectFormats;\n\tprotected readonly _value = signal<any>(null);\n\n\t// ── Customization templates ──────────────────────────────────────────────\n\t// ng-select resolves its templates with `contentChild` (no `descendants`),\n\t// which does NOT see through this wrapper's `<ng-content>`. We grab the\n\t// consumer-projected templates here and re-declare them as direct content of\n\t// the inner ng-select (see the template), forwarding each with its context —\n\t// so `<ng-template ng-option-tmp>` etc. work through `<hub-select>`.\n\tprotected readonly _optionTpl = contentChild(NgOptionTemplateDirective, { read: TemplateRef });\n\tprotected readonly _optgroupTpl = contentChild(NgOptgroupTemplateDirective, { read: TemplateRef });\n\tprotected readonly _labelTpl = contentChild(NgLabelTemplateDirective, { read: TemplateRef });\n\tprotected readonly _multiLabelTpl = contentChild(NgMultiLabelTemplateDirective, { read: TemplateRef });\n\tprotected readonly _headerTpl = contentChild(NgHeaderTemplateDirective, { read: TemplateRef });\n\tprotected readonly _footerTpl = contentChild(NgFooterTemplateDirective, { read: TemplateRef });\n\tprotected readonly _notFoundTpl = contentChild(NgNotFoundTemplateDirective, { read: TemplateRef });\n\n\t/**\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/** 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/** 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/** Text shown when no items match. */\n\treadonly notFoundText = input<string>('No items found');\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/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<any>();\n\n\t/** Emits when the control gains focus (dropdown format). */\n\treadonly onFocus = output<any>();\n\n\t/** Emits when the control loses focus (dropdown format). */\n\treadonly onBlur = output<any>();\n\n\t/** Emits when the dropdown opens. */\n\treadonly onOpen = output<void>();\n\n\t/** Emits when the dropdown closes. */\n\treadonly onClose = output<void>();\n\n\t/** Emits when the value is cleared. */\n\treadonly onClear = output<void>();\n\n\t/** Emits on search-term changes (use with `typeahead`/async data). */\n\treadonly onSearch = output<{ term: string; items: any[] }>();\n\n\t/** Emits when an item is added to the selection. */\n\treadonly onAdd = output<any>();\n\n\t/** Emits when an item is removed from the selection. */\n\treadonly onRemove = output<any>();\n\n\t/** Emits while the dropdown list scrolls (virtual scroll window). */\n\treadonly scroll = output<{ start: number; end: number }>();\n\n\t/** Emits when the dropdown list is scrolled to the end (infinite loading). */\n\treadonly scrollToEnd = output<any>();\n\n\t/** Whether the current format selects multiple values. */\n\tprotected readonly isMulti = computed<boolean>(() => {\n\t\tswitch (this.format()) {\n\t\t\tcase this._selectFormats.Checkbox:\n\t\t\t\treturn true;\n\t\t\tcase this._selectFormats.Radio:\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\treturn this.multiple();\n\t\t}\n\t});\n\n\twriteValue(value: any): void {\n\t\tthis._value.set(value ?? null);\n\t}\n\n\t/**\n\t * Propagates the value to the form and outputs.\n\t *\n\t * @param value - The new value emitted by the control.\n\t */\n\tsetValue(value: any): void {\n\t\tthis._value.set(value ?? null);\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n\n\t/**\n\t * Resolves the visible label of an item, honoring `bindLabel`.\n\t *\n\t * @param item - The source item.\n\t * @returns The label to display.\n\t */\n\tprotected itemLabel(item: any): any {\n\t\tconst bind = this.bindLabel();\n\n\t\treturn bind ? get(item, bind) : item;\n\t}\n\n\t/**\n\t * Resolves the bound value of an item, honoring `bindValue`.\n\t *\n\t * @param item - The source item.\n\t * @returns The value stored when the item is selected.\n\t */\n\tprotected itemValue(item: any): any {\n\t\tconst bind = this.bindValue();\n\n\t\treturn bind ? get(item, bind) : item;\n\t}\n\n\t/**\n\t * Whether an item is currently selected (used by the buttons/checkbox/radio formats).\n\t *\n\t * @param item - The source item.\n\t * @returns `true` when the item's value is part of the current selection.\n\t */\n\tprotected isSelected(item: any): boolean {\n\t\tconst value = this.itemValue(item);\n\n\t\tif (this.isMulti()) {\n\t\t\treturn Array.isArray(this._value()) && this._value().some((v: any) => areEqual(v, value));\n\t\t}\n\n\t\treturn areEqual(this._value(), value);\n\t}\n\n\t/**\n\t * Toggles an item's selection for the buttons/checkbox/radio formats.\n\t *\n\t * @param item - The item to toggle.\n\t */\n\tprotected toggleItem(item: any): void {\n\t\tif (this.disabled() || this.readonly()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = this.itemValue(item);\n\n\t\tif (this.isMulti()) {\n\t\t\tconst current: any[] = Array.isArray(this._value()) ? [...this._value()] : [];\n\t\t\tconst index = current.findIndex((v) => areEqual(v, value));\n\n\t\t\tif (index >= 0) {\n\t\t\t\tcurrent.splice(index, 1);\n\t\t\t} else {\n\t\t\t\tcurrent.push(value);\n\t\t\t}\n\n\t\t\tthis.setValue(current);\n\t\t\treturn;\n\t\t}\n\n\t\t// Single selection: clicking the selected item clears it when clearable.\n\t\tif (this.isSelected(item)) {\n\t\t\tthis.setValue(this.clearable() ? null : value);\n\t\t} else {\n\t\t\tthis.setValue(value);\n\t\t}\n\t}\n}\n","<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--invalid]=\"isInvalid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t@switch (format()) {\n\t\t\t@case (_selectFormats.Dropdown) {\n\t\t\t\t<ng-select\n\t\t\t\t\tclass=\"hub-select__control\"\n\t\t\t\t\t[class.hub-select__control--invalid]=\"isInvalid\"\n\t\t\t\t\t[labelForId]=\"$any(id)\"\n\t\t\t\t\t[items]=\"items()\"\n\t\t\t\t\t[bindLabel]=\"$any(bindLabel())\"\n\t\t\t\t\t[bindValue]=\"$any(bindValue())\"\n\t\t\t\t\t[groupBy]=\"$any(groupBy())\"\n\t\t\t\t\t[multiple]=\"multiple()\"\n\t\t\t\t\t[searchable]=\"searchable()\"\n\t\t\t\t\t[clearable]=\"clearable()\"\n\t\t\t\t\t[closeOnSelect]=\"closeOnSelect()\"\n\t\t\t\t\t[fixedPlaceholder]=\"fixedPlaceholder()\"\n\t\t\t\t\t[loading]=\"loading()\"\n\t\t\t\t\t[readonly]=\"readonly()\"\n\t\t\t\t\t[placeholder]=\"placeholder()\"\n\t\t\t\t\t[notFoundText]=\"notFoundText()\"\n\t\t\t\t\t\t[appendTo]=\"appendTo()\"\n\t\t\t\t\t[ngModel]=\"_value()\"\n\t\t\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t\t\t(focus)=\"onFocus.emit($event)\"\n\t\t\t\t\t(blur)=\"onBlur.emit($event)\"\n\t\t\t\t\t(open)=\"onOpen.emit()\"\n\t\t\t\t\t(close)=\"onClose.emit()\"\n\t\t\t\t\t(clear)=\"onClear.emit()\"\n\t\t\t\t\t(search)=\"onSearch.emit($event)\"\n\t\t\t\t\t(add)=\"onAdd.emit($event)\"\n\t\t\t\t\t(remove)=\"onRemove.emit($event)\"\n\t\t\t\t\t(scroll)=\"scroll.emit($event)\"\n\t\t\t\t\t(scrollToEnd)=\"scrollToEnd.emit($event)\"\n\t\t\t\t>\n\t\t\t\t\t@if (_optionTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\" let-searchTerm=\"searchTerm\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ item, item$, index, 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 (_optgroupTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-optgroup-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\" let-searchTerm=\"searchTerm\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ item, item$, index, 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 (_labelTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\" let-label=\"label\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ item, clear, label }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_multiLabelTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ items, clear }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_headerTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-header-tmp let-searchTerm=\"searchTerm\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ searchTerm }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_footerTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-footer-tmp let-searchTerm=\"searchTerm\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ searchTerm }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_notFoundTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-notfound-tmp let-searchTerm=\"searchTerm\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ searchTerm }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<ng-content></ng-content>\n\t\t\t\t</ng-select>\n\t\t\t}\n\t\t\t@case (_selectFormats.Buttons) {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-select__buttons\"\n\t\t\t\t\t[class.hub-select__buttons--vertical]=\"vertical()\"\n\t\t\t\t\trole=\"group\"\n\t\t\t\t\t[attr.aria-label]=\"label() || null\"\n\t\t\t\t>\n\t\t\t\t\t@for (item of items(); track $index) {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-select__button\"\n\t\t\t\t\t\t\t[class.hub-select__button--selected]=\"isSelected(item)\"\n\t\t\t\t\t\t\t[attr.aria-pressed]=\"isSelected(item)\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t\t\t(click)=\"toggleItem(item)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ itemLabel(item) }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@default {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-select__options\"\n\t\t\t\t\t[class.hub-select__options--vertical]=\"vertical()\"\n\t\t\t\t\t[attr.role]=\"format() === _selectFormats.Radio ? 'radiogroup' : 'group'\"\n\t\t\t\t\t[attr.aria-label]=\"label() || null\"\n\t\t\t\t>\n\t\t\t\t\t@for (item of items(); track $index) {\n\t\t\t\t\t\t<label class=\"hub-select__option\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclass=\"hub-select__option-input\"\n\t\t\t\t\t\t\t\t[type]=\"format() === _selectFormats.Radio ? 'radio' : 'checkbox'\"\n\t\t\t\t\t\t\t\t[name]=\"id\"\n\t\t\t\t\t\t\t\t[checked]=\"isSelected(item)\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t\t\t\t(change)=\"toggleItem(item)\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span class=\"hub-select__option-label\">{{ itemLabel(item) }}</span>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t}\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></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 * Parses an ISO `YYYY-MM-DD` string (or passes a `Date`) into a local `Date`, or `null`.\n *\n * @param value - ISO string, `Date`, or nullish.\n * @returns A `Date` at local midnight, or `null` when not parseable.\n */\nexport function parseDate(value: string | Date | null | undefined): Date | null {\n\tif (value == null || value === '') {\n\t\treturn null;\n\t}\n\n\tif (value instanceof Date) {\n\t\treturn isNaN(value.getTime()) ? null : new Date(value.getFullYear(), value.getMonth(), value.getDate());\n\t}\n\n\tconst match = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(value);\n\n\tif (match) {\n\t\treturn new Date(+match[1], +match[2] - 1, +match[3]);\n\t}\n\n\tconst parsed = new Date(value);\n\n\treturn isNaN(parsed.getTime()) ? null : new Date(parsed.getFullYear(), parsed.getMonth(), parsed.getDate());\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 (\n\t\t!!a &&\n\t\t!!b &&\n\t\ta.getFullYear() === b.getFullYear() &&\n\t\ta.getMonth() === b.getMonth() &&\n\t\ta.getDate() === b.getDate()\n\t);\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 a date is selectable given the optional bounds and a disabled predicate.\n *\n * @param date - The candidate date.\n * @param min - Earliest allowed date, or `null`.\n * @param max - Latest allowed date, or `null`.\n * @param disabledFn - Predicate returning `true` for disabled dates, or `null`.\n * @returns `true` when the date cannot be selected.\n */\nexport function isDateDisabled(date: Date, min: Date | null, max: Date | null, disabledFn: ((d: Date) => boolean) | null): boolean {\n\tif (min && isBeforeDay(date, min)) {\n\t\treturn true;\n\t}\n\n\tif (max && isAfterDay(date, max)) {\n\t\treturn true;\n\t}\n\n\treturn disabledFn ? disabledFn(date) : false;\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","import { OverlayModule } from '@angular/cdk/overlay';\nimport { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tinject,\n\tinput,\n\tLOCALE_ID,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport {\n\tHubDatepickerLabels,\n\tHubDatepickerMode,\n\tHubDateRange,\n\tHubDateValue\n} from '../../interfaces/datepicker.interface';\nimport { HUB_FORMS_CONFIG } from '../../services/forms-config';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport {\n\taddMonths,\n\tbuildCalendarGrid,\n\tcompareDay,\n\tformatISO,\n\tisDateDisabled,\n\tisInRange,\n\tisSameDay,\n\tparseDate,\n\tweekdayLabels\n} from './date-utils';\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\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 * - `min` / `max` bounds and a `disabledDates` predicate.\n * - Keyboard navigation (arrows, Home/End, PageUp/Down, Enter, Escape).\n * - `Today` and `Clear` shortcuts.\n * - Full i18n: locale-driven month/weekday names plus overridable `labels`, `displayFormat`,\n * `weekdayFormat`, `firstDayOfWeek` and `rangeSeparator` — per instance or globally via\n * {@link provideHubForms}.\n *\n * The value is an ISO `YYYY-MM-DD` string (`single`) or a `{ start, end }` range (`range`).\n *\n * @example\n * ```html\n * <hub-datepicker formControlName=\"stay\" mode=\"range\" label=\"Stay\" [min]=\"today\" />\n * ```\n */\n@Component({\n\tselector: 'hub-datepicker',\n\timports: [NgTemplateOutlet, KeyValuePipe, OverlayModule],\n\ttemplateUrl: './datepicker.component.html',\n\tstyleUrl: './datepicker.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-datepicker-host]': 'true'\n\t}\n})\nexport class HubDatepickerComponent extends HubFieldControl {\n\treadonly #localeId = inject(LOCALE_ID);\n\treadonly #config = inject(HUB_FORMS_CONFIG).datepicker;\n\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _value = signal<HubDateValue>(null);\n\n\t/** Month currently shown in the calendar 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/** 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/** 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, { transform: (v) => (v == null ? undefined : numberAttribute(v)) });\n\n\t/** Weekday header width. Falls back to the global config. */\n\treadonly weekdayFormat = input<'short' | 'narrow' | 'long' | undefined>(undefined);\n\n\t/** `Intl` options to format the displayed value. Falls back to the global config. */\n\treadonly displayFormat = input<Intl.DateTimeFormatOptions | 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 date (ISO string or `Date`). */\n\treadonly min = input<string | Date | null>(null);\n\n\t/** Latest selectable date (ISO string or `Date`). */\n\treadonly max = input<string | Date | 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/** Whether selecting a date closes the calendar (`single` mode only). */\n\treadonly closeOnSelect = input(true, { transform: booleanAttribute });\n\n\t/** Per-instance label overrides (merged over the global config). */\n\treadonly labels = input<Partial<HubDatepickerLabels>>({});\n\n\t/** Whether the picker is read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t// ── Outputs ─────────────────────────────────────────────────────────────────\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<HubDateValue>();\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 _rangeSeparator = computed(() => this.rangeSeparator() ?? this.#config.rangeSeparator);\n\n\tprotected readonly _minDate = computed(() => parseDate(this.min()));\n\tprotected readonly _maxDate = computed(() => parseDate(this.max()));\n\n\t// ── Derived selection ─────────────────────────────────────────────────────────\n\n\tprotected readonly rangeStart = computed<Date | null>(() => {\n\t\tconst v = this._value();\n\t\treturn this.mode() === 'range' ? parseDate((v as HubDateRange | null)?.start ?? null) : parseDate(v as string | null);\n\t});\n\n\tprotected readonly rangeEnd = computed<Date | null>(() => {\n\t\tconst v = this._value();\n\t\treturn this.mode() === 'range' ? parseDate((v as HubDateRange | null)?.end ?? null) : null;\n\t});\n\n\t/** Locale-formatted display string for the input. */\n\tprotected readonly displayValue = computed<string>(() => {\n\t\tconst fmt = (d: Date | null) => (d ? new Intl.DateTimeFormat(this.locale(), this._displayFormat()).format(d) : '');\n\t\tconst start = this.rangeStart();\n\n\t\tif (this.mode() !== 'range') {\n\t\t\treturn fmt(start);\n\t\t}\n\n\t\tconst end = this.rangeEnd();\n\n\t\tif (!start && !end) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn `${fmt(start)}${this._rangeSeparator()}${fmt(end)}`;\n\t});\n\n\tprotected readonly weekdays = computed<string[]>(() =>\n\t\tweekdayLabels(this.locale(), this._firstDayOfWeek(), this._weekdayFormat())\n\t);\n\n\tprotected readonly monthYearLabel = computed<string>(() =>\n\t\tnew Intl.DateTimeFormat(this.locale(), { month: 'long', year: 'numeric' }).format(this._viewDate())\n\t);\n\n\t/** Enriched 6×7 grid for the displayed month. */\n\tprotected readonly grid = computed<DatepickerCell[]>(() => {\n\t\tconst start = this.rangeStart();\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\n\t\treturn buildCalendarGrid(this._viewDate(), this._firstDayOfWeek()).map((c) => ({\n\t\t\t...c,\n\t\t\tdisabled: isDateDisabled(c.date, min, max, disabledFn),\n\t\t\tselected: this.mode() !== 'range' && isSameDay(c.date, start),\n\t\t\trangeStart: this.mode() === 'range' && isSameDay(c.date, start),\n\t\t\trangeEnd: this.mode() === 'range' && isSameDay(c.date, end),\n\t\t\tinRange: this.mode() === 'range' && isInRange(c.date, start, end),\n\t\t\tfocused: isSameDay(c.date, focused)\n\t\t}));\n\t});\n\n\t// ── CVA ───────────────────────────────────────────────────────────────────────\n\n\twriteValue(value: HubDateValue | Date): void {\n\t\tif (this.mode() === 'range') {\n\t\t\tconst range = (value ?? {}) as HubDateRange;\n\t\t\tconst start = parseDate(range?.start ?? null);\n\t\t\tconst end = parseDate(range?.end ?? null);\n\t\t\tthis._value.set(start || end ? { start: start ? formatISO(start) : null, end: end ? formatISO(end) : null } : null);\n\t\t\tthis._viewDate.set(start ?? new Date());\n\t\t} else {\n\t\t\tconst date = parseDate(value as string | Date | null);\n\t\t\tthis._value.set(date ? formatISO(date) : null);\n\t\t\tthis._viewDate.set(date ?? new Date());\n\t\t}\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\tconst anchor = this.rangeStart() ?? new Date();\n\t\tthis._viewDate.set(anchor);\n\t\tthis._focusedDate.set(anchor);\n\t\tthis._open.set(true);\n\t\tthis.opened.emit();\n\t}\n\n\t/** Closes the calendar and marks the control as touched. */\n\tprotected close(): void {\n\t\tif (!this._open()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._open.set(false);\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\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\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._value.set(null);\n\t\tthis.onChange?.(null);\n\t\tthis.valueChange.emit(null);\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\n\t\tif (this.mode() !== 'range') {\n\t\t\tconst iso = formatISO(cell.date);\n\t\t\tthis.#emit(iso);\n\n\t\t\tif (this.closeOnSelect()) {\n\t\t\t\tthis.close();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst start = this.rangeStart();\n\t\tconst end = this.rangeEnd();\n\n\t\tif (!start || end) {\n\t\t\t// Begin a new range.\n\t\t\tthis.#emit({ start: formatISO(cell.date), end: null });\n\t\t} else {\n\t\t\t// Complete the range, ordering the endpoints.\n\t\t\tconst [a, b] = compareDay(cell.date, start) < 0 ? [cell.date, start] : [start, cell.date];\n\t\t\tthis.#emit({ start: formatISO(a), end: formatISO(b) });\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\t/**\n\t * Keyboard navigation within the 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\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#addDays(date: Date, days: number): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);\n\t}\n\n\t#emit(value: HubDateValue): void {\n\t\tthis._value.set(value);\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\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--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body hub-datepicker__trigger\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\n\t\t<input\n\t\t\tclass=\"hub-field__control hub-datepicker__input\"\n\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t[class.hub-datepicker__input--clearable]=\"clearable() && displayValue()\"\n\t\t\t[id]=\"id\"\n\t\t\ttype=\"text\"\n\t\t\treadonly\n\t\t\t[value]=\"displayValue()\"\n\t\t\t[placeholder]=\"placeholder()\"\n\t\t\t[disabled]=\"disabled()\"\n\t\t\t[required]=\"!!required()\"\n\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t[attr.aria-expanded]=\"_open()\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\t(click)=\"toggleCalendar()\"\n\t\t\t(blur)=\"handleBlur($event)\"\n\t\t/>\n\t\t@if (clearable() && displayValue() && !disabled() && !readonly()) {\n\t\t\t<button type=\"button\" class=\"hub-datepicker__clear\" [attr.aria-label]=\"_labels().clear\" (click)=\"clear()\">×</button>\n\t\t}\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"hub-datepicker__icon\"\n\t\t\ttabindex=\"-1\"\n\t\t\t[attr.aria-label]=\"_labels().openCalendar\"\n\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t(click)=\"toggleCalendar()\"\n\t\t></button>\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n\n<ng-template\n\tcdkConnectedOverlay\n\t[cdkConnectedOverlayOrigin]=\"trigger\"\n\t[cdkConnectedOverlayOpen]=\"_open()\"\n\t[cdkConnectedOverlayHasBackdrop]=\"true\"\n\tcdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n\t[cdkConnectedOverlayOffsetY]=\"4\"\n\t(backdropClick)=\"close()\"\n\t(detach)=\"close()\"\n>\n\t<div class=\"hub-datepicker__panel\" role=\"dialog\" [attr.aria-label]=\"monthYearLabel()\">\n\t\t<header class=\"hub-datepicker__header\">\n\t\t\t<div class=\"hub-datepicker__nav-group\">\n\t\t\t\t<button type=\"button\" class=\"hub-datepicker__nav\" [attr.aria-label]=\"_labels().previousYear\" (click)=\"shiftMonth(-12)\">«</button>\n\t\t\t\t<button type=\"button\" class=\"hub-datepicker__nav\" [attr.aria-label]=\"_labels().previousMonth\" (click)=\"shiftMonth(-1)\">‹</button>\n\t\t\t</div>\n\t\t\t<span class=\"hub-datepicker__title\" aria-live=\"polite\">{{ monthYearLabel() }}</span>\n\t\t\t<div class=\"hub-datepicker__nav-group\">\n\t\t\t\t<button type=\"button\" class=\"hub-datepicker__nav\" [attr.aria-label]=\"_labels().nextMonth\" (click)=\"shiftMonth(1)\">›</button>\n\t\t\t\t<button type=\"button\" class=\"hub-datepicker__nav\" [attr.aria-label]=\"_labels().nextYear\" (click)=\"shiftMonth(12)\">»</button>\n\t\t\t</div>\n\t\t</header>\n\n\t\t<div class=\"hub-datepicker__weekdays\" aria-hidden=\"true\">\n\t\t\t@for (wd of weekdays(); track $index) {\n\t\t\t\t<span class=\"hub-datepicker__weekday\">{{ wd }}</span>\n\t\t\t}\n\t\t</div>\n\n\t\t<div class=\"hub-datepicker__grid\" role=\"grid\" (keydown)=\"onGridKeydown($event)\">\n\t\t\t@for (cell of grid(); 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__cell\"\n\t\t\t\t\t[class.hub-datepicker__cell--outside]=\"!cell.currentMonth\"\n\t\t\t\t\t[class.hub-datepicker__cell--today]=\"cell.today\"\n\t\t\t\t\t[class.hub-datepicker__cell--selected]=\"cell.selected || cell.rangeStart || cell.rangeEnd\"\n\t\t\t\t\t[class.hub-datepicker__cell--range-start]=\"cell.rangeStart\"\n\t\t\t\t\t[class.hub-datepicker__cell--range-end]=\"cell.rangeEnd\"\n\t\t\t\t\t[class.hub-datepicker__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)=\"selectDay(cell)\"\n\t\t\t\t>\n\t\t\t\t\t{{ cell.day }}\n\t\t\t\t</button>\n\t\t\t}\n\t\t</div>\n\n\t\t@if (showToday() || clearable()) {\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</footer>\n\t\t}\n\t</div>\n</ng-template>\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport { HubFileItem } from '../interfaces/file-input.interface';\n\n/** Context handed to a projected `hubFileIcon` template. */\nexport interface HubFileIconContext {\n\t/** The item whose icon is being rendered. */\n\t$implicit: HubFileItem;\n}\n\n/**\n * Overrides the glyph `<hub-file-input>` renders next to a non-image file.\n *\n * The library never depends on `ng-hub-ui-icons`: it draws a neutral document glyph from the\n * `--hub-file-input-file-icon` CSS token and lets you project anything richer — a `<hub-icon>` from\n * any pack, an inline `<svg>`, an emoji — through this template. The item is the implicit context,\n * so the glyph can vary with `file.type`.\n *\n * @example\n * ```html\n * <hub-file-input formControlName=\"attachments\" [multiple]=\"true\">\n * <ng-template hubFileIcon let-item>\n * <hub-icon [name]=\"item.file.type === 'application/pdf' ? 'fa:solid:file-pdf' : 'fa:solid:file'\" />\n * </ng-template>\n * </hub-file-input>\n * ```\n */\n@Directive({\n\tselector: '[hubFileIcon]'\n})\nexport class HubFileIconDirective {\n\t/** Template reference for the icon. */\n\treadonly template = inject<TemplateRef<HubFileIconContext>>(TemplateRef);\n\n\t/**\n\t * Narrows the implicit context for the template type-checker.\n\t *\n\t * @param _directive - The directive instance.\n\t * @param _context - The candidate context.\n\t * @returns Always `true`; exists only to type `let-item`.\n\t */\n\tstatic ngTemplateContextGuard(_directive: HubFileIconDirective, _context: unknown): _context is HubFileIconContext {\n\t\treturn true;\n\t}\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Projects arbitrary markup inside a `<hub-file-input>` dropzone, between the glyph and the\n * invitation.\n *\n * The slot exists for a notice the consumer computes per instance — \"2 documents still missing\",\n * a badge, a warning — which neither `dropText` (the invitation) nor `hint` (the constraints\n * summary, rendered at the bottom) can express, and which is too instance-specific to live in the\n * global labels.\n *\n * Renders nothing when the template is absent, so the dropzone is unchanged for every consumer\n * that does not project one.\n *\n * @example\n * ```html\n * <hub-file-input [multiple]=\"true\">\n * <ng-template hubFileDropzoneNotice>\n * <strong class=\"missing\">2 documents still missing</strong>\n * </ng-template>\n * </hub-file-input>\n * ```\n */\n@Directive({\n\tselector: '[hubFileDropzoneNotice]'\n})\nexport class HubFileDropzoneNoticeDirective {\n\t/** Template reference for the notice. */\n\treadonly template = inject<TemplateRef<void>>(TemplateRef);\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport { HubFileItem } from '../interfaces/file-input.interface';\n\n/** Context handed to a projected `hubFilePreview` template. */\nexport interface HubFilePreviewContext {\n\t/** The item being rendered. */\n\t$implicit: HubFileItem;\n\t/** Removes this item from the selection (and cancels its upload, if any). */\n\tremove: () => void;\n\t/** Re-runs the upload of this item. No-op when no uploader is registered. */\n\tretry: () => void;\n\t/** Aborts the in-flight upload of this item. No-op when it is not uploading. */\n\tcancel: () => void;\n}\n\n/**\n * Replaces the entire rendering of a selected file in `<hub-file-input>`.\n *\n * Where `hubFileIcon` swaps a glyph, this takes over the whole row (or grid tile): thumbnail, name,\n * size, progress bar and buttons. The template receives the item plus the actions it needs, so a\n * custom preview keeps working removal, retry and cancel without reaching into the component.\n *\n * @example\n * ```html\n * <hub-file-input formControlName=\"attachments\" [multiple]=\"true\">\n * <ng-template hubFilePreview let-item let-remove=\"remove\">\n * <article class=\"attachment\">\n * <img *ngIf=\"item.previewUrl\" [src]=\"item.previewUrl\" alt=\"\" />\n * <span>{{ item.file.name }}</span>\n * <button type=\"button\" (click)=\"remove()\">Remove</button>\n * </article>\n * </ng-template>\n * </hub-file-input>\n * ```\n */\n@Directive({\n\tselector: '[hubFilePreview]'\n})\nexport class HubFilePreviewDirective {\n\t/** Template reference for the item. */\n\treadonly template = inject<TemplateRef<HubFilePreviewContext>>(TemplateRef);\n\n\t/**\n\t * Narrows the context for the template type-checker.\n\t *\n\t * @param _directive - The directive instance.\n\t * @param _context - The candidate context.\n\t * @returns Always `true`; exists only to type `let-item` and the action bindings.\n\t */\n\tstatic ngTemplateContextGuard(_directive: HubFilePreviewDirective, _context: unknown): _context is HubFilePreviewContext {\n\t\treturn true;\n\t}\n}\n","/**\n * Tests a file against an `accept` specification.\n *\n * The native `accept` attribute only filters the operating-system file dialog: files arriving by\n * drag-and-drop or paste bypass it entirely. This function applies the same rules by hand, so a\n * dropped file is held to the constraint the consumer declared.\n *\n * Supported tokens, comma-separated, matched case-insensitively:\n * - an extension — `.pdf`\n * - a wildcard MIME type — `image/*`\n * - an exact MIME type — `application/pdf`\n * - the catch-alls `*` and `*/*`\n *\n * Note that a MIME token can never match a file the browser could not type (`file.type === ''`,\n * common for unusual extensions); use an extension token for those.\n *\n * @param file - The file to test.\n * @param accept - The `accept` specification. Empty or `*` accepts everything.\n * @returns `true` when the file satisfies at least one token.\n */\nexport function matchesAccept(file: File, accept: string): boolean {\n\tconst specification = (accept ?? '').trim();\n\n\tif (!specification || specification === '*' || specification === '*/*') {\n\t\treturn true;\n\t}\n\n\tconst name = file.name.toLowerCase();\n\tconst type = (file.type ?? '').toLowerCase();\n\n\treturn specification\n\t\t.split(',')\n\t\t.map((token) => token.trim().toLowerCase())\n\t\t.filter((token) => token.length > 0)\n\t\t.some((token) => {\n\t\t\tif (token === '*' || token === '*/*') {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// An extension, e.g. `.pdf`\n\t\t\tif (token.startsWith('.')) {\n\t\t\t\treturn name.endsWith(token);\n\t\t\t}\n\n\t\t\t// A wildcard MIME type, e.g. `image/*` — the file's type must start with `image/`\n\t\t\tif (token.endsWith('/*')) {\n\t\t\t\treturn type.length > 0 && type.startsWith(token.slice(0, -1));\n\t\t\t}\n\n\t\t\t// An exact MIME type\n\t\t\treturn type === token;\n\t\t});\n}\n","/**\n * Builds the identity key used to detect duplicate selections.\n *\n * Two `File` objects are never referentially equal across separate drops, so identity is derived\n * from the tuple the browser exposes: name, byte size and last-modified timestamp. Collisions are\n * possible in theory (same name, size and mtime) but describe the same file in every practical case.\n *\n * @param file - The file to key.\n * @returns A stable string key for the file.\n */\nexport function fileKey(file: File): string {\n\treturn `${file.name}:${file.size}:${file.lastModified}`;\n}\n","/** The value a `<hub-file-input>` writes to its form control. */\nexport type HubFileValue = File | File[] | null;\n\n/**\n * Normalizes any file-shaped control value to a plain array.\n *\n * Accepts the shapes a control can realistically hold: a single `File` (single mode), an array of\n * files (multiple mode), a native `FileList` (a control fed straight from a DOM event or from the\n * deprecated `<hub-input type=\"file\">`), or `null`/`undefined`.\n *\n * @param value - The raw control value.\n * @returns The files it contains, in order; an empty array when it holds none.\n */\nexport function toFileArray(value: unknown): File[] {\n\tif (value == null) {\n\t\treturn [];\n\t}\n\n\tif (value instanceof File) {\n\t\treturn [value];\n\t}\n\n\tif (Array.isArray(value)) {\n\t\treturn value.filter((entry): entry is File => entry instanceof File);\n\t}\n\n\tif (typeof FileList !== 'undefined' && value instanceof FileList) {\n\t\treturn Array.from(value);\n\t}\n\n\treturn [];\n}\n","import { isPlatformBrowser, KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tPLATFORM_ID,\n\tsignal,\n\tviewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { HubFileIconDirective } from '../../directives/file-icon.directive';\nimport { HubFileDropzoneNoticeDirective } from '../../directives/file-dropzone-notice.directive';\nimport { HubFilePreviewContext, HubFilePreviewDirective } from '../../directives/file-preview.directive';\nimport { FormTextType, FormTextTypes } from '../../interfaces/common.interface';\nimport {\n\tHubFileItem,\n\tHubFilePreview,\n\tHubFileRejection,\n\tHubFileRejectionReason,\n\tHubFileStatus\n} from '../../interfaces/file-input.interface';\nimport { HUB_FILE_UPLOADER } from '../../services/file-uploader';\nimport { HUB_FORMS_CONFIG } from '../../services/forms-config';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { matchesAccept } from '../../utils/file-accept';\nimport { fileKey } from '../../utils/file-key';\nimport { HubFileValue, toFileArray } from '../../utils/file-value';\nimport { uuid } from '../../utils/utils';\n\n/**\n * Accessible file field with drag-and-drop, clipboard paste, per-file constraints, previews and\n * optional upload progress.\n *\n * A full `ng-hub-ui-forms` field: it extends {@link HubFieldControl}, so it binds with\n * `formControlName` / `ngModel` and shares the label, helper text and validation chrome with every\n * other control.\n *\n * The **form value stays native** — a `File` in single mode, a `File[]` in multiple mode, `null`\n * when empty — so it can be handed straight to a `FormData`. The rich per-file state (preview URL,\n * upload status, progress, error) lives in the {@link files} signal instead of contaminating the\n * control.\n *\n * Constraints declared as inputs (`accept`, `maxSize`, `minSize`, `maxTotalSize`, `maxFiles`) act as\n * a **filter**: an offending file never reaches the value and surfaces through {@link rejected}.\n * They are enforced by hand rather than delegated to the native `accept` attribute, which only\n * filters the operating-system dialog and is bypassed entirely by a drop or a paste. To make the\n * *control itself* invalid — the right choice when a value can also be patched in programmatically —\n * add the matching validators (`hubAcceptedFiles`, `hubMaxFileSize`, …).\n *\n * Uploading is opt-in and transport-agnostic: register a {@link HubFileUploader} with\n * `provideHubFileUploader()` and the component drives progress, cancel and retry. With no uploader\n * registered it is a pure picker.\n *\n * @example\n * ```html\n * <hub-file-input\n * formControlName=\"attachments\"\n * label=\"Attachments\"\n * [multiple]=\"true\"\n * accept=\"image/*,.pdf\"\n * [maxSize]=\"5 * 1024 * 1024\"\n * [maxFiles]=\"3\"\n * preview=\"grid\"\n * (rejected)=\"notify($event)\"\n * />\n * ```\n */\n@Component({\n\tselector: 'hub-file-input',\n\timports: [NgTemplateOutlet, KeyValuePipe],\n\ttemplateUrl: './file-input.component.html',\n\tstyleUrl: './file-input.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-file-input-host]': 'true',\n\t\t'(paste)': 'handlePaste($event)'\n\t}\n})\nexport class HubFileInputComponent extends HubFieldControl {\n\treadonly #config = inject(HUB_FORMS_CONFIG);\n\treadonly #uploader = inject(HUB_FILE_UPLOADER, { optional: true });\n\treadonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\treadonly #subscriptions = new Map<string, Subscription>();\n\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _items = signal<HubFileItem[]>([]);\n\n\t/** Depth counter for `dragenter`/`dragleave`: children of the dropzone fire their own events. */\n\t#dragDepth = 0;\n\n\t/** Releases every object URL and aborts every in-flight upload when the field goes away. */\n\tprivate readonly _cleanup = inject(DestroyRef).onDestroy(() => {\n\t\tthis.#subscriptions.forEach((subscription) => subscription.unsubscribe());\n\t\tthis.#subscriptions.clear();\n\t\tthis._items().forEach((item) => this.#revokePreview(item));\n\t});\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Whether more than one file can be held. Switches the control value to `File[]`. */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/** Accepted file types, e.g. `image/*,.pdf`. Enforced on drop and paste, not just in the dialog. */\n\treadonly accept = input<string>('*');\n\n\t/** Maximum size per file, in bytes. */\n\treadonly maxSize = input<number | null>(null);\n\n\t/** Minimum size per file, in bytes. Rejects the 0-byte files a failed export produces. */\n\treadonly minSize = input<number | null>(null);\n\n\t/** Maximum combined size of every held file, in bytes. */\n\treadonly maxTotalSize = input<number | null>(null);\n\n\t/** Maximum number of files. Only meaningful with `multiple`. */\n\treadonly maxFiles = input<number | null>(null);\n\n\t/** Whether files can be dropped onto the field. */\n\treadonly dragDrop = input(true, { transform: booleanAttribute });\n\n\t/** Whether files can be pasted into the focused field (e.g. a screenshot). */\n\treadonly paste = input(true, { transform: booleanAttribute });\n\n\t/** How the held files are rendered: not at all, as a list, or as a thumbnail grid. */\n\treadonly preview = input<HubFilePreview>('list');\n\n\t/** Whether the same file can be selected twice (keyed on name, size and last-modified date). */\n\treadonly allowDuplicates = input(false, { transform: booleanAttribute });\n\n\t/** Opens the device camera instead of the file browser, on the platforms that support it. */\n\treadonly capture = input<'user' | 'environment' | null>(null);\n\n\t/** Whether a newly accepted file starts uploading immediately. Ignored with no uploader registered. */\n\treadonly autoUpload = input(true, { transform: booleanAttribute });\n\n\t/** Overrides the \"browse\" button text coming from the global labels. */\n\treadonly buttonLabel = input<string | null>(null);\n\n\t/** Overrides the dropzone invitation coming from the global labels. */\n\treadonly dropText = input<string | null>(null);\n\n\t/** Overrides the second invitation line coming from the global labels. Pass `''` to hide it. */\n\treadonly dropSubtext = input<string | null>(null);\n\n\t/** Overrides the auto-generated hint that summarizes the active constraints. Pass `''` to hide it. */\n\treadonly hint = input<string | null>(null);\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits the native value whenever the selection changes. */\n\treadonly valueChange = output<HubFileValue>();\n\n\t/** Emits the files refused by the declared constraints, with the reason for each. */\n\treadonly rejected = output<HubFileRejection[]>();\n\n\t/** Emits the file removed from the selection. */\n\treadonly fileRemoved = output<File>();\n\n\t/** Emits the full item list whenever an upload changes status or progress. */\n\treadonly uploadStateChange = output<readonly HubFileItem[]>();\n\n\t/** The hidden native file input, kept focusable so the dropzone label activates it. */\n\tprotected readonly nativeInput = viewChild<ElementRef<HTMLInputElement>>('nativeInput');\n\n\t/** Projected per-file icon template. */\n\tprotected readonly iconTpt = contentChild(HubFileIconDirective);\n\n\t/** Projected per-file preview template, replacing the built-in item rendering. */\n\tprotected readonly previewTpt = contentChild(HubFilePreviewDirective);\n\n\t/** Projected notice rendered between the glyph and the invitation. */\n\tprotected readonly noticeTpt = contentChild(HubFileDropzoneNoticeDirective);\n\n\t/** Whether a drag is currently hovering the dropzone. */\n\tprotected readonly isDragging = signal(false);\n\n\t/** Latest message for the screen-reader live region. */\n\tprotected readonly announcement = signal('');\n\n\t/** The rich, per-file state of the current selection. */\n\treadonly files = this._items.asReadonly();\n\n\t/** Whether at least one file is currently uploading. Gate a submit button on this. */\n\treadonly uploading = computed<boolean>(() => this._items().some((item) => item.status === 'uploading'));\n\n\t/** Whether an uploader is registered, which is what enables progress, cancel and retry. */\n\tprotected readonly hasUploader = !!this.#uploader;\n\n\t/** The resolved, localizable labels. */\n\tprotected readonly labels = computed(() => this.#config.fileInput);\n\n\t/** Text of the browse action. */\n\tprotected readonly browseLabel = computed<string>(() => this.buttonLabel() ?? this.labels().browse);\n\n\t/** The dropzone invitation. */\n\tprotected readonly dropTextLabel = computed<string>(() => this.dropText() ?? this.labels().dropHere);\n\n\t/** The second invitation line. Empty renders nothing. */\n\tprotected readonly dropSubtextLabel = computed<string>(() => this.dropSubtext() ?? this.labels().dropSubtext);\n\n\t/** The hint summarizing the active constraints. */\n\tprotected readonly constraintsHint = computed<string>(() => {\n\t\tconst override = this.hint();\n\n\t\tif (override != null) {\n\t\t\treturn override;\n\t\t}\n\n\t\tconst accept = this.accept();\n\n\t\treturn this.labels().constraints({\n\t\t\taccept: !accept || accept === '*' || accept === '*/*' ? null : accept,\n\t\t\tmaxSize: this.maxSize(),\n\t\t\tmaxFiles: this.multiple() ? this.maxFiles() : null\n\t\t});\n\t});\n\n\t/** Whether the dropzone currently accepts a drop. */\n\tprotected readonly dropEnabled = computed<boolean>(() => this.dragDrop() && !this.disabled());\n\n\t/**\n\t * Derives the native validation errors from the held files rather than from the DOM.\n\t *\n\t * The hidden native input is emptied after every `change` so the same file can be picked twice,\n\t * and it never sees a dropped or pasted file at all. Its `validity` therefore reports\n\t * `valueMissing` even when files are held — reading it would mark a satisfied field as required.\n\t *\n\t * @param _target - Ignored; the file state is the source of truth.\n\t */\n\tprotected override updateNativeErrors(_target?: EventTarget | null): void {\n\t\tif (this._control) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._nativeErrors.set(this.required() && this._items().length === 0 ? { required: true } : null);\n\t}\n\n\t/**\n\t * Resolves a human-readable message for a failed upload.\n\t *\n\t * @param item - The item in the `error` state.\n\t * @returns The error message.\n\t */\n\tprotected errorText(item: HubFileItem): string {\n\t\tconst error = item.error as { message?: string } | null;\n\n\t\treturn error?.message ?? String(error ?? '');\n\t}\n\n\twriteValue(value: HubFileValue | FileList): void {\n\t\tthis._items().forEach((item) => this.#revokePreview(item));\n\t\tthis.#subscriptions.forEach((subscription) => subscription.unsubscribe());\n\t\tthis.#subscriptions.clear();\n\t\tthis._items.set(toFileArray(value).map((file) => this.#createItem(file)));\n\t}\n\n\t/** Opens the native file dialog. */\n\topen(): void {\n\t\tif (!this.disabled()) {\n\t\t\tthis.nativeInput()?.nativeElement.click();\n\t\t}\n\t}\n\n\t/**\n\t * Removes a file from the selection, aborting its upload and releasing its preview.\n\t *\n\t * @param id - The id of the item to remove.\n\t */\n\tremove(id: string): void {\n\t\tconst item = this._items().find((candidate) => candidate.id === id);\n\n\t\tif (!item || this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#abort(id);\n\t\tthis.#revokePreview(item);\n\t\tthis._items.update((items) => items.filter((candidate) => candidate.id !== id));\n\t\tthis.#emitValue();\n\t\tthis.fileRemoved.emit(item.file);\n\t\tthis.#announce(this.labels().filesSelected(this._items().length));\n\t}\n\n\t/** Removes every file, aborting any upload in flight. */\n\tclear(): void {\n\t\tif (this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#subscriptions.forEach((subscription) => subscription.unsubscribe());\n\t\tthis.#subscriptions.clear();\n\t\tthis._items().forEach((item) => this.#revokePreview(item));\n\t\tthis._items.set([]);\n\t\tthis.#emitValue();\n\t\tthis.#announce(this.labels().filesSelected(0));\n\t}\n\n\t/** Uploads every file that has not been uploaded yet. No-op without a registered uploader. */\n\tupload(): void {\n\t\tthis._items()\n\t\t\t.filter((item) => item.status === 'ready' || item.status === 'error')\n\t\t\t.forEach((item) => this.#startUpload(item.id));\n\t}\n\n\t/**\n\t * Aborts an in-flight upload, returning the file to the `ready` state.\n\t *\n\t * @param id - The id of the uploading item.\n\t */\n\tcancel(id: string): void {\n\t\tif (!this.#subscriptions.has(id)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#abort(id);\n\t\tthis.#patch(id, { status: 'ready', progress: null, error: null, response: null });\n\t}\n\n\t/**\n\t * Re-runs the upload of a file, typically after a failure.\n\t *\n\t * @param id - The id of the item to upload again.\n\t */\n\tretry(id: string): void {\n\t\tthis.#startUpload(id);\n\t}\n\n\t/**\n\t * Reads the files chosen through the native dialog.\n\t *\n\t * @param event - The `change` event of the hidden native input.\n\t */\n\tprotected handleNativeChange(event: Event): void {\n\t\tconst native = event.target as HTMLInputElement;\n\n\t\tthis.#addFiles(Array.from(native.files ?? []));\n\n\t\t// Without this, re-picking the very same file fires no second `change` event.\n\t\tnative.value = '';\n\t}\n\n\t/**\n\t * Accepts files dropped onto the dropzone.\n\t *\n\t * @param event - The drop event.\n\t */\n\tprotected handleDrop(event: DragEvent): void {\n\t\tif (!this.dropEnabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.#dragDepth = 0;\n\t\tthis.isDragging.set(false);\n\t\tthis.#addFiles(this.#extractFiles(event.dataTransfer));\n\t\tthis.handleBlur();\n\t}\n\n\t/**\n\t * Highlights the dropzone once a drag carrying files enters it.\n\t *\n\t * @param event - The dragenter event.\n\t */\n\tprotected handleDragEnter(event: DragEvent): void {\n\t\tif (!this.dropEnabled() || !this.#carriesFiles(event)) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.#dragDepth++;\n\t\tthis.isDragging.set(true);\n\t}\n\n\t/**\n\t * Keeps the drop target alive. A `dragover` that does not call `preventDefault` refuses the drop.\n\t *\n\t * @param event - The dragover event.\n\t */\n\tprotected handleDragOver(event: DragEvent): void {\n\t\tif (!this.dropEnabled() || !this.#carriesFiles(event)) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tif (event.dataTransfer) {\n\t\t\tevent.dataTransfer.dropEffect = 'copy';\n\t\t}\n\t}\n\n\t/**\n\t * Un-highlights the dropzone, but only once the drag has left it *and* all of its children.\n\t *\n\t * @param event - The dragleave event.\n\t */\n\tprotected handleDragLeave(event: DragEvent): void {\n\t\tif (!this.dropEnabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.#dragDepth = Math.max(0, this.#dragDepth - 1);\n\n\t\tif (this.#dragDepth === 0) {\n\t\t\tthis.isDragging.set(false);\n\t\t}\n\t}\n\n\t/**\n\t * Accepts files pasted into the focused field, e.g. a screenshot from the clipboard.\n\t *\n\t * @param event - The paste event.\n\t */\n\tprotected handlePaste(event: ClipboardEvent): void {\n\t\tif (!this.paste() || this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst files = this.#extractFiles(event.clipboardData);\n\n\t\tif (files.length > 0) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.#addFiles(files);\n\t\t}\n\t}\n\n\t/**\n\t * Builds the context handed to a projected `hubFilePreview` template.\n\t *\n\t * @param item - The item being rendered.\n\t * @returns The template context, complete with the actions the item needs.\n\t */\n\tprotected previewContext(item: HubFileItem): HubFilePreviewContext {\n\t\treturn {\n\t\t\t$implicit: item,\n\t\t\tremove: () => this.remove(item.id),\n\t\t\tretry: () => this.retry(item.id),\n\t\t\tcancel: () => this.cancel(item.id)\n\t\t};\n\t}\n\n\t/**\n\t * Validates and appends the incoming files, emitting the new value and any rejections.\n\t *\n\t * In single mode the incoming file replaces the current one, so the constraint checks run against\n\t * an empty baseline rather than against the file about to be discarded.\n\t *\n\t * @param incoming - The files to add.\n\t */\n\t#addFiles(incoming: File[]): void {\n\t\tif (this.disabled() || incoming.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst multiple = this.multiple();\n\t\tconst current = this._items();\n\t\tconst baseline = multiple ? current : [];\n\t\tconst accepted: HubFileItem[] = [];\n\t\tconst rejections: HubFileRejection[] = [];\n\t\tconst keys = new Set(baseline.map((item) => fileKey(item.file)));\n\n\t\tlet count = baseline.length;\n\t\tlet total = baseline.reduce((sum, item) => sum + item.file.size, 0);\n\n\t\tfor (const file of incoming) {\n\t\t\tconst rejection = this.#reject(file, count, total, keys);\n\n\t\t\tif (rejection) {\n\t\t\t\trejections.push(rejection);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tkeys.add(fileKey(file));\n\t\t\tcount++;\n\t\t\ttotal += file.size;\n\t\t\taccepted.push(this.#createItem(file));\n\t\t}\n\n\t\tif (accepted.length > 0) {\n\t\t\tif (!multiple) {\n\t\t\t\tcurrent.forEach((item) => this.#abort(item.id));\n\t\t\t\tcurrent.forEach((item) => this.#revokePreview(item));\n\t\t\t}\n\n\t\t\tthis._items.set([...baseline, ...accepted]);\n\t\t\tthis.#emitValue();\n\n\t\t\tif (this.#uploader && this.autoUpload()) {\n\t\t\t\taccepted.forEach((item) => this.#startUpload(item.id));\n\t\t\t}\n\t\t}\n\n\t\tif (rejections.length > 0) {\n\t\t\tthis.rejected.emit(rejections);\n\t\t}\n\n\t\tthis.#announce(this.#summarize(accepted.length, rejections));\n\t}\n\n\t/**\n\t * Applies the declared constraints to a single candidate file.\n\t *\n\t * @param file - The candidate.\n\t * @param count - How many files are already accepted.\n\t * @param total - The combined size of the already-accepted files.\n\t * @param keys - Identity keys of the already-accepted files, for duplicate detection.\n\t * @returns The rejection, or `null` when the file passes every constraint.\n\t */\n\t#reject(file: File, count: number, total: number, keys: Set<string>): HubFileRejection | null {\n\t\tconst build = (reason: HubFileRejectionReason, limit: string | number | null): HubFileRejection => ({\n\t\t\tfile,\n\t\t\treason,\n\t\t\tlimit\n\t\t});\n\n\t\tif (!this.allowDuplicates() && keys.has(fileKey(file))) {\n\t\t\treturn build('duplicate', null);\n\t\t}\n\n\t\tif (!matchesAccept(file, this.accept())) {\n\t\t\treturn build('accept', this.accept());\n\t\t}\n\n\t\tconst minSize = this.minSize();\n\n\t\tif (minSize != null && file.size < minSize) {\n\t\t\treturn build('minSize', minSize);\n\t\t}\n\n\t\tconst maxSize = this.maxSize();\n\n\t\tif (maxSize != null && file.size > maxSize) {\n\t\t\treturn build('maxSize', maxSize);\n\t\t}\n\n\t\tconst maxFiles = this.multiple() ? this.maxFiles() : 1;\n\n\t\tif (maxFiles != null && count + 1 > maxFiles) {\n\t\t\treturn build('maxFiles', maxFiles);\n\t\t}\n\n\t\tconst maxTotalSize = this.maxTotalSize();\n\n\t\tif (maxTotalSize != null && total + file.size > maxTotalSize) {\n\t\t\treturn build('maxTotalSize', maxTotalSize);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Wraps a file in an item, minting its preview URL when it is a previewable image.\n\t *\n\t * @param file - The accepted file.\n\t * @returns The new item, in the `ready` state.\n\t */\n\t#createItem(file: File): HubFileItem {\n\t\tconst previewable = this.#isBrowser && this.preview() !== 'none' && file.type.startsWith('image/');\n\n\t\treturn {\n\t\t\tid: uuid(),\n\t\t\tfile,\n\t\t\tpreviewUrl: previewable ? URL.createObjectURL(file) : null,\n\t\t\tstatus: 'ready',\n\t\t\tprogress: null,\n\t\t\terror: null,\n\t\t\tresponse: null\n\t\t};\n\t}\n\n\t/**\n\t * Releases the object URL of an item. Skipping this leaks the whole file for the page's lifetime.\n\t *\n\t * @param item - The item whose preview should be released.\n\t */\n\t#revokePreview(item: HubFileItem): void {\n\t\tif (item.previewUrl && this.#isBrowser) {\n\t\t\tURL.revokeObjectURL(item.previewUrl);\n\t\t}\n\t}\n\n\t/** Writes the native value to the form control and emits it. */\n\t#emitValue(): void {\n\t\tconst files = this._items().map((item) => item.file);\n\t\tconst value: HubFileValue = this.multiple() ? files : (files[0] ?? null);\n\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n\n\t/**\n\t * Subscribes to the registered uploader for one item, mapping its events onto the item's status.\n\t *\n\t * @param id - The id of the item to upload.\n\t */\n\t#startUpload(id: string): void {\n\t\tconst uploader = this.#uploader;\n\t\tconst item = this._items().find((candidate) => candidate.id === id);\n\n\t\tif (!uploader || !item) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#abort(id);\n\t\tthis.#patch(id, { status: 'uploading', progress: null, error: null, response: null });\n\n\t\tconst subscription = uploader.upload(item.file, { id }).subscribe({\n\t\t\tnext: (event) => {\n\t\t\t\tif (event.status === 'progress') {\n\t\t\t\t\t// A transport that cannot report a total leaves `progress` null, which the template\n\t\t\t\t\t// renders as an indeterminate bar rather than a bar frozen at 0%.\n\t\t\t\t\tconst progress = event.total ? Math.round((event.loaded / event.total) * 100) : null;\n\t\t\t\t\tthis.#patch(id, { status: 'uploading', progress });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (event.status === 'done') {\n\t\t\t\t\t// The body is what identifies the stored file server-side; without keeping it the\n\t\t\t\t\t// application has no way to reference what it just uploaded.\n\t\t\t\t\tthis.#patch(id, { status: 'done', progress: 100, error: null, response: event.response ?? null });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.#patch(id, { status: 'error', error: event.error });\n\t\t\t},\n\t\t\terror: (error: unknown) => this.#patch(id, { status: 'error', error }),\n\t\t\tcomplete: () => {\n\t\t\t\t// An uploader that completes without emitting `done` still finished successfully.\n\t\t\t\tconst current = this._items().find((candidate) => candidate.id === id);\n\n\t\t\t\tif (current?.status === 'uploading') {\n\t\t\t\t\tthis.#patch(id, { status: 'done', progress: 100, error: null });\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.#subscriptions.set(id, subscription);\n\t}\n\n\t/**\n\t * Unsubscribes from an item's upload, which aborts the underlying request.\n\t *\n\t * @param id - The id of the item.\n\t */\n\t#abort(id: string): void {\n\t\tthis.#subscriptions.get(id)?.unsubscribe();\n\t\tthis.#subscriptions.delete(id);\n\t}\n\n\t/**\n\t * Immutably updates one item and notifies listeners of the new upload state.\n\t *\n\t * @param id - The id of the item to update.\n\t * @param patch - The fields to overwrite.\n\t */\n\t#patch(\n\t\tid: string,\n\t\tpatch: Partial<Pick<HubFileItem, 'status' | 'progress' | 'error' | 'response'>> & { status: HubFileStatus }\n\t): void {\n\t\tlet changed = false;\n\n\t\tthis._items.update((items) =>\n\t\t\titems.map((item) => {\n\t\t\t\tif (item.id !== id) {\n\t\t\t\t\treturn item;\n\t\t\t\t}\n\n\t\t\t\tchanged = true;\n\t\t\t\treturn { ...item, ...patch };\n\t\t\t})\n\t\t);\n\n\t\tif (changed) {\n\t\t\tthis.uploadStateChange.emit(this._items());\n\t\t}\n\t}\n\n\t/**\n\t * Extracts the files carried by a drop or a paste.\n\t *\n\t * Reads `items` when present so non-file payloads (dragged text, HTML) are skipped, and falls\n\t * back to `files` otherwise.\n\t *\n\t * @param transfer - The `DataTransfer` of the event.\n\t * @returns The files it carries.\n\t */\n\t#extractFiles(transfer: DataTransfer | null): File[] {\n\t\tif (!transfer) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (transfer.items?.length) {\n\t\t\treturn Array.from(transfer.items)\n\t\t\t\t.filter((item) => item.kind === 'file')\n\t\t\t\t.map((item) => item.getAsFile())\n\t\t\t\t.filter((file): file is File => file !== null);\n\t\t}\n\n\t\treturn Array.from(transfer.files ?? []);\n\t}\n\n\t/**\n\t * Whether a drag event carries files, as opposed to text or a page element.\n\t *\n\t * @param event - The drag event.\n\t * @returns `true` when the payload includes files.\n\t */\n\t#carriesFiles(event: DragEvent): boolean {\n\t\treturn Array.from(event.dataTransfer?.types ?? []).includes('Files');\n\t}\n\n\t/**\n\t * Builds the live-region message describing the outcome of an add.\n\t *\n\t * @param acceptedCount - How many files were accepted.\n\t * @param rejections - The files that were refused.\n\t * @returns The message to announce.\n\t */\n\t#summarize(acceptedCount: number, rejections: HubFileRejection[]): string {\n\t\tconst labels = this.labels();\n\t\tconst parts: string[] = [];\n\n\t\tif (acceptedCount > 0) {\n\t\t\tparts.push(labels.filesSelected(this._items().length));\n\t\t}\n\n\t\trejections.forEach((rejection) => parts.push(labels.rejection(rejection)));\n\n\t\treturn parts.join(' ');\n\t}\n\n\t/**\n\t * Publishes a message to the live region, forcing a re-announcement of identical text.\n\t *\n\t * @param message - The message to announce.\n\t */\n\t#announce(message: string): void {\n\t\tif (!message) {\n\t\t\treturn;\n\t\t}\n\n\t\t// A screen reader ignores a live region whose text did not change; the zero-width space makes\n\t\t// two consecutive identical messages differ.\n\t\tthis.announcement.set(this.announcement() === message ? `${message}` : message);\n\t}\n}\n","<div\n\tclass=\"hub-field hub-file-input\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t<!--\n\t\t\tThe dropzone is a <label> bound to the hidden native input: clicking or activating it with\n\t\t\tthe keyboard opens the file dialog through the platform, so no role, tabindex or key\n\t\t\thandler is needed. The \"browse\" affordance is a <span>, not a <button>, because a button\n\t\t\tinside a label would open the dialog twice.\n\t\t-->\n\t\t<label\n\t\t\tclass=\"hub-file-input__dropzone\"\n\t\t\t[for]=\"id\"\n\t\t\t[class.hub-file-input__dropzone--dragover]=\"isDragging()\"\n\t\t\t[class.hub-file-input__dropzone--no-drop]=\"!dragDrop()\"\n\t\t\t[class.hub-file-input__dropzone--invalid]=\"isInvalid\"\n\t\t\t(dragenter)=\"handleDragEnter($event)\"\n\t\t\t(dragover)=\"handleDragOver($event)\"\n\t\t\t(dragleave)=\"handleDragLeave($event)\"\n\t\t\t(drop)=\"handleDrop($event)\"\n\t\t>\n\t\t\t<input\n\t\t\t\t#nativeInput\n\t\t\t\ttype=\"file\"\n\t\t\t\tclass=\"hub-file-input__native\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[accept]=\"accept()\"\n\t\t\t\t[multiple]=\"multiple()\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[attr.capture]=\"capture()\"\n\t\t\t\t[attr.aria-required]=\"required() ? 'true' : null\"\n\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t[attr.aria-describedby]=\"constraintsHint() ? id + '-hint' : null\"\n\t\t\t\t(change)=\"handleNativeChange($event)\"\n\t\t\t\t(blur)=\"handleBlur($event)\"\n\t\t\t/>\n\n\t\t\t<span class=\"hub-file-input__icon\" aria-hidden=\"true\"></span>\n\n\t\t\t@if (noticeTpt(); as notice) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"notice.template\"></ng-container>\n\t\t\t}\n\n\t\t\t<span class=\"hub-file-input__prompt\">\n\t\t\t\t@if (dragDrop()) {\n\t\t\t\t\t<span class=\"hub-file-input__drop-text\">{{ dropTextLabel() }}</span>\n\t\t\t\t}\n\t\t\t\t@if (dropSubtextLabel()) {\n\t\t\t\t\t<span class=\"hub-file-input__drop-subtext\">{{ dropSubtextLabel() }}</span>\n\t\t\t\t}\n\t\t\t\t<span class=\"hub-file-input__browse\">{{ browseLabel() }}</span>\n\t\t\t</span>\n\n\t\t\t@if (constraintsHint()) {\n\t\t\t\t<span class=\"hub-file-input__hint\" [id]=\"id + '-hint'\">{{ constraintsHint() }}</span>\n\t\t\t}\n\t\t</label>\n\n\t\t@if (preview() !== 'none' && _items().length > 0) {\n\t\t\t<ul class=\"hub-file-input__list\" [class.hub-file-input__list--grid]=\"preview() === 'grid'\">\n\t\t\t\t@for (item of _items(); track item.id) {\n\t\t\t\t\t<li class=\"hub-file-input__item\" [attr.data-status]=\"item.status\">\n\t\t\t\t\t\t@if (previewTpt(); as tpt) {\n\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"tpt.template\"\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"previewContext(item)\"\n\t\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t<span class=\"hub-file-input__thumb\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t@if (item.previewUrl) {\n\t\t\t\t\t\t\t\t\t<img class=\"hub-file-input__image\" [src]=\"item.previewUrl\" alt=\"\" />\n\t\t\t\t\t\t\t\t} @else if (iconTpt(); as icon) {\n\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"icon.template\"\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item }\"\n\t\t\t\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-file-input__file-icon\"></span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t\t<span class=\"hub-file-input__meta\">\n\t\t\t\t\t\t\t\t<span class=\"hub-file-input__name\" [title]=\"item.file.name\">{{ item.file.name }}</span>\n\t\t\t\t\t\t\t\t<span class=\"hub-file-input__size\">{{ labels().formatSize(item.file.size) }}</span>\n\n\t\t\t\t\t\t\t\t@if (item.status === 'uploading') {\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__progress\"\n\t\t\t\t\t\t\t\t\t\t[class.hub-file-input__progress--indeterminate]=\"item.progress === null\"\n\t\t\t\t\t\t\t\t\t\trole=\"progressbar\"\n\t\t\t\t\t\t\t\t\t\taria-valuemin=\"0\"\n\t\t\t\t\t\t\t\t\t\taria-valuemax=\"100\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-valuenow]=\"item.progress\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__progress-bar\"\n\t\t\t\t\t\t\t\t\t\t\t[style.--hub-file-input-progress-value]=\"item.progress ?? 0\"\n\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@if (item.status === 'error') {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-file-input__error\">{{ errorText(item) }}</span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t\t<span class=\"hub-file-input__actions\">\n\t\t\t\t\t\t\t\t@if (item.status === 'uploading') {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__action hub-file-input__action--cancel\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().cancel\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"cancel(item.id)\"\n\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@if (item.status === 'error') {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__action hub-file-input__action--retry\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().retry\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"retry(item.id)\"\n\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@if (!disabled() && item.status !== 'uploading') {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__action hub-file-input__action--remove\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().remove\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"remove(item.id)\"\n\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\n\t\t\t@if (_items().length > 1 && !disabled()) {\n\t\t\t\t<button type=\"button\" class=\"hub-file-input__clear\" (click)=\"clear()\">{{ labels().clear }}</button>\n\t\t\t}\n\t\t}\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n\n\t<span class=\"hub-file-input__live\" aria-live=\"polite\">{{ announcement() }}</span>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Inverts a HEX color, or returns the best contrasting black/white when `bw` is enabled.\n */\n@Pipe({\n\tname: 'hubInvertColor'\n})\nexport class HubInvertColorPipe implements PipeTransform {\n\t/**\n\t * @param hex - HEX color (`#rgb` or `#rrggbb`).\n\t * @param bw - When `true`, returns `#000000` or `#FFFFFF` for maximum contrast.\n\t * @returns The inverted (or contrasting) HEX color.\n\t */\n\ttransform(hex: string, bw: boolean = false): unknown {\n\t\tif (!hex) {\n\t\t\treturn '#000000';\n\t\t}\n\n\t\tif (hex.indexOf('#') === 0) {\n\t\t\thex = hex.slice(1);\n\t\t}\n\n\t\t// Convert 3-digit hex to 6-digits.\n\t\tif (hex.length === 3) {\n\t\t\thex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n\t\t}\n\n\t\tif (hex.length !== 6) {\n\t\t\tthrow new Error('Invalid HEX color.');\n\t\t}\n\n\t\tlet r: any = parseInt(hex.slice(0, 2), 16);\n\t\tlet g: any = parseInt(hex.slice(2, 4), 16);\n\t\tlet b: any = parseInt(hex.slice(4, 6), 16);\n\n\t\tif (bw) {\n\t\t\t// http://stackoverflow.com/a/3943023/112731\n\t\t\treturn r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#FFFFFF';\n\t\t}\n\n\t\t// Invert color components.\n\t\tr = (255 - r).toString(16);\n\t\tg = (255 - g).toString(16);\n\t\tb = (255 - b).toString(16);\n\n\t\t// Pad each with zeros and return.\n\t\treturn '#' + r.padStart(2, '0') + g.padStart(2, '0') + b.padStart(2, '0');\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { joinButLast } from '../utils/utils';\n\n/**\n * Joins an array using a separator for all but the last element, which uses a dedicated glue.\n */\n@Pipe({\n\tname: 'hubJoinButLast'\n})\nexport class HubJoinButLastPipe implements PipeTransform {\n\t/**\n\t * @param values - Values to join.\n\t * @param glue - Separator between all but the last element.\n\t * @param lastGlue - Separator before the last element.\n\t * @returns The joined string.\n\t */\n\ttransform(values: any[], glue?: string, lastGlue?: string): string {\n\t\treturn joinButLast(values, glue, lastGlue);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { get } from '../utils/utils';\n\n/**\n * Maps an array of objects to an array of values read from a dot-separated path.\n */\n@Pipe({\n\tname: 'hubMap'\n})\nexport class HubMapPipe implements PipeTransform {\n\t/**\n\t * @param value - Array of objects.\n\t * @param path - Dot-separated path read from each item.\n\t * @returns The array of resolved values.\n\t */\n\ttransform(value: any[], path: string): any[] {\n\t\treturn value.map((item) => get(item, path));\n\t}\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\n/**\n * Marks a URL as a trusted resource URL via the `DomSanitizer`.\n */\n@Pipe({\n\tname: 'hubSafeUrl'\n})\nexport class HubSafeUrlPipe implements PipeTransform {\n\tprivate readonly sanitizer = inject(DomSanitizer);\n\n\t/**\n\t * @param value - The raw URL.\n\t * @returns A `SafeUrl` trusted as a resource URL.\n\t */\n\ttransform(value: string): SafeUrl {\n\t\treturn this.sanitizer.bypassSecurityTrustResourceUrl(value);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { camelToSnakeUpper } from '../utils/utils';\n\n/**\n * Converts a camelCase string to UPPER_SNAKE_CASE.\n */\n@Pipe({\n\tname: 'hubSnakeUpper'\n})\nexport class HubSnakeUpperPipe implements PipeTransform {\n\t/**\n\t * @param value - camelCase identifier.\n\t * @returns The UPPER_SNAKE_CASE representation.\n\t */\n\ttransform(value: string): unknown {\n\t\treturn camelToSnakeUpper(value);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/** Matches a single letter, including accented and special Latin characters. */\nconst LETTERS_REGEXP = /^[a-zA-ZáéíóúüñçÁÉÍÓÚÜÑÇ]$/;\n\n/**\n * Capitalizes the first letter of a string, skipping leading non-letter characters.\n */\n@Pipe({\n\tname: 'hubUcfirst'\n})\nexport class HubUcfirstPipe implements PipeTransform {\n\t/**\n\t * @param value - Input string.\n\t * @returns The string with its first letter uppercased.\n\t */\n\ttransform(value: string = ''): string {\n\t\tif (typeof value !== 'string') {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst stringArray = value.split('');\n\n\t\tfor (let i = 0; i < stringArray.length; i++) {\n\t\t\tif (LETTERS_REGEXP.test(stringArray[i])) {\n\t\t\t\tstringArray[i] = stringArray[i].toUpperCase();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn stringArray.join('');\n\t}\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { areEqual } from '../utils/utils';\n\n/**\n * Cross-field validator that checks whether two controls of a `FormGroup` hold equal values.\n *\n * Sets the `equal` error on the group when the values differ. Returns `null` (valid) when either\n * control is empty, so the requirement is only enforced once both have a value.\n *\n * @param primaryControlName - Name of the first control.\n * @param secondaryControlName - Name of the second control.\n * @returns A validator function for use on a `FormGroup`.\n *\n * @example\n * ```ts\n * new FormGroup({\n * password: new FormControl(''),\n * confirm: new FormControl('')\n * }, { validators: hubAreEqual('password', 'confirm') });\n * ```\n */\nexport function hubAreEqual(primaryControlName: string, secondaryControlName: string): ValidatorFn {\n\treturn (group: AbstractControl): ValidationErrors | null => {\n\t\tconst primaryControl = group.get(primaryControlName);\n\t\tconst secondaryControl = group.get(secondaryControlName);\n\n\t\tif (!primaryControl?.value || !secondaryControl?.value) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!areEqual(primaryControl.value, secondaryControl.value)) {\n\t\t\treturn { equal: true };\n\t\t}\n\n\t\treturn null;\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { matchesAccept } from '../utils/file-accept';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that every file held by the control matches an `accept` specification.\n *\n * Complements the `accept` input of `<hub-file-input>`, which *filters* offending files before they\n * reach the value. This validator instead makes the control **invalid**, which is what you want when\n * files can also arrive from outside the component (patched value, restored draft, another control).\n *\n * Sets the `fileAccept` error with `{ accept, files }`, where `files` lists the offending names.\n * An empty control is valid — pair it with `Validators.required` to demand a file.\n *\n * @param accept - The accept specification, e.g. `'image/*,.pdf'`.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File[]>([], [hubAcceptedFiles('image/*,.pdf')]);\n * ```\n */\nexport function hubAcceptedFiles(accept: string): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst offending = toFileArray(control.value).filter((file) => !matchesAccept(file, accept));\n\n\t\tif (offending.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn { fileAccept: { accept, files: offending.map((file) => file.name) } };\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that no file held by the control exceeds a maximum size.\n *\n * Sets the `fileMaxSize` error with `{ max, actual, files }`, where `actual` is the size of the\n * largest offending file and `files` lists the offending names. An empty control is valid.\n *\n * @param maxBytes - The maximum size per file, in bytes.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File | null>(null, [hubMaxFileSize(5 * 1024 * 1024)]);\n * ```\n */\nexport function hubMaxFileSize(maxBytes: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst offending = toFileArray(control.value).filter((file) => file.size > maxBytes);\n\n\t\tif (offending.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tfileMaxSize: {\n\t\t\t\tmax: maxBytes,\n\t\t\t\tactual: Math.max(...offending.map((file) => file.size)),\n\t\t\t\tfiles: offending.map((file) => file.name)\n\t\t\t}\n\t\t};\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that no file held by the control falls below a minimum size.\n *\n * Useful to reject empty or truncated uploads (a 0-byte file is a common symptom of a failed export).\n * Sets the `fileMinSize` error with `{ min, actual, files }`, where `actual` is the size of the\n * smallest offending file. An empty control is valid.\n *\n * @param minBytes - The minimum size per file, in bytes.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File | null>(null, [hubMinFileSize(1)]);\n * ```\n */\nexport function hubMinFileSize(minBytes: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst offending = toFileArray(control.value).filter((file) => file.size < minBytes);\n\n\t\tif (offending.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tfileMinSize: {\n\t\t\t\tmin: minBytes,\n\t\t\t\tactual: Math.min(...offending.map((file) => file.size)),\n\t\t\t\tfiles: offending.map((file) => file.name)\n\t\t\t}\n\t\t};\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that the combined size of every file held by the control stays within a budget.\n *\n * This is the constraint a request-body limit actually enforces, and it is not implied by a\n * per-file maximum: ten files of 2 MB pass `hubMaxFileSize(5 MB)` and still blow a 10 MB request.\n *\n * Sets the `fileMaxTotalSize` error with `{ max, actual }`. An empty control is valid.\n *\n * @param maxBytes - The maximum combined size, in bytes.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File[]>([], [hubMaxTotalSize(20 * 1024 * 1024)]);\n * ```\n */\nexport function hubMaxTotalSize(maxBytes: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst files = toFileArray(control.value);\n\n\t\tif (files.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst total = files.reduce((sum, file) => sum + file.size, 0);\n\n\t\treturn total > maxBytes ? { fileMaxTotalSize: { max: maxBytes, actual: total } } : null;\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that the control holds at most `max` files.\n *\n * Sets the `fileMaxFiles` error with `{ max, actual }`. An empty control is valid.\n *\n * @param max - The maximum number of files.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File[]>([], [hubMaxFiles(3)]);\n * ```\n */\nexport function hubMaxFiles(max: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst count = toFileArray(control.value).length;\n\n\t\treturn count > max ? { fileMaxFiles: { max, actual: count } } : null;\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that the control holds at least `min` files.\n *\n * Unlike the other file validators, this one **does** reject an empty control: holding zero files\n * is precisely what a minimum forbids. It therefore subsumes `Validators.required`, and adding both\n * only produces two errors for the same cause.\n *\n * Sets the `fileMinFiles` error with `{ min, actual }`.\n *\n * @param min - The minimum number of files.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File[]>([], [hubMinFiles(2)]);\n * ```\n */\nexport function hubMinFiles(min: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst count = toFileArray(control.value).length;\n\n\t\treturn count < min ? { fileMinFiles: { min, actual: count } } : null;\n\t};\n}\n","import { ViewContainerRef } from '@angular/core';\nimport { HubInputComponent } from '../components/input/input.component';\nimport { HubSelectComponent } from '../select/select.component';\n\n/** A `{ value, label }` option for select-kind controls. */\nexport interface HubFormControlOption {\n\tvalue: unknown;\n\tlabel: string;\n}\n\n/**\n * Framework-neutral description of a primitive control to render dynamically.\n *\n * The shape mirrors (structurally) the contract other ng-hub-ui libraries expose\n * for optional control hosting (e.g. `ng-hub-ui-paginable`'s table), so this\n * adapter can be wired into them without either package importing the other.\n */\nexport interface HubFormControlConfig {\n\tkind: 'input' | 'select';\n\tvalue: unknown;\n\ttype?: string;\n\tplaceholder?: string;\n\tariaLabel?: string;\n\tcssClass?: string;\n\toptions?: ReadonlyArray<HubFormControlOption>;\n\tonValueChange: (value: unknown) => void;\n}\n\n/** Live handle to a control created by {@link hubFormControlAdapter}. */\nexport interface HubFormControlHandle {\n\t/** Pushes a new value into the control (external updates). */\n\tsetValue(value: unknown): void;\n\t/** Destroys the control and releases its resources. */\n\tdestroy(): void;\n}\n\n/** Adapter that renders primitive controls with the ng-hub-ui-forms components. */\nexport interface HubFormControlAdapter {\n\tcreate(container: ViewContainerRef, config: HubFormControlConfig): HubFormControlHandle;\n}\n\n/**\n * Ready-made {@link HubFormControlAdapter} backed by `HubInputComponent` /\n * `HubSelectComponent`.\n *\n * Wire it into any ng-hub-ui primitive that exposes an optional form-controls\n * token, e.g. `provideHubPaginableFormControls(hubFormControlAdapter)`. The host\n * library keeps **zero hard dependency** on `ng-hub-ui-forms`; only an app that\n * opts in pulls these components.\n *\n * Requires `provideHubForms()` (or the default config) to be available in the\n * environment so the field components can resolve their configuration.\n */\nexport const hubFormControlAdapter: HubFormControlAdapter = {\n\tcreate(container: ViewContainerRef, config: HubFormControlConfig): HubFormControlHandle {\n\t\tif (config.kind === 'select') {\n\t\t\tconst ref = container.createComponent(HubSelectComponent);\n\t\t\tref.setInput('items', (config.options ?? []).map((option) => ({ ...option })));\n\t\t\tref.setInput('bindLabel', 'label');\n\t\t\tref.setInput('bindValue', 'value');\n\t\t\tref.setInput('clearable', false);\n\t\t\tref.setInput('searchable', false);\n\t\t\tif (config.placeholder) {\n\t\t\t\tref.setInput('placeholder', config.placeholder);\n\t\t\t}\n\t\t\tif (config.cssClass) {\n\t\t\t\tref.setInput('classlist', config.cssClass);\n\t\t\t}\n\t\t\tref.instance.writeValue(config.value);\n\t\t\tconst subscription = ref.instance.valueChange.subscribe((value: unknown) => config.onValueChange(value));\n\t\t\tref.changeDetectorRef.detectChanges();\n\n\t\t\treturn {\n\t\t\t\tsetValue: (value) => ref.instance.writeValue(value as never),\n\t\t\t\tdestroy: () => {\n\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\tref.destroy();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tconst ref = container.createComponent(HubInputComponent);\n\t\tref.setInput('type', config.type ?? 'text');\n\t\tif (config.placeholder) {\n\t\t\tref.setInput('placeholder', config.placeholder);\n\t\t}\n\t\tif (config.cssClass) {\n\t\t\tref.setInput('classlist', config.cssClass);\n\t\t}\n\t\tref.instance.writeValue(config.value as never);\n\t\tconst subscription = ref.instance.valueChange.subscribe((value: unknown) => config.onValueChange(value));\n\t\tref.changeDetectorRef.detectChanges();\n\n\t\treturn {\n\t\t\tsetValue: (value) => ref.instance.writeValue(value as never),\n\t\t\tdestroy: () => {\n\t\t\t\tsubscription.unsubscribe();\n\t\t\t\tref.destroy();\n\t\t\t}\n\t\t};\n\t}\n};\n","/*\n * Public API Surface of ng-hub-ui-forms\n */\n\n// Shared base\nexport { HubFormControl } from './lib/shared/hub-form-control';\nexport { HubFieldControl } from './lib/shared/hub-field-control';\nexport { HubGroupControl } from './lib/shared/hub-group-control';\nexport type { HubGroupErrorTrigger } from './lib/shared/hub-group-control';\nexport { defaultInvalidFeedback } from './lib/shared/hub-error-display';\n\n// Configuration\nexport { HUB_FORMS_CONFIG, defaultHubFormsConfig, provideHubForms } from './lib/services/forms-config';\nexport type { HubFormsConfig } from './lib/services/forms-config';\nexport { HUB_FILE_UPLOADER, provideHubFileUploader } from './lib/services/file-uploader';\n\n// Components\nexport { HubInputComponent } from './lib/components/input/input.component';\nexport { HubOtpInputComponent } from './lib/components/otp/otp.component';\nexport type { HubOtpMode } from './lib/components/otp/otp.component';\nexport { HubTextareaComponent } from './lib/components/textarea/textarea.component';\nexport { HubSliderComponent } from './lib/components/slider/slider.component';\nexport type { HubSliderValue } from './lib/components/slider/slider.component';\nexport { HubSegmentedComponent } from './lib/components/segmented/segmented.component';\nexport type { HubSegmentedOption, HubSegmentedSize } from './lib/components/segmented/segmented.component';\nexport { HubFieldsetComponent } from './lib/components/fieldset/fieldset.component';\nexport { HubFormComponent } from './lib/components/form/form.component';\nexport { HubLegendComponent } from './lib/components/legend/legend.component';\nexport { HubSelectComponent } from './lib/select/select.component';\nexport { HubDatepickerComponent } from './lib/components/datepicker/datepicker.component';\nexport { HubFileInputComponent } from './lib/components/file-input/file-input.component';\n\n// Select — dropdown customization passthrough (vendored ng-select template directives)\nexport { NgOptionComponent } from './lib/select/vendor/lib/ng-option.component';\nexport { NgSelectConfig } from './lib/select/vendor/lib/config.service';\nexport {\n\tNgOptionTemplateDirective,\n\tNgOptgroupTemplateDirective,\n\tNgLabelTemplateDirective,\n\tNgMultiLabelTemplateDirective,\n\tNgHeaderTemplateDirective,\n\tNgFooterTemplateDirective,\n\tNgNotFoundTemplateDirective,\n\tNgTypeToSearchTemplateDirective,\n\tNgLoadingTextTemplateDirective,\n\tNgLoadingSpinnerTemplateDirective,\n\tNgTagTemplateDirective,\n\tNgClearButtonTemplateDirective\n} from './lib/select/vendor/lib/ng-templates.directive';\n\n// Directives\nexport { HubFormTextDirective } from './lib/directives/form-text.directive';\nexport { HubValidationErrorDirective } from './lib/directives/validation-error.directive';\nexport { HubLegendDirective } from './lib/directives/legend.directive';\nexport { HubAutoresizeDirective } from './lib/directives/autoresize.directive';\nexport { HubInputPrefixDirective } from './lib/directives/input-prefix.directive';\nexport { HubInputSuffixDirective } from './lib/directives/input-suffix.directive';\nexport { 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 { HubFileDropzoneNoticeDirective } from './lib/directives/file-dropzone-notice.directive';\n\n// Pipes\nexport { HubInvertColorPipe } from './lib/pipes/invert-color.pipe';\nexport { HubJoinButLastPipe } from './lib/pipes/join-but-last.pipe';\nexport { HubMapPipe } from './lib/pipes/map.pipe';\nexport { HubSafeUrlPipe } from './lib/pipes/safe-url.pipe';\nexport { HubSnakeUpperPipe } from './lib/pipes/snake-upper.pipe';\nexport { HubUcfirstPipe } from './lib/pipes/ucfirst.pipe';\n\n// Validators\nexport { hubAreEqual } from './lib/validators/are-equal.validator';\nexport { hubAcceptedFiles } from './lib/validators/accepted-files.validator';\nexport { hubMaxFileSize } from './lib/validators/max-file-size.validator';\nexport { hubMinFileSize } from './lib/validators/min-file-size.validator';\nexport { hubMaxTotalSize } from './lib/validators/max-total-size.validator';\nexport { hubMaxFiles } from './lib/validators/max-files.validator';\nexport { hubMinFiles } from './lib/validators/min-files.validator';\n\n// Interfaces & types\nexport type { FormTextType, HubLabelType } from './lib/interfaces/common.interface';\nexport { FormTextTypes, HubLabelTypes } from './lib/interfaces/common.interface';\nexport type { HubInputFormat } from './lib/interfaces/input.interface';\nexport { HubInputFormats } from './lib/interfaces/input.interface';\nexport type { HubSelectFormat } from './lib/interfaces/select.interface';\nexport { HubSelectFormats } from './lib/interfaces/select.interface';\nexport type { HubDatepickerMode, HubDateRange, HubDateValue, HubDatepickerLabels, HubDatepickerConfig } from './lib/interfaces/datepicker.interface';\nexport { defaultHubDatepickerConfig, defaultHubDatepickerLabels } from './lib/interfaces/datepicker.interface';\nexport type {\n\tHubFileConstraints,\n\tHubFileInputLabels,\n\tHubFileItem,\n\tHubFilePreview,\n\tHubFileRejection,\n\tHubFileRejectionReason,\n\tHubFileStatus\n} from './lib/interfaces/file-input.interface';\nexport { defaultHubFileInputLabels } from './lib/interfaces/file-input.interface';\nexport type { HubFileUploader, HubFileUploadEvent } from './lib/interfaces/file-uploader.interface';\n\n// Utilities\nexport { formatFileSize } from './lib/utils/file-size';\nexport { matchesAccept } from './lib/utils/file-accept';\nexport { fileKey } from './lib/utils/file-key';\nexport { toFileArray } from './lib/utils/file-value';\nexport type { HubFileValue } from './lib/utils/file-value';\nexport {\n\tareEqual,\n\tcamelToSnakeUpper,\n\tcontrolHasMinOrMaxValidator,\n\tget,\n\tgetActiveElement,\n\tgetMinOrMaxValueFromValidator,\n\tisDefined,\n\tisString,\n\tjoinButLast,\n\trunInZone,\n\tuuid\n} from './lib/utils/utils';\nexport { applyMask, isMaskActive } from './lib/utils/mask';\nexport type { HubMaskResult } from './lib/utils/mask';\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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E,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;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,EAA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"}
|
|
1
|
+
{"version":3,"file":"ng-hub-ui-forms.mjs","sources":["../../../projects/forms/src/lib/utils/utils.ts","../../../projects/forms/src/lib/shared/hub-form-control.ts","../../../projects/forms/src/lib/directives/form-text.directive.ts","../../../projects/forms/src/lib/directives/validation-error.directive.ts","../../../projects/forms/src/lib/interfaces/datepicker.interface.ts","../../../projects/forms/src/lib/utils/file-size.ts","../../../projects/forms/src/lib/interfaces/file-input.interface.ts","../../../projects/forms/src/lib/shared/hub-error-display.ts","../../../projects/forms/src/lib/services/forms-config.ts","../../../projects/forms/src/lib/shared/hub-field-control.ts","../../../projects/forms/src/lib/shared/hub-group-control.ts","../../../projects/forms/src/lib/services/file-uploader.ts","../../../projects/forms/src/lib/interfaces/common.interface.ts","../../../projects/forms/src/lib/interfaces/input.interface.ts","../../../projects/forms/src/lib/directives/input-prefix.directive.ts","../../../projects/forms/src/lib/directives/input-suffix.directive.ts","../../../projects/forms/src/lib/utils/mask.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/shared/resolve-hub-accent.ts","../../../projects/forms/src/lib/components/segmented/segmented.component.ts","../../../projects/forms/src/lib/components/segmented/segmented.component.html","../../../projects/forms/src/lib/directives/legend.directive.ts","../../../projects/forms/src/lib/components/fieldset/fieldset.component.ts","../../../projects/forms/src/lib/components/fieldset/fieldset.component.html","../../../projects/forms/src/lib/components/form/form.component.ts","../../../projects/forms/src/lib/components/form/form.component.html","../../../projects/forms/src/lib/components/legend/legend.component.ts","../../../projects/forms/src/lib/interfaces/select.interface.ts","../../../projects/forms/src/lib/select/vendor/lib/value-utils.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-templates.directive.ts","../../../projects/forms/src/lib/select/vendor/lib/config.service.ts","../../../projects/forms/src/lib/select/vendor/lib/console.service.ts","../../../projects/forms/src/lib/select/vendor/lib/id.ts","../../../projects/forms/src/lib/select/vendor/lib/search-helper.ts","../../../projects/forms/src/lib/select/vendor/lib/items-list.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-dropdown-panel.service.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-dropdown-panel.component.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-option.component.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-select.types.ts","../../../projects/forms/src/lib/select/vendor/lib/selection-model.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-select.component.ts","../../../projects/forms/src/lib/select/vendor/lib/ng-select.component.html","../../../projects/forms/src/lib/select/select.component.ts","../../../projects/forms/src/lib/select/select.component.html","../../../projects/forms/src/lib/components/datepicker/date-utils.ts","../../../projects/forms/src/lib/components/datepicker/datepicker.component.ts","../../../projects/forms/src/lib/components/datepicker/datepicker.component.html","../../../projects/forms/src/lib/directives/file-icon.directive.ts","../../../projects/forms/src/lib/directives/file-dropzone-notice.directive.ts","../../../projects/forms/src/lib/directives/file-preview.directive.ts","../../../projects/forms/src/lib/utils/file-accept.ts","../../../projects/forms/src/lib/utils/file-key.ts","../../../projects/forms/src/lib/utils/file-value.ts","../../../projects/forms/src/lib/components/file-input/file-input.component.ts","../../../projects/forms/src/lib/components/file-input/file-input.component.html","../../../projects/forms/src/lib/pipes/invert-color.pipe.ts","../../../projects/forms/src/lib/pipes/join-but-last.pipe.ts","../../../projects/forms/src/lib/pipes/map.pipe.ts","../../../projects/forms/src/lib/pipes/safe-url.pipe.ts","../../../projects/forms/src/lib/pipes/snake-upper.pipe.ts","../../../projects/forms/src/lib/pipes/ucfirst.pipe.ts","../../../projects/forms/src/lib/validators/are-equal.validator.ts","../../../projects/forms/src/lib/validators/accepted-files.validator.ts","../../../projects/forms/src/lib/validators/max-file-size.validator.ts","../../../projects/forms/src/lib/validators/min-file-size.validator.ts","../../../projects/forms/src/lib/validators/max-total-size.validator.ts","../../../projects/forms/src/lib/validators/max-files.validator.ts","../../../projects/forms/src/lib/validators/min-files.validator.ts","../../../projects/forms/src/lib/integrations/form-control-adapter.ts","../../../projects/forms/src/public-api.ts","../../../projects/forms/src/ng-hub-ui-forms.ts"],"sourcesContent":["import { NgZone } from '@angular/core';\nimport { AbstractControl, FormControl } from '@angular/forms';\nimport { Observable, OperatorFunction } from 'rxjs';\n\n/**\n * Checks if a value is a string.\n *\n * @param value - Value to test.\n * @returns `true` when `value` is a string.\n */\nexport function isString(value: any): value is string {\n\treturn typeof value === 'string';\n}\n\n/**\n * Checks if a value is defined and not null.\n *\n * @param value - Value to test.\n * @returns `true` when `value` is neither `undefined` nor `null`.\n */\nexport function isDefined(value: any): boolean {\n\treturn value !== undefined && value !== null;\n}\n\n/**\n * Operator that runs the source observable within a specified Angular zone.\n *\n * @param zone - The `NgZone` instance used to run emissions.\n * @returns An `OperatorFunction` that re-enters the given zone for every notification.\n */\nexport function runInZone<T>(zone: NgZone): OperatorFunction<T, T> {\n\treturn (source) => {\n\t\treturn new Observable((observer) => {\n\t\t\tconst onNext = (value: T) => zone.run(() => observer.next(value));\n\t\t\tconst onError = (e: any) => zone.run(() => observer.error(e));\n\t\t\tconst onComplete = () => zone.run(() => observer.complete());\n\n\t\t\treturn source.subscribe(onNext, onError, onComplete);\n\t\t});\n\t};\n}\n\n/**\n * Joins an array of strings using a separator for all but the last element, which uses `lastSeparator`.\n *\n * @param texts - Strings to join.\n * @param separator - Separator used between all but the last element. Defaults to `', '`.\n * @param lastSeparator - Separator used before the last element. Defaults to `' and '`.\n * @returns The joined string.\n */\nexport function joinButLast(texts: string[], separator = ', ', lastSeparator = ' and '): string {\n\tif (texts.length < 2) {\n\t\treturn texts.join();\n\t}\n\n\treturn `${texts.slice(0, texts.length - 1).join(separator)} ${lastSeparator} ${texts[texts.length - 1]}`;\n}\n\n/**\n * Checks if two values are equal, taking different types into account.\n *\n * Primitives are compared with strict equality; everything else is compared by JSON serialization.\n *\n * @param first - First value.\n * @param second - Second value.\n * @returns `true` when both values are considered equal.\n */\nexport function areEqual(first: any, second: any): boolean {\n\tconst primitives = ['string', 'number', 'boolean'];\n\n\tif (!primitives.includes(typeof first) || !primitives.includes(typeof second)) {\n\t\treturn JSON.stringify(first) === JSON.stringify(second);\n\t} else {\n\t\treturn first === second;\n\t}\n}\n\n/**\n * Checks whether a control declares a `min` or `max` validator.\n *\n * @param control - The control to inspect.\n * @param type - Either `'min'` or `'max'`.\n * @returns `true` when the validator is present.\n */\nexport function controlHasMinOrMaxValidator(control: AbstractControl, type: 'min' | 'max'): boolean {\n\tconst validator = control.validator;\n\n\tif (validator === null) {\n\t\treturn false;\n\t}\n\n\tconst value = type === 'max' ? Infinity : -Infinity;\n\tconst errors = validator(new FormControl(value)) ?? {};\n\n\treturn type in errors;\n}\n\n/**\n * Reads the configured `min`/`max` value from a control's validator.\n *\n * @param control - The control to inspect.\n * @param type - Either `'min'` or `'max'`.\n * @returns The configured bound, or `null` when not present.\n */\nexport function getMinOrMaxValueFromValidator(control: AbstractControl, type: 'min' | 'max'): number | null {\n\tconst validator = control.validator;\n\n\tif (validator === null) {\n\t\treturn null;\n\t}\n\n\tconst value = type === 'max' ? Infinity : -Infinity;\n\tconst errors = validator(new FormControl(value)) ?? {};\n\n\treturn type in errors ? errors[type][type] : null;\n}\n\n/**\n * Retrieves a value from an object following a dot-separated path, with an optional fallback.\n *\n * @param object - Source object.\n * @param path - Dot-separated path (e.g. `'a.b.c'`).\n * @param fallback - Value returned when the path cannot be resolved. Defaults to `null`.\n * @returns The resolved value, or the fallback.\n */\nexport function get(object: { [key: string]: any }, path: string, fallback: any = null): any {\n\tconst dotIndex = path.indexOf('.');\n\n\tif (!isDefined(object)) {\n\t\treturn fallback || undefined;\n\t}\n\n\tif (dotIndex === -1) {\n\t\tif (path.length && path in object) {\n\t\t\treturn object[path];\n\t\t}\n\n\t\treturn fallback || undefined;\n\t}\n\n\treturn get(object[path.substring(0, dotIndex)], path.substring(dotIndex + 1), fallback);\n}\n\n/**\n * Converts a camelCase string to UPPER_SNAKE_CASE.\n *\n * @param value - camelCase identifier.\n * @returns The UPPER_SNAKE_CASE representation.\n */\nexport function camelToSnakeUpper(value: string): string {\n\treturn value.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\n/**\n * Generates a UUID using `crypto.randomUUID()` when available, falling back to a timestamp-based id.\n *\n * @returns A unique string identifier.\n */\nexport function uuid(): string {\n\ttry {\n\t\treturn crypto.randomUUID();\n\t} catch (error) {\n\t\treturn (Date.now() + Math.floor(Math.random() * 10000)).toString();\n\t}\n}\n\n/**\n * Returns the active element within the given root, descending into shadow roots when needed.\n *\n * @param root - The document or shadow root to search. Defaults to `document`.\n * @returns The deepest active element, or `null`.\n */\nexport function getActiveElement(root: Document | ShadowRoot = document): Element | null {\n\tconst activeEl = root?.activeElement;\n\n\tif (!activeEl) {\n\t\treturn null;\n\t}\n\n\treturn activeEl.shadowRoot ? getActiveElement(activeEl.shadowRoot) : activeEl;\n}\n","import { AfterContentInit, Directive, input, model, OnDestroy, OnInit } from '@angular/core';\nimport { ControlContainer, FormControlStatus, NgControl, Validators } from '@angular/forms';\nimport { Subject, takeUntil, tap } from 'rxjs';\nimport { isDefined } from '../utils/utils';\n\n/**\n * Base class for every form field in `ng-hub-ui-forms`.\n *\n * Provides the shared `ControlValueAccessor`-adjacent plumbing used by the field components:\n * reactive `required` tracking derived from the bound control's validators, programmatic\n * show/hide/toggle helpers exposed on the underlying `AbstractControl`, and lifecycle wiring.\n *\n * Subclasses must provide the injected `NgControl` and `ControlContainer` instances.\n */\n@Directive({\n\thost: {\n\t\t'[class.hidden-control]': 'hidden'\n\t}\n})\nexport abstract class HubFormControl implements OnInit, AfterContentInit, OnDestroy {\n\t/**\n\t * Name of the form control when used within a form group/array.\n\t */\n\treadonly formControlName = input<string>();\n\n\t/**\n\t * Whether the control is required. Derived from the bound control's validators when reactive.\n\t */\n\treadonly required = model<boolean | null>(null);\n\n\t/**\n\t * Whether the control is hidden.\n\t */\n\thidden: boolean = false;\n\n\tprotected _destroy$ = new Subject();\n\tprotected _isFormControl: boolean = false;\n\tprotected abstract _control: NgControl;\n\tprotected abstract _controlContainer: ControlContainer;\n\n\t/**\n\t * Shows the control.\n\t */\n\tshow = () => {\n\t\tthis.hidden = false;\n\t};\n\n\t/**\n\t * Hides the control.\n\t */\n\thide = () => {\n\t\tthis.hidden = true;\n\t};\n\n\t/**\n\t * Toggles the control visibility.\n\t */\n\ttoggle = () => {\n\t\tthis.hidden = !this.hidden;\n\t};\n\n\tngOnInit(): void {\n\t\tif (this._control) {\n\t\t\tthis.setShowAndHideFunctions();\n\t\t\tthis._isFormControl = !!this.formControlName();\n\t\t}\n\t}\n\n\tngAfterContentInit(): void {\n\t\tconst formControlName = this.formControlName();\n\n\t\tif (this._control && !this._control.control && formControlName) {\n\t\t\tthrow new Error(`Can't find form control with name ${formControlName}`);\n\t\t}\n\n\t\tif (this._control?.control && formControlName) {\n\t\t\tconst control = this._control.control;\n\n\t\t\tif (isDefined(this.required())) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`You're using the inline property \"required\" with a reactive control. The property will be overwritten with the validators of the control.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.required.set(control.hasValidator(Validators.required));\n\t\t\tcontrol.statusChanges\n\t\t\t\t.pipe(\n\t\t\t\t\ttakeUntil(this._destroy$),\n\t\t\t\t\ttap((status: FormControlStatus) => {\n\t\t\t\t\t\tthis.required.set(control.hasValidator(Validators.required));\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.subscribe();\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._destroy$.next(null);\n\t\tthis._destroy$.complete();\n\t}\n\n\t/**\n\t * Attaches `show`, `hide` and `toggle` helpers to the underlying form control object.\n\t *\n\t * Best-effort: if the control cannot be resolved (e.g. the container is not yet initialized),\n\t * the helpers are simply not attached. This never throws — a missing convenience must not break\n\t * rendering.\n\t */\n\tprotected setShowAndHideFunctions() {\n\t\tconst formControlName = this.formControlName();\n\n\t\tif (!formControlName) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst control = this._controlContainer?.control?.get(formControlName) as any;\n\n\t\tif (!control) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontrol['show'] = this.show;\n\t\tcontrol['hide'] = this.hide;\n\t\tcontrol['toggle'] = this.toggle;\n\t}\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Marks a template as form helper text projected into a form field.\n *\n * @example\n * ```html\n * <hub-input formControlName=\"email\">\n * <ng-template hubFormText>We'll never share your email.</ng-template>\n * </hub-input>\n * ```\n */\n@Directive({\n\tselector: '[hubFormText]'\n})\nexport class HubFormTextDirective {\n\t/** Template reference for the helper text. */\n\treadonly template = inject(TemplateRef);\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n/**\n * Marks a template as the validation error message for a specific error key.\n *\n * Used by form fields and form containers to override the default message rendered\n * for a given validation error (e.g. `required`, `min`, `equal`).\n *\n * @example\n * ```html\n * <hub-input formControlName=\"age\">\n * <ng-template hubValidationError key=\"min\">Must be at least 18.</ng-template>\n * </hub-input>\n * ```\n */\n@Directive({\n\tselector: '[hubValidationError]'\n})\nexport class HubValidationErrorDirective {\n\t/** Unique key for the validation error (e.g. `'required'`, `'min'`). */\n\treadonly key = input.required<string>();\n\n\t/** Template reference for the error message. */\n\treadonly template = inject(TemplateRef);\n}\n","/** Selection mode for `<hub-datepicker>`. */\nexport type HubDatepickerMode = 'single' | 'range';\n\n/** A selected date range (ISO `YYYY-MM-DD` strings, or `null` while incomplete). */\nexport interface HubDateRange {\n\tstart: string | null;\n\tend: string | null;\n}\n\n/** The CVA value of `<hub-datepicker>`: an ISO string in `single` mode, a range in `range` mode. */\nexport type HubDateValue = string | HubDateRange | null;\n\n/**\n * Localizable, overridable labels for the datepicker (button text + accessibility names).\n * Month and weekday names come from the `Intl` API and need no 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}\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/** 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};\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\tlabels: defaultHubDatepickerLabels\n};\n","/** Binary size units, ascending. */\nconst FILE_SIZE_UNITS = ['B', 'KB', 'MB', 'GB', 'TB'] as const;\n\n/**\n * Formats a byte count as human-readable text using binary multiples (1 KB = 1024 B).\n *\n * Values below 10 in their unit keep one decimal (`1.4 MB`); larger ones are rounded (`24 MB`).\n * The decimal separator follows the given locale, or the runtime's default when omitted.\n *\n * @param bytes - The size in bytes.\n * @param locale - BCP 47 locale used to format the number. Defaults to the runtime locale.\n * @returns The formatted size, or an empty string when `bytes` is not a finite, non-negative number.\n */\nexport function formatFileSize(bytes: number, locale?: string): string {\n\tif (!Number.isFinite(bytes) || bytes < 0) {\n\t\treturn '';\n\t}\n\n\tif (bytes < 1024) {\n\t\treturn `${bytes} ${FILE_SIZE_UNITS[0]}`;\n\t}\n\n\tlet value = bytes;\n\tlet unit = 0;\n\n\twhile (value >= 1024 && unit < FILE_SIZE_UNITS.length - 1) {\n\t\tvalue /= 1024;\n\t\tunit++;\n\t}\n\n\tconst formatted = new Intl.NumberFormat(locale, { maximumFractionDigits: value < 10 ? 1 : 0 }).format(value);\n\n\treturn `${formatted} ${FILE_SIZE_UNITS[unit]}`;\n}\n","import { formatFileSize } from '../utils/file-size';\n\n/** Why a file was refused by `<hub-file-input>` before it ever reached the form value. */\nexport type HubFileRejectionReason = 'accept' | 'maxSize' | 'minSize' | 'maxFiles' | 'maxTotalSize' | 'duplicate';\n\n/** A file the component refused, together with the constraint that refused it. */\nexport interface HubFileRejection {\n\t/** The refused file. */\n\tfile: File;\n\t/** The constraint that refused it. */\n\treason: HubFileRejectionReason;\n\t/** The configured limit that was violated (`accept` string, byte count, file count), when applicable. */\n\tlimit: string | number | null;\n}\n\n/** Lifecycle of a single accepted file. `uploading`/`done`/`error` only occur when an uploader is registered. */\nexport type HubFileStatus = 'ready' | 'uploading' | 'done' | 'error';\n\n/**\n * The rich, per-file state exposed by `<hub-file-input>` through its `files()` signal.\n *\n * This is deliberately **not** the form-control value: the control holds plain `File` objects so it\n * can be handed straight to a `FormData`. Preview URLs, upload status and progress live here.\n */\nexport interface HubFileItem {\n\t/** Stable id for the lifetime of the item; used by `remove`, `cancel` and `retry`. */\n\treadonly id: string;\n\t/** The underlying native file. */\n\treadonly file: File;\n\t/** Object URL of the thumbnail, for image files in a browser. `null` otherwise. */\n\treadonly previewUrl: string | null;\n\t/** Current lifecycle status. */\n\treadonly status: HubFileStatus;\n\t/**\n\t * Upload progress from 0 to 100, or `null` when the total size is unknown — the case when the\n\t * transport does not report a total (e.g. `HttpClient` emits `total: undefined`). A `null`\n\t * progress must render as an indeterminate bar, never as 0%.\n\t */\n\treadonly progress: number | null;\n\t/** The error thrown by the uploader, when `status` is `'error'`. */\n\treadonly error: unknown | null;\n\t/**\n\t * The body the uploader reported on `done` — typically the record the server created, whose id\n\t * the application needs to reference the stored file. `null` until the upload succeeds, and\n\t * again after a `retry` restarts it.\n\t */\n\treadonly response: unknown | null;\n}\n\n/** How the accepted files are previewed below the dropzone. */\nexport type HubFilePreview = 'none' | 'list' | 'grid';\n\n/** The active restrictions of a `<hub-file-input>`, handed to the `constraints` label. */\nexport interface HubFileConstraints {\n\t/** The `accept` specification, or `null` when everything is allowed. */\n\taccept: string | null;\n\t/** Maximum size per file in bytes, or `null`. */\n\tmaxSize: number | null;\n\t/** Maximum number of files, or `null`. */\n\tmaxFiles: number | null;\n}\n\n/**\n * Localizable, overridable labels for `<hub-file-input>`.\n *\n * Set them globally through {@link provideHubForms}; they cover both visible text and the\n * accessible names of the internal buttons.\n */\nexport interface HubFileInputLabels {\n\t/** Text of the button that opens the native file dialog. */\n\tbrowse: string;\n\t/** Invitation rendered inside the dropzone. */\n\tdropHere: string;\n\t/**\n\t * Second line of the invitation, under {@link dropHere}. Empty by default, so it renders\n\t * nothing. A dropzone that sets it usually stacks the prompt too, with\n\t * `--hub-file-input-prompt-direction: column`.\n\t */\n\tdropSubtext: string;\n\t/** Accessible name of the per-file remove button. */\n\tremove: string;\n\t/** Text + accessible name of the \"remove all\" button. */\n\tclear: string;\n\t/** Accessible name of the per-file retry button (uploader only). */\n\tretry: string;\n\t/** Accessible name of the per-file cancel button (uploader only). */\n\tcancel: string;\n\t/** Screen-reader summary of the current selection. */\n\tfilesSelected: (count: number) => string;\n\t/** Renders a byte count as human-readable text. */\n\tformatSize: (bytes: number) => string;\n\t/** Renders the reason a file was refused; announced in the live region. */\n\trejection: (rejection: HubFileRejection) => string;\n\t/** Renders the hint that summarizes the active restrictions under the dropzone. */\n\tconstraints: (constraints: HubFileConstraints) => string;\n}\n\n/** Built-in (English) file-input labels. */\nexport const defaultHubFileInputLabels: HubFileInputLabels = {\n\tbrowse: 'Browse files',\n\tdropHere: 'Drag files here, or',\n\tdropSubtext: '',\n\tremove: 'Remove file',\n\tclear: 'Remove all',\n\tretry: 'Retry upload',\n\tcancel: 'Cancel upload',\n\tfilesSelected: (count: number) => (count === 1 ? '1 file selected' : `${count} files selected`),\n\tformatSize: (bytes: number) => formatFileSize(bytes),\n\trejection: ({ file, reason, limit }: HubFileRejection) => {\n\t\tswitch (reason) {\n\t\t\tcase 'accept':\n\t\t\t\treturn `${file.name}: file type not allowed.`;\n\t\t\tcase 'maxSize':\n\t\t\t\treturn `${file.name}: exceeds the maximum size of ${formatFileSize(Number(limit))}.`;\n\t\t\tcase 'minSize':\n\t\t\t\treturn `${file.name}: below the minimum size of ${formatFileSize(Number(limit))}.`;\n\t\t\tcase 'maxFiles':\n\t\t\t\treturn `${file.name}: at most ${limit} files can be selected.`;\n\t\t\tcase 'maxTotalSize':\n\t\t\t\treturn `${file.name}: the total size would exceed ${formatFileSize(Number(limit))}.`;\n\t\t\tcase 'duplicate':\n\t\t\t\treturn `${file.name}: already selected.`;\n\t\t\tdefault:\n\t\t\t\treturn `${file.name}: rejected.`;\n\t\t}\n\t},\n\tconstraints: ({ accept, maxSize, maxFiles }: HubFileConstraints) => {\n\t\tconst parts: string[] = [];\n\n\t\tif (accept) {\n\t\t\tparts.push(accept);\n\t\t}\n\n\t\tif (maxSize != null) {\n\t\t\tparts.push(`up to ${formatFileSize(maxSize)} each`);\n\t\t}\n\n\t\tif (maxFiles != null) {\n\t\t\tparts.push(maxFiles === 1 ? '1 file max' : `${maxFiles} files max`);\n\t\t}\n\n\t\treturn parts.join(' · ');\n\t}\n};\n","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 { 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\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};\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\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: HUB_FORMS_CONFIG,\n\t\t\tuseValue: { ...defaultHubFormsConfig, ...config, datepicker, fileInput } as HubFormsConfig\n\t\t}\n\t]);\n}\n\n/** Recursively-optional version of a type, for partial config overrides. */\ntype DeepPartial<T> = {\n\t[K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];\n};\n","import {\n\tAfterContentInit,\n\tChangeDetectorRef,\n\tcontentChild,\n\tcontentChildren,\n\tDirective,\n\tElementRef,\n\tinject,\n\tinput,\n\tmodel,\n\tsignal,\n\tTemplateRef\n} from '@angular/core';\nimport { ControlContainer, ControlValueAccessor, NgControl, ValidationErrors } from '@angular/forms';\nimport { takeUntil } from 'rxjs';\nimport { HubFormTextDirective } from '../directives/form-text.directive';\nimport { HubValidationErrorDirective } from '../directives/validation-error.directive';\nimport { HUB_FORMS_CONFIG } from '../services/forms-config';\nimport { HubFormControl } from './hub-form-control';\nimport { isDefined, uuid } from '../utils/utils';\n\n/**\n * Shared base for single-value form fields (input, textarea, slider, select…).\n *\n * Extends {@link HubFormControl} with the `ControlValueAccessor` plumbing and the automatic\n * validation-error display that every field shares:\n *\n * - Injects the bound `NgControl` / `ControlContainer` and registers itself as value accessor.\n * - Exposes `isInvalid` / `errors`, resolving from the reactive control or from native validity.\n * - Collects projected `hubValidationError` templates and resolves messages through the per-field\n * override, the global {@link provideHubForms} config, or the built-in defaults.\n * - Keeps the (OnPush) view in sync with the control via `control.events` + `markForCheck`.\n *\n * Subclasses only implement the value-specific bits: the `_value` signal, `writeValue`, the change\n * handler and their own template/inputs.\n */\n@Directive({\n\thost: {\n\t\t'(focusout)': 'handleBlur($event)'\n\t}\n})\nexport abstract class HubFieldControl extends HubFormControl implements ControlValueAccessor, AfterContentInit {\n\tprotected readonly _elementRef = inject(ElementRef);\n\treadonly #config = inject(HUB_FORMS_CONFIG);\n\treadonly #cdr = inject(ChangeDetectorRef);\n\n\tprotected readonly _control = inject(NgControl, { self: true, optional: true })!;\n\tprotected readonly _controlContainer = inject(ControlContainer, { skipSelf: true, host: true, optional: true })!;\n\n\t/** Resolved templates that override the default message of a given error key. */\n\tprotected _errorTemplates: { [key: string]: TemplateRef<any> } = {};\n\n\t/** Stable unique id linking the label and the control. */\n\treadonly id = uuid();\n\n\t/** Query for a projected `hubFormText` helper template. */\n\treadonly formTextTmp = contentChild(HubFormTextDirective, { read: TemplateRef });\n\n\t/** Query for projected `hubValidationError` templates. */\n\treadonly errorTpts = contentChildren(HubValidationErrorDirective);\n\n\t/** Whether the field is disabled. */\n\treadonly disabled = model(false);\n\n\t/** Per-field override for the invalid-feedback message builder. */\n\treadonly invalidFeedbackTemplateFn = input<((key: string, value: any) => string) | null>(null);\n\n\t/**\n\t * Opt-in success state. When `true`, a touched + valid field renders the\n\t * `--valid` styling (success border + ring). Defaults to the global\n\t * {@link HubFormsConfig.showValid}; the success state is never automatic\n\t * unless enabled. Has no effect while the field is invalid.\n\t */\n\treadonly showValid = input(this.#config.showValid);\n\n\t/** Optional success message shown below the control while {@link showsValid}. */\n\treadonly validFeedback = input<string | null>(null);\n\n\tonChange: (value: any) => void = () => {};\n\tonTouched: () => void = () => {};\n\n\tprotected readonly _nativeErrors = signal<ValidationErrors | null>(null);\n\tprotected readonly _nativeTouched = signal(false);\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tif (this._control) {\n\t\t\tthis._control.valueAccessor = this;\n\t\t}\n\t}\n\n\t/** Whether the field should display its error feedback (touched + invalid). */\n\tget isInvalid(): boolean {\n\t\tif (this._control) {\n\t\t\treturn !!this._control.touched && !!this._control.invalid;\n\t\t}\n\n\t\treturn this._nativeTouched() && !!this._nativeErrors();\n\t}\n\n\t/** Whether the field is touched and valid (independent of the opt-in). */\n\tget isValid(): boolean {\n\t\tif (this._control) {\n\t\t\treturn !!this._control.touched && !!this._control.valid;\n\t\t}\n\n\t\treturn this._nativeTouched() && !this._nativeErrors();\n\t}\n\n\t/** Whether the opt-in success state should be displayed (touched + valid + `showValid`). */\n\tget showsValid(): boolean {\n\t\treturn this.showValid() && this.isValid;\n\t}\n\n\t/** Current validation errors, from the reactive control or from native validity. */\n\tget errors(): ValidationErrors | null {\n\t\tif (this._control) {\n\t\t\treturn this._control.errors ?? null;\n\t\t}\n\n\t\treturn this._nativeErrors();\n\t}\n\n\toverride ngAfterContentInit(): void {\n\t\tsuper.ngAfterContentInit();\n\n\t\t(this.errorTpts() ?? []).forEach((tpt: HubValidationErrorDirective) => {\n\t\t\tthis._errorTemplates[tpt.key()] = tpt.template;\n\t\t});\n\n\t\t// Re-render on touched/pristine/status/value changes of the bound reactive control.\n\t\t// `markAllAsTouched()` on a parent form would otherwise not reach this OnPush component,\n\t\t// leaving the error feedback stale.\n\t\tthis._control?.control?.events.pipe(takeUntil(this._destroy$)).subscribe(() => this.#cdr.markForCheck());\n\t}\n\n\t/**\n\t * Marks the field as touched when focus leaves it.\n\t *\n\t * @param event - The originating focus event.\n\t */\n\thandleBlur(event?: FocusEvent): void {\n\t\tif (!this._control) {\n\t\t\tthis._nativeTouched.set(true);\n\t\t\tthis.updateNativeErrors(event?.target ?? null);\n\t\t}\n\n\t\tthis.onTouched?.();\n\t}\n\n\tregisterOnChange(fn: (value: any) => void): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.disabled.set(isDisabled);\n\t}\n\n\t/**\n\t * Resolves the message for a given validation error, honoring per-field and global overrides.\n\t *\n\t * @param key - The validation error key.\n\t * @param value - The error payload.\n\t * @returns The resolved message (HTML allowed).\n\t */\n\tgetInvalidFeedbackTemplate(key: string, value: any): string {\n\t\tconst fn = this.invalidFeedbackTemplateFn();\n\n\t\tif (fn) {\n\t\t\treturn fn(key, value);\n\t\t}\n\n\t\treturn this.#config.invalidFeedbackTemplateFn(key, value);\n\t}\n\n\tabstract writeValue(value: any): void;\n\n\t/**\n\t * Derives native validation errors when the field is used without a reactive control.\n\t *\n\t * @param target - The DOM element to read validity from, if available.\n\t */\n\tprotected updateNativeErrors(target?: EventTarget | null): void {\n\t\tif (this._control) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet el = target as HTMLInputElement | HTMLTextAreaElement | null;\n\n\t\tif (!el || !('validity' in el)) {\n\t\t\tel = this._elementRef.nativeElement.querySelector(`[id=\"${this.id}\"]`) as\n\t\t\t\t| HTMLInputElement\n\t\t\t\t| HTMLTextAreaElement\n\t\t\t\t| null;\n\t\t}\n\n\t\tif (!el || !('validity' in el)) {\n\t\t\tthis._nativeErrors.set(null);\n\t\t\treturn;\n\t\t}\n\n\t\tconst validity = el.validity;\n\t\tconst errors: ValidationErrors = {};\n\t\tconst valueLength = (el.value ?? '').length;\n\n\t\tif (validity.valueMissing) errors['required'] = true;\n\t\tif (validity.typeMismatch) errors[el.type || 'type'] = true;\n\t\tif (validity.patternMismatch) errors['pattern'] = true;\n\t\tif (validity.tooShort) errors['minlength'] = { requiredLength: el.minLength, actualLength: valueLength };\n\t\tif (validity.tooLong) errors['maxlength'] = { requiredLength: el.maxLength, actualLength: valueLength };\n\t\tif (validity.rangeUnderflow && 'min' in el) errors['min'] = { min: (el as HTMLInputElement).min, actual: el.value };\n\t\tif (validity.rangeOverflow && 'max' in el) errors['max'] = { max: (el as HTMLInputElement).max, actual: el.value };\n\t\tif (validity.stepMismatch && 'step' in el) errors['step'] = { step: (el as HTMLInputElement).step, actual: el.value };\n\t\tif (validity.badInput) errors['badInput'] = true;\n\n\t\tthis._nativeErrors.set(isDefined(errors) && Object.keys(errors).length ? errors : null);\n\t}\n}\n","import {\n\tAfterContentInit,\n\tChangeDetectorRef,\n\tcomputed,\n\tcontentChildren,\n\tDirective,\n\teffect,\n\tinject,\n\tinput,\n\tOnDestroy,\n\tsignal,\n\tTemplateRef\n} from '@angular/core';\nimport { AbstractControl, ControlContainer, ValidationErrors } from '@angular/forms';\nimport { Subject, takeUntil } from 'rxjs';\nimport { HubValidationErrorDirective } from '../directives/validation-error.directive';\nimport { HUB_FORMS_CONFIG } from '../services/forms-config';\n\n/** When a container reveals its group-level validation errors. */\nexport type HubGroupErrorTrigger = 'touched' | 'submit' | 'always';\n\n/**\n * Shared base for form *containers* (`hub-form`, `hub-fieldset`, `hub-legend`).\n *\n * Resolves a target `FormGroup`/`FormArray` — provided explicitly via the `group` input or by name\n * from the parent `ControlContainer` — and automatically surfaces its **group-level** validation\n * errors (those set on the group itself by cross-field validators such as `hubAreEqual`), the same\n * way the field components surface control-level errors.\n *\n * It intentionally ignores child-control errors: those are rendered by the individual fields.\n */\n@Directive()\nexport abstract class HubGroupControl implements AfterContentInit, OnDestroy {\n\tprotected readonly _config = inject(HUB_FORMS_CONFIG);\n\treadonly #cdr = inject(ChangeDetectorRef);\n\tprivate readonly _parent = inject(ControlContainer, { optional: true, skipSelf: true });\n\tprivate readonly _self = inject(ControlContainer, { optional: true, self: true });\n\n\tprotected _destroy$ = new Subject<void>();\n\n\t/** Explicit target group/array. Takes precedence over name resolution. */\n\treadonly group = input<AbstractControl | null>(null);\n\n\t/** Name of the target group/array within the parent container (alternative to `group`). */\n\treadonly groupName = input<string>();\n\n\t/** When to reveal the group-level errors. `touched` (default) or `always`. */\n\treadonly errorTrigger = input<HubGroupErrorTrigger>('touched');\n\n\t/** Per-container override for the invalid-feedback message builder. */\n\treadonly invalidFeedbackTemplateFn = input<((key: string, value: any) => string) | null>(null);\n\n\t/** Query for projected `hubValidationError` templates. */\n\treadonly errorTpts = contentChildren(HubValidationErrorDirective);\n\n\tprotected _errorTemplates: { [key: string]: TemplateRef<any> } = {};\n\n\t/**\n\t * The currently bound group control. A `computed` (not an `effect`-fed signal) so it resolves\n\t * synchronously on first render — otherwise a `<form [formGroup]>` would briefly bind `null` and\n\t * the projected `formControlName` fields would fail to locate their controls.\n\t */\n\tprotected readonly _control = computed<AbstractControl | null>(() => {\n\t\tconst explicit = this.group();\n\n\t\tif (explicit) {\n\t\t\treturn explicit;\n\t\t}\n\n\t\tconst name = this.groupName();\n\n\t\tif (name) {\n\t\t\treturn this._parent?.control?.get(name) ?? null;\n\t\t}\n\n\t\t// `_self` covers `form[hubForm]` (the `formGroup` directive lives on the same host);\n\t\t// `_parent` covers a container nested inside an outer form/group.\n\t\treturn this._self?.control ?? this._parent?.control ?? null;\n\t});\n\n\t/** Whether the owning form has been submitted (set by `hub-form`; drives the `submit` trigger). */\n\tprotected readonly _submitted = signal(false);\n\n\tconstructor() {\n\t\t// Keep the OnPush view in sync with the resolved control's touched/status changes.\n\t\teffect(() => this.#subscribe(this._control()));\n\t}\n\n\t/** Whether the group's own (cross-field) errors should be displayed. */\n\tget isInvalid(): boolean {\n\t\tconst control = this._control();\n\n\t\tif (!control || !control.errors) {\n\t\t\treturn false;\n\t\t}\n\n\t\tswitch (this.errorTrigger()) {\n\t\t\tcase 'always':\n\t\t\t\treturn true;\n\t\t\tcase 'submit':\n\t\t\t\treturn this._submitted();\n\t\t\tdefault:\n\t\t\t\treturn control.touched || this._submitted();\n\t\t}\n\t}\n\n\t/** The group's own validation errors (excludes child-control errors). */\n\tget errors(): ValidationErrors | null {\n\t\treturn this._control()?.errors ?? null;\n\t}\n\n\tngAfterContentInit(): void {\n\t\t(this.errorTpts() ?? []).forEach((tpt: HubValidationErrorDirective) => {\n\t\t\tthis._errorTemplates[tpt.key()] = tpt.template;\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._destroy$.next();\n\t\tthis._destroy$.complete();\n\t}\n\n\t/**\n\t * Resolves the message for a given group-level validation error.\n\t *\n\t * @param key - The validation error key.\n\t * @param value - The error payload.\n\t * @returns The resolved message (HTML allowed).\n\t */\n\tgetInvalidFeedbackTemplate(key: string, value: any): string {\n\t\tconst fn = this.invalidFeedbackTemplateFn();\n\n\t\tif (fn) {\n\t\t\treturn fn(key, value);\n\t\t}\n\n\t\treturn this._config.invalidFeedbackTemplateFn(key, value);\n\t}\n\n\t/**\n\t * (Re)subscribes to the bound control's events so the OnPush view refreshes on touched/status\n\t * changes (e.g. a parent `markAllAsTouched()`).\n\t *\n\t * @param control - The newly resolved control, if any.\n\t */\n\t#subscribe(control: AbstractControl | null): void {\n\t\tthis._destroy$.next();\n\n\t\tcontrol?.events.pipe(takeUntil(this._destroy$)).subscribe(() => this.#cdr.markForCheck());\n\t}\n}\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders, Type } from '@angular/core';\nimport { HubFileUploader } from '../interfaces/file-uploader.interface';\n\n/**\n * Injection token holding the {@link HubFileUploader} that `<hub-file-input>` delegates uploads to.\n *\n * It has **no default**: when nothing is registered, the component resolves it as `null` and behaves\n * as a pure picker — no automatic upload, no progress bar, no cancel or retry. Register one with\n * {@link provideHubFileUploader}.\n */\nexport const HUB_FILE_UPLOADER = new InjectionToken<HubFileUploader>('HUB_FILE_UPLOADER');\n\n/**\n * Registers the uploader that `<hub-file-input>` uses to send files.\n *\n * The library defines the contract, not the transport: an uploader that knows your endpoint, field\n * name, headers and retry policy is application code. Implement {@link HubFileUploader} there and\n * hand it over here.\n *\n * Passing a class provides it in the same injector and aliases the token to that single instance, so\n * the uploader can inject `HttpClient` and hold its own state.\n *\n * @param uploader - The uploader class (dependency-injected) or a ready-made instance.\n * @returns Environment providers to add to `bootstrapApplication` (or a route's `providers`).\n *\n * @example\n * ```ts\n * bootstrapApplication(App, {\n * providers: [provideHttpClient(), provideHubFileUploader(ApiFileUploader)]\n * });\n * ```\n */\nexport function provideHubFileUploader(uploader: HubFileUploader | Type<HubFileUploader>): EnvironmentProviders {\n\tif (typeof uploader === 'function') {\n\t\tconst uploaderType = uploader as Type<HubFileUploader>;\n\n\t\treturn makeEnvironmentProviders([uploaderType, { provide: HUB_FILE_UPLOADER, useExisting: uploaderType }]);\n\t}\n\n\treturn makeEnvironmentProviders([{ provide: HUB_FILE_UPLOADER, useValue: uploader }]);\n}\n","/**\n * Possible display types for form helper text.\n */\nexport type FormTextType = 'bottom' | 'tooltip';\n\n/**\n * Enum for form helper text display types.\n */\nexport enum FormTextTypes {\n\tBottom = 'bottom',\n\tTooltip = 'tooltip'\n}\n\n/**\n * Possible label display types shared by the form field components.\n */\nexport type HubLabelType = 'floating' | 'stacked' | 'horizontal';\n\n/**\n * Enum for label display types.\n */\nexport enum HubLabelTypes {\n\tFloating = 'floating',\n\tStacked = 'stacked',\n\tHorizontal = 'horizontal'\n}\n","/**\n * Supported formats (native input types) for the `<hub-input>` component.\n */\nexport type HubInputFormat =\n\t| 'text'\n\t| 'number'\n\t| 'password'\n\t| 'email'\n\t| 'tel'\n\t| 'url'\n\t| 'color'\n\t| 'checkbox'\n\t| 'switch'\n\t| 'counter'\n\t| '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","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","/**\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 { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tisDevMode,\n\tmodel,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tviewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormsModule, Validators } from '@angular/forms';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubInputFormat, HubInputFormats } from '../../interfaces/input.interface';\nimport { HubInputPrefixDirective } from '../../directives/input-prefix.directive';\nimport { HubInputSuffixDirective } from '../../directives/input-suffix.directive';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { controlHasMinOrMaxValidator, isDefined } from '../../utils/utils';\nimport { applyMask, isMaskActive } from '../../utils/mask';\n\n/** Value held by a `<hub-input>` across its supported formats. */\ntype HubInputValue = number | string | boolean | File | FileList | null;\n\n/**\n * Accessible form field with automatic validation-error display.\n *\n * Works both with Reactive Forms (`formControlName` / `[formControl]`) and as a standalone\n * value-bound control. When invalid and touched, it renders the control's errors using the\n * default messages, the global {@link provideHubForms} config, the per-field\n * `invalidFeedbackTemplateFn` input, or projected `hubValidationError` templates.\n *\n * Formats: `text`, `number`, `password`, `email`, `tel`, `url`, `color`, `checkbox`, `switch`,\n * `counter` and `file`. Label types: `stacked`, `floating`, `horizontal`. Text-like formats support\n * prepend / append addons (input groups). Numeric formats auto-attach `min`/`max` validators when\n * bound to a reactive control.\n *\n * The `file` format is **deprecated since 22.6.0** in favour of `<hub-file-input>`: it is a bare\n * picker that cannot enforce `accept` on a drop, and has no size limits, no preview and no per-file\n * removal. It keeps working until the next major.\n *\n * @example\n * ```html\n * <hub-input formControlName=\"email\" type=\"email\" label=\"Email\" />\n * <hub-input formControlName=\"accept\" type=\"switch\" label=\"Accept terms\" />\n * <hub-input formControlName=\"qty\" type=\"counter\" label=\"Quantity\" [min]=\"1\" [max]=\"9\" />\n * ```\n */\n@Component({\n\tselector: 'hub-input',\n\timports: [NgTemplateOutlet, KeyValuePipe, FormsModule],\n\ttemplateUrl: './input.component.html',\n\tstyleUrl: './input.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-input-host]': 'true'\n\t}\n})\nexport class HubInputComponent extends HubFieldControl {\n\tprotected readonly _inputFormats = HubInputFormats;\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _value = signal<HubInputValue>('');\n\n\t/** Whether the password value is currently revealed (password format only). */\n\tshowPassword = false;\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/** Minimum value (numeric / counter inputs). */\n\treadonly min = model<number | undefined>(undefined);\n\n\t/** Maximum value (numeric / counter inputs). */\n\treadonly max = model<number | undefined>(undefined);\n\n\t/** Step value (numeric / counter inputs). */\n\treadonly step = input(1, { transform: numberAttribute });\n\n\t/** Whether the input is read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Text shown before the control as an input-group addon (text-like formats). */\n\treadonly prepend = input<string | string[]>('');\n\n\t/** Text shown after the control as an input-group addon (text-like formats). */\n\treadonly append = input<string | string[]>('');\n\n\t/** Projected inline-start affix (`[hubInputPrefix]`) — e.g. a `<hub-icon>`, when present. */\n\tprotected readonly prefixDir = contentChild(HubInputPrefixDirective);\n\n\t/** Projected inline-end affix (`[hubInputSuffix]`) — e.g. a `<hub-icon>`, when present. */\n\tprotected readonly suffixDir = contentChild(HubInputSuffixDirective);\n\n\t/**\n\t * When true, a clear (✕) button is rendered inside the field once it holds a\n\t * value; activating it resets the control. The glyph comes from the\n\t * `--hub-input-clear-icon` CSS token, so it can be restyled without touching\n\t * the template.\n\t */\n\treadonly clearable = input(false, { transform: booleanAttribute });\n\n\t/** Whether the internal clear button should be shown right now. */\n\tprotected readonly showClear = computed<boolean>(\n\t\t() => this.clearable() && !this.disabled() && !this.readonly() && this._value() != null && this._value() !== ''\n\t);\n\n\t/** Whether an inline-start affix (projected prefix) is present. */\n\tprotected readonly hasPrefix = computed<boolean>(() => !!this.prefixDir());\n\n\t/** Whether an inline-end affix (projected suffix or the clear button) is present. */\n\tprotected readonly hasSuffix = computed<boolean>(() => !!this.suffixDir() || this.showClear());\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/**\n\t * Pattern mask for text-like formats. Tokens: `0` = digit, `A` = letter, `*` =\n\t * alphanumeric; any other character is an auto-inserted literal separator.\n\t * Example: `0000 0000 0000 0000` (card), `00/00/0000` (date).\n\t */\n\treadonly mask = input<string>('');\n\n\t/**\n\t * When a `mask` is set, controls the form value: `false` (default) stores the\n\t * formatted text (e.g. `1234 5678`); `true` stores only the typed characters\n\t * (e.g. `12345678`).\n\t */\n\treadonly unmaskValue = input(false, { transform: booleanAttribute });\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<HubInputValue>();\n\n\t/** Emits the current value when Enter is pressed. */\n\treadonly enter = output<HubInputValue>();\n\n\t/** Debounce in milliseconds before {@link search} fires. `0` emits on every keystroke. */\n\treadonly debounceTime = input(0, { transform: numberAttribute });\n\n\t/**\n\t * Debounced typeahead event: emits the current term (stringified) `debounceTime`\n\t * ms after the user stops typing. Wire it to drive search / autocomplete without\n\t * rolling your own debounce. Text-like formats only; `valueChange` stays synchronous.\n\t */\n\treadonly search = output<string>();\n\n\t/** Pending typeahead-debounce timer. */\n\t#searchTimer?: ReturnType<typeof setTimeout>;\n\n\t/** Last term emitted via {@link search}, used to skip duplicate emits. */\n\t#lastSearchTerm: string | null = null;\n\n\t/** Clears any pending debounce timer when the component is destroyed. */\n\tprivate readonly _searchCleanup = inject(DestroyRef).onDestroy(() => clearTimeout(this.#searchTimer));\n\n\t/**\n\t * Accepted file types (file format), e.g. `image/*,.pdf`.\n\t *\n\t * @deprecated Since 22.6.0. Use `<hub-file-input>`, which enforces `accept` on drops and pastes\n\t * too. Removed in the next major.\n\t */\n\treadonly accept = input<string>('*');\n\n\t/**\n\t * Whether multiple files can be selected (file format).\n\t *\n\t * @deprecated Since 22.6.0. Use `<hub-file-input>`. Removed in the next major.\n\t */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/**\n\t * Text of the file-picker button (file format).\n\t *\n\t * @deprecated Since 22.6.0. Use `<hub-file-input>` and its `buttonLabel`. Removed in the next major.\n\t */\n\treadonly buttonLabel = input<string>('Choose file');\n\n\t/** Reference to the hidden native file input. */\n\tprotected readonly fileInput = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n\t/** Whether the current format renders a checkable control (checkbox / switch). */\n\tprotected readonly isCheckable = computed<boolean>(\n\t\t() => this.type() === this._inputFormats.Checkbox || this.type() === this._inputFormats.Switch\n\t);\n\n\t/** Whether the current format renders a typeable text-like control (drives the `search` event). */\n\tprotected readonly isTextLike = computed<boolean>(() => {\n\t\tconst t = this.type();\n\t\treturn (\n\t\t\tt !== this._inputFormats.Checkbox &&\n\t\t\tt !== this._inputFormats.Switch &&\n\t\t\tt !== this._inputFormats.Counter &&\n\t\t\tt !== this._inputFormats.Color &&\n\t\t\tt !== this._inputFormats.File\n\t\t);\n\t});\n\n\t/** Display label for the selected file(s). */\n\tprotected readonly fileLabel = computed<string>(() => {\n\t\tconst v = this._value();\n\n\t\tif (v instanceof File) {\n\t\t\treturn v.name;\n\t\t}\n\n\t\tif (typeof FileList !== 'undefined' && v instanceof FileList) {\n\t\t\treturn v.length === 1 ? v[0].name : `${v.length} files`;\n\t\t}\n\n\t\treturn '';\n\t});\n\n\t/** Normalized list of prepend addons. */\n\tprotected readonly _prepend = computed<string[]>(() => this.#toAddonList(this.prepend()));\n\n\t/** Normalized list of append addons. */\n\tprotected readonly _append = computed<string[]>(() => this.#toAddonList(this.append()));\n\n\t/** Whether the control is wrapped in an input group (has addons). */\n\tprotected readonly hasGroup = computed<boolean>(() => this._prepend().length > 0 || 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\tif (this.readonly()) {\n\t\t\treturn this._inputFormats.Text;\n\t\t}\n\n\t\tif (this.type() === this._inputFormats.Password) {\n\t\t\treturn this.showPassword ? 'text' : 'password';\n\t\t}\n\n\t\tif (this.type() === this._inputFormats.Counter) {\n\t\t\treturn this._inputFormats.Number;\n\t\t}\n\n\t\treturn this.type();\n\t});\n\n\toverride ngAfterContentInit(): void {\n\t\tsuper.ngAfterContentInit();\n\t\tthis.#attachNumericValidators();\n\t\tthis.#warnDeprecatedFileFormat();\n\t}\n\n\twriteValue(value: HubInputValue): void {\n\t\tif (this.isCheckable()) {\n\t\t\tthis._value.set(!!value);\n\t\t\treturn;\n\t\t}\n\n\t\t// Display masked values formatted, regardless of whether the form stores the\n\t\t// masked or unmasked representation.\n\t\tif (isMaskActive(this.mask()) && value != null && typeof value === 'string') {\n\t\t\tthis._value.set(applyMask(value, this.mask()).masked);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._value.set(value ?? '');\n\t}\n\n\t/**\n\t * Reads the new value from an input/model event and propagates it to the form and outputs.\n\t *\n\t * @param event - A DOM event or the raw value emitted by `ngModelChange`.\n\t */\n\tsetValue(event: any): void {\n\t\tconst hasTarget = !!event?.target;\n\t\tlet newValue: HubInputValue;\n\n\t\tif (this.isCheckable()) {\n\t\t\tnewValue = hasTarget ? !!event.target.checked : !!event;\n\t\t} else if (this.type() === this._inputFormats.Number || this.type() === this._inputFormats.Counter) {\n\t\t\tnewValue = hasTarget\n\t\t\t\t? isNaN(event.target.valueAsNumber)\n\t\t\t\t\t? null\n\t\t\t\t\t: event.target.valueAsNumber\n\t\t\t\t: isNaN(Number(event))\n\t\t\t\t\t? null\n\t\t\t\t\t: Number(event);\n\t\t} else {\n\t\t\tnewValue = hasTarget ? event.target.value : event;\n\t\t}\n\n\t\t// Apply the pattern mask for text-like formats: the field shows the formatted\n\t\t// value while the form receives the formatted or unmasked value per `unmaskValue`.\n\t\tif (isMaskActive(this.mask()) && typeof newValue === 'string') {\n\t\t\tconst { masked, unmasked } = applyMask(newValue, this.mask());\n\t\t\tthis._value.set(masked);\n\t\t\tif (hasTarget && event.target) {\n\t\t\t\tevent.target.value = masked;\n\t\t\t}\n\t\t\tconst formValue = this.unmaskValue() ? unmasked : masked;\n\t\t\tthis.updateNativeErrors(event?.target ?? null);\n\t\t\tthis.onChange?.(formValue);\n\t\t\tthis.valueChange.emit(formValue);\n\t\t\tthis.#scheduleSearch(masked);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._value.set(newValue);\n\t\tthis.updateNativeErrors(event?.target ?? null);\n\t\tthis.onChange?.(newValue);\n\t\tthis.valueChange.emit(newValue);\n\t\tthis.#scheduleSearch(newValue);\n\t}\n\n\t/**\n\t * Schedules a debounced {@link search} emit for text-like formats. Coalesces rapid\n\t * keystrokes into a single emit after {@link debounceTime} ms and skips no-op repeats.\n\t *\n\t * @param value - The latest control value.\n\t */\n\t#scheduleSearch(value: HubInputValue): void {\n\t\tif (!this.isTextLike()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst term = value == null ? '' : String(value);\n\t\tclearTimeout(this.#searchTimer);\n\t\tthis.#searchTimer = setTimeout(() => {\n\t\t\tif (term === this.#lastSearchTerm) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#lastSearchTerm = term;\n\t\t\tthis.search.emit(term);\n\t\t}, this.debounceTime());\n\t}\n\n\t/** Increments the counter value, clamped to `max`. */\n\tprotected add(): void {\n\t\tconst current = Number(this._value() ?? this.min() ?? 0);\n\t\tconst next = current + this.step();\n\t\tconst max = this.max();\n\n\t\tthis.setValue(isDefined(max) && next > max! ? max! : next);\n\t}\n\n\t/** Decrements the counter value, clamped to `min`. */\n\tprotected subtract(): void {\n\t\tconst current = Number(this._value() ?? this.max() ?? 0);\n\t\tconst next = current - this.step();\n\t\tconst min = this.min();\n\n\t\tthis.setValue(isDefined(min) && next < min! ? min! : next);\n\t}\n\n\t/** Toggles password visibility. */\n\tprotected togglePassword(): void {\n\t\tif (!this.disabled()) {\n\t\t\tthis.showPassword = !this.showPassword;\n\t\t}\n\t}\n\n\t/** Opens the native file dialog. */\n\tprotected triggerFile(): void {\n\t\tif (!this.disabled() && !this.readonly()) {\n\t\t\tthis.fileInput()?.nativeElement.click();\n\t\t}\n\t}\n\n\t/**\n\t * Reads the selected file(s) from the native input and propagates them.\n\t *\n\t * @param event - The native `change` event of the file input.\n\t */\n\tprotected setFileValue(event: Event): void {\n\t\tconst files = (event.target as HTMLInputElement).files;\n\t\tconst value: HubInputValue = !files || files.length === 0 ? null : this.multiple() ? files : files.item(0);\n\n\t\tthis._value.set(value);\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n\n\t/** Resets a text-like control to empty via the internal clear button. */\n\tprotected clear(): void {\n\t\tclearTimeout(this.#searchTimer);\n\t\tthis._value.set('');\n\t\tthis.onChange?.('');\n\t\tthis.valueChange.emit('');\n\t\tthis.search.emit('');\n\t}\n\n\t/** Clears the selected file(s). */\n\tprotected clearFile(): void {\n\t\tconst native = this.fileInput()?.nativeElement;\n\n\t\tif (native) {\n\t\t\tnative.value = '';\n\t\t}\n\n\t\tthis._value.set(null);\n\t\tthis.onChange?.(null);\n\t\tthis.valueChange.emit(null);\n\t}\n\n\t/**\n\t * Warns once, in development only, that the `file` format is deprecated.\n\t *\n\t * It still works, but it cannot enforce `accept` on a drop, has no size limits, no preview and\n\t * no per-file removal. `<hub-file-input>` supersedes it.\n\t */\n\t#warnDeprecatedFileFormat(): void {\n\t\tif (isDevMode() && this.type() === this._inputFormats.File) {\n\t\t\tconsole.warn(\n\t\t\t\t'[ng-hub-ui-forms] <hub-input type=\"file\"> is deprecated since 22.6.0 and will be removed in the next major. Use <hub-file-input> instead.'\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Auto-attaches `Validators.min` / `Validators.max` to the bound reactive control when `min` /\n\t * `max` are set and not already present, so the inline bounds become real validation.\n\t */\n\t#attachNumericValidators(): void {\n\t\tconst control = this._control?.control;\n\n\t\tif (!control || !this._isFormControl) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\t\tlet changed = false;\n\n\t\tif (isDefined(min) && !controlHasMinOrMaxValidator(control, 'min')) {\n\t\t\tcontrol.addValidators(Validators.min(min!));\n\t\t\tchanged = true;\n\t\t}\n\n\t\tif (isDefined(max) && !controlHasMinOrMaxValidator(control, 'max')) {\n\t\t\tcontrol.addValidators(Validators.max(max!));\n\t\t\tchanged = true;\n\t\t}\n\n\t\tif (changed) {\n\t\t\tcontrol.updateValueAndValidity({ emitEvent: false });\n\t\t}\n\t}\n\n\t/**\n\t * Normalizes an addon input (string or string[]) to a string list.\n\t *\n\t * @param value - The raw addon input.\n\t * @returns The list of addon strings (empty when none).\n\t */\n\t#toAddonList(value: string | string[]): string[] {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.filter((item) => item != null && item !== '');\n\t\t}\n\n\t\treturn value ? [value] : [];\n\t}\n}\n","<div\n\tclass=\"hub-field hub-input\"\n\t[class.hub-field--horizontal]=\"!isCheckable() && (labelType() === _labelTypes.Horizontal || (!label() && required()))\"\n\t[class.hub-input--checkable]=\"isCheckable()\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (isCheckable()) {\n\t\t<label class=\"hub-input__check\" [class.hub-input__check--switch]=\"type() === _inputFormats.Switch\">\n\t\t\t<input\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\tclass=\"hub-input__check-input\"\n\t\t\t\t[class.hub-input__check-input--switch]=\"type() === _inputFormats.Switch\"\n\t\t\t\t[class.hub-input__check-input--invalid]=\"isInvalid\"\n\t\t\t\t[attr.role]=\"type() === _inputFormats.Switch ? 'switch' : null\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[checked]=\"$any(_value())\"\n\t\t\t\t(change)=\"setValue($event)\"\n\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t/>\n\t\t\t@if (label() || required()) {\n\t\t\t\t<span class=\"hub-input__check-label\">\n\t\t\t\t\t{{ label() }}\n\t\t\t\t\t@if (required()) {\n\t\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t}\n\t\t\t\t</span>\n\t\t\t}\n\t\t</label>\n\t} @else {\n\t\t@if ((label() || required()) && labelType() !== _labelTypes.Floating) {\n\t\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t\t{{ label() }}\n\t\t\t\t@if (required()) {\n\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t}\n\t\t\t</label>\n\t\t}\n\n\t\t<div class=\"hub-field__body hub-input__row\">\n\t\t\t@switch (type()) {\n\t\t\t\t@case (_inputFormats.Counter) {\n\t\t\t\t\t<div class=\"hub-input__group hub-input__counter\">\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-input__counter-btn\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly() || (min() != null && $any(_value()) <= $any(min()))\"\n\t\t\t\t\t\t\taria-label=\"Decrease\"\n\t\t\t\t\t\t\t(click)=\"subtract()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t−\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[min]=\"min() ?? null\"\n\t\t\t\t\t\t\t[max]=\"max() ?? null\"\n\t\t\t\t\t\t\t[step]=\"step()\"\n\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t[readonly]=\"readonly()\"\n\t\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-input__counter-btn\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly() || (max() != null && $any(_value()) >= $any(max()))\"\n\t\t\t\t\t\t\taria-label=\"Increase\"\n\t\t\t\t\t\t\t(click)=\"add()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t+\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@case (_inputFormats.Color) {\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\tclass=\"hub-field__control hub-input__control--color\"\n\t\t\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t[ngModel]=\"_value()\"\n\t\t\t\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t(blur)=\"handleBlur($event)\"\n\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\t@case (_inputFormats.File) {\n\t\t\t\t\t<div class=\"hub-input__file\" [class.hub-input__file--invalid]=\"isInvalid\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t#fileInput\n\t\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\t\tclass=\"hub-input__file-native\"\n\t\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t\t[accept]=\"accept()\"\n\t\t\t\t\t\t\t[multiple]=\"multiple()\"\n\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t(change)=\"setFileValue($event)\"\n\t\t\t\t\t\t\t(blur)=\"handleBlur($event)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-input__file-button\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t\t\t(click)=\"triggerFile()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ buttonLabel() }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<span class=\"hub-input__file-name\">{{ fileLabel() || placeholder() }}</span>\n\t\t\t\t\t\t@if (fileLabel() && !disabled() && !readonly()) {\n\t\t\t\t\t\t\t<button type=\"button\" class=\"hub-input__file-clear\" aria-label=\"Clear\" (click)=\"clearFile()\">×</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>\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[placeholder]=\"labelType() === _labelTypes.Floating ? (placeholder() || ' ') : placeholder()\"\n\t\t\t\t\t\t\t[min]=\"min() ?? null\"\n\t\t\t\t\t\t\t[max]=\"max() ?? null\"\n\t\t\t\t\t\t\t[step]=\"step()\"\n\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t[readonly]=\"readonly()\"\n\t\t\t\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t\t\t/>\n\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\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\n\t\t\t\t\t@if (type() === _inputFormats.Password) {\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__password-toggle\"\n\t\t\t\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t\t\t\t[attr.aria-label]=\"showPassword ? 'Hide password' : 'Show password'\"\n\t\t\t\t\t\t\t[attr.aria-pressed]=\"showPassword\"\n\t\t\t\t\t\t\t(click)=\"togglePassword()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"hub-input__password-icon\" [class.hub-input__password-icon--visible]=\"showPassword\"></span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n","import { KeyValuePipe } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, computed, ElementRef, input, numberAttribute, output, signal, viewChildren, ViewEncapsulation } from '@angular/core';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\n\n/** Character set accepted by the OTP field. */\nexport type HubOtpMode = 'numeric' | 'alphanumeric' | 'alpha';\n\n/**\n * Segmented one-time-code input (`hub-otp-input`): a row of single-character cells for\n * entering verification / 2FA codes. Supports auto-advance, backspace navigation, arrow\n * keys, and pasting the whole code at once. Implements `ControlValueAccessor`, so the\n * form value is the concatenated string.\n *\n * ```html\n * <hub-otp-input formControlName=\"code\" [length]=\"6\" label=\"Verification code\" />\n * <hub-otp-input formControlName=\"pin\" [length]=\"4\" mode=\"numeric\" [secret]=\"true\" />\n * ```\n */\n@Component({\n\tselector: 'hub-otp-input',\n\tstandalone: true,\n\timports: [KeyValuePipe],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-otp-host]': 'true'\n\t},\n\ttemplate: `\n\t\t<div\n\t\t\tclass=\"hub-field hub-otp\"\n\t\t\t[class.hub-field--horizontal]=\"labelType() === _labelTypes.Horizontal\"\n\t\t\t[class.hub-field--disabled]=\"disabled()\"\n\t\t\t[class.hub-field--invalid]=\"isInvalid\"\n\t\t\t[class.hub-field--valid]=\"showsValid\"\n\t\t>\n\t\t\t@if (label() || required()) {\n\t\t\t\t<label class=\"hub-field__label\">\n\t\t\t\t\t{{ label() }}\n\t\t\t\t\t@if (required()) {\n\t\t\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t}\n\t\t\t\t</label>\n\t\t\t}\n\n\t\t\t<div class=\"hub-field__body\">\n\t\t\t\t<div class=\"hub-otp__cells\" role=\"group\" [attr.aria-label]=\"label() || null\" (focusout)=\"onFocusOut($event)\">\n\t\t\t\t\t@for (index of cells(); track index) {\n\t\t\t\t\t\t@if (separatorEvery() && index > 0 && index % separatorEvery() === 0) {\n\t\t\t\t\t\t\t<span class=\"hub-otp__separator\" aria-hidden=\"true\">{{ separator() }}</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t#cell\n\t\t\t\t\t\t\tclass=\"hub-field__control hub-otp__cell\"\n\t\t\t\t\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t\t\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t\t\t\t\t[type]=\"secret() ? 'password' : 'text'\"\n\t\t\t\t\t\t\t[attr.inputmode]=\"mode() === 'numeric' ? 'numeric' : 'text'\"\n\t\t\t\t\t\t\t[attr.autocomplete]=\"index === 0 ? 'one-time-code' : 'off'\"\n\t\t\t\t\t\t\t[attr.aria-label]=\"ariaCellLabel() + ' ' + (index + 1)\"\n\t\t\t\t\t\t\tmaxlength=\"1\"\n\t\t\t\t\t\t\t[value]=\"chars()[index]\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t\t\t(input)=\"onInput(index, $event)\"\n\t\t\t\t\t\t\t(keydown)=\"onKeydown(index, $event)\"\n\t\t\t\t\t\t\t(paste)=\"onPaste(index, $event)\"\n\t\t\t\t\t\t\t(focus)=\"select(index)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\n\t\t\t\t@if (formText()) {\n\t\t\t\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">{{ formText() }}</div>\n\t\t\t\t}\n\n\t\t\t\t@if (isInvalid) {\n\t\t\t\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\">{{ getInvalidFeedbackTemplate(error.key, error.value) }}</span>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\n\t\t\t\t@if (showsValid && validFeedback()) {\n\t\t\t\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t`,\n\tstyleUrl: './otp.component.scss'\n})\nexport class HubOtpInputComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\n\t/** Number of cells / characters in the code. */\n\treadonly length = input(6, { transform: numberAttribute });\n\n\t/** Accepted character set. */\n\treadonly mode = input<HubOtpMode>('numeric');\n\n\t/** Field label. */\n\treadonly label = input<string>('');\n\n\t/** Label placement. */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Helper text shown below the cells. */\n\treadonly formText = input<string>('');\n\n\t/** Helper-text placement. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Masks the characters like a password. */\n\treadonly secret = input(false, { transform: booleanAttribute });\n\n\t/** Renders the cells read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Inserts a visual separator every N cells (0 = none). */\n\treadonly separatorEvery = input(0, { transform: numberAttribute });\n\n\t/** The separator character shown between groups. */\n\treadonly separator = input<string>('-');\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<string>();\n\n\t/** Emits the full code once every cell is filled. */\n\treadonly completed = output<string>();\n\n\t/** The current value, stored as a plain string. */\n\treadonly #value = signal<string>('');\n\n\t/** References to the cell inputs, for focus management. */\n\tprivate readonly _cells = viewChildren<ElementRef<HTMLInputElement>>('cell');\n\n\t/** Index list driving the `@for`. */\n\treadonly cells = computed<number[]>(() => Array.from({ length: Math.max(1, this.length()) }, (_, index) => index));\n\n\t/** Per-cell characters derived from the current value. */\n\treadonly chars = computed<string[]>(() => {\n\t\tconst value = this.#value();\n\t\treturn Array.from({ length: Math.max(1, this.length()) }, (_, index) => value[index] ?? '');\n\t});\n\n\t/** Regex matching a single accepted character for the active mode. */\n\treadonly #pattern = computed<RegExp>(() => {\n\t\tswitch (this.mode()) {\n\t\t\tcase 'alpha':\n\t\t\t\treturn /[a-zA-Z]/;\n\t\t\tcase 'alphanumeric':\n\t\t\t\treturn /[a-zA-Z0-9]/;\n\t\t\tdefault:\n\t\t\t\treturn /[0-9]/;\n\t\t}\n\t});\n\n\t/** ARIA label prefix for each cell. */\n\treadonly ariaCellLabel = computed<string>(() => (this.mode() === 'numeric' ? 'Digit' : 'Character'));\n\n\twriteValue(value: unknown): void {\n\t\tconst raw = typeof value === 'string' ? value : value == null ? '' : String(value);\n\t\tthis.#value.set(this.#sanitize(raw).slice(0, this.length()));\n\t}\n\n\t/** Handles typing into a cell: keep the last valid char, advance focus, and emit. */\n\tprotected onInput(index: number, event: Event): void {\n\t\tconst target = event.target as HTMLInputElement;\n\t\tconst typed = this.#sanitize(target.value);\n\t\tconst char = typed.slice(-1);\n\t\tconst chars = [...this.chars()];\n\n\t\tif (!char) {\n\t\t\tchars[index] = '';\n\t\t\ttarget.value = '';\n\t\t\tthis.#commit(chars.join(''));\n\t\t\treturn;\n\t\t}\n\n\t\tchars[index] = char;\n\t\ttarget.value = char;\n\t\tthis.#commit(chars.join(''));\n\t\tthis.#focus(index + 1);\n\t}\n\n\t/** Handles navigation / deletion keys. */\n\tprotected onKeydown(index: number, event: KeyboardEvent): void {\n\t\tconst chars = [...this.chars()];\n\n\t\tif (event.key === 'Backspace') {\n\t\t\tif (chars[index]) {\n\t\t\t\tchars[index] = '';\n\t\t\t\tthis.#commit(chars.join(''));\n\t\t\t} else if (index > 0) {\n\t\t\t\tchars[index - 1] = '';\n\t\t\t\tthis.#commit(chars.join(''));\n\t\t\t\tthis.#focus(index - 1);\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t} else if (event.key === 'ArrowLeft' && index > 0) {\n\t\t\tthis.#focus(index - 1);\n\t\t\tevent.preventDefault();\n\t\t} else if (event.key === 'ArrowRight' && index < this.length() - 1) {\n\t\t\tthis.#focus(index + 1);\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\t/** Distributes a pasted code across the cells starting at the current one. */\n\tprotected onPaste(index: number, event: ClipboardEvent): void {\n\t\tevent.preventDefault();\n\t\tconst pasted = this.#sanitize(event.clipboardData?.getData('text') ?? '');\n\t\tif (!pasted) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst chars = [...this.chars()];\n\t\tlet cursor = index;\n\t\tfor (const char of pasted) {\n\t\t\tif (cursor >= this.length()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tchars[cursor] = char;\n\t\t\tcursor++;\n\t\t}\n\t\tthis.#commit(chars.join(''));\n\t\tthis.#focus(Math.min(cursor, this.length() - 1));\n\t}\n\n\t/** Selects the cell content on focus for quick overwrite. */\n\tprotected select(index: number): void {\n\t\tthis._cells()[index]?.nativeElement.select();\n\t}\n\n\t/** Marks the field as touched when focus leaves the whole group. */\n\tprotected onFocusOut(event: FocusEvent): void {\n\t\tconst next = event.relatedTarget as Node | null;\n\t\tconst group = event.currentTarget as HTMLElement;\n\t\tif (!next || !group.contains(next)) {\n\t\t\tthis.onTouched();\n\t\t}\n\t}\n\n\t/** Keeps only characters allowed by the active mode. */\n\t#sanitize(value: string): string {\n\t\tconst pattern = this.#pattern();\n\t\treturn [...value].filter((char) => pattern.test(char)).join('');\n\t}\n\n\t/** Stores, propagates and (when full) signals completion. */\n\t#commit(value: string): void {\n\t\tconst next = value.slice(0, this.length());\n\t\tthis.#value.set(next);\n\t\tthis.onChange?.(next);\n\t\tthis.valueChange.emit(next);\n\t\tif (next.length === this.length()) {\n\t\t\tthis.completed.emit(next);\n\t\t}\n\t}\n\n\t/** Moves focus to the cell at `index`, if it exists. */\n\t#focus(index: number): void {\n\t\tthis._cells()[index]?.nativeElement.focus();\n\t}\n}\n","import { booleanAttribute, Directive, ElementRef, inject, input, OnInit } from '@angular/core';\n\n/**\n * Auto-resizes a `<textarea>` to fit its content height.\n *\n * @example\n * ```html\n * <textarea hubAutoresize></textarea>\n * ```\n */\n@Directive({\n\tselector: 'textarea[hubAutoresize]',\n\thost: {\n\t\t'(:focusin)': 'onChange()',\n\t\t'(:focusout)': 'onChange()',\n\t\t'(:input)': 'onChange()'\n\t}\n})\nexport class HubAutoresizeDirective implements OnInit {\n\treadonly #elementRef = inject<ElementRef<HTMLTextAreaElement>>(ElementRef);\n\n\t/** Whether auto-resizing is enabled. */\n\treadonly hubAutoresize = input(true, { transform: booleanAttribute });\n\n\tonChange(): void {\n\t\tthis.resize();\n\t}\n\n\tngOnInit(): void {\n\t\tif (this.#elementRef.nativeElement.scrollHeight) {\n\t\t\tsetTimeout(() => this.resize(), 1);\n\t\t}\n\t}\n\n\t/** Resizes the textarea to fit its content. */\n\tresize(): void {\n\t\tif (this.hubAutoresize()) {\n\t\t\tconst el = this.#elementRef.nativeElement;\n\t\t\tel.style.height = '0';\n\t\t\tel.style.height = el.scrollHeight + 4 + 'px';\n\t\t}\n\t}\n}\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HubAutoresizeDirective } from '../../directives/autoresize.directive';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\n\n/**\n * Accessible multi-line text field with optional auto-resize, character counter and automatic\n * validation-error display.\n *\n * Shares all the form plumbing (CVA, error feedback, touched tracking) with the other\n * `ng-hub-ui-forms` fields through {@link HubFieldControl}.\n *\n * @example\n * ```html\n * <hub-textarea formControlName=\"bio\" label=\"Biography\" [rows]=\"4\" [maxlength]=\"280\" [counter]=\"true\" />\n * ```\n */\n@Component({\n\tselector: 'hub-textarea',\n\timports: [NgTemplateOutlet, KeyValuePipe, FormsModule, HubAutoresizeDirective],\n\ttemplateUrl: './textarea.component.html',\n\tstyleUrl: './textarea.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-textarea-host]': 'true'\n\t}\n})\nexport class HubTextareaComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _value = signal<string>('');\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `horizontal`). */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Placeholder text. */\n\treadonly placeholder = input<string>('');\n\n\t/** Number of visible text rows. */\n\treadonly rows = input<number | undefined, string | number>(undefined, { transform: numberAttribute });\n\n\t/** Number of visible columns. When set, the textarea stops stretching to full width. */\n\treadonly cols = input<number | undefined, string | number>(undefined, { transform: numberAttribute });\n\n\t/** Maximum number of characters. Drives both the native limit and the counter. */\n\treadonly maxlength = input<number | undefined, string | number>(undefined, { transform: numberAttribute });\n\n\t/** Whether the textarea grows to fit its content. */\n\treadonly autoresize = input(false, { transform: booleanAttribute });\n\n\t/** Whether to show a character counter below the control. */\n\treadonly counter = input(false, { transform: booleanAttribute });\n\n\t/** Whether the textarea is read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported in the MVP. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<string>();\n\n\t/** Current character counter text (e.g. `12 / 280`). */\n\tprotected readonly counterText = computed<string>(() => {\n\t\tconst length = (this._value() ?? '').length;\n\t\tconst max = this.maxlength();\n\n\t\treturn max != null ? `${length} / ${max}` : `${length}`;\n\t});\n\n\twriteValue(value: string | null): void {\n\t\tthis._value.set(value ?? '');\n\t}\n\n\t/**\n\t * Updates the value from the textarea and propagates it to the form and outputs.\n\t *\n\t * @param value - The new textarea value.\n\t */\n\tsetValue(value: string): void {\n\t\tthis._value.set(value ?? '');\n\t\tthis.updateNativeErrors(this._elementRef.nativeElement.querySelector(`[id=\"${this.id}\"]`));\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n}\n","<div\n\tclass=\"hub-field hub-textarea\"\n\t[class.hub-field--horizontal]=\"labelType() === _labelTypes.Horizontal || (!label() && required())\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t<textarea\n\t\t\tclass=\"hub-field__control hub-textarea__control\"\n\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t[id]=\"id\"\n\t\t\t[hubAutoresize]=\"autoresize()\"\n\t\t\t[ngModel]=\"_value()\"\n\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t[attr.rows]=\"rows()\"\n\t\t\t[attr.cols]=\"cols()\"\n\t\t\t[attr.maxlength]=\"maxlength()\"\n\t\t\t[placeholder]=\"placeholder()\"\n\t\t\t[disabled]=\"disabled()\"\n\t\t\t[readonly]=\"readonly()\"\n\t\t\t[required]=\"!!required()\"\n\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t[style.width]=\"cols() ? 'auto' : '100%'\"\n\t\t></textarea>\n\t</div>\n\n\t@if (counter()) {\n\t\t<div class=\"hub-textarea__counter\" [class.hub-field__form-text--disabled]=\"disabled()\">{{ counterText() }}</div>\n\t}\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport { HubFieldControl } from '../../shared/hub-field-control';\n\n/** Value of `<hub-slider>`: a number in single mode, a `[lower, upper]` tuple in range mode. */\nexport type HubSliderValue = number | [number, number];\n\n/**\n * Accessible numeric slider with an optional value bubble. Supports a single thumb or a\n * **dual-thumb range** (`range`), whose value is a `[lower, upper]` tuple.\n *\n * Shares the form plumbing (CVA, error feedback, touched tracking) with the other\n * `ng-hub-ui-forms` fields through {@link HubFieldControl}. The filled track and bubbles are\n * positioned from the `--hub-slider-from` / `--hub-slider-to` percentages.\n *\n * @example\n * ```html\n * <hub-slider formControlName=\"volume\" label=\"Volume\" [min]=\"0\" [max]=\"100\" [step]=\"5\" />\n * <hub-slider formControlName=\"price\" label=\"Price\" [range]=\"true\" [min]=\"0\" [max]=\"1000\" />\n * ```\n */\n@Component({\n\tselector: 'hub-slider',\n\timports: [NgTemplateOutlet, KeyValuePipe, FormsModule],\n\ttemplateUrl: './slider.component.html',\n\tstyleUrl: './slider.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-slider-host]': 'true'\n\t}\n})\nexport class HubSliderComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _value = signal<HubSliderValue>(0);\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `horizontal`). */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Whether the slider selects a `[lower, upper]` range with two thumbs. */\n\treadonly range = input(false, { transform: booleanAttribute });\n\n\t/** Minimum value. */\n\treadonly min = input<number, string | number>(0, { transform: numberAttribute });\n\n\t/** Maximum value. */\n\treadonly max = input<number, string | number>(100, { transform: numberAttribute });\n\n\t/** Step increment. */\n\treadonly step = input<number, string | number>(1, { transform: numberAttribute });\n\n\t/** Whether to show the value bubble(s) above the thumb(s). */\n\treadonly showValue = input(true, { transform: booleanAttribute });\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<HubSliderValue>();\n\n\t/** Current single value (single mode). */\n\tprotected readonly single = computed<number>(() => {\n\t\tconst v = this._value();\n\t\treturn Array.isArray(v) ? v[0] : v;\n\t});\n\n\t/** Lower bound of the current range (range mode). */\n\tprotected readonly lower = computed<number>(() => {\n\t\tconst v = this._value();\n\t\treturn Array.isArray(v) ? v[0] : this.min();\n\t});\n\n\t/** Upper bound of the current range (range mode). */\n\tprotected readonly upper = computed<number>(() => {\n\t\tconst v = this._value();\n\t\treturn Array.isArray(v) ? v[1] : this.max();\n\t});\n\n\t/** Single-thumb position as a clamped 0–100 percentage. */\n\tprotected readonly percent = computed<number>(() => this.#toPercent(this.single()));\n\n\t/** Lower-thumb position as a clamped 0–100 percentage. */\n\tprotected readonly lowerPercent = computed<number>(() => this.#toPercent(this.lower()));\n\n\t/** Upper-thumb position as a clamped 0–100 percentage. */\n\tprotected readonly upperPercent = computed<number>(() => this.#toPercent(this.upper()));\n\n\twriteValue(value: HubSliderValue | null): void {\n\t\tif (this.range()) {\n\t\t\tconst tuple = Array.isArray(value) ? value : [this.min(), this.max()];\n\t\t\tthis._value.set([+tuple[0], +tuple[1]]);\n\t\t} else {\n\t\t\tthis._value.set(+((value as number) ?? 0));\n\t\t}\n\t}\n\n\t/**\n\t * Updates the single value and propagates it.\n\t *\n\t * @param value - The new value (string from the DOM or number).\n\t */\n\tsetValue(value: string | number): void {\n\t\tthis.#emit(+value);\n\t}\n\n\t/**\n\t * Updates the lower thumb (clamped not to cross the upper thumb).\n\t *\n\t * @param value - The new lower value.\n\t */\n\tsetLower(value: string | number): void {\n\t\tconst next = Math.min(+value, this.upper());\n\t\tthis.#emit([next, this.upper()]);\n\t}\n\n\t/**\n\t * Updates the upper thumb (clamped not to cross the lower thumb).\n\t *\n\t * @param value - The new upper value.\n\t */\n\tsetUpper(value: string | number): void {\n\t\tconst next = Math.max(+value, this.lower());\n\t\tthis.#emit([this.lower(), next]);\n\t}\n\n\t#emit(value: HubSliderValue): void {\n\t\tthis._value.set(value);\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n\n\t#toPercent(value: number): number {\n\t\tconst span = this.max() - this.min();\n\t\tconst ratio = span === 0 ? 0 : ((value - this.min()) / span) * 100;\n\n\t\treturn Math.min(100, Math.max(0, ratio));\n\t}\n}\n","<div\n\tclass=\"hub-field hub-slider\"\n\t[class.hub-field--horizontal]=\"label() && labelType() === _labelTypes.Horizontal\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n\t[style.--hub-slider-percent]=\"percent()\"\n\t[style.--hub-slider-from]=\"lowerPercent()\"\n\t[style.--hub-slider-to]=\"upperPercent()\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div\n\t\tclass=\"hub-field__body hub-slider__range\"\n\t\t[class.hub-slider__range--dual]=\"range()\"\n\t\t[class.hub-slider__range--flush]=\"!showValue()\"\n\t>\n\t\t@if (range()) {\n\t\t\t<div class=\"hub-slider__rail\" aria-hidden=\"true\"></div>\n\n\t\t\t<input\n\t\t\t\ttype=\"range\"\n\t\t\t\tclass=\"hub-slider__track hub-slider__track--lower\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[min]=\"min()\"\n\t\t\t\t[max]=\"max()\"\n\t\t\t\t[step]=\"step()\"\n\t\t\t\t[value]=\"lower()\"\n\t\t\t\t(input)=\"setLower($any($event.target).value)\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\taria-label=\"Range start\"\n\t\t\t\t[attr.aria-valuetext]=\"lower()\"\n\t\t\t/>\n\t\t\t<input\n\t\t\t\ttype=\"range\"\n\t\t\t\tclass=\"hub-slider__track hub-slider__track--upper\"\n\t\t\t\t[min]=\"min()\"\n\t\t\t\t[max]=\"max()\"\n\t\t\t\t[step]=\"step()\"\n\t\t\t\t[value]=\"upper()\"\n\t\t\t\t(input)=\"setUpper($any($event.target).value)\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\taria-label=\"Range end\"\n\t\t\t\t[attr.aria-valuetext]=\"upper()\"\n\t\t\t/>\n\n\t\t\t@if (showValue()) {\n\t\t\t\t<span class=\"hub-slider__bubble hub-slider__bubble--lower\" aria-hidden=\"true\">{{ lower() }}</span>\n\t\t\t\t<span class=\"hub-slider__bubble hub-slider__bubble--upper\" aria-hidden=\"true\">{{ upper() }}</span>\n\t\t\t}\n\t\t} @else {\n\t\t\t<input\n\t\t\t\ttype=\"range\"\n\t\t\t\tclass=\"hub-slider__track\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[min]=\"min()\"\n\t\t\t\t[max]=\"max()\"\n\t\t\t\t[step]=\"step()\"\n\t\t\t\t[value]=\"single()\"\n\t\t\t\t(input)=\"setValue($any($event.target).value)\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[required]=\"!!required()\"\n\t\t\t\t[attr.aria-valuetext]=\"single()\"\n\t\t\t/>\n\n\t\t\t@if (showValue()) {\n\t\t\t\t<span class=\"hub-slider__bubble\" aria-hidden=\"true\">{{ single() }}</span>\n\t\t\t}\n\t\t}\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></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 * Resolves a user-supplied accent value to a paintable CSS colour for a `--hub-*-accent` slot.\n *\n * A bareword (a built-in semantic name such as `primary` / `success`, or any registered accent /\n * named CSS colour) becomes a `--hub-sys-color-*` design-system token with the word itself as the\n * raw fallback, so named CSS colours keep working when no token is registered. A literal colour\n * (`#ff0000`, `rgb(...)`, `oklch(...)`, `var(...)`) is passed through unchanged. Empty / whitespace\n * input resolves to `null` so the caller can keep its neutral default.\n *\n * @param value - The raw accent value (e.g. from a `color` input).\n * @returns The resolved CSS colour, or `null` when no accent is provided.\n */\nexport function resolveHubAccent(value: string | null | undefined): string | null {\n\tconst color = value?.trim();\n\tif (!color) return null;\n\treturn /^[a-zA-Z][\\w-]*$/.test(color) ? `var(--hub-sys-color-${color}, ${color})` : color;\n}\n","import {\n\tafterNextRender,\n\tafterRenderEffect,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\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 { HubFieldControl } from '../../shared/hub-field-control';\nimport { resolveHubAccent } from '../../shared/resolve-hub-accent';\n\n/** A single choice rendered by {@link HubSegmentedComponent}. */\nexport interface HubSegmentedOption {\n\t/** Value written to the form control when this option is selected. */\n\tvalue: unknown;\n\t/** Visible label for the segment. */\n\tlabel: string;\n\t/** When `true`, the segment is rendered but cannot be selected. */\n\tdisabled?: boolean;\n}\n\n/** Density of the segmented control. */\nexport type HubSegmentedSize = 'sm' | 'md' | 'lg';\n\n/**\n * Segmented button bar (`hub-segmented`): a compact group of 2..n options rendered as an inline\n * (or vertical) segmented control. A full `ng-hub-ui-forms` field — it extends\n * {@link HubFieldControl}, so it binds with `formControlName` / `ngModel` and shares the label,\n * helper text and validation chrome with every other field.\n *\n * Two selection modes:\n * - **single** (default): exclusive choice following the WAI-ARIA radiogroup pattern\n * (`role=\"radiogroup\"` wrapping `role=\"radio\"` buttons). Arrow keys move focus **and** select.\n * The value is the scalar of the chosen option.\n * - **multiple** (`[multiple]=\"true\"`): a toggle group (`role=\"group\"` wrapping\n * `aria-pressed` buttons). Clicking toggles membership; arrow keys only move focus.\n * The value is an array of the selected option values.\n *\n * ```html\n * <hub-segmented\n * formControlName=\"view\"\n * [options]=\"[{ value: 'list', label: 'List' }, { value: 'grid', label: 'Grid' }]\"\n * />\n *\n * <hub-segmented formControlName=\"tags\" [multiple]=\"true\" [vertical]=\"true\" [options]=\"tags\" />\n * ```\n */\n@Component({\n\tselector: 'hub-segmented',\n\tstandalone: true,\n\timports: [NgTemplateOutlet, KeyValuePipe],\n\ttemplateUrl: './segmented.component.html',\n\tstyleUrl: './segmented.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class.hub-segmented-host]': 'true'\n\t}\n})\nexport class HubSegmentedComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\n\t/** The selectable options, in render order. */\n\treadonly options = input<HubSegmentedOption[]>([]);\n\n\t/** Visual density. */\n\treadonly size = input<HubSegmentedSize>('md');\n\n\t/**\n\t * Accent for the selected pill. Accepts ANY colour value:\n\t * - a built-in semantic name (`primary`, `success`, …) or any registered accent → resolves to\n\t * the matching `--hub-sys-color-*` design-system token;\n\t * - a literal colour (`#ff0000`, `rgb(...)`, `oklch(...)`, `rebeccapurple`) → used as-is.\n\t * Both the sliding indicator and the multiple-mode pill follow it, and the selected label gets a\n\t * derived contrast colour automatically. Empty string (default) keeps the neutral white-pill look.\n\t */\n\treadonly color = input<string>('');\n\n\t/**\n\t * Resolves {@link color} to a paintable accent for the `--hub-segmented-accent` slot: a bareword\n\t * becomes a `--hub-sys-color-*` token with the word as raw fallback (so named CSS colours work\n\t * too), while a literal `#hex` / `rgb()` / `oklch()` / `var()` is passed through unchanged.\n\t */\n\tprotected readonly accentVar = computed<string | null>(() => resolveHubAccent(this.color()));\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Label display type (`stacked`, `horizontal`). */\n\treadonly labelType = input<HubLabelType>(this._labelTypes.Stacked);\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** When `true`, options toggle independently and the value is an array. */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/** When `true`, the segments stack vertically instead of sitting in a row. */\n\treadonly vertical = input(false, { transform: booleanAttribute });\n\n\t/** Currently selected value — a scalar in single mode, an array in multiple mode. */\n\treadonly value = model<unknown>();\n\n\t/** The rendered option buttons, used to move focus during keyboard navigation. */\n\tprivate readonly _buttons = viewChildren<ElementRef<HTMLButtonElement>>('optionButton');\n\n\t/** The segmented bar element — the positioning context for the sliding indicator. */\n\tprivate readonly _bar = viewChild<ElementRef<HTMLElement>>('segmentedBar');\n\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n\tconstructor() {\n\t\tsuper();\n\n\t\t// The sliding indicator is a browser-only affordance (it measures rendered geometry) and\n\t\t// applies to single mode only. Guard SSR so no DOM reads happen off the browser.\n\t\tif (this._isBrowser) {\n\t\t\t// Re-measure whenever anything that moves or resizes the selected pill changes.\n\t\t\tafterRenderEffect(() => {\n\t\t\t\t// Track the geometry-affecting state so the effect re-runs on any of them.\n\t\t\t\tthis.value();\n\t\t\t\tthis.options();\n\t\t\t\tthis.size();\n\t\t\t\tthis.vertical();\n\t\t\t\tthis.multiple();\n\t\t\t\tthis._buttons();\n\t\t\t\tthis.updateIndicator();\n\t\t\t});\n\n\t\t\t// Initial placement plus a ResizeObserver so the pill follows layout/reflow changes\n\t\t\t// (container resize, font swaps, wrapping) that no signal reports.\n\t\t\tafterNextRender(() => {\n\t\t\t\tconst bar = this._bar()?.nativeElement;\n\t\t\t\tif (!bar) return;\n\n\t\t\t\tif (typeof ResizeObserver !== 'undefined') {\n\t\t\t\t\tconst observer = new ResizeObserver(() => this.updateIndicator());\n\t\t\t\t\tobserver.observe(bar);\n\t\t\t\t\tthis._destroyRef.onDestroy(() => observer.disconnect());\n\t\t\t\t}\n\n\t\t\t\tthis.updateIndicator();\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Index of the option that owns the group's tab stop (roving tabindex): the first selected\n\t * option, or the first enabled option when nothing is selected yet.\n\t */\n\treadonly rovingIndex = computed<number>(() => {\n\t\tconst options = this.options();\n\t\tconst selected = options.findIndex((option) => this.isSelected(option));\n\t\tif (selected >= 0) return selected;\n\t\treturn options.findIndex((option) => !option.disabled);\n\t});\n\n\t/** Whether the given option is currently selected (mode-aware). */\n\tisSelected(option: HubSegmentedOption): boolean {\n\t\tif (this.multiple()) {\n\t\t\tconst current = this.value();\n\t\t\treturn Array.isArray(current) && current.some((entry) => this.#isSameValue(entry, option.value));\n\t\t}\n\n\t\treturn this.#isSameValue(option.value, this.value());\n\t}\n\n\t/**\n\t * Selects (single) or toggles (multiple) an option and notifies the form. No-op when the\n\t * control or the option is disabled.\n\t */\n\tselect(option: HubSegmentedOption): void {\n\t\tif (this.disabled() || option.disabled) return;\n\n\t\tif (this.multiple()) {\n\t\t\tconst current = Array.isArray(this.value()) ? (this.value() as unknown[]) : [];\n\t\t\tconst exists = current.some((entry) => this.#isSameValue(entry, option.value));\n\t\t\tconst next = exists\n\t\t\t\t? current.filter((entry) => !this.#isSameValue(entry, option.value))\n\t\t\t\t: [...current, option.value];\n\t\t\tthis.value.set(next);\n\t\t\tthis.onChange(next);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.#isSameValue(option.value, this.value())) return;\n\t\tthis.value.set(option.value);\n\t\tthis.onChange(option.value);\n\t}\n\n\t/**\n\t * Keyboard navigation. In single mode the arrow keys move to (and select) the next / previous\n\t * enabled option (radiogroup pattern); in multiple mode they only move focus and selection is\n\t * left to the native button click (`Space` / `Enter`). `Home` / `End` jump to the first / last\n\t * enabled option.\n\t */\n\tonKeydown(event: KeyboardEvent): void {\n\t\tif (this.disabled()) return;\n\t\tconst options = this.options();\n\t\tif (options.length === 0) return;\n\n\t\tconst current = this.rovingIndex();\n\t\tlet target: number | null = null;\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowRight':\n\t\t\tcase 'ArrowDown':\n\t\t\t\ttarget = this.#nextEnabled(current, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowLeft':\n\t\t\tcase 'ArrowUp':\n\t\t\t\ttarget = this.#nextEnabled(current, -1);\n\t\t\t\tbreak;\n\t\t\tcase 'Home':\n\t\t\t\ttarget = this.#nextEnabled(-1, 1);\n\t\t\t\tbreak;\n\t\t\tcase 'End':\n\t\t\t\ttarget = this.#nextEnabled(options.length, -1);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tif (target === null) return;\n\t\tevent.preventDefault();\n\n\t\tif (!this.multiple()) {\n\t\t\tthis.select(options[target]);\n\t\t}\n\n\t\tthis._buttons()[target]?.nativeElement.focus();\n\t}\n\n\t/** Writes an incoming value from the form model (coerces to an array in multiple mode). */\n\toverride writeValue(value: unknown): void {\n\t\tif (this.multiple()) {\n\t\t\tthis.value.set(Array.isArray(value) ? value : []);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.value.set(value);\n\t}\n\n\t/**\n\t * Measures the selected option (single mode) and writes its position and size onto the bar as\n\t * `--hub-segmented-indicator-{x,y,width,height}` px custom properties, which the sliding\n\t * indicator reads. Collapses the indicator (width/height 0) in multiple mode or when nothing is\n\t * selected. Browser-only — invoked from `afterRenderEffect` / `afterNextRender` / the\n\t * `ResizeObserver`, so the DOM is always up to date when it runs.\n\t */\n\tprivate updateIndicator(): void {\n\t\tconst bar = this._bar()?.nativeElement;\n\t\tif (!bar) return;\n\n\t\tconst collapse = (): void => {\n\t\t\tbar.style.setProperty('--hub-segmented-indicator-width', '0px');\n\t\t\tbar.style.setProperty('--hub-segmented-indicator-height', '0px');\n\t\t};\n\n\t\tif (this.multiple()) {\n\t\t\tcollapse();\n\t\t\treturn;\n\t\t}\n\n\t\tconst index = this.options().findIndex((option) => this.isSelected(option));\n\t\tconst button = index >= 0 ? this._buttons()[index]?.nativeElement : undefined;\n\n\t\tif (!button) {\n\t\t\tcollapse();\n\t\t\treturn;\n\t\t}\n\n\t\tbar.style.setProperty('--hub-segmented-indicator-x', `${button.offsetLeft}px`);\n\t\tbar.style.setProperty('--hub-segmented-indicator-y', `${button.offsetTop}px`);\n\t\tbar.style.setProperty('--hub-segmented-indicator-width', `${button.offsetWidth}px`);\n\t\tbar.style.setProperty('--hub-segmented-indicator-height', `${button.offsetHeight}px`);\n\t}\n\n\t/**\n\t * Finds the next enabled option starting from `from`, moving in `step` direction.\n\t * Wraps around the ends and returns `null` when no enabled option exists.\n\t */\n\t#nextEnabled(from: number, step: number): number | null {\n\t\tconst options = this.options();\n\t\tconst count = options.length;\n\t\tfor (let offset = 1; offset <= count; offset++) {\n\t\t\tconst index = (((from + step * offset) % count) + count) % count;\n\t\t\tif (!options[index].disabled) return index;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Value equality used across selection — reference / `Object.is` semantics. */\n\t#isSameValue(a: unknown, b: unknown): boolean {\n\t\treturn Object.is(a, b);\n\t}\n}\n","<div\n\tclass=\"hub-field hub-segmented-field\"\n\t[class.hub-field--horizontal]=\"label() && labelType() === _labelTypes.Horizontal\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t<div\n\t\t\t#segmentedBar\n\t\t\t[id]=\"id\"\n\t\t\tclass=\"hub-segmented\"\n\t\t\t[class.hub-segmented--sm]=\"size() === 'sm'\"\n\t\t\t[class.hub-segmented--lg]=\"size() === 'lg'\"\n\t\t\t[class.hub-segmented--vertical]=\"vertical()\"\n\t\t\t[class.hub-segmented--multiple]=\"multiple()\"\n\t\t\t[class.hub-segmented--disabled]=\"disabled()\"\n\t\t\t[attr.data-variant]=\"color() || null\"\n\t\t\t[style.--hub-segmented-accent]=\"accentVar()\"\n\t\t\t[attr.role]=\"multiple() ? 'group' : 'radiogroup'\"\n\t\t\t[attr.aria-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{{ option.label }}\n\t\t\t\t</button>\n\t\t\t}\n\t\t</div>\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Marks a template as the legend content of a `<hub-fieldset>`.\n *\n * @example\n * ```html\n * <hub-fieldset formGroupName=\"address\">\n * <ng-template hubLegend>Shipping address <span class=\"badge\">required</span></ng-template>\n * </hub-fieldset>\n * ```\n */\n@Directive({\n\tselector: '[hubLegend]'\n})\nexport class HubLegendDirective {\n\t/** Template reference for the legend content. */\n\treadonly template = inject(TemplateRef);\n}\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, contentChild, input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { HubLegendDirective } from '../../directives/legend.directive';\nimport { HubGroupControl } from '../../shared/hub-group-control';\n\n/**\n * Groups related fields under a `<fieldset>`/`<legend>` and **automatically displays the\n * group-level (cross-field) validation errors** of the bound `FormGroup`/`FormArray`.\n *\n * Bind the target group explicitly with `[group]` (recommended) or by `groupName` resolved from the\n * parent container. Errors set on the group itself — e.g. by `hubAreEqual` — are rendered without\n * any extra wiring, mirroring how the field components show control-level errors.\n *\n * @example\n * ```html\n * <hub-fieldset legend=\"Credentials\" [group]=\"form.controls.credentials\">\n * <hub-input formControlName=\"password\" type=\"password\" label=\"Password\" />\n * <hub-input formControlName=\"confirm\" type=\"password\" label=\"Confirm\" />\n * </hub-fieldset>\n * ```\n */\n@Component({\n\tselector: 'hub-fieldset',\n\timports: [NgTemplateOutlet, KeyValuePipe],\n\ttemplateUrl: './fieldset.component.html',\n\tstyleUrl: './fieldset.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-fieldset-host]': 'true'\n\t}\n})\nexport class HubFieldsetComponent extends HubGroupControl {\n\t/** Legend text. Ignored when a `hubLegend` template is projected. */\n\treadonly legend = input<string>('');\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Query for a projected `hubLegend` template. */\n\treadonly legendTmp = contentChild(HubLegendDirective, { read: TemplateRef });\n}\n","<fieldset class=\"hub-fieldset\" [class.hub-fieldset--invalid]=\"isInvalid\">\n\t@if (legend() || legendTmp()) {\n\t\t<legend class=\"hub-fieldset__legend\">\n\t\t\t@if (legendTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"legendTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ legend() }}\n\t\t\t}\n\t\t</legend>\n\t}\n\n\t<div class=\"hub-fieldset__content\">\n\t\t<ng-content></ng-content>\n\t</div>\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n</fieldset>\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { HubGroupControl } from '../../shared/hub-group-control';\n\n/**\n * Applied to a reactive `<form [formGroup]>`, **automatically displays the form-level validation\n * errors** (cross-field errors set on the root group) and centralizes submit handling.\n *\n * Because it sits on the same host as the `formGroup` directive, projected `formControlName` fields\n * resolve their control normally — no extra wiring. On submit it prevents the default navigation,\n * marks the whole tree as touched (so every field reveals its errors) and reveals the form-level\n * errors. Bind the form's own `(submit)` event for your handler — there is no custom output, which\n * keeps the API idiomatic and avoids the double-emit you get when a directive output shadows the\n * native `submit` event on a `<form>`.\n *\n * @example\n * ```html\n * <form [formGroup]=\"form\" hubForm (submit)=\"save()\">\n * <hub-input formControlName=\"email\" type=\"email\" label=\"Email\" />\n * <button type=\"submit\">Save</button>\n * </form>\n * ```\n */\n@Component({\n\tselector: 'form[hubForm]',\n\timports: [NgTemplateOutlet, KeyValuePipe],\n\ttemplateUrl: './form.component.html',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class.hub-form-host]': 'true',\n\t\t'[class.hub-form--invalid]': 'isInvalid',\n\t\t'(submit)': 'handleSubmit($event)'\n\t}\n})\nexport class HubFormComponent extends HubGroupControl {\n\t/**\n\t * Augments the native form submit: prevents the default navigation, marks the tree as touched\n\t * and flips the submitted state so form-level errors appear. The consumer's own `(submit)`\n\t * binding still fires for their handler.\n\t *\n\t * @param event - The native submit event.\n\t */\n\tprotected handleSubmit(event: Event): void {\n\t\tevent.preventDefault();\n\t\tthis._control()?.markAllAsTouched();\n\t\tthis._submitted.set(true);\n\t}\n}\n","<ng-content></ng-content>\n\n@if (isInvalid) {\n\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t<ul>\n\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t<li>\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t></ng-container>\n\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></span>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</li>\n\t\t\t}\n\t\t</ul>\n\t</div>\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Presentational legend for a `<hub-fieldset>` (or any grouped section), with optional\n * required/invalid state styling.\n *\n * Use it inside a `hubLegend` template, or standalone as a section title.\n *\n * @example\n * ```html\n * <hub-fieldset [group]=\"form.controls.address\">\n * <ng-template hubLegend>\n * <hub-legend [required]=\"true\" [invalid]=\"form.controls.address.invalid\">Shipping address</hub-legend>\n * </ng-template>\n * </hub-fieldset>\n * ```\n */\n@Component({\n\tselector: 'hub-legend',\n\ttemplate: `<span class=\"hub-legend\" [class.hub-legend--invalid]=\"invalid()\">\n\t\t<ng-content></ng-content>\n\t\t@if (required()) {\n\t\t\t<span class=\"hub-legend__required\" aria-hidden=\"true\">*</span>\n\t\t}\n\t</span>`,\n\tstyleUrl: './legend.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: { '[class.hub-legend-host]': 'true' }\n})\nexport class HubLegendComponent {\n\t/** Whether to render the required indicator. */\n\treadonly required = input(false, { transform: booleanAttribute });\n\n\t/** Whether to render the invalid state styling. */\n\treadonly invalid = input(false, { transform: booleanAttribute });\n}\n","/**\n * Rendering formats for `<hub-select>`.\n *\n * - `dropdown` — the ng-select engine (search, virtual scroll, tags…).\n * - `buttons` — a toggle-button group (single or multiple, per `multiple`).\n * - `checkbox` — a list of checkboxes (always multiple).\n * - `radio` — a list of radios (always single).\n */\nexport type HubSelectFormat = 'dropdown' | 'buttons' | 'checkbox' | 'radio';\n\n/**\n * Enum mirror of {@link HubSelectFormat} for ergonomic template usage.\n */\nexport enum HubSelectFormats {\n\tDropdown = 'dropdown',\n\tButtons = 'buttons',\n\tCheckbox = 'checkbox',\n\tRadio = 'radio'\n}\n","// @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()\n\t\t\t\t? escapeHTML(this.ngItemLabel())\n\t\t\t\t: this.ngItemLabel();\n\t\t})\n\t}\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-option-tmp]',\n\tstandalone: true,\n})\nexport class NgOptionTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-optgroup-tmp]',\n\tstandalone: true,\n})\nexport class NgOptgroupTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-label-tmp]',\n\tstandalone: true,\n})\nexport class NgLabelTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-multi-label-tmp]',\n\tstandalone: true,\n})\nexport class NgMultiLabelTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-header-tmp]',\n\tstandalone: true,\n})\nexport class NgHeaderTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-footer-tmp]',\n\tstandalone: true,\n})\nexport class NgFooterTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-notfound-tmp]',\n\tstandalone: true,\n})\nexport class NgNotFoundTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-placeholder-tmp]',\n\tstandalone: true,\n})\nexport class NgPlaceholderTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-typetosearch-tmp]',\n\tstandalone: true,\n})\nexport class NgTypeToSearchTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-loadingtext-tmp]',\n\tstandalone: true,\n})\nexport class NgLoadingTextTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-tag-tmp]',\n\tstandalone: true,\n})\nexport class NgTagTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n@Directive({\n\t// eslint-disable-next-line @angular-eslint/directive-selector\n\tselector: '[ng-loadingspinner-tmp]',\n\tstandalone: true,\n})\nexport class NgLoadingSpinnerTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n\n// eslint-disable-next-line @angular-eslint/directive-selector\n@Directive({ selector: '[ng-clearbutton-tmp]', standalone: true })\nexport class NgClearButtonTemplateDirective {\n\tpublic readonly template = inject(TemplateRef<any>);\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class NgSelectConfig {\n\tplaceholder: string;\n\tfixedPlaceholder = true;\n\tnotFoundText = 'No items found';\n\ttypeToSearchText = 'Type to search';\n\taddTagText = 'Add item';\n\tloadingText = 'Loading...';\n\tclearAllText = 'Clear all';\n\tariaLabelDropdown = 'Options List';\n\tdisableVirtualScroll = true;\n\topenOnEnter = true;\n\tappendTo: string;\n\tbindValue: string;\n\tbindLabel: string;\n\tappearance = 'underline';\n\tclearSearchOnAdd: boolean;\n\tdeselectOnClick: boolean;\n\ttabFocusOnClear = true;\n\t/**\n\t * Controls which DOM event is used to detect outside clicks for closing the dropdown.\n\t * Defaults to 'click'. Set to 'mousedown' to handle early outside interactions\n\t * (useful when backdrops load on click and would otherwise close the dropdown).\n\t */\n\toutsideClickEvent: 'click' | 'mousedown' = 'click';\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ConsoleService {\n\twarn(message: string) {\n\t\tconsole.warn(message);\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nexport function newId() {\n\t// First character is an 'a', it's good practice to tag id to begin with a letter\n\treturn 'axxxxxxxxxxx'.replace(/[x]/g, () => {\n\t\tconst val = (Math.random() * 16) | 0;\n\t\treturn val.toString(16);\n\t});\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nconst diacritics = {\n\t'\\u24B6': 'A',\n\t'\\uFF21': 'A',\n\t'\\u00C0': 'A',\n\t'\\u00C1': 'A',\n\t'\\u00C2': 'A',\n\t'\\u1EA6': 'A',\n\t'\\u1EA4': 'A',\n\t'\\u1EAA': 'A',\n\t'\\u1EA8': 'A',\n\t'\\u00C3': 'A',\n\t'\\u0100': 'A',\n\t'\\u0102': 'A',\n\t'\\u1EB0': 'A',\n\t'\\u1EAE': 'A',\n\t'\\u1EB4': 'A',\n\t'\\u1EB2': 'A',\n\t'\\u0226': 'A',\n\t'\\u01E0': 'A',\n\t'\\u00C4': 'A',\n\t'\\u01DE': 'A',\n\t'\\u1EA2': 'A',\n\t'\\u00C5': 'A',\n\t'\\u01FA': 'A',\n\t'\\u01CD': 'A',\n\t'\\u0200': 'A',\n\t'\\u0202': 'A',\n\t'\\u1EA0': 'A',\n\t'\\u1EAC': 'A',\n\t'\\u1EB6': 'A',\n\t'\\u1E00': 'A',\n\t'\\u0104': 'A',\n\t'\\u023A': 'A',\n\t'\\u2C6F': 'A',\n\t'\\uA732': 'AA',\n\t'\\u00C6': 'AE',\n\t'\\u01FC': 'AE',\n\t'\\u01E2': 'AE',\n\t'\\uA734': 'AO',\n\t'\\uA736': 'AU',\n\t'\\uA738': 'AV',\n\t'\\uA73A': 'AV',\n\t'\\uA73C': 'AY',\n\t'\\u24B7': 'B',\n\t'\\uFF22': 'B',\n\t'\\u1E02': 'B',\n\t'\\u1E04': 'B',\n\t'\\u1E06': 'B',\n\t'\\u0243': 'B',\n\t'\\u0182': 'B',\n\t'\\u0181': 'B',\n\t'\\u24B8': 'C',\n\t'\\uFF23': 'C',\n\t'\\u0106': 'C',\n\t'\\u0108': 'C',\n\t'\\u010A': 'C',\n\t'\\u010C': 'C',\n\t'\\u00C7': 'C',\n\t'\\u1E08': 'C',\n\t'\\u0187': 'C',\n\t'\\u023B': 'C',\n\t'\\uA73E': 'C',\n\t'\\u24B9': 'D',\n\t'\\uFF24': 'D',\n\t'\\u1E0A': 'D',\n\t'\\u010E': 'D',\n\t'\\u1E0C': 'D',\n\t'\\u1E10': 'D',\n\t'\\u1E12': 'D',\n\t'\\u1E0E': 'D',\n\t'\\u0110': 'D',\n\t'\\u018B': 'D',\n\t'\\u018A': 'D',\n\t'\\u0189': 'D',\n\t'\\uA779': 'D',\n\t'\\u01F1': 'DZ',\n\t'\\u01C4': 'DZ',\n\t'\\u01F2': 'Dz',\n\t'\\u01C5': 'Dz',\n\t'\\u24BA': 'E',\n\t'\\uFF25': 'E',\n\t'\\u00C8': 'E',\n\t'\\u00C9': 'E',\n\t'\\u00CA': 'E',\n\t'\\u1EC0': 'E',\n\t'\\u1EBE': 'E',\n\t'\\u1EC4': 'E',\n\t'\\u1EC2': 'E',\n\t'\\u1EBC': 'E',\n\t'\\u0112': 'E',\n\t'\\u1E14': 'E',\n\t'\\u1E16': 'E',\n\t'\\u0114': 'E',\n\t'\\u0116': 'E',\n\t'\\u00CB': 'E',\n\t'\\u1EBA': 'E',\n\t'\\u011A': 'E',\n\t'\\u0204': 'E',\n\t'\\u0206': 'E',\n\t'\\u1EB8': 'E',\n\t'\\u1EC6': 'E',\n\t'\\u0228': 'E',\n\t'\\u1E1C': 'E',\n\t'\\u0118': 'E',\n\t'\\u1E18': 'E',\n\t'\\u1E1A': 'E',\n\t'\\u0190': 'E',\n\t'\\u018E': 'E',\n\t'\\u24BB': 'F',\n\t'\\uFF26': 'F',\n\t'\\u1E1E': 'F',\n\t'\\u0191': 'F',\n\t'\\uA77B': 'F',\n\t'\\u24BC': 'G',\n\t'\\uFF27': 'G',\n\t'\\u01F4': 'G',\n\t'\\u011C': 'G',\n\t'\\u1E20': 'G',\n\t'\\u011E': 'G',\n\t'\\u0120': 'G',\n\t'\\u01E6': 'G',\n\t'\\u0122': 'G',\n\t'\\u01E4': 'G',\n\t'\\u0193': 'G',\n\t'\\uA7A0': 'G',\n\t'\\uA77D': 'G',\n\t'\\uA77E': 'G',\n\t'\\u24BD': 'H',\n\t'\\uFF28': 'H',\n\t'\\u0124': 'H',\n\t'\\u1E22': 'H',\n\t'\\u1E26': 'H',\n\t'\\u021E': 'H',\n\t'\\u1E24': 'H',\n\t'\\u1E28': 'H',\n\t'\\u1E2A': 'H',\n\t'\\u0126': 'H',\n\t'\\u2C67': 'H',\n\t'\\u2C75': 'H',\n\t'\\uA78D': 'H',\n\t'\\u24BE': 'I',\n\t'\\uFF29': 'I',\n\t'\\u00CC': 'I',\n\t'\\u00CD': 'I',\n\t'\\u00CE': 'I',\n\t'\\u0128': 'I',\n\t'\\u012A': 'I',\n\t'\\u012C': 'I',\n\t'\\u0130': 'I',\n\t'\\u00CF': 'I',\n\t'\\u1E2E': 'I',\n\t'\\u1EC8': 'I',\n\t'\\u01CF': 'I',\n\t'\\u0208': 'I',\n\t'\\u020A': 'I',\n\t'\\u1ECA': 'I',\n\t'\\u012E': 'I',\n\t'\\u1E2C': 'I',\n\t'\\u0197': 'I',\n\t'\\u24BF': 'J',\n\t'\\uFF2A': 'J',\n\t'\\u0134': 'J',\n\t'\\u0248': 'J',\n\t'\\u24C0': 'K',\n\t'\\uFF2B': 'K',\n\t'\\u1E30': 'K',\n\t'\\u01E8': 'K',\n\t'\\u1E32': 'K',\n\t'\\u0136': 'K',\n\t'\\u1E34': 'K',\n\t'\\u0198': 'K',\n\t'\\u2C69': 'K',\n\t'\\uA740': 'K',\n\t'\\uA742': 'K',\n\t'\\uA744': 'K',\n\t'\\uA7A2': 'K',\n\t'\\u24C1': 'L',\n\t'\\uFF2C': 'L',\n\t'\\u013F': 'L',\n\t'\\u0139': 'L',\n\t'\\u013D': 'L',\n\t'\\u1E36': 'L',\n\t'\\u1E38': 'L',\n\t'\\u013B': 'L',\n\t'\\u1E3C': 'L',\n\t'\\u1E3A': 'L',\n\t'\\u0141': 'L',\n\t'\\u023D': 'L',\n\t'\\u2C62': 'L',\n\t'\\u2C60': 'L',\n\t'\\uA748': 'L',\n\t'\\uA746': 'L',\n\t'\\uA780': 'L',\n\t'\\u01C7': 'LJ',\n\t'\\u01C8': 'Lj',\n\t'\\u24C2': 'M',\n\t'\\uFF2D': 'M',\n\t'\\u1E3E': 'M',\n\t'\\u1E40': 'M',\n\t'\\u1E42': 'M',\n\t'\\u2C6E': 'M',\n\t'\\u019C': 'M',\n\t'\\u24C3': 'N',\n\t'\\uFF2E': 'N',\n\t'\\u01F8': 'N',\n\t'\\u0143': 'N',\n\t'\\u00D1': 'N',\n\t'\\u1E44': 'N',\n\t'\\u0147': 'N',\n\t'\\u1E46': 'N',\n\t'\\u0145': 'N',\n\t'\\u1E4A': 'N',\n\t'\\u1E48': 'N',\n\t'\\u0220': 'N',\n\t'\\u019D': 'N',\n\t'\\uA790': 'N',\n\t'\\uA7A4': 'N',\n\t'\\u01CA': 'NJ',\n\t'\\u01CB': 'Nj',\n\t'\\u24C4': 'O',\n\t'\\uFF2F': 'O',\n\t'\\u00D2': 'O',\n\t'\\u00D3': 'O',\n\t'\\u00D4': 'O',\n\t'\\u1ED2': 'O',\n\t'\\u1ED0': 'O',\n\t'\\u1ED6': 'O',\n\t'\\u1ED4': 'O',\n\t'\\u00D5': 'O',\n\t'\\u1E4C': 'O',\n\t'\\u022C': 'O',\n\t'\\u1E4E': 'O',\n\t'\\u014C': 'O',\n\t'\\u1E50': 'O',\n\t'\\u1E52': 'O',\n\t'\\u014E': 'O',\n\t'\\u022E': 'O',\n\t'\\u0230': 'O',\n\t'\\u00D6': 'O',\n\t'\\u022A': 'O',\n\t'\\u1ECE': 'O',\n\t'\\u0150': 'O',\n\t'\\u01D1': 'O',\n\t'\\u020C': 'O',\n\t'\\u020E': 'O',\n\t'\\u01A0': 'O',\n\t'\\u1EDC': 'O',\n\t'\\u1EDA': 'O',\n\t'\\u1EE0': 'O',\n\t'\\u1EDE': 'O',\n\t'\\u1EE2': 'O',\n\t'\\u1ECC': 'O',\n\t'\\u1ED8': 'O',\n\t'\\u01EA': 'O',\n\t'\\u01EC': 'O',\n\t'\\u00D8': 'O',\n\t'\\u01FE': 'O',\n\t'\\u0186': 'O',\n\t'\\u019F': 'O',\n\t'\\uA74A': 'O',\n\t'\\uA74C': 'O',\n\t'\\u01A2': 'OI',\n\t'\\uA74E': 'OO',\n\t'\\u0222': 'OU',\n\t'\\u24C5': 'P',\n\t'\\uFF30': 'P',\n\t'\\u1E54': 'P',\n\t'\\u1E56': 'P',\n\t'\\u01A4': 'P',\n\t'\\u2C63': 'P',\n\t'\\uA750': 'P',\n\t'\\uA752': 'P',\n\t'\\uA754': 'P',\n\t'\\u24C6': 'Q',\n\t'\\uFF31': 'Q',\n\t'\\uA756': 'Q',\n\t'\\uA758': 'Q',\n\t'\\u024A': 'Q',\n\t'\\u24C7': 'R',\n\t'\\uFF32': 'R',\n\t'\\u0154': 'R',\n\t'\\u1E58': 'R',\n\t'\\u0158': 'R',\n\t'\\u0210': 'R',\n\t'\\u0212': 'R',\n\t'\\u1E5A': 'R',\n\t'\\u1E5C': 'R',\n\t'\\u0156': 'R',\n\t'\\u1E5E': 'R',\n\t'\\u024C': 'R',\n\t'\\u2C64': 'R',\n\t'\\uA75A': 'R',\n\t'\\uA7A6': 'R',\n\t'\\uA782': 'R',\n\t'\\u24C8': 'S',\n\t'\\uFF33': 'S',\n\t'\\u1E9E': 'S',\n\t'\\u015A': 'S',\n\t'\\u1E64': 'S',\n\t'\\u015C': 'S',\n\t'\\u1E60': 'S',\n\t'\\u0160': 'S',\n\t'\\u1E66': 'S',\n\t'\\u1E62': 'S',\n\t'\\u1E68': 'S',\n\t'\\u0218': 'S',\n\t'\\u015E': 'S',\n\t'\\u2C7E': 'S',\n\t'\\uA7A8': 'S',\n\t'\\uA784': 'S',\n\t'\\u24C9': 'T',\n\t'\\uFF34': 'T',\n\t'\\u1E6A': 'T',\n\t'\\u0164': 'T',\n\t'\\u1E6C': 'T',\n\t'\\u021A': 'T',\n\t'\\u0162': 'T',\n\t'\\u1E70': 'T',\n\t'\\u1E6E': 'T',\n\t'\\u0166': 'T',\n\t'\\u01AC': 'T',\n\t'\\u01AE': 'T',\n\t'\\u023E': 'T',\n\t'\\uA786': 'T',\n\t'\\uA728': 'TZ',\n\t'\\u24CA': 'U',\n\t'\\uFF35': 'U',\n\t'\\u00D9': 'U',\n\t'\\u00DA': 'U',\n\t'\\u00DB': 'U',\n\t'\\u0168': 'U',\n\t'\\u1E78': 'U',\n\t'\\u016A': 'U',\n\t'\\u1E7A': 'U',\n\t'\\u016C': 'U',\n\t'\\u00DC': 'U',\n\t'\\u01DB': 'U',\n\t'\\u01D7': 'U',\n\t'\\u01D5': 'U',\n\t'\\u01D9': 'U',\n\t'\\u1EE6': 'U',\n\t'\\u016E': 'U',\n\t'\\u0170': 'U',\n\t'\\u01D3': 'U',\n\t'\\u0214': 'U',\n\t'\\u0216': 'U',\n\t'\\u01AF': 'U',\n\t'\\u1EEA': 'U',\n\t'\\u1EE8': 'U',\n\t'\\u1EEE': 'U',\n\t'\\u1EEC': 'U',\n\t'\\u1EF0': 'U',\n\t'\\u1EE4': 'U',\n\t'\\u1E72': 'U',\n\t'\\u0172': 'U',\n\t'\\u1E76': 'U',\n\t'\\u1E74': 'U',\n\t'\\u0244': 'U',\n\t'\\u24CB': 'V',\n\t'\\uFF36': 'V',\n\t'\\u1E7C': 'V',\n\t'\\u1E7E': 'V',\n\t'\\u01B2': 'V',\n\t'\\uA75E': 'V',\n\t'\\u0245': 'V',\n\t'\\uA760': 'VY',\n\t'\\u24CC': 'W',\n\t'\\uFF37': 'W',\n\t'\\u1E80': 'W',\n\t'\\u1E82': 'W',\n\t'\\u0174': 'W',\n\t'\\u1E86': 'W',\n\t'\\u1E84': 'W',\n\t'\\u1E88': 'W',\n\t'\\u2C72': 'W',\n\t'\\u24CD': 'X',\n\t'\\uFF38': 'X',\n\t'\\u1E8A': 'X',\n\t'\\u1E8C': 'X',\n\t'\\u24CE': 'Y',\n\t'\\uFF39': 'Y',\n\t'\\u1EF2': 'Y',\n\t'\\u00DD': 'Y',\n\t'\\u0176': 'Y',\n\t'\\u1EF8': 'Y',\n\t'\\u0232': 'Y',\n\t'\\u1E8E': 'Y',\n\t'\\u0178': 'Y',\n\t'\\u1EF6': 'Y',\n\t'\\u1EF4': 'Y',\n\t'\\u01B3': 'Y',\n\t'\\u024E': 'Y',\n\t'\\u1EFE': 'Y',\n\t'\\u24CF': 'Z',\n\t'\\uFF3A': 'Z',\n\t'\\u0179': 'Z',\n\t'\\u1E90': 'Z',\n\t'\\u017B': 'Z',\n\t'\\u017D': 'Z',\n\t'\\u1E92': 'Z',\n\t'\\u1E94': 'Z',\n\t'\\u01B5': 'Z',\n\t'\\u0224': 'Z',\n\t'\\u2C7F': 'Z',\n\t'\\u2C6B': 'Z',\n\t'\\uA762': 'Z',\n\t'\\u24D0': 'a',\n\t'\\uFF41': 'a',\n\t'\\u1E9A': 'a',\n\t'\\u00E0': 'a',\n\t'\\u00E1': 'a',\n\t'\\u00E2': 'a',\n\t'\\u1EA7': 'a',\n\t'\\u1EA5': 'a',\n\t'\\u1EAB': 'a',\n\t'\\u1EA9': 'a',\n\t'\\u00E3': 'a',\n\t'\\u0101': 'a',\n\t'\\u0103': 'a',\n\t'\\u1EB1': 'a',\n\t'\\u1EAF': 'a',\n\t'\\u1EB5': 'a',\n\t'\\u1EB3': 'a',\n\t'\\u0227': 'a',\n\t'\\u01E1': 'a',\n\t'\\u00E4': 'a',\n\t'\\u01DF': 'a',\n\t'\\u1EA3': 'a',\n\t'\\u00E5': 'a',\n\t'\\u01FB': 'a',\n\t'\\u01CE': 'a',\n\t'\\u0201': 'a',\n\t'\\u0203': 'a',\n\t'\\u1EA1': 'a',\n\t'\\u1EAD': 'a',\n\t'\\u1EB7': 'a',\n\t'\\u1E01': 'a',\n\t'\\u0105': 'a',\n\t'\\u2C65': 'a',\n\t'\\u0250': 'a',\n\t'\\uA733': 'aa',\n\t'\\u00E6': 'ae',\n\t'\\u01FD': 'ae',\n\t'\\u01E3': 'ae',\n\t'\\uA735': 'ao',\n\t'\\uA737': 'au',\n\t'\\uA739': 'av',\n\t'\\uA73B': 'av',\n\t'\\uA73D': 'ay',\n\t'\\u24D1': 'b',\n\t'\\uFF42': 'b',\n\t'\\u1E03': 'b',\n\t'\\u1E05': 'b',\n\t'\\u1E07': 'b',\n\t'\\u0180': 'b',\n\t'\\u0183': 'b',\n\t'\\u0253': 'b',\n\t'\\u24D2': 'c',\n\t'\\uFF43': 'c',\n\t'\\u0107': 'c',\n\t'\\u0109': 'c',\n\t'\\u010B': 'c',\n\t'\\u010D': 'c',\n\t'\\u00E7': 'c',\n\t'\\u1E09': 'c',\n\t'\\u0188': 'c',\n\t'\\u023C': 'c',\n\t'\\uA73F': 'c',\n\t'\\u2184': 'c',\n\t'\\u24D3': 'd',\n\t'\\uFF44': 'd',\n\t'\\u1E0B': 'd',\n\t'\\u010F': 'd',\n\t'\\u1E0D': 'd',\n\t'\\u1E11': 'd',\n\t'\\u1E13': 'd',\n\t'\\u1E0F': 'd',\n\t'\\u0111': 'd',\n\t'\\u018C': 'd',\n\t'\\u0256': 'd',\n\t'\\u0257': 'd',\n\t'\\uA77A': 'd',\n\t'\\u01F3': 'dz',\n\t'\\u01C6': 'dz',\n\t'\\u24D4': 'e',\n\t'\\uFF45': 'e',\n\t'\\u00E8': 'e',\n\t'\\u00E9': 'e',\n\t'\\u00EA': 'e',\n\t'\\u1EC1': 'e',\n\t'\\u1EBF': 'e',\n\t'\\u1EC5': 'e',\n\t'\\u1EC3': 'e',\n\t'\\u1EBD': 'e',\n\t'\\u0113': 'e',\n\t'\\u1E15': 'e',\n\t'\\u1E17': 'e',\n\t'\\u0115': 'e',\n\t'\\u0117': 'e',\n\t'\\u00EB': 'e',\n\t'\\u1EBB': 'e',\n\t'\\u011B': 'e',\n\t'\\u0205': 'e',\n\t'\\u0207': 'e',\n\t'\\u1EB9': 'e',\n\t'\\u1EC7': 'e',\n\t'\\u0229': 'e',\n\t'\\u1E1D': 'e',\n\t'\\u0119': 'e',\n\t'\\u1E19': 'e',\n\t'\\u1E1B': 'e',\n\t'\\u0247': 'e',\n\t'\\u025B': 'e',\n\t'\\u01DD': 'e',\n\t'\\u24D5': 'f',\n\t'\\uFF46': 'f',\n\t'\\u1E1F': 'f',\n\t'\\u0192': 'f',\n\t'\\uA77C': 'f',\n\t'\\u24D6': 'g',\n\t'\\uFF47': 'g',\n\t'\\u01F5': 'g',\n\t'\\u011D': 'g',\n\t'\\u1E21': 'g',\n\t'\\u011F': 'g',\n\t'\\u0121': 'g',\n\t'\\u01E7': 'g',\n\t'\\u0123': 'g',\n\t'\\u01E5': 'g',\n\t'\\u0260': 'g',\n\t'\\uA7A1': 'g',\n\t'\\u1D79': 'g',\n\t'\\uA77F': 'g',\n\t'\\u24D7': 'h',\n\t'\\uFF48': 'h',\n\t'\\u0125': 'h',\n\t'\\u1E23': 'h',\n\t'\\u1E27': 'h',\n\t'\\u021F': 'h',\n\t'\\u1E25': 'h',\n\t'\\u1E29': 'h',\n\t'\\u1E2B': 'h',\n\t'\\u1E96': 'h',\n\t'\\u0127': 'h',\n\t'\\u2C68': 'h',\n\t'\\u2C76': 'h',\n\t'\\u0265': 'h',\n\t'\\u0195': 'hv',\n\t'\\u24D8': 'i',\n\t'\\uFF49': 'i',\n\t'\\u00EC': 'i',\n\t'\\u00ED': 'i',\n\t'\\u00EE': 'i',\n\t'\\u0129': 'i',\n\t'\\u012B': 'i',\n\t'\\u012D': 'i',\n\t'\\u00EF': 'i',\n\t'\\u1E2F': 'i',\n\t'\\u1EC9': 'i',\n\t'\\u01D0': 'i',\n\t'\\u0209': 'i',\n\t'\\u020B': 'i',\n\t'\\u1ECB': 'i',\n\t'\\u012F': 'i',\n\t'\\u1E2D': 'i',\n\t'\\u0268': 'i',\n\t'\\u0131': 'i',\n\t'\\u24D9': 'j',\n\t'\\uFF4A': 'j',\n\t'\\u0135': 'j',\n\t'\\u01F0': 'j',\n\t'\\u0249': 'j',\n\t'\\u24DA': 'k',\n\t'\\uFF4B': 'k',\n\t'\\u1E31': 'k',\n\t'\\u01E9': 'k',\n\t'\\u1E33': 'k',\n\t'\\u0137': 'k',\n\t'\\u1E35': 'k',\n\t'\\u0199': 'k',\n\t'\\u2C6A': 'k',\n\t'\\uA741': 'k',\n\t'\\uA743': 'k',\n\t'\\uA745': 'k',\n\t'\\uA7A3': 'k',\n\t'\\u24DB': 'l',\n\t'\\uFF4C': 'l',\n\t'\\u0140': 'l',\n\t'\\u013A': 'l',\n\t'\\u013E': 'l',\n\t'\\u1E37': 'l',\n\t'\\u1E39': 'l',\n\t'\\u013C': 'l',\n\t'\\u1E3D': 'l',\n\t'\\u1E3B': 'l',\n\t'\\u017F': 'l',\n\t'\\u0142': 'l',\n\t'\\u019A': 'l',\n\t'\\u026B': 'l',\n\t'\\u2C61': 'l',\n\t'\\uA749': 'l',\n\t'\\uA781': 'l',\n\t'\\uA747': 'l',\n\t'\\u01C9': 'lj',\n\t'\\u24DC': 'm',\n\t'\\uFF4D': 'm',\n\t'\\u1E3F': 'm',\n\t'\\u1E41': 'm',\n\t'\\u1E43': 'm',\n\t'\\u0271': 'm',\n\t'\\u026F': 'm',\n\t'\\u24DD': 'n',\n\t'\\uFF4E': 'n',\n\t'\\u01F9': 'n',\n\t'\\u0144': 'n',\n\t'\\u00F1': 'n',\n\t'\\u1E45': 'n',\n\t'\\u0148': 'n',\n\t'\\u1E47': 'n',\n\t'\\u0146': 'n',\n\t'\\u1E4B': 'n',\n\t'\\u1E49': 'n',\n\t'\\u019E': 'n',\n\t'\\u0272': 'n',\n\t'\\u0149': 'n',\n\t'\\uA791': 'n',\n\t'\\uA7A5': 'n',\n\t'\\u01CC': 'nj',\n\t'\\u24DE': 'o',\n\t'\\uFF4F': 'o',\n\t'\\u00F2': 'o',\n\t'\\u00F3': 'o',\n\t'\\u00F4': 'o',\n\t'\\u1ED3': 'o',\n\t'\\u1ED1': 'o',\n\t'\\u1ED7': 'o',\n\t'\\u1ED5': 'o',\n\t'\\u00F5': 'o',\n\t'\\u1E4D': 'o',\n\t'\\u022D': 'o',\n\t'\\u1E4F': 'o',\n\t'\\u014D': 'o',\n\t'\\u1E51': 'o',\n\t'\\u1E53': 'o',\n\t'\\u014F': 'o',\n\t'\\u022F': 'o',\n\t'\\u0231': 'o',\n\t'\\u00F6': 'o',\n\t'\\u022B': 'o',\n\t'\\u1ECF': 'o',\n\t'\\u0151': 'o',\n\t'\\u01D2': 'o',\n\t'\\u020D': 'o',\n\t'\\u020F': 'o',\n\t'\\u01A1': 'o',\n\t'\\u1EDD': 'o',\n\t'\\u1EDB': 'o',\n\t'\\u1EE1': 'o',\n\t'\\u1EDF': 'o',\n\t'\\u1EE3': 'o',\n\t'\\u1ECD': 'o',\n\t'\\u1ED9': 'o',\n\t'\\u01EB': 'o',\n\t'\\u01ED': 'o',\n\t'\\u00F8': 'o',\n\t'\\u01FF': 'o',\n\t'\\u0254': 'o',\n\t'\\uA74B': 'o',\n\t'\\uA74D': 'o',\n\t'\\u0275': 'o',\n\t'\\u01A3': 'oi',\n\t'\\u0223': 'ou',\n\t'\\uA74F': 'oo',\n\t'\\u24DF': 'p',\n\t'\\uFF50': 'p',\n\t'\\u1E55': 'p',\n\t'\\u1E57': 'p',\n\t'\\u01A5': 'p',\n\t'\\u1D7D': 'p',\n\t'\\uA751': 'p',\n\t'\\uA753': 'p',\n\t'\\uA755': 'p',\n\t'\\u24E0': 'q',\n\t'\\uFF51': 'q',\n\t'\\u024B': 'q',\n\t'\\uA757': 'q',\n\t'\\uA759': 'q',\n\t'\\u24E1': 'r',\n\t'\\uFF52': 'r',\n\t'\\u0155': 'r',\n\t'\\u1E59': 'r',\n\t'\\u0159': 'r',\n\t'\\u0211': 'r',\n\t'\\u0213': 'r',\n\t'\\u1E5B': 'r',\n\t'\\u1E5D': 'r',\n\t'\\u0157': 'r',\n\t'\\u1E5F': 'r',\n\t'\\u024D': 'r',\n\t'\\u027D': 'r',\n\t'\\uA75B': 'r',\n\t'\\uA7A7': 'r',\n\t'\\uA783': 'r',\n\t'\\u24E2': 's',\n\t'\\uFF53': 's',\n\t'\\u00DF': 's',\n\t'\\u015B': 's',\n\t'\\u1E65': 's',\n\t'\\u015D': 's',\n\t'\\u1E61': 's',\n\t'\\u0161': 's',\n\t'\\u1E67': 's',\n\t'\\u1E63': 's',\n\t'\\u1E69': 's',\n\t'\\u0219': 's',\n\t'\\u015F': 's',\n\t'\\u023F': 's',\n\t'\\uA7A9': 's',\n\t'\\uA785': 's',\n\t'\\u1E9B': 's',\n\t'\\u24E3': 't',\n\t'\\uFF54': 't',\n\t'\\u1E6B': 't',\n\t'\\u1E97': 't',\n\t'\\u0165': 't',\n\t'\\u1E6D': 't',\n\t'\\u021B': 't',\n\t'\\u0163': 't',\n\t'\\u1E71': 't',\n\t'\\u1E6F': 't',\n\t'\\u0167': 't',\n\t'\\u01AD': 't',\n\t'\\u0288': 't',\n\t'\\u2C66': 't',\n\t'\\uA787': 't',\n\t'\\uA729': 'tz',\n\t'\\u24E4': 'u',\n\t'\\uFF55': 'u',\n\t'\\u00F9': 'u',\n\t'\\u00FA': 'u',\n\t'\\u00FB': 'u',\n\t'\\u0169': 'u',\n\t'\\u1E79': 'u',\n\t'\\u016B': 'u',\n\t'\\u1E7B': 'u',\n\t'\\u016D': 'u',\n\t'\\u00FC': 'u',\n\t'\\u01DC': 'u',\n\t'\\u01D8': 'u',\n\t'\\u01D6': 'u',\n\t'\\u01DA': 'u',\n\t'\\u1EE7': 'u',\n\t'\\u016F': 'u',\n\t'\\u0171': 'u',\n\t'\\u01D4': 'u',\n\t'\\u0215': 'u',\n\t'\\u0217': 'u',\n\t'\\u01B0': 'u',\n\t'\\u1EEB': 'u',\n\t'\\u1EE9': 'u',\n\t'\\u1EEF': 'u',\n\t'\\u1EED': 'u',\n\t'\\u1EF1': 'u',\n\t'\\u1EE5': 'u',\n\t'\\u1E73': 'u',\n\t'\\u0173': 'u',\n\t'\\u1E77': 'u',\n\t'\\u1E75': 'u',\n\t'\\u0289': 'u',\n\t'\\u24E5': 'v',\n\t'\\uFF56': 'v',\n\t'\\u1E7D': 'v',\n\t'\\u1E7F': 'v',\n\t'\\u028B': 'v',\n\t'\\uA75F': 'v',\n\t'\\u028C': 'v',\n\t'\\uA761': 'vy',\n\t'\\u24E6': 'w',\n\t'\\uFF57': 'w',\n\t'\\u1E81': 'w',\n\t'\\u1E83': 'w',\n\t'\\u0175': 'w',\n\t'\\u1E87': 'w',\n\t'\\u1E85': 'w',\n\t'\\u1E98': 'w',\n\t'\\u1E89': 'w',\n\t'\\u2C73': 'w',\n\t'\\u24E7': 'x',\n\t'\\uFF58': 'x',\n\t'\\u1E8B': 'x',\n\t'\\u1E8D': 'x',\n\t'\\u24E8': 'y',\n\t'\\uFF59': 'y',\n\t'\\u1EF3': 'y',\n\t'\\u00FD': 'y',\n\t'\\u0177': 'y',\n\t'\\u1EF9': 'y',\n\t'\\u0233': 'y',\n\t'\\u1E8F': 'y',\n\t'\\u00FF': 'y',\n\t'\\u1EF7': 'y',\n\t'\\u1E99': 'y',\n\t'\\u1EF5': 'y',\n\t'\\u01B4': 'y',\n\t'\\u024F': 'y',\n\t'\\u1EFF': 'y',\n\t'\\u24E9': 'z',\n\t'\\uFF5A': 'z',\n\t'\\u017A': 'z',\n\t'\\u1E91': 'z',\n\t'\\u017C': 'z',\n\t'\\u017E': 'z',\n\t'\\u1E93': 'z',\n\t'\\u1E95': 'z',\n\t'\\u01B6': 'z',\n\t'\\u0225': 'z',\n\t'\\u0240': 'z',\n\t'\\u2C6C': 'z',\n\t'\\uA763': 'z',\n\t'\\u0386': '\\u0391',\n\t'\\u0388': '\\u0395',\n\t'\\u0389': '\\u0397',\n\t'\\u038A': '\\u0399',\n\t'\\u03AA': '\\u0399',\n\t'\\u038C': '\\u039F',\n\t'\\u038E': '\\u03A5',\n\t'\\u03AB': '\\u03A5',\n\t'\\u038F': '\\u03A9',\n\t'\\u03AC': '\\u03B1',\n\t'\\u03AD': '\\u03B5',\n\t'\\u03AE': '\\u03B7',\n\t'\\u03AF': '\\u03B9',\n\t'\\u03CA': '\\u03B9',\n\t'\\u0390': '\\u03B9',\n\t'\\u03CC': '\\u03BF',\n\t'\\u03CD': '\\u03C5',\n\t'\\u03CB': '\\u03C5',\n\t'\\u03B0': '\\u03C5',\n\t'\\u03C9': '\\u03C9',\n\t'\\u03C2': '\\u03C3',\n};\n\nexport function stripSpecialChars(text: string): string {\n\tconst match = (a: string): string => diacritics[a] || a;\n\t// eslint-disable-next-line no-control-regex\n\treturn text.replace(/[^\\u0000-\\u007E]/g, match);\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { newId } from './id';\nimport { NgSelectComponent } from './ng-select.component';\nimport { NgOption } from './ng-select.types';\nimport * as searchHelper from './search-helper';\nimport { SelectionModel } from './selection-model';\nimport { isDefined, isFunction, isObject } from './value-utils';\n\ntype OptionGroups = Map<string | NgOption, NgOption[]>;\n\nexport class ItemsList {\n\tprivate _groups: OptionGroups;\n\n\tconstructor(\n\t\tprivate _ngSelect: NgSelectComponent,\n\t\tprivate _selectionModel: SelectionModel,\n\t) {}\n\n\tprivate _items: NgOption[] = [];\n\n\tget items(): NgOption[] {\n\t\treturn this._items;\n\t}\n\n\tprivate _filteredItems: NgOption[] = [];\n\n\tget filteredItems(): NgOption[] {\n\t\treturn this._filteredItems;\n\t}\n\n\tprivate _markedIndex = -1;\n\n\tget markedIndex(): number {\n\t\treturn this._markedIndex;\n\t}\n\n\tget selectedItems() {\n\t\treturn this._selectionModel.value;\n\t}\n\n\tget markedItem(): NgOption {\n\t\treturn this._filteredItems[this._markedIndex];\n\t}\n\n\tget noItemsToSelect(): boolean {\n\t\treturn this._ngSelect.hideSelected() && this._items.length === this.selectedItems.length;\n\t}\n\n\tget maxItemsSelected(): boolean {\n\t\treturn this._ngSelect.multiple() && this._ngSelect.maxSelectedItems() <= this.selectedItems.length;\n\t}\n\n\tget lastSelectedItem() {\n\t\tlet i = this.selectedItems.length - 1;\n\t\tfor (; i >= 0; i--) {\n\t\t\tconst item = this.selectedItems[i];\n\t\t\tif (!item.disabled) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tsetItems(items: readonly any[]) {\n\t\tthis._items = items.map((item, index) => this.mapItem(item, index));\n\t\tconst groupBy = this._ngSelect.groupBy();\n\t\tif (groupBy) {\n\t\t\tthis._groups = this._groupBy(this._items, groupBy);\n\t\t\tthis._items = this._flatten(this._groups);\n\t\t} else {\n\t\t\tthis._groups = new Map();\n\t\t\tthis._groups.set(undefined, this._items);\n\t\t}\n\t\tthis._filteredItems = [...this._items];\n\t}\n\n\tselect(item: NgOption) {\n\t\tif (item.selected || this.maxItemsSelected) {\n\t\t\treturn;\n\t\t}\n\t\tconst multiple = this._ngSelect.multiple();\n\t\tif (!multiple) {\n\t\t\tthis.clearSelected(false);\n\t\t}\n\n\t\tthis._selectionModel.select(item, multiple, this._ngSelect.selectableGroupAsModel());\n\t\tif (this._ngSelect.hideSelected()) {\n\t\t\tthis._hideSelected(item);\n\t\t}\n\t}\n\n\tunselect(item: NgOption) {\n\t\tif (!item.selected) {\n\t\t\treturn;\n\t\t}\n\t\tconst multiple = this._ngSelect.multiple();\n\t\tthis._selectionModel.unselect(item, multiple);\n\t\tif (this._ngSelect.hideSelected() && isDefined(item.index) && multiple) {\n\t\t\tthis._showSelected(item);\n\t\t}\n\t}\n\n\tfindItem(value: any): NgOption {\n\t\tlet findBy: (item: NgOption) => boolean;\n\t\tif (this._ngSelect.compareWith()) {\n\t\t\tfindBy = (item) => this._ngSelect.compareWith()(item.value, value);\n\t\t} else if (this._ngSelect.bindValue()) {\n\t\t\tfindBy = (item) => !item.children && this.resolveNested(item.value, this._ngSelect.bindValue()) === value;\n\t\t} else {\n\t\t\tfindBy = (item) =>\n\t\t\t\titem.value === value || (!item.children && item.label && item.label === this.resolveNested(value, this._ngSelect.bindLabel()));\n\t\t}\n\t\treturn this._items.find((item) => findBy(item));\n\t}\n\n\taddItem(item: any) {\n\t\tconst option = this.mapItem(item, this._items.length);\n\t\tthis._items.push(option);\n\t\tthis._filteredItems.push(option);\n\t\treturn option;\n\t}\n\n\tclearSelected(keepDisabled: boolean) {\n\t\tthis._selectionModel.clear(keepDisabled);\n\t\tthis._items.forEach((item) => {\n\t\t\titem.selected = keepDisabled && item.selected && item.disabled;\n\t\t\titem.marked = false;\n\t\t});\n\t\tif (this._ngSelect.hideSelected()) {\n\t\t\tthis.resetFilteredItems();\n\t\t}\n\t}\n\n\tfindByLabel(term: string) {\n\t\tterm = searchHelper.stripSpecialChars(term).toLocaleLowerCase();\n\t\treturn this.filteredItems.find((item) => {\n\t\t\tconst label = searchHelper.stripSpecialChars(item.label).toLocaleLowerCase();\n\t\t\treturn label.substr(0, term.length) === term;\n\t\t});\n\t}\n\n\tfilter(term: string): void {\n\t\tif (!term) {\n\t\t\tthis.resetFilteredItems();\n\t\t\treturn;\n\t\t}\n\n\t\tthis._filteredItems = [];\n\t\tterm = this._ngSelect.searchFn() ? term : searchHelper.stripSpecialChars(term).toLocaleLowerCase();\n\t\tconst match = this._ngSelect.searchFn() || this._defaultSearchFn;\n\t\tconst hideSelected = this._ngSelect.hideSelected();\n\n\t\tfor (const key of Array.from(this._groups.keys())) {\n\t\t\tconst matchedItems = [];\n\t\t\tfor (const item of this._groups.get(key)) {\n\t\t\t\tif (hideSelected && ((item.parent && item.parent.selected) || item.selected)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst searchItem = this._ngSelect.searchFn() ? item.value : item;\n\t\t\t\tif (match(term, searchItem)) {\n\t\t\t\t\tmatchedItems.push(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (matchedItems.length > 0) {\n\t\t\t\tconst [last] = matchedItems.slice(-1);\n\t\t\t\tif (last.parent) {\n\t\t\t\t\tconst head = this._items.find((x) => x === last.parent);\n\t\t\t\t\tthis._filteredItems.push(head);\n\t\t\t\t}\n\t\t\t\tthis._filteredItems.push(...matchedItems);\n\t\t\t}\n\t\t}\n\t}\n\n\tresetFilteredItems() {\n\t\tif (this._filteredItems.length === this._items.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._ngSelect.hideSelected() && this.selectedItems.length > 0) {\n\t\t\tthis._filteredItems = this._items.filter((x) => !x.selected);\n\t\t} else {\n\t\t\tthis._filteredItems = this._items;\n\t\t}\n\t}\n\n\tunmarkItem() {\n\t\tthis._markedIndex = -1;\n\t}\n\n\tmarkNextItem() {\n\t\tthis._stepToItem(+1);\n\t}\n\n\tmarkPreviousItem() {\n\t\tthis._stepToItem(-1);\n\t}\n\n\tmarkItem(item: NgOption) {\n\t\tthis._markedIndex = this._filteredItems.indexOf(item);\n\t}\n\n\tmarkSelectedOrDefault(markDefault?: boolean) {\n\t\tif (this._filteredItems.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst lastMarkedIndex = this._getLastMarkedIndex();\n\t\tif (lastMarkedIndex > -1) {\n\t\t\tthis._markedIndex = lastMarkedIndex;\n\t\t} else {\n\t\t\tthis._markedIndex = markDefault ? this.filteredItems.findIndex((x) => !x.disabled) : -1;\n\t\t}\n\t}\n\n\tresolveNested(option: any, key: string): any {\n\t\tif (!isObject(option)) {\n\t\t\treturn option;\n\t\t}\n\t\tif (key.indexOf('.') === -1) {\n\t\t\treturn option[key];\n\t\t} else {\n\t\t\tconst keys: string[] = key.split('.');\n\t\t\tlet value = option;\n\t\t\tfor (let i = 0, len = keys.length; i < len; ++i) {\n\t\t\t\tif (value == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tvalue = value[keys[i]];\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t}\n\n\tmapItem(item: any, index: number): NgOption {\n\t\tconst hasNgOptionLabel = isObject(item) && '$ngOptionLabel' in item;\n\t\tconst hasNgOptionValue = isObject(item) && '$ngOptionValue' in item;\n\t\tconst label = hasNgOptionLabel ? item.$ngOptionLabel : this.resolveNested(item, this._ngSelect.bindLabel());\n\t\tconst value = hasNgOptionValue ? item.$ngOptionValue : item;\n\t\treturn {\n\t\t\tindex,\n\t\t\tlabel: isDefined(label) ? label.toString() : '',\n\t\t\tvalue,\n\t\t\tdisabled: item && item.disabled ? item.disabled : false,\n\t\t\thtmlId: `${this._ngSelect.dropdownId}-${index}`,\n\t\t};\n\t}\n\n\tmapSelectedItems() {\n\t\tconst multiple = this._ngSelect.multiple();\n\t\tfor (const selected of this.selectedItems) {\n\t\t\tconst bindValue = this._ngSelect.bindValue();\n\t\t\tconst value = bindValue ? this.resolveNested(selected.value, bindValue) : selected.value;\n\t\t\tconst valueFound = isDefined(value);\n\t\t\tlet item = valueFound ? this.findItem(value) : null;\n\n\t\t\tif (!item && !valueFound && this._ngSelect.compareWith()) {\n\t\t\t\titem = this._items.find((item) => this._ngSelect.compareWith()(item.value, selected.value));\n\t\t\t}\n\n\t\t\tthis._selectionModel.unselect(selected, multiple);\n\t\t\tthis._selectionModel.select(item || selected, multiple, this._ngSelect.selectableGroupAsModel());\n\t\t}\n\n\t\tif (this._ngSelect.hideSelected()) {\n\t\t\tthis._filteredItems = this.filteredItems.filter((x) => this.selectedItems.indexOf(x) === -1);\n\t\t}\n\t}\n\n\tprivate _showSelected(item: NgOption) {\n\t\tthis._filteredItems.push(item);\n\t\tif (item.parent) {\n\t\t\tconst parent = item.parent;\n\t\t\tconst parentExists = this._filteredItems.find((x) => x === parent);\n\t\t\tif (!parentExists) {\n\t\t\t\tthis._filteredItems.push(parent);\n\t\t\t}\n\t\t} else if (item.children) {\n\t\t\tfor (const child of item.children) {\n\t\t\t\tchild.selected = false;\n\t\t\t\tthis._filteredItems.push(child);\n\t\t\t}\n\t\t}\n\t\tthis._filteredItems = [...this._filteredItems.sort((a, b) => a.index - b.index)];\n\t}\n\n\tprivate _hideSelected(item: NgOption) {\n\t\tthis._filteredItems = this._filteredItems.filter((x) => x !== item);\n\t\tif (item.parent) {\n\t\t\tconst children = item.parent.children;\n\t\t\tif (children.every((x) => x.selected)) {\n\t\t\t\tthis._filteredItems = this._filteredItems.filter((x) => x !== item.parent);\n\t\t\t}\n\t\t} else if (item.children) {\n\t\t\tthis._filteredItems = this.filteredItems.filter((x) => x.parent !== item);\n\t\t}\n\t}\n\n\tprivate _defaultSearchFn(search: string, opt: NgOption) {\n\t\tconst label = searchHelper.stripSpecialChars(opt.label).toLocaleLowerCase();\n\t\treturn label.indexOf(search) > -1;\n\t}\n\n\tprivate _getNextItemIndex(steps: number) {\n\t\tif (steps > 0) {\n\t\t\treturn this._markedIndex >= this._filteredItems.length - 1 ? 0 : this._markedIndex + 1;\n\t\t}\n\t\treturn this._markedIndex <= 0 ? this._filteredItems.length - 1 : this._markedIndex - 1;\n\t}\n\n\tprivate _stepToItem(steps: number) {\n\t\tif (this._filteredItems.length === 0 || this._filteredItems.every((x) => x.disabled)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._markedIndex = this._getNextItemIndex(steps);\n\t\tif (this.markedItem.disabled) {\n\t\t\tthis._stepToItem(steps);\n\t\t}\n\t}\n\n\tprivate _getLastMarkedIndex() {\n\t\tif (this._ngSelect.hideSelected()) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif (this._markedIndex > -1 && this.markedItem === undefined) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst selectedIndex = this._filteredItems.indexOf(this.lastSelectedItem);\n\t\tif (this.lastSelectedItem && selectedIndex < 0) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn Math.max(this.markedIndex, selectedIndex);\n\t}\n\n\tprivate _groupBy(items: NgOption[], prop: string | ((value: any) => any)): OptionGroups {\n\t\tconst groups = new Map<string | NgOption, NgOption[]>();\n\t\tif (items.length === 0) {\n\t\t\treturn groups;\n\t\t}\n\n\t\t// Check if items are already grouped by given key.\n\t\tconst firstValue = items[0].value;\n\t\tif (firstValue != null && Array.isArray(firstValue[<string>prop])) {\n\t\t\tfor (const item of items) {\n\t\t\t\tconst children = (item.value?.[<string>prop] || []).map((x, index) => this.mapItem(x, index));\n\t\t\t\tgroups.set(item, children);\n\t\t\t}\n\t\t\treturn groups;\n\t\t}\n\n\t\tconst isFnKey = isFunction(this._ngSelect.groupBy());\n\t\tconst keyFn = (item: NgOption) => {\n\t\t\tconst key = isFnKey ? (<(value: any) => any>prop)(item.value) : item.value?.[<string>prop];\n\t\t\treturn isDefined(key) ? key : undefined;\n\t\t};\n\n\t\t// Group items by key.\n\t\tfor (const item of items) {\n\t\t\tconst key = keyFn(item);\n\t\t\tconst group = groups.get(key);\n\t\t\tif (group) {\n\t\t\t\tgroup.push(item);\n\t\t\t} else {\n\t\t\t\tgroups.set(key, [item]);\n\t\t\t}\n\t\t}\n\t\treturn groups;\n\t}\n\n\tprivate _flatten(groups: OptionGroups) {\n\t\tconst isGroupByFn = isFunction(this._ngSelect.groupBy());\n\t\tconst items = [];\n\t\tfor (const key of Array.from(groups.keys())) {\n\t\t\tlet i = items.length;\n\t\t\tif (key === undefined) {\n\t\t\t\tconst withoutGroup = groups.get(undefined) || [];\n\t\t\t\titems.push(\n\t\t\t\t\t...withoutGroup.map((x) => {\n\t\t\t\t\t\tx.index = i++;\n\t\t\t\t\t\treturn x;\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst isObjectKey = isObject(key);\n\t\t\tconst parent: NgOption = {\n\t\t\t\tlabel: isObjectKey ? '' : String(key),\n\t\t\t\tchildren: undefined,\n\t\t\t\tparent: null,\n\t\t\t\tindex: i++,\n\t\t\t\tdisabled: !this._ngSelect.selectableGroup(),\n\t\t\t\thtmlId: newId(),\n\t\t\t};\n\t\t\tconst groupKey = isGroupByFn ? this._ngSelect.bindLabel() : <string>this._ngSelect.groupBy();\n\t\t\tconst groupValue =\n\t\t\t\tthis._ngSelect.groupValue() ||\n\t\t\t\t(() => {\n\t\t\t\t\tif (isObjectKey) {\n\t\t\t\t\t\treturn (<NgOption>key).value;\n\t\t\t\t\t}\n\t\t\t\t\treturn { [groupKey]: key };\n\t\t\t\t});\n\t\t\tconst children = groups.get(key).map((x) => {\n\t\t\t\tx.parent = parent;\n\t\t\t\tx.children = undefined;\n\t\t\t\tx.index = i++;\n\t\t\t\treturn x;\n\t\t\t});\n\t\t\tparent.children = children;\n\t\t\tparent.value = groupValue(\n\t\t\t\tkey,\n\t\t\t\tchildren.map((x) => x.value),\n\t\t\t);\n\t\t\titems.push(parent);\n\t\t\titems.push(...children);\n\t\t}\n\t\treturn items;\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { Injectable } from '@angular/core';\nexport interface ItemsRangeResult {\n\tscrollHeight: number;\n\ttopPadding: number;\n\tstart: number;\n\tend: number;\n}\n\nexport interface PanelDimensions {\n\titemHeight: number;\n\tpanelHeight: number;\n\titemsPerViewport: number;\n}\n\n@Injectable()\nexport class NgDropdownPanelService {\n\tprivate _dimensions: PanelDimensions = {\n\t\titemHeight: 0,\n\t\tpanelHeight: 0,\n\t\titemsPerViewport: 0,\n\t};\n\n\tget dimensions() {\n\t\treturn this._dimensions;\n\t}\n\n\tcalculateItems(scrollPos: number, itemsLength: number, buffer: number): ItemsRangeResult {\n\t\tconst d = this._dimensions;\n\t\tconst scrollHeight = d.itemHeight * itemsLength;\n\n\t\tconst scrollTop = Math.max(0, scrollPos);\n\t\tconst indexByScrollTop = (scrollTop / scrollHeight) * itemsLength;\n\t\tlet end = Math.min(itemsLength, Math.ceil(indexByScrollTop) + (d.itemsPerViewport + 1));\n\n\t\tconst maxStartEnd = end;\n\t\tconst maxStart = Math.max(0, maxStartEnd - d.itemsPerViewport);\n\t\tlet start = Math.min(maxStart, Math.floor(indexByScrollTop));\n\n\t\tlet topPadding = d.itemHeight * Math.ceil(start) - d.itemHeight * Math.min(start, buffer);\n\t\ttopPadding = !isNaN(topPadding) ? topPadding : 0;\n\t\tstart = !isNaN(start) ? start : -1;\n\t\tend = !isNaN(end) ? end : -1;\n\t\tstart -= buffer;\n\t\tstart = Math.max(0, start);\n\t\tend += buffer;\n\t\tend = Math.min(itemsLength, end);\n\n\t\treturn {\n\t\t\ttopPadding,\n\t\t\tscrollHeight,\n\t\t\tstart,\n\t\t\tend,\n\t\t};\n\t}\n\n\tsetDimensions(itemHeight: number, panelHeight: number) {\n\t\tconst itemsPerViewport = Math.max(1, Math.floor(panelHeight / itemHeight));\n\t\tthis._dimensions = {\n\t\t\titemHeight,\n\t\t\tpanelHeight,\n\t\t\titemsPerViewport,\n\t\t};\n\t}\n\n\tgetScrollTo(itemTop: number, itemHeight: number, lastScroll: number) {\n\t\tconst { panelHeight } = this.dimensions;\n\t\tconst itemBottom = itemTop + itemHeight;\n\t\tconst top = lastScroll;\n\t\tconst bottom = top + panelHeight;\n\n\t\tif (panelHeight >= itemBottom && lastScroll === itemTop) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (itemBottom > bottom) {\n\t\t\treturn top + itemBottom - bottom;\n\t\t} else if (itemTop <= top) {\n\t\t\treturn itemTop;\n\t\t}\n\n\t\treturn null;\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tNgZone,\n\tOnChanges,\n\tOnInit,\n\toutput,\n\tRenderer2,\n\tSimpleChanges,\n\tTemplateRef,\n\tviewChild,\n\tViewEncapsulation,\n} from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { animationFrameScheduler, asapScheduler, fromEvent } from 'rxjs';\nimport { auditTime } from 'rxjs/operators';\nimport { NgDropdownPanelService, PanelDimensions } from './ng-dropdown-panel.service';\n\nimport { DropdownPosition, NgOption } from './ng-select.types';\nimport { isDefined } from './value-utils';\n\nconst CSS_POSITIONS: readonly string[] = ['top', 'right', 'bottom', 'left'];\nconst SCROLL_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? animationFrameScheduler : asapScheduler;\n\n@Component({\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\tselector: 'ng-dropdown-panel',\n\ttemplate: `\n\t\t@if (headerTemplate()) {\n\t\t\t<div class=\"ng-dropdown-header\">\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"headerTemplate()\" [ngTemplateOutletContext]=\"{ searchTerm: filterValue() }\" />\n\t\t\t</div>\n\t\t}\n\t\t<div #scroll role=\"listbox\" class=\"ng-dropdown-panel-items scroll-host\" [attr.aria-label]=\"ariaLabelDropdown()\">\n\t\t\t<div #padding [class.total-padding]=\"virtualScroll()\"></div>\n\t\t\t<div #content [class.scrollable-content]=\"virtualScroll() && items().length\">\n\t\t\t\t<ng-content />\n\t\t\t</div>\n\t\t</div>\n\t\t@if (footerTemplate()) {\n\t\t\t<div class=\"ng-dropdown-footer\">\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"footerTemplate()\" [ngTemplateOutletContext]=\"{ searchTerm: filterValue() }\" />\n\t\t\t</div>\n\t\t}\n\t`,\n\timports: [NgTemplateOutlet],\n})\nexport class NgDropdownPanelComponent implements OnInit, OnChanges {\n\treadonly items = input<NgOption[]>([]);\n\treadonly showAddTag = input(false, { transform: booleanAttribute });\n\treadonly markedItem = input<NgOption>(undefined);\n\treadonly position = input<DropdownPosition>('auto');\n\treadonly appendTo = input<string>(undefined);\n\treadonly bufferAmount = input<number>(undefined);\n\treadonly virtualScroll = input(false, { transform: booleanAttribute });\n\treadonly headerTemplate = input<TemplateRef<any> | undefined>(undefined);\n\treadonly footerTemplate = input<TemplateRef<any> | undefined>(undefined);\n\treadonly filterValue = input<string>(null);\n\treadonly ariaLabelDropdown = input<string | null>(null);\n\t/**\n\t * Which DOM event to listen to for outside click detection\n\t */\n\treadonly outsideClickEvent = input<'click' | 'mousedown'>('click');\n\treadonly popover = input(false, { transform: booleanAttribute });\n\treadonly update = output<any[]>();\n\treadonly scroll = output<{\n\t\tstart: number;\n\t\tend: number;\n\t}>();\n\treadonly scrollToEnd = output<void>();\n\treadonly outsideClick = output<void>();\n\tprivate _renderer = inject(Renderer2);\n\tprivate _zone = inject(NgZone);\n\tprivate _panelService = inject(NgDropdownPanelService);\n\tprivate _document = inject(DOCUMENT, { optional: true })!;\n\tprivate _destroyRef = inject(DestroyRef);\n\tprivate _dropdown = inject(ElementRef<HTMLElement>).nativeElement;\n\tprivate readonly contentElementRef = viewChild('content', { read: ElementRef });\n\tprivate readonly scrollElementRef = viewChild('scroll', { read: ElementRef });\n\tprivate readonly paddingElementRef = viewChild('padding', { read: ElementRef });\n\n\tprivate readonly _virtualPadding = computed(() => this.paddingElementRef()?.nativeElement);\n\tprivate readonly _scrollablePanel = computed(() => this.scrollElementRef()?.nativeElement);\n\tprivate readonly _contentPanel = computed(() => this.contentElementRef()?.nativeElement);\n\n\tprivate _select: HTMLElement | undefined;\n\tprivate _parent: HTMLElement;\n\tprivate _scrollToEndFired = false;\n\tprivate _updateScrollHeight = false;\n\tprivate _lastScrollPosition = 0;\n\n\tconstructor() {\n\t\tthis._destroyRef.onDestroy(() => {\n\t\t\tif (this.appendTo()) {\n\t\t\t\tthis._renderer.removeChild(this._dropdown.parentNode, this._dropdown);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _currentPosition: DropdownPosition;\n\n\tget currentPosition(): DropdownPosition {\n\t\treturn this._currentPosition;\n\t}\n\n\tprivate _itemsLength: number;\n\n\tprivate get itemsLength() {\n\t\treturn this._itemsLength;\n\t}\n\n\tprivate set itemsLength(value: number) {\n\t\tif (value !== this._itemsLength) {\n\t\t\tthis._itemsLength = value;\n\t\t\tthis._onItemsLengthChanged();\n\t\t}\n\t}\n\n\tprivate get _startOffset() {\n\t\tif (this.markedItem()) {\n\t\t\tconst { itemHeight, panelHeight } = this._panelService.dimensions;\n\t\t\tconst offset = this.markedItem().index * itemHeight;\n\t\t\treturn panelHeight > offset ? 0 : offset;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tngOnInit() {\n\t\tthis._select = this._dropdown.parentElement;\n\t\tthis._handleScroll();\n\t\tthis._handleOutsideClick();\n\t\tthis._appendDropdown();\n\t\tthis._setupMousedownListener();\n\t\tthis._handleWindowScroll();\n\t\tthis._showPopoverIfNeeded();\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (changes.items) {\n\t\t\tconst change = changes.items;\n\t\t\tthis._onItemsOrShowAddTagChange(change.currentValue, this.showAddTag(), change.firstChange);\n\t\t}\n\t\tif (changes.showAddTag) {\n\t\t\tconst change = changes.showAddTag;\n\t\t\tthis._onItemsOrShowAddTagChange(this.items(), change.currentValue, change.firstChange);\n\t\t}\n\t}\n\n\tscrollTo(option: NgOption, startFromOption = false) {\n\t\tif (!option) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst index = this.items().indexOf(option);\n\t\tif (index < 0 || index >= this.itemsLength) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet scrollTo;\n\t\tif (this.virtualScroll()) {\n\t\t\tconst itemHeight = this._panelService.dimensions.itemHeight;\n\t\t\tscrollTo = this._panelService.getScrollTo(index * itemHeight, itemHeight, this._lastScrollPosition);\n\t\t} else {\n\t\t\tconst item: HTMLElement = this._dropdown.querySelector(`#${option.htmlId}`);\n\t\t\tconst lastScroll = startFromOption ? item.offsetTop : this._lastScrollPosition;\n\t\t\tscrollTo = this._panelService.getScrollTo(item.offsetTop, item.clientHeight, lastScroll);\n\t\t}\n\n\t\tif (isDefined(scrollTo)) {\n\t\t\tthis._scrollablePanel().scrollTop = scrollTo;\n\t\t}\n\t}\n\n\tscrollToTag() {\n\t\tconst panel = this._scrollablePanel();\n\t\tpanel.scrollTop = panel.scrollHeight - panel.clientHeight;\n\t}\n\n\tadjustPosition() {\n\t\tthis._updateYPosition();\n\t}\n\n\tprivate _handleDropdownPosition() {\n\t\tthis._currentPosition = this._calculateCurrentPosition(this._dropdown);\n\t\tif (CSS_POSITIONS.includes(this._currentPosition)) {\n\t\t\tthis._updateDropdownClass(this._currentPosition);\n\t\t} else {\n\t\t\tthis._updateDropdownClass('bottom');\n\t\t}\n\n\t\tif (this.appendTo() || this.popover()) {\n\t\t\tthis._updateYPosition();\n\t\t}\n\n\t\tthis._dropdown.style.opacity = '1';\n\t}\n\n\tprivate _updateDropdownClass(currentPosition: string) {\n\t\tCSS_POSITIONS.forEach((position) => {\n\t\t\tconst REMOVE_CSS_CLASS = `ng-select-${position}`;\n\t\t\tthis._renderer.removeClass(this._dropdown, REMOVE_CSS_CLASS);\n\t\t\tthis._renderer.removeClass(this._select, REMOVE_CSS_CLASS);\n\t\t});\n\n\t\tconst ADD_CSS_CLASS = `ng-select-${currentPosition}`;\n\t\tthis._renderer.addClass(this._dropdown, ADD_CSS_CLASS);\n\t\tthis._renderer.addClass(this._select, ADD_CSS_CLASS);\n\t}\n\n\tprivate _handleScroll() {\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tconst scrollablePanel = this._scrollablePanel();\n\t\t\tif (!scrollablePanel) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfromEvent(scrollablePanel, 'scroll')\n\t\t\t\t.pipe(takeUntilDestroyed(this._destroyRef), auditTime(0, SCROLL_SCHEDULER))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tif (scrollablePanel && 'scrollTop' in scrollablePanel) {\n\t\t\t\t\t\tthis._onContentScrolled(scrollablePanel.scrollTop);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t});\n\t}\n\n\tprivate _handleOutsideClick() {\n\t\tif (!this._document) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tfromEvent(this._document, this.outsideClickEvent(), { capture: true })\n\t\t\t\t.pipe(takeUntilDestroyed(this._destroyRef))\n\t\t\t\t.subscribe(($event) => this._checkToClose($event));\n\t\t});\n\t}\n\n\tprivate _checkToClose($event: any) {\n\t\tif (this._select.contains($event.target) || this._dropdown.contains($event.target)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst path = $event.path || ($event.composedPath && $event.composedPath());\n\t\tif ($event.target && $event.target.shadowRoot && path && path[0] && this._select.contains(path[0])) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zone.run(() => this.outsideClick.emit());\n\t}\n\n\tprivate _onItemsOrShowAddTagChange(items: NgOption[] = [], showAddTag: boolean, firstChange: boolean) {\n\t\tthis._scrollToEndFired = false;\n\t\tthis.itemsLength = items.length;\n\t\tif (showAddTag && items.length) {\n\t\t\tthis.itemsLength++;\n\t\t}\n\n\t\tif (this.virtualScroll()) {\n\t\t\tthis._updateItemsRange(firstChange);\n\t\t} else {\n\t\t\tthis._setVirtualHeight();\n\t\t\tthis._updateItems(firstChange);\n\t\t}\n\t}\n\n\tprivate _updateItems(firstChange: boolean) {\n\t\tthis.update.emit(this.items());\n\t\tif (firstChange === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tPromise.resolve().then(() => {\n\t\t\t\tconst panelHeight = this._scrollablePanel().clientHeight;\n\t\t\t\tthis._panelService.setDimensions(0, panelHeight);\n\t\t\t\tthis._handleDropdownPosition();\n\t\t\t\tthis.scrollTo(this.markedItem(), firstChange);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate _updateItemsRange(firstChange: boolean) {\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tthis._measureDimensions().then(() => {\n\t\t\t\tif (firstChange) {\n\t\t\t\t\tthis._renderItemsRange(this._startOffset);\n\t\t\t\t\tthis._handleDropdownPosition();\n\t\t\t\t} else {\n\t\t\t\t\tthis._renderItemsRange();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate _onContentScrolled(scrollTop: number) {\n\t\tif (this.virtualScroll()) {\n\t\t\tthis._renderItemsRange(scrollTop);\n\t\t}\n\t\tthis._lastScrollPosition = scrollTop;\n\t\tthis._fireScrollToEnd(scrollTop);\n\t}\n\n\tprivate _updateVirtualHeight(height: number) {\n\t\tif (this._updateScrollHeight) {\n\t\t\tthis._virtualPadding().style.height = `${height}px`;\n\t\t\tthis._updateScrollHeight = false;\n\t\t}\n\t}\n\n\tprivate _setVirtualHeight() {\n\t\tif (!this._virtualPadding()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._virtualPadding().style.height = `0px`;\n\t}\n\n\tprivate _onItemsLengthChanged() {\n\t\tthis._updateScrollHeight = true;\n\t}\n\n\tprivate _renderItemsRange(scrollTop = null) {\n\t\tif (scrollTop && this._lastScrollPosition === scrollTop) {\n\t\t\treturn;\n\t\t}\n\n\t\tscrollTop = scrollTop || this._scrollablePanel().scrollTop;\n\t\tconst range = this._panelService.calculateItems(scrollTop, this.itemsLength, this.bufferAmount());\n\t\tthis._updateVirtualHeight(range.scrollHeight);\n\t\tthis._contentPanel().style.transform = `translateY(${range.topPadding}px)`;\n\n\t\tthis._zone.run(() => {\n\t\t\tthis.update.emit(this.items().slice(range.start, range.end));\n\t\t\tthis.scroll.emit({ start: range.start, end: range.end });\n\t\t});\n\n\t\tif (isDefined(scrollTop) && this._lastScrollPosition === 0) {\n\t\t\tthis._scrollablePanel().scrollTop = scrollTop;\n\t\t\tthis._lastScrollPosition = scrollTop;\n\t\t}\n\t}\n\n\tprivate _measureDimensions(): Promise<PanelDimensions> {\n\t\tif (this._panelService.dimensions.itemHeight > 0 || this.itemsLength === 0) {\n\t\t\treturn Promise.resolve(this._panelService.dimensions);\n\t\t}\n\n\t\tconst [first] = this.items();\n\t\tthis.update.emit([first]);\n\n\t\treturn Promise.resolve().then(() => {\n\t\t\tconst option = this._dropdown.querySelector(`#${first.htmlId}`);\n\t\t\tconst optionHeight = option.clientHeight;\n\t\t\tthis._virtualPadding().style.height = `${optionHeight * this.itemsLength}px`;\n\t\t\tconst panelHeight = this._scrollablePanel().clientHeight;\n\t\t\tthis._panelService.setDimensions(optionHeight, panelHeight);\n\n\t\t\treturn this._panelService.dimensions;\n\t\t});\n\t}\n\n\tprivate _fireScrollToEnd(scrollTop: number) {\n\t\tif (this._scrollToEndFired || scrollTop === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst padding = this.virtualScroll() ? this._virtualPadding() : this._contentPanel();\n\n\t\tif (scrollTop + this._dropdown.clientHeight >= padding.clientHeight - 1) {\n\t\t\tthis._zone.run(() => this.scrollToEnd.emit());\n\t\t\tthis._scrollToEndFired = true;\n\t\t}\n\t}\n\n\tprivate _calculateCurrentPosition(dropdownEl: HTMLElement) {\n\t\tconst position = this.position();\n\t\tif (position !== 'auto') {\n\t\t\treturn position;\n\t\t}\n\t\tconst selectRect: ClientRect = this._select.getBoundingClientRect();\n\t\tconst scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n\t\tconst offsetTop = selectRect.top + window.pageYOffset;\n\t\tconst height = selectRect.height;\n\t\tconst dropdownHeight = dropdownEl.getBoundingClientRect().height;\n\t\tif (offsetTop + height + dropdownHeight > scrollTop + document.documentElement.clientHeight) {\n\t\t\treturn 'top';\n\t\t} else {\n\t\t\treturn 'bottom';\n\t\t}\n\t}\n\n\tprivate _appendDropdown() {\n\t\tif (!this.appendTo()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._parent = this._dropdown.shadowRoot\n\t\t\t? this._dropdown.shadowRoot.querySelector(this.appendTo())\n\t\t\t: document.querySelector(this.appendTo());\n\t\tif (!this._parent) {\n\t\t\tthrow new Error(`appendTo selector ${this.appendTo()} did not found any parent element`);\n\t\t}\n\t\tthis._updateXPosition();\n\t\tthis._parent.appendChild(this._dropdown);\n\t}\n\n\tprivate _updateXPosition() {\n\t\tconst select = this._select.getBoundingClientRect();\n\t\tconst parent = this._parent.getBoundingClientRect();\n\t\tconst isRTL = document.documentElement.dir === 'rtl';\n\t\tconst offsetLeft = select.left - parent.left;\n\n\t\tif (isRTL) {\n\t\t\tconst offsetRight = parent.right - select.right;\n\t\t\tthis._dropdown.style.right = offsetRight + 'px';\n\t\t\tthis._dropdown.style.left = 'auto';\n\t\t} else {\n\t\t\tthis._dropdown.style.left = offsetLeft + 'px';\n\t\t\tthis._dropdown.style.right = 'auto';\n\t\t}\n\n\t\tthis._dropdown.style.width = select.width + 'px';\n\t\tthis._dropdown.style.minWidth = select.width + 'px';\n\t}\n\n\tprivate _updateYPosition() {\n\t\tconst select = this._select.getBoundingClientRect();\n\t\tconst parent = this._parent.getBoundingClientRect();\n\t\tconst selectContainer = this._select.querySelector('.ng-select-container') as HTMLElement;\n\t\tconst containerRect = selectContainer?.getBoundingClientRect() ?? select;\n\n\t\tif (this._currentPosition === 'top') {\n\t\t\tconst offsetBottom = parent.bottom - containerRect.top;\n\t\t\tthis._dropdown.style.bottom = offsetBottom + 'px';\n\t\t\tthis._dropdown.style.top = 'auto';\n\t\t} else if (this._currentPosition === 'bottom') {\n\t\t\tconst offsetTop = containerRect.bottom - parent.top;\n\t\t\tthis._dropdown.style.top = offsetTop + 'px';\n\t\t\tthis._dropdown.style.bottom = 'auto';\n\t\t}\n\t}\n\n\tprivate _setupMousedownListener(): void {\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tfromEvent(this._dropdown, 'mousedown')\n\t\t\t\t.pipe(takeUntilDestroyed(this._destroyRef))\n\t\t\t\t.subscribe((event: MouseEvent) => {\n\t\t\t\t\tconst target = event.target as HTMLElement;\n\t\t\t\t\tif (target.tagName === 'INPUT') {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t});\n\t\t});\n\t}\n\n\tprivate _handleWindowScroll() {\n\t\tif (!this.appendTo() && !this.popover()) {\n\t\t\treturn;\n\t\t}\n\t\tthis._zone.runOutsideAngular(() => {\n\t\t\tfromEvent(this._document, 'scroll', { capture: true, passive: true })\n\t\t\t\t.pipe(takeUntilDestroyed(this._destroyRef), auditTime(0, SCROLL_SCHEDULER))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tthis._updateXPosition();\n\t\t\t\t\tthis._updateYPosition();\n\t\t\t\t});\n\t\t});\n\t}\n\n\tprivate _showPopoverIfNeeded() {\n\t\tif (!this.popover()) {\n\t\t\treturn;\n\t\t}\n\t\tif (typeof this._dropdown.showPopover === 'function') {\n\t\t\tthis._renderer.setAttribute(this._dropdown, 'popover', 'manual');\n\t\t\tthis._dropdown.showPopover();\n\t\t\tthis._parent = globalThis.document.body;\n\t\t\tthis._updateXPosition();\n\t\t\tthis._updateYPosition();\n\t\t}\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport {\n\tafterEveryRender,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\tinject,\n\tinput,\n\tOnInit,\n\tsignal,\n} from '@angular/core';\n\n@Component({\n\tselector: 'ng-option',\n\tstandalone: true,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\ttemplate: `<ng-content />`,\n})\nexport class NgOptionComponent implements OnInit {\n\n\tpublic readonly value = input<any>();\n\tpublic readonly disabled = input(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\tpublic readonly elementRef = inject(ElementRef<HTMLElement>);\n\n\tpublic readonly label = signal<string>('');\n\n\t/** True when this component's inputs are initialized (after first change detection). */\n\tpublic readonly isInitialized = signal<boolean>(false);\n\n\tconstructor() {\n\t\tafterEveryRender(() => {\n\t\t\t// Update label signal after render (innerHTML updated by template bindings)\n\t\t\tconst currentLabel = (this.elementRef.nativeElement.innerHTML || '').trim();\n\t\t\tif (currentLabel !== this.label()) {\n\t\t\t\tthis.label.set(currentLabel);\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit(): void {\n\t\tthis.isInitialized.set(true);\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nexport interface NgOption {\n\t[name: string]: any;\n\n\tindex?: number;\n\thtmlId?: string;\n\tselected?: boolean;\n\tdisabled?: boolean;\n\tmarked?: boolean;\n\tlabel?: string;\n\tvalue?: string | any;\n\tparent?: NgOption;\n\tchildren?: NgOption[];\n}\n\nexport enum KeyCode {\n\tTab = 'Tab',\n\tEnter = 'Enter',\n\tEsc = 'Escape',\n\tSpace = ' ',\n\tArrowUp = 'ArrowUp',\n\tArrowDown = 'ArrowDown',\n\tBackspace = 'Backspace',\n}\n\nexport type DropdownPosition = 'top' | 'right' | 'bottom' | 'left' | 'auto';\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport { NgOption } from './ng-select.types';\n\nexport type SelectionModelFactory = () => SelectionModel;\n\nexport function DefaultSelectionModelFactory() {\n\treturn new DefaultSelectionModel();\n}\n\nexport interface SelectionModel {\n\tvalue: NgOption[];\n\tselect(item: NgOption, multiple: boolean, selectableGroupAsModel: boolean);\n\tunselect(item: NgOption, multiple: boolean);\n\tclear(keepDisabled: boolean);\n}\n\nexport class DefaultSelectionModel implements SelectionModel {\n\tprivate _selected: NgOption[] = [];\n\n\tget value(): NgOption[] {\n\t\treturn this._selected;\n\t}\n\n\tselect(item: NgOption, multiple: boolean, groupAsModel: boolean) {\n\t\titem.selected = true;\n\t\tif (!item.children || (!multiple && groupAsModel)) {\n\t\t\tthis._selected.push(item);\n\t\t}\n\t\tif (multiple) {\n\t\t\tif (item.parent) {\n\t\t\t\tconst childrenCount = item.parent.children.length;\n\t\t\t\tconst selectedCount = item.parent.children.filter((x) => x.selected).length;\n\t\t\t\titem.parent.selected = childrenCount === selectedCount;\n\t\t\t} else if (item.children) {\n\t\t\t\tthis._setChildrenSelectedState(item.children, true);\n\t\t\t\tthis._removeChildren(item);\n\t\t\t\tif (groupAsModel && this._activeChildren(item)) {\n\t\t\t\t\tthis._selected = [...this._selected.filter((x) => x.parent !== item), item];\n\t\t\t\t} else {\n\t\t\t\t\tthis._selected = [...this._selected, ...item.children.filter((x) => !x.disabled)];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tunselect(item: NgOption, multiple: boolean) {\n\t\tthis._selected = this._selected.filter((x) => x !== item);\n\t\titem.selected = false;\n\t\tif (multiple) {\n\t\t\tif (item.parent && item.parent.selected) {\n\t\t\t\tconst children = item.parent.children;\n\t\t\t\tthis._removeParent(item.parent);\n\t\t\t\tthis._removeChildren(item.parent);\n\t\t\t\tthis._selected.push(...children.filter((x) => x !== item && !x.disabled));\n\t\t\t\titem.parent.selected = false;\n\t\t\t} else if (item.children) {\n\t\t\t\tthis._setChildrenSelectedState(item.children, false);\n\t\t\t\tthis._removeChildren(item);\n\t\t\t}\n\t\t}\n\t}\n\n\tclear(keepDisabled: boolean) {\n\t\tthis._selected = keepDisabled ? this._selected.filter((x) => x.disabled) : [];\n\t}\n\n\tprivate _setChildrenSelectedState(children: NgOption[], selected: boolean) {\n\t\tfor (const child of children) {\n\t\t\tif (child.disabled) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tchild.selected = selected;\n\t\t}\n\t}\n\n\tprivate _removeChildren(parent: NgOption) {\n\t\tthis._selected = [\n\t\t\t...this._selected.filter((x) => x.parent !== parent),\n\t\t\t...parent.children.filter((x) => x.parent === parent && x.disabled && x.selected),\n\t\t];\n\t}\n\n\tprivate _removeParent(parent: NgOption) {\n\t\tthis._selected = this._selected.filter((x) => x !== parent);\n\t}\n\n\tprivate _activeChildren(item: NgOption): boolean {\n\t\treturn item.children.every((x) => !x.disabled || x.selected);\n\t}\n}\n","// @ts-nocheck -- vendored ng-select source (type-checked upstream); see ../PATCHES.md\nimport {\n\tAfterViewInit,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tcontentChildren,\n\tDestroyRef,\n\teffect,\n\tElementRef,\n\tforwardRef,\n\tHostAttributeToken,\n\tHostListener,\n\tinject,\n\tInjectionToken,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n\tOnChanges,\n\tOnInit,\n\toutput,\n\tsignal,\n\tSimpleChanges,\n\tTemplateRef,\n\tviewChild,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { debounceTime, filter, map, tap } from 'rxjs/operators';\n\nimport {\n\tNgClearButtonTemplateDirective,\n\tNgFooterTemplateDirective,\n\tNgHeaderTemplateDirective,\n\tNgItemLabelDirective,\n\tNgLabelTemplateDirective,\n\tNgLoadingSpinnerTemplateDirective,\n\tNgLoadingTextTemplateDirective,\n\tNgMultiLabelTemplateDirective,\n\tNgNotFoundTemplateDirective,\n\tNgOptgroupTemplateDirective,\n\tNgOptionTemplateDirective,\n\tNgPlaceholderTemplateDirective,\n\tNgTagTemplateDirective,\n\tNgTypeToSearchTemplateDirective,\n} from './ng-templates.directive';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgSelectConfig } from './config.service';\nimport { ConsoleService } from './console.service';\nimport { newId } from './id';\nimport { ItemsList } from './items-list';\nimport { NgDropdownPanelComponent } from './ng-dropdown-panel.component';\nimport { NgDropdownPanelService } from './ng-dropdown-panel.service';\nimport { NgOptionComponent } from './ng-option.component';\nimport { DropdownPosition, KeyCode, NgOption } from './ng-select.types';\nimport { DefaultSelectionModelFactory, SelectionModelFactory } from './selection-model';\nimport { isDefined, isFunction, isObject, isPromise } from './value-utils';\n\nexport const SELECTION_MODEL_FACTORY = new InjectionToken<SelectionModelFactory>('ng-select-selection-model');\nexport type AddTagFn = (term: string) => any | Promise<any>;\nexport type CompareWithFn = (a: any, b: any) => boolean;\nexport type GroupValueFn = (key: string | any, children: any[]) => string | any;\n\nfunction optionalBooleanAttribute(value: unknown): boolean | undefined {\n\treturn value == null ? undefined : booleanAttribute(value);\n}\n\n@Component({\n\tselector: 'ng-select',\n\texportAs: 'ngSelect',\n\ttemplateUrl: './ng-select.component.html',\n\tstyleUrls: ['./ng-select.component.scss'],\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => NgSelectComponent),\n\t\t\tmulti: true,\n\t\t},\n\t\tNgDropdownPanelService,\n\t],\n\tencapsulation: ViewEncapsulation.None\t,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgTemplateOutlet, NgItemLabelDirective, NgDropdownPanelComponent],\n\thost: {\n\t\t'[class.ng-select]': 'true',\n\t\t'[class.ng-select-single]': '!multiple()',\n\t\t'[class.ng-select-typeahead]': 'typeahead()',\n\t\t'[class.ng-select-multiple]': 'multiple()',\n\t\t'[class.ng-select-taggable]': 'addTag()',\n\t\t'[class.ng-select-searchable]': 'searchable()',\n\t\t'[class.ng-select-clearable]': 'clearable()',\n\t\t'[class.ng-select-opened]': 'isOpen()',\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\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\n\t\tthis._mergeGlobalConfig(config);\n\t\tthis.itemsList = new ItemsList(this, newSelectionModel ? newSelectionModel() : DefaultSelectionModelFactory());\n\t\tthis.element = _elementRef.nativeElement;\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.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._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\ttag.then((item) => this.select(handleTag(item))).catch(() => {});\n\t\t} else if (tag) {\n\t\t\tthis.select(handleTag(tag));\n\t\t}\n\t}\n\n\tshowClear() {\n\t\treturn this.clearable() && (this.hasValue || this.searchTerm) && !this.disabled();\n\t}\n\n\tfocusOnClear() {\n\t\tthis.blur();\n\t\tif (this.clearButton()) {\n\t\t\tthis.clearButton().nativeElement.focus();\n\t\t}\n\t}\n\n\ttrackByOption = (_: number, item: NgOption) => {\n\t\tif (this.trackByFn()) {\n\t\t\treturn this.trackByFn()(item.value);\n\t\t}\n\n\t\treturn item;\n\t};\n\n\tshowNoItemsFound() {\n\t\tconst empty = this.itemsList.filteredItems.length === 0;\n\t\treturn (\n\t\t\t((empty && !this.typeahead()?.observed && !this.loading()) ||\n\t\t\t\t(empty && this.typeahead()?.observed && this._validTerm() && !this.loading())) &&\n\t\t\t!this.showAddTag\n\t\t);\n\t}\n\n\tshowTypeToSearch() {\n\t\tconst empty = this.itemsList.filteredItems.length === 0;\n\t\treturn empty && this.typeahead()?.observed && !this._validTerm() && !this.loading();\n\t}\n\n\tonCompositionStart() {\n\t\tthis._isComposing = true;\n\t}\n\n\tonCompositionEnd(term: string) {\n\t\tthis._isComposing = false;\n\t\tif (this.searchWhileComposing()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.filter(term);\n\t}\n\n\tfilter(term: string) {\n\t\tif (this._isComposing && !this.searchWhileComposing()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._searchTerm.set(term);\n\t\tif (this.typeahead()?.observed && (this._validTerm() || this.minTermLength() === 0)) {\n\t\t\tthis.typeahead().next(term);\n\t\t}\n\n\t\tif (!this.typeahead()?.observed) {\n\t\t\tthis.itemsList.filter(term);\n\t\t\tif (this.isOpen()) {\n\t\t\t\tthis.itemsList.markSelectedOrDefault(this.markFirst());\n\t\t\t}\n\t\t}\n\n\t\tthis.searchEvent.emit({ term, items: this.itemsList.filteredItems.map((x) => x.value) });\n\t\tthis.open();\n\t}\n\n\tonInputFocus($event: FocusEvent) {\n\t\tif (this._focused) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._editableSearchTermActive()) {\n\t\t\tthis._setSearchTermFromItems();\n\t\t}\n\n\t\tthis.element.classList.add('ng-select-focused');\n\t\tthis.focusEvent.emit($event);\n\t\tthis._focused = true;\n\t}\n\n\tonInputBlur($event: FocusEvent) {\n\t\tthis.element.classList.remove('ng-select-focused');\n\t\tthis.blurEvent.emit($event);\n\t\tif (!this.isOpen() && !this.disabled()) {\n\t\t\tthis._onTouched();\n\t\t}\n\t\tif (this._editableSearchTermActive()) {\n\t\t\tthis._setSearchTermFromItems();\n\t\t}\n\t\tthis._focused = false;\n\t}\n\n\tonItemHover(item: NgOption) {\n\t\tif (item.disabled) {\n\t\t\treturn;\n\t\t}\n\t\tthis.itemsList.markItem(item);\n\t}\n\n\tdetectChanges() {\n\t\tif (!(<any>this._cd).destroyed) {\n\t\t\tthis._cd.detectChanges();\n\t\t}\n\t}\n\n\tprivate _onChange = (_: any) => {};\n\n\tprivate _onTouched = () => {};\n\n\tprivate _setSearchTermFromItems() {\n\t\tconst selected = this.selectedItems?.[0];\n\t\tthis._searchTerm.set(selected?.label ?? null);\n\t}\n\n\tprivate _setItems(items: readonly any[]) {\n\t\tconst firstItem = items[0];\n\t\tthis.bindLabel.set(this.bindLabel() || this._defaultLabel);\n\t\tthis._primitive = isDefined(firstItem) ? !isObject(firstItem) : this._primitive || this.bindLabel() === this._defaultLabel;\n\t\tthis.itemsList.setItems(items);\n\t\tif (items.length > 0 && this.hasValue) {\n\t\t\tthis.itemsList.mapSelectedItems();\n\t\t}\n\t\tif (this.isOpen() && isDefined(this.searchTerm) && !this.typeahead()?.observed) {\n\t\t\tthis.itemsList.filter(this.searchTerm);\n\t\t}\n\t\tif (this.typeahead()?.observed || this.isOpen()) {\n\t\t\tthis.itemsList.markSelectedOrDefault(this.markFirst());\n\t\t}\n\t}\n\n\tprivate _setItemsFromNgOptions() {\n\t\teffect(\n\t\t\t() => {\n\t\t\t\tconst options = this.ngOptions();\n\t\t\t\t// Wait until all ng-option inputs are initialized (avoids _groupBy crash when values load async)\n\t\t\t\tif (options.length > 0 && !options.every((opt) => opt.isInitialized())) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.bindLabel.set(this._defaultLabel);\n\t\t\t\tconst items =\n\t\t\t\t\toptions.map((option) => ({\n\t\t\t\t\t\t$ngOptionValue: option.value(),\n\t\t\t\t\t\t$ngOptionLabel: option.elementRef.nativeElement.innerHTML,\n\t\t\t\t\t\tdisabled: option.disabled(),\n\t\t\t\t\t})) ?? [];\n\t\t\t\tthis.items.set(items);\n\t\t\t\tthis.itemsList.setItems(items);\n\t\t\t\tif (this.hasValue) {\n\t\t\t\t\tthis.itemsList.mapSelectedItems();\n\t\t\t\t}\n\t\t\t\tthis._cd.detectChanges();\n\n\t\t\t\toptions\n\t\t\t\t\t// find item for each option\n\t\t\t\t\t.map((option) => ({\n\t\t\t\t\t\toption,\n\t\t\t\t\t\titem: this.itemsList.findItem(option.value()),\n\t\t\t\t\t}))\n\t\t\t\t\t// filter non found items\n\t\t\t\t\t.filter(({ item }) => isDefined(item))\n\t\t\t\t\t// process to update disabled and label\n\t\t\t\t\t.forEach(({ option, item }) => {\n\t\t\t\t\t\titem.disabled = option.disabled();\n\t\t\t\t\t\titem.label = option.label() || item.label;\n\t\t\t\t\t});\n\t\t\t},\n\t\t\t{ injector: this._injector },\n\t\t);\n\t}\n\n\tprivate _isValidWriteValue(value: any): boolean {\n\t\tif (!isDefined(value) || (this.multiple() && value === '') || (Array.isArray(value) && value.length === 0)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst validateBinding = (item: any): boolean => {\n\t\t\tif (!isDefined(this.compareWith()) && isObject(item) && this.bindValue()) {\n\t\t\t\tthis._console.warn(\n\t\t\t\t\t`Setting object(${JSON.stringify(item)}) as your model with bindValue is not allowed unless [compareWith] is used.`,\n\t\t\t\t);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\tif (this.multiple()) {\n\t\t\tif (!Array.isArray(value)) {\n\t\t\t\tthis._console.warn('Multiple select ngModel should be array.');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn value.every((item) => validateBinding(item));\n\t\t} else {\n\t\t\treturn validateBinding(value);\n\t\t}\n\t}\n\n\tprivate _handleWriteValue(ngModel: any | any[]) {\n\t\tif (!this._isValidWriteValue(ngModel)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst select = (val: any) => {\n\t\t\tlet item = this.itemsList.findItem(val);\n\t\t\tif (item) {\n\t\t\t\tthis.itemsList.select(item);\n\t\t\t} else {\n\t\t\t\tconst isValObject = isObject(val);\n\t\t\t\tconst isPrimitive = !isValObject && !this.bindValue();\n\t\t\t\tif (isValObject || isPrimitive) {\n\t\t\t\t\tthis.itemsList.select(this.itemsList.mapItem(val, null));\n\t\t\t\t} else if (this.bindValue()) {\n\t\t\t\t\titem = {\n\t\t\t\t\t\t[this.bindLabel()]: null,\n\t\t\t\t\t\t[this.bindValue()]: val,\n\t\t\t\t\t};\n\t\t\t\t\tthis.itemsList.select(this.itemsList.mapItem(item, null));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (this.multiple()) {\n\t\t\t(<any[]>ngModel).forEach((item) => select(item));\n\t\t} else {\n\t\t\tselect(ngModel);\n\t\t}\n\t}\n\n\tprivate _handleKeyPresses() {\n\t\tif (this.searchable()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._keyPress$\n\t\t\t.pipe(\n\t\t\t\ttakeUntilDestroyed(this._destroyRef),\n\t\t\t\ttap((letter) => this._pressedKeys.push(letter)),\n\t\t\t\tdebounceTime(200),\n\t\t\t\tfilter(() => this._pressedKeys.length > 0),\n\t\t\t\tmap(() => this._pressedKeys.join('')),\n\t\t\t)\n\t\t\t.subscribe((term) => {\n\t\t\t\tconst item = this.itemsList.findByLabel(term);\n\t\t\t\tif (item) {\n\t\t\t\t\tif (this.isOpen()) {\n\t\t\t\t\t\tif (!item.disabled) {\n\t\t\t\t\t\t\tthis.itemsList.markItem(item);\n\t\t\t\t\t\t\tthis._scrollToMarked();\n\t\t\t\t\t\t\tthis._cd.markForCheck();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.select(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._pressedKeys = [];\n\t\t\t});\n\t}\n\n\tprivate _setInputAttributes() {\n\t\tconst input = this.searchInput().nativeElement;\n\t\tconst attributes = {\n\t\t\ttype: 'text',\n\t\t\tautocorrect: 'off',\n\t\t\tautocapitalize: 'off',\n\t\t\tautocomplete: 'off',\n\t\t\t'aria-controls': this.dropdownId,\n\t\t\t...this.inputAttrs(),\n\t\t};\n\n\t\tfor (const key of Object.keys(attributes)) {\n\t\t\tinput.setAttribute(key, attributes[key]);\n\t\t}\n\t}\n\n\tprivate _setTabFocusOnClear() {\n\t\tthis.tabFocusOnClear.set(isDefined(this.tabFocusOnClearButton()) ? !!this.tabFocusOnClearButton() : this.config.tabFocusOnClear);\n\t}\n\n\tprivate _updateNgModel() {\n\t\tconst model = [];\n\t\tfor (const item of this.selectedItems) {\n\t\t\tif (this.bindValue()) {\n\t\t\t\tlet value = null;\n\t\t\t\tif (item.children) {\n\t\t\t\t\tconst groupKey = this.groupValue() ? this.bindValue() : <string>this.groupBy();\n\t\t\t\t\tvalue = item.value[groupKey || <string>this.groupBy()];\n\t\t\t\t} else {\n\t\t\t\t\tvalue = this.itemsList.resolveNested(item.value, this.bindValue());\n\t\t\t\t}\n\t\t\t\tmodel.push(value);\n\t\t\t} else {\n\t\t\t\tmodel.push(item.value);\n\t\t\t}\n\t\t}\n\n\t\tconst selected = this.selectedItems.map((x) => x.value);\n\t\tif (this.multiple()) {\n\t\t\tthis._onChange(model);\n\t\t\tthis.changeEvent.emit(selected);\n\t\t} else {\n\t\t\tthis._onChange(isDefined(model[0]) ? model[0] : null);\n\t\t\tthis.changeEvent.emit(selected[0]);\n\t\t}\n\n\t\tthis._cd.markForCheck();\n\t}\n\n\tprivate _clearSearch() {\n\t\tif (!this.searchTerm) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._changeSearch(null);\n\t\tthis.itemsList.resetFilteredItems();\n\t}\n\n\tprivate _changeSearch(searchTerm: string) {\n\t\tthis._searchTerm.set(searchTerm);\n\t\tif (this.typeahead()?.observed) {\n\t\t\tthis.typeahead().next(searchTerm);\n\t\t}\n\t}\n\n\tprivate _scrollToMarked() {\n\t\tif (!this.isOpen() || !this.dropdownPanel()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.dropdownPanel().scrollTo(this.itemsList.markedItem);\n\t}\n\n\tprivate _scrollToTag() {\n\t\tif (!this.isOpen() || !this.dropdownPanel()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.dropdownPanel().scrollToTag();\n\t}\n\n\tprivate _onSelectionChanged() {\n\t\tconst appendTo = this.appendTo() ?? this.config.appendTo;\n\t\tif (this.isOpen() && this.deselectOnClickValue() && appendTo) {\n\t\t\t// Make sure items are rendered.\n\t\t\tthis._cd.detectChanges();\n\t\t\tthis.dropdownPanel().adjustPosition();\n\t\t}\n\t}\n\n\tprivate _handleTab($event: KeyboardEvent) {\n\t\tif (this.isOpen() === false) {\n\t\t\tif (this.showClear() && !$event.shiftKey && this.tabFocusOnClear()) {\n\t\t\t\tthis.focusOnClear();\n\t\t\t\t$event.preventDefault();\n\t\t\t} else if (!this.addTag()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (this.selectOnTab()) {\n\t\t\tif (this.itemsList.markedItem) {\n\t\t\t\tthis.toggleItem(this.itemsList.markedItem);\n\t\t\t\t$event.preventDefault();\n\t\t\t} else if (this.showAddTag) {\n\t\t\t\tthis.selectTag();\n\t\t\t\t$event.preventDefault();\n\t\t\t} else {\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprivate _handleEnter($event: KeyboardEvent) {\n\t\tconst openOnEnter = this.openOnEnter() ?? this.config.openOnEnter;\n\t\tif (this.isOpen() || this._manualOpen) {\n\t\t\tif (this.itemsList.markedItem) {\n\t\t\t\tthis.toggleItem(this.itemsList.markedItem);\n\t\t\t} else if (this.showAddTag) {\n\t\t\t\tthis.selectTag();\n\t\t\t}\n\t\t} else if (openOnEnter) {\n\t\t\tthis.open();\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\t$event.preventDefault();\n\t}\n\n\tprivate _handleSpace($event: KeyboardEvent) {\n\t\tif (this.isOpen() || this._manualOpen) {\n\t\t\treturn;\n\t\t}\n\t\tthis.open();\n\t\t$event.preventDefault();\n\t}\n\n\tprivate _handleArrowDown($event: KeyboardEvent) {\n\t\tif (this._nextItemIsTag(+1)) {\n\t\t\tthis.itemsList.unmarkItem();\n\t\t\tthis._scrollToTag();\n\t\t} else {\n\t\t\tthis.itemsList.markNextItem();\n\t\t\tthis._scrollToMarked();\n\t\t}\n\t\tthis.open();\n\t\t$event.preventDefault();\n\t}\n\n\tprivate _handleArrowUp($event: KeyboardEvent) {\n\t\tif (!this.isOpen()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._nextItemIsTag(-1)) {\n\t\t\tthis.itemsList.unmarkItem();\n\t\t\tthis._scrollToTag();\n\t\t} else {\n\t\t\tthis.itemsList.markPreviousItem();\n\t\t\tthis._scrollToMarked();\n\t\t}\n\t\t$event.preventDefault();\n\t}\n\n\tprivate _nextItemIsTag(nextStep: number): boolean {\n\t\tconst nextIndex = this.itemsList.markedIndex + nextStep;\n\t\treturn (\n\t\t\tthis.addTag() && this.searchTerm && this.itemsList.markedItem && (nextIndex < 0 || nextIndex === this.itemsList.filteredItems.length)\n\t\t);\n\t}\n\n\tprivate _handleBackspace() {\n\t\tif (this.searchTerm || !this.clearable() || !this.clearOnBackspace() || !this.hasValue) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.multiple()) {\n\t\t\tthis.unselect(this.itemsList.lastSelectedItem);\n\t\t} else {\n\t\t\tthis.clearModel();\n\t\t}\n\t}\n\n\tprivate _mergeGlobalConfig(config: NgSelectConfig) {\n\t\tthis.bindValue.set(this.bindValue() || config.bindValue);\n\t\tthis.bindLabel.set(this.bindLabel() || config.bindLabel);\n\t\tthis.appearance.set(this.appearance() || config.appearance);\n\t\tthis._setTabFocusOnClear();\n\t}\n\n\t/**\n\t * Gets virtual scroll value from input or from config\n\t *\n\t * @param config NgSelectConfig object\n\t *\n\t * @returns `true` if virtual scroll is enabled, `false` otherwise\n\t */\n\tprivate getVirtualScroll(config: NgSelectConfig): boolean {\n\t\treturn isDefined(this._virtualScroll()) ? this._virtualScroll()! : this.isVirtualScrollDisabled(config);\n\t}\n\n\t/**\n\t * Gets disableVirtualScroll value from input or from config\n\t *\n\t * @param config NgSelectConfig object\n\t *\n\t * @returns `true` if disableVirtualScroll is enabled, `false` otherwise\n\t */\n\tprivate isVirtualScrollDisabled(config: NgSelectConfig) {\n\t\treturn isDefined(config.disableVirtualScroll) ? !config.disableVirtualScroll : false;\n\t}\n}\n","<div\n\t(mousedown)=\"handleMousedown($event)\"\n\t[class.ng-appearance-outline]=\"appearance() === 'outline'\"\n\t[class.ng-appearance-fill]=\"appearance() === 'fill'\"\n\t[class.ng-has-value]=\"hasValue\"\n\tclass=\"ng-select-container\">\n\t<div class=\"ng-value-container\">\n\t\t@if ((selectedItems.length === 0 && !searchTerm) || (fixedPlaceholder() ?? config.fixedPlaceholder)) {\n\t\t\t<ng-template #defaultPlaceholderTemplate>\n\t\t\t\t<div class=\"ng-placeholder\">{{ placeholder() ?? config.placeholder }}</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template [ngTemplateOutlet]=\"placeholderTemplate() || defaultPlaceholderTemplate\"> </ng-template>\n\t\t}\n\n\t\t@if ((!multiLabelTemplate() || !multiple()) && selectedItems.length > 0) {\n\t\t\t@for (item of selectedItems; track trackByOption($index, item)) {\n\t\t\t\t<div [class.ng-value-disabled]=\"item.disabled\" class=\"ng-value\">\n\t\t\t\t\t<ng-template #defaultLabelTemplate>\n\t\t\t\t\t\t<span class=\"ng-value-icon left\" (click)=\"unselect(item)\" aria-hidden=\"true\">×</span>\n\t\t\t\t\t\t<span class=\"ng-value-label\" [ngItemLabel]=\"item.label\" [escape]=\"escapeHTML\"></span>\n\t\t\t\t\t</ng-template>\n\t\t\t\t\t<ng-template\n\t\t\t\t\t\t[ngTemplateOutlet]=\"labelTemplate() || defaultLabelTemplate\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ item: item.value, clear: clearItem, label: item.label }\">\n\t\t\t\t\t</ng-template>\n\t\t\t\t</div>\n\t\t\t}\n\t\t}\n\n\t\t@if (multiple() && multiLabelTemplate() && selectedValues.length > 0) {\n\t\t\t<ng-template [ngTemplateOutlet]=\"multiLabelTemplate()\" [ngTemplateOutletContext]=\"{ items: selectedValues, clear: clearItem }\">\n\t\t\t</ng-template>\n\t\t}\n\n\t\t<div class=\"ng-input\">\n\t\t\t<input\n\t\t\t\t#searchInput\n\t\t\t\t(blur)=\"onInputBlur($event)\"\n\t\t\t\t(change)=\"$event.stopPropagation()\"\n\t\t\t\t(compositionend)=\"onCompositionEnd(searchInput.value)\"\n\t\t\t\t(compositionstart)=\"onCompositionStart()\"\n\t\t\t\t(focus)=\"onInputFocus($event)\"\n\t\t\t\t(input)=\"filter(searchInput.value)\"\n\t\t\t\t[attr.aria-activedescendant]=\"isOpen() ? itemsList?.markedItem?.htmlId : null\"\n\t\t\t\t[attr.aria-controls]=\"isOpen() ? dropdownId : null\"\n\t\t\t\t[attr.aria-expanded]=\"isOpen()\"\n\t\t\t\t[attr.aria-label]=\"ariaLabel()\"\n\t\t\t\t[attr.id]=\"labelForId()\"\n\t\t\t\t[attr.tabindex]=\"tabIndex()\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[readOnly]=\"!searchable() || itemsList.maxItemsSelected\"\n\t\t\t\t[value]=\"searchTerm ?? ''\"\n\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\trole=\"combobox\" />\n\t\t</div>\n\t</div>\n\n\t@if (loading()) {\n\t\t<ng-template #defaultLoadingSpinnerTemplate>\n\t\t\t<div class=\"ng-spinner-loader\"></div>\n\t\t</ng-template>\n\t\t<ng-template [ngTemplateOutlet]=\"loadingSpinnerTemplate() || defaultLoadingSpinnerTemplate\"></ng-template>\n\t}\n\n\t@if (showClear()) {\n\t\t<span\n\t\t\tclass=\"ng-clear-wrapper\"\n\t\t\trole=\"button\"\n\t\t\ttabindex=\"0\"\n\t\t\t[attr.tabindex]=\"tabFocusOnClear() ? 0 : -1\"\n\t\t\ttitle=\"{{ clearAllText() || config.clearAllText }}\"\n\t\t\t#clearButton\n\t\t\t(click)=\"handleClearClick($event)\">\n\t\t\t@if (clearButtonTemplate()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"clearButtonTemplate()\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t<span class=\"ng-clear\" aria-hidden=\"true\">×</span>\n\t\t\t}\n\t\t</span>\n\t}\n\n\t<span class=\"ng-arrow-wrapper\">\n\t\t<span class=\"ng-arrow\"></span>\n\t</span>\n</div>\n\n@if (isOpen()) {\n\t@let appendToValue = appendTo() || config.appendTo;\n\t<ng-dropdown-panel\n\t\tclass=\"ng-dropdown-panel\"\n\t\t[virtualScroll]=\"dropdownVirtualScroll()\"\n\t\t[bufferAmount]=\"bufferAmount()\"\n\t\t[appendTo]=\"appendToValue\"\n\t\t[position]=\"dropdownPosition()\"\n\t\t[outsideClickEvent]=\"outsideClickEvent()\"\n\t\t[headerTemplate]=\"headerTemplate()\"\n\t\t[footerTemplate]=\"footerTemplate()\"\n\t\t[filterValue]=\"searchTerm\"\n\t\t[items]=\"itemsList.filteredItems\"\n\t\t[showAddTag]=\"showAddTag\"\n\t\t[markedItem]=\"itemsList.markedItem\"\n\t\t(update)=\"viewPortItems = $event\"\n\t\t(scroll)=\"scroll.emit($event)\"\n\t\t(scrollToEnd)=\"scrollToEnd.emit($event)\"\n\t\t(outsideClick)=\"close()\"\n\t\t[class.ng-select-multiple]=\"multiple()\"\n\t\t[class]=\"appendToValue ? (ngClass() ? ngClass() : classes) : null\"\n\t\t[id]=\"dropdownId\"\n\t\t[ariaLabelDropdown]=\"ariaLabelDropdown() ?? config.ariaLabelDropdown\"\n\t\t[popover]=\"popover()\">\n\t\t<ng-container>\n\t\t\t@for (item of viewPortItems; track trackByOption($index, item)) {\n\t\t\t\t<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus, @angular-eslint/template/mouse-events-have-key-events -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"ng-option\"\n\t\t\t\t\t[attr.role]=\"item.children ? 'group' : 'option'\"\n\t\t\t\t\t(click)=\"toggleItem(item)\"\n\t\t\t\t\t(mouseover)=\"onItemHover(item)\"\n\t\t\t\t\t[class.ng-option-disabled]=\"item.disabled\"\n\t\t\t\t\t[class.ng-option-selected]=\"item.selected\"\n\t\t\t\t\t[class.ng-optgroup]=\"item.children\"\n\t\t\t\t\t[class.ng-option]=\"!item.children\"\n\t\t\t\t\t[class.ng-option-child]=\"!!item.parent\"\n\t\t\t\t\t[class.ng-option-marked]=\"item === itemsList.markedItem\"\n\t\t\t\t\t[attr.aria-selected]=\"item.selected\"\n\t\t\t\t\t[attr.id]=\"item?.htmlId\"\n\t\t\t\t\t[attr.aria-setsize]=\"itemsList.filteredItems.length\"\n\t\t\t\t\t[attr.aria-posinset]=\"(item.index ?? 0) + 1\">\n\t\t\t\t\t<ng-template #defaultOptionTemplate>\n\t\t\t\t\t\t<span class=\"ng-option-label\" [ngItemLabel]=\"item.label\" [escape]=\"escapeHTML\"></span>\n\t\t\t\t\t</ng-template>\n\t\t\t\t\t<ng-template\n\t\t\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\t\t\titem.children ? optgroupTemplate() || defaultOptionTemplate : optionTemplate() || defaultOptionTemplate\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ item: item.value, item$: item, index: item.index, searchTerm: searchTerm }\">\n\t\t\t\t\t</ng-template>\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@if (showAddTag) {\n\t\t\t\t<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus, @angular-eslint/template/mouse-events-have-key-events -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"ng-option\"\n\t\t\t\t\t[class.ng-option-marked]=\"!itemsList.markedItem\"\n\t\t\t\t\t(mouseover)=\"itemsList.unmarkItem()\"\n\t\t\t\t\trole=\"option\"\n\t\t\t\t\t[attr.aria-selected]=\"false\"\n\t\t\t\t\t(click)=\"selectTag()\">\n\t\t\t\t\t<ng-template #defaultTagTemplate>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t><span class=\"ng-tag-label\">{{ addTagText() || config.addTagText }}</span\n\t\t\t\t\t\t\t>\"{{ searchTerm }}\"</span\n\t\t\t\t\t\t>\n\t\t\t\t\t</ng-template>\n\t\t\t\t\t<ng-template\n\t\t\t\t\t\t[ngTemplateOutlet]=\"tagTemplate() || defaultTagTemplate\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n\t\t\t\t\t</ng-template>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</ng-container>\n\t\t@if (showNoItemsFound()) {\n\t\t\t<ng-template #defaultNotFoundTemplate>\n\t\t\t\t<div class=\"ng-option ng-option-disabled\">{{ notFoundText() ?? config.notFoundText }}</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template\n\t\t\t\t[ngTemplateOutlet]=\"notFoundTemplate() || defaultNotFoundTemplate\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n\t\t\t</ng-template>\n\t\t}\n\t\t@if (showTypeToSearch()) {\n\t\t\t<ng-template #defaultTypeToSearchTemplate>\n\t\t\t\t<div class=\"ng-option ng-option-disabled\">{{ typeToSearchText() || config.typeToSearchText }}</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template [ngTemplateOutlet]=\"typeToSearchTemplate() || defaultTypeToSearchTemplate\"></ng-template>\n\t\t}\n\t\t@if (loading() && itemsList.filteredItems.length === 0) {\n\t\t\t<ng-template #defaultLoadingTextTemplate>\n\t\t\t\t<div class=\"ng-option ng-option-disabled\">{{ loadingText() || config.loadingText }}</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template\n\t\t\t\t[ngTemplateOutlet]=\"loadingTextTemplate() || defaultLoadingTextTemplate\"\n\t\t\t\t[ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n\t\t\t</ng-template>\n\t\t}\n\t</ng-dropdown-panel>\n}\n\n<!-- Always present aria-live region -->\n<div aria-atomic=\"true\" aria-live=\"polite\" class=\"ng-visually-hidden\" role=\"status\">\n\t@if (isOpen() && showNoItemsFound()) {\n\t\t{{ notFoundText() ?? config.notFoundText }}\n\t}\n</div>\n","import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tinput,\n\toutput,\n\tsignal,\n\tTemplateRef,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../interfaces/common.interface';\nimport { HubSelectFormat, HubSelectFormats } from '../interfaces/select.interface';\nimport { HubFieldControl } from '../shared/hub-field-control';\nimport { areEqual, get } from '../utils/utils';\nimport { NgSelectComponent } from './vendor/lib/ng-select.component';\nimport { NgOptionComponent } from './vendor/lib/ng-option.component';\nimport {\n\tNgFooterTemplateDirective,\n\tNgHeaderTemplateDirective,\n\tNgLabelTemplateDirective,\n\tNgMultiLabelTemplateDirective,\n\tNgNotFoundTemplateDirective,\n\tNgOptgroupTemplateDirective,\n\tNgOptionTemplateDirective\n} from './vendor/lib/ng-templates.directive';\n\n/**\n * Accessible select / multiselect / autocomplete built on the vendored ng-select engine, with the\n * `ng-hub-ui-forms` conventions on top: CVA binding, automatic error display (via\n * {@link HubFieldControl}), label, helper text and `--hub-select-*` token theming.\n *\n * The underlying ng-select DOM is themed in place from this component's stylesheet\n * (`ViewEncapsulation.None`) using hub tokens — no external `::ng-deep` overrides, and the vendored\n * source stays untouched so the upstream sync remains automatic.\n *\n * @example\n * ```html\n * <hub-select formControlName=\"country\" label=\"Country\" [items]=\"countries\" bindLabel=\"name\" bindValue=\"code\" />\n * ```\n */\n@Component({\n\tselector: 'hub-select',\n\timports: [\n\t\tNgTemplateOutlet,\n\t\tKeyValuePipe,\n\t\tFormsModule,\n\t\tNgSelectComponent,\n\t\tNgOptionComponent,\n\t\tNgOptionTemplateDirective,\n\t\tNgOptgroupTemplateDirective,\n\t\tNgLabelTemplateDirective,\n\t\tNgMultiLabelTemplateDirective,\n\t\tNgHeaderTemplateDirective,\n\t\tNgFooterTemplateDirective,\n\t\tNgNotFoundTemplateDirective\n\t],\n\ttemplateUrl: './select.component.html',\n\tstyleUrl: './select.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-select-host]': 'true'\n\t}\n})\nexport class HubSelectComponent extends HubFieldControl {\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _selectFormats = HubSelectFormats;\n\tprotected readonly _value = signal<any>(null);\n\n\t// ── Customization templates ──────────────────────────────────────────────\n\t// ng-select resolves its templates with `contentChild` (no `descendants`),\n\t// which does NOT see through this wrapper's `<ng-content>`. We grab the\n\t// consumer-projected templates here and re-declare them as direct content of\n\t// the inner ng-select (see the template), forwarding each with its context —\n\t// so `<ng-template ng-option-tmp>` etc. work through `<hub-select>`.\n\tprotected readonly _optionTpl = contentChild(NgOptionTemplateDirective, { read: TemplateRef });\n\tprotected readonly _optgroupTpl = contentChild(NgOptgroupTemplateDirective, { read: TemplateRef });\n\tprotected readonly _labelTpl = contentChild(NgLabelTemplateDirective, { read: TemplateRef });\n\tprotected readonly _multiLabelTpl = contentChild(NgMultiLabelTemplateDirective, { read: TemplateRef });\n\tprotected readonly _headerTpl = contentChild(NgHeaderTemplateDirective, { read: TemplateRef });\n\tprotected readonly _footerTpl = contentChild(NgFooterTemplateDirective, { read: TemplateRef });\n\tprotected readonly _notFoundTpl = contentChild(NgNotFoundTemplateDirective, { read: TemplateRef });\n\n\t/**\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/** 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/** 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/** Text shown when no items match. */\n\treadonly notFoundText = input<string>('No items found');\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/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<any>();\n\n\t/** Emits when the control gains focus (dropdown format). */\n\treadonly onFocus = output<any>();\n\n\t/** Emits when the control loses focus (dropdown format). */\n\treadonly onBlur = output<any>();\n\n\t/** Emits when the dropdown opens. */\n\treadonly onOpen = output<void>();\n\n\t/** Emits when the dropdown closes. */\n\treadonly onClose = output<void>();\n\n\t/** Emits when the value is cleared. */\n\treadonly onClear = output<void>();\n\n\t/** Emits on search-term changes (use with `typeahead`/async data). */\n\treadonly onSearch = output<{ term: string; items: any[] }>();\n\n\t/** Emits when an item is added to the selection. */\n\treadonly onAdd = output<any>();\n\n\t/** Emits when an item is removed from the selection. */\n\treadonly onRemove = output<any>();\n\n\t/** Emits while the dropdown list scrolls (virtual scroll window). */\n\treadonly scroll = output<{ start: number; end: number }>();\n\n\t/** Emits when the dropdown list is scrolled to the end (infinite loading). */\n\treadonly scrollToEnd = output<any>();\n\n\t/** Whether the current format selects multiple values. */\n\tprotected readonly isMulti = computed<boolean>(() => {\n\t\tswitch (this.format()) {\n\t\t\tcase this._selectFormats.Checkbox:\n\t\t\t\treturn true;\n\t\t\tcase this._selectFormats.Radio:\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\treturn this.multiple();\n\t\t}\n\t});\n\n\twriteValue(value: any): void {\n\t\tthis._value.set(value ?? null);\n\t}\n\n\t/**\n\t * Propagates the value to the form and outputs.\n\t *\n\t * @param value - The new value emitted by the control.\n\t */\n\tsetValue(value: any): void {\n\t\tthis._value.set(value ?? null);\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n\n\t/**\n\t * Resolves the visible label of an item, honoring `bindLabel`.\n\t *\n\t * @param item - The source item.\n\t * @returns The label to display.\n\t */\n\tprotected itemLabel(item: any): any {\n\t\tconst bind = this.bindLabel();\n\n\t\treturn bind ? get(item, bind) : item;\n\t}\n\n\t/**\n\t * Resolves the bound value of an item, honoring `bindValue`.\n\t *\n\t * @param item - The source item.\n\t * @returns The value stored when the item is selected.\n\t */\n\tprotected itemValue(item: any): any {\n\t\tconst bind = this.bindValue();\n\n\t\treturn bind ? get(item, bind) : item;\n\t}\n\n\t/**\n\t * Whether an item is currently selected (used by the buttons/checkbox/radio formats).\n\t *\n\t * @param item - The source item.\n\t * @returns `true` when the item's value is part of the current selection.\n\t */\n\tprotected isSelected(item: any): boolean {\n\t\tconst value = this.itemValue(item);\n\n\t\tif (this.isMulti()) {\n\t\t\treturn Array.isArray(this._value()) && this._value().some((v: any) => areEqual(v, value));\n\t\t}\n\n\t\treturn areEqual(this._value(), value);\n\t}\n\n\t/**\n\t * Toggles an item's selection for the buttons/checkbox/radio formats.\n\t *\n\t * @param item - The item to toggle.\n\t */\n\tprotected toggleItem(item: any): void {\n\t\tif (this.disabled() || this.readonly()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = this.itemValue(item);\n\n\t\tif (this.isMulti()) {\n\t\t\tconst current: any[] = Array.isArray(this._value()) ? [...this._value()] : [];\n\t\t\tconst index = current.findIndex((v) => areEqual(v, value));\n\n\t\t\tif (index >= 0) {\n\t\t\t\tcurrent.splice(index, 1);\n\t\t\t} else {\n\t\t\t\tcurrent.push(value);\n\t\t\t}\n\n\t\t\tthis.setValue(current);\n\t\t\treturn;\n\t\t}\n\n\t\t// Single selection: clicking the selected item clears it when clearable.\n\t\tif (this.isSelected(item)) {\n\t\t\tthis.setValue(this.clearable() ? null : value);\n\t\t} else {\n\t\t\tthis.setValue(value);\n\t\t}\n\t}\n}\n","<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--invalid]=\"isInvalid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t@switch (format()) {\n\t\t\t@case (_selectFormats.Dropdown) {\n\t\t\t\t<ng-select\n\t\t\t\t\tclass=\"hub-select__control\"\n\t\t\t\t\t[class.hub-select__control--invalid]=\"isInvalid\"\n\t\t\t\t\t[labelForId]=\"$any(id)\"\n\t\t\t\t\t[items]=\"items()\"\n\t\t\t\t\t[bindLabel]=\"$any(bindLabel())\"\n\t\t\t\t\t[bindValue]=\"$any(bindValue())\"\n\t\t\t\t\t[groupBy]=\"$any(groupBy())\"\n\t\t\t\t\t[multiple]=\"multiple()\"\n\t\t\t\t\t[searchable]=\"searchable()\"\n\t\t\t\t\t[clearable]=\"clearable()\"\n\t\t\t\t\t[closeOnSelect]=\"closeOnSelect()\"\n\t\t\t\t\t[fixedPlaceholder]=\"fixedPlaceholder()\"\n\t\t\t\t\t[loading]=\"loading()\"\n\t\t\t\t\t[readonly]=\"readonly()\"\n\t\t\t\t\t[placeholder]=\"placeholder()\"\n\t\t\t\t\t[notFoundText]=\"notFoundText()\"\n\t\t\t\t\t\t[appendTo]=\"appendTo()\"\n\t\t\t\t\t[ngModel]=\"_value()\"\n\t\t\t\t\t(ngModelChange)=\"setValue($event)\"\n\t\t\t\t\t(focus)=\"onFocus.emit($event)\"\n\t\t\t\t\t(blur)=\"onBlur.emit($event)\"\n\t\t\t\t\t(open)=\"onOpen.emit()\"\n\t\t\t\t\t(close)=\"onClose.emit()\"\n\t\t\t\t\t(clear)=\"onClear.emit()\"\n\t\t\t\t\t(search)=\"onSearch.emit($event)\"\n\t\t\t\t\t(add)=\"onAdd.emit($event)\"\n\t\t\t\t\t(remove)=\"onRemove.emit($event)\"\n\t\t\t\t\t(scroll)=\"scroll.emit($event)\"\n\t\t\t\t\t(scrollToEnd)=\"scrollToEnd.emit($event)\"\n\t\t\t\t>\n\t\t\t\t\t@if (_optionTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\" let-searchTerm=\"searchTerm\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ item, item$, index, 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 (_optgroupTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-optgroup-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\" let-searchTerm=\"searchTerm\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ item, item$, index, 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 (_labelTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\" let-label=\"label\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ item, clear, label }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_multiLabelTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ items, clear }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_headerTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-header-tmp let-searchTerm=\"searchTerm\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ searchTerm }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_footerTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-footer-tmp let-searchTerm=\"searchTerm\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ searchTerm }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (_notFoundTpl(); as tpl) {\n\t\t\t\t\t\t\t<ng-template ng-notfound-tmp let-searchTerm=\"searchTerm\">\n\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ searchTerm }\" />\n\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<ng-content></ng-content>\n\t\t\t\t</ng-select>\n\t\t\t}\n\t\t\t@case (_selectFormats.Buttons) {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-select__buttons\"\n\t\t\t\t\t[class.hub-select__buttons--vertical]=\"vertical()\"\n\t\t\t\t\trole=\"group\"\n\t\t\t\t\t[attr.aria-label]=\"label() || null\"\n\t\t\t\t>\n\t\t\t\t\t@for (item of items(); track $index) {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-select__button\"\n\t\t\t\t\t\t\t[class.hub-select__button--selected]=\"isSelected(item)\"\n\t\t\t\t\t\t\t[attr.aria-pressed]=\"isSelected(item)\"\n\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t\t\t(click)=\"toggleItem(item)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ itemLabel(item) }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t@default {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-select__options\"\n\t\t\t\t\t[class.hub-select__options--vertical]=\"vertical()\"\n\t\t\t\t\t[attr.role]=\"format() === _selectFormats.Radio ? 'radiogroup' : 'group'\"\n\t\t\t\t\t[attr.aria-label]=\"label() || null\"\n\t\t\t\t>\n\t\t\t\t\t@for (item of items(); track $index) {\n\t\t\t\t\t\t<label class=\"hub-select__option\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclass=\"hub-select__option-input\"\n\t\t\t\t\t\t\t\t[type]=\"format() === _selectFormats.Radio ? 'radio' : 'checkbox'\"\n\t\t\t\t\t\t\t\t[name]=\"id\"\n\t\t\t\t\t\t\t\t[checked]=\"isSelected(item)\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t\t\t\t\t\t(change)=\"toggleItem(item)\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span class=\"hub-select__option-label\">{{ itemLabel(item) }}</span>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t}\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></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 * Parses an ISO `YYYY-MM-DD` string (or passes a `Date`) into a local `Date`, or `null`.\n *\n * @param value - ISO string, `Date`, or nullish.\n * @returns A `Date` at local midnight, or `null` when not parseable.\n */\nexport function parseDate(value: string | Date | null | undefined): Date | null {\n\tif (value == null || value === '') {\n\t\treturn null;\n\t}\n\n\tif (value instanceof Date) {\n\t\treturn isNaN(value.getTime()) ? null : new Date(value.getFullYear(), value.getMonth(), value.getDate());\n\t}\n\n\tconst match = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(value);\n\n\tif (match) {\n\t\treturn new Date(+match[1], +match[2] - 1, +match[3]);\n\t}\n\n\tconst parsed = new Date(value);\n\n\treturn isNaN(parsed.getTime()) ? null : new Date(parsed.getFullYear(), parsed.getMonth(), parsed.getDate());\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 (\n\t\t!!a &&\n\t\t!!b &&\n\t\ta.getFullYear() === b.getFullYear() &&\n\t\ta.getMonth() === b.getMonth() &&\n\t\ta.getDate() === b.getDate()\n\t);\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 a date is selectable given the optional bounds and a disabled predicate.\n *\n * @param date - The candidate date.\n * @param min - Earliest allowed date, or `null`.\n * @param max - Latest allowed date, or `null`.\n * @param disabledFn - Predicate returning `true` for disabled dates, or `null`.\n * @returns `true` when the date cannot be selected.\n */\nexport function isDateDisabled(date: Date, min: Date | null, max: Date | null, disabledFn: ((d: Date) => boolean) | null): boolean {\n\tif (min && isBeforeDay(date, min)) {\n\t\treturn true;\n\t}\n\n\tif (max && isAfterDay(date, max)) {\n\t\treturn true;\n\t}\n\n\treturn disabledFn ? disabledFn(date) : false;\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","import { OverlayModule } from '@angular/cdk/overlay';\nimport { KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tinject,\n\tinput,\n\tLOCALE_ID,\n\tnumberAttribute,\n\toutput,\n\tsignal,\n\tViewEncapsulation\n} from '@angular/core';\nimport { FormTextType, FormTextTypes, HubLabelType, HubLabelTypes } from '../../interfaces/common.interface';\nimport {\n\tHubDatepickerLabels,\n\tHubDatepickerMode,\n\tHubDateRange,\n\tHubDateValue\n} from '../../interfaces/datepicker.interface';\nimport { HUB_FORMS_CONFIG } from '../../services/forms-config';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport {\n\taddMonths,\n\tbuildCalendarGrid,\n\tcompareDay,\n\tformatISO,\n\tisDateDisabled,\n\tisInRange,\n\tisSameDay,\n\tparseDate,\n\tweekdayLabels\n} from './date-utils';\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\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 * - `min` / `max` bounds and a `disabledDates` predicate.\n * - Keyboard navigation (arrows, Home/End, PageUp/Down, Enter, Escape).\n * - `Today` and `Clear` shortcuts.\n * - Full i18n: locale-driven month/weekday names plus overridable `labels`, `displayFormat`,\n * `weekdayFormat`, `firstDayOfWeek` and `rangeSeparator` — per instance or globally via\n * {@link provideHubForms}.\n *\n * The value is an ISO `YYYY-MM-DD` string (`single`) or a `{ start, end }` range (`range`).\n *\n * @example\n * ```html\n * <hub-datepicker formControlName=\"stay\" mode=\"range\" label=\"Stay\" [min]=\"today\" />\n * ```\n */\n@Component({\n\tselector: 'hub-datepicker',\n\timports: [NgTemplateOutlet, KeyValuePipe, OverlayModule],\n\ttemplateUrl: './datepicker.component.html',\n\tstyleUrl: './datepicker.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-datepicker-host]': 'true'\n\t}\n})\nexport class HubDatepickerComponent extends HubFieldControl {\n\treadonly #localeId = inject(LOCALE_ID);\n\treadonly #config = inject(HUB_FORMS_CONFIG).datepicker;\n\n\tprotected readonly _labelTypes = HubLabelTypes;\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _value = signal<HubDateValue>(null);\n\n\t/** Month currently shown in the calendar 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/** 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/** 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, { transform: (v) => (v == null ? undefined : numberAttribute(v)) });\n\n\t/** Weekday header width. Falls back to the global config. */\n\treadonly weekdayFormat = input<'short' | 'narrow' | 'long' | undefined>(undefined);\n\n\t/** `Intl` options to format the displayed value. Falls back to the global config. */\n\treadonly displayFormat = input<Intl.DateTimeFormatOptions | 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 date (ISO string or `Date`). */\n\treadonly min = input<string | Date | null>(null);\n\n\t/** Latest selectable date (ISO string or `Date`). */\n\treadonly max = input<string | Date | 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/** Whether selecting a date closes the calendar (`single` mode only). */\n\treadonly closeOnSelect = input(true, { transform: booleanAttribute });\n\n\t/** Per-instance label overrides (merged over the global config). */\n\treadonly labels = input<Partial<HubDatepickerLabels>>({});\n\n\t/** Whether the picker is read-only. */\n\treadonly readonly = input(false, { transform: booleanAttribute });\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t// ── Outputs ─────────────────────────────────────────────────────────────────\n\n\t/** Emits whenever the value changes. */\n\treadonly valueChange = output<HubDateValue>();\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 _rangeSeparator = computed(() => this.rangeSeparator() ?? this.#config.rangeSeparator);\n\n\tprotected readonly _minDate = computed(() => parseDate(this.min()));\n\tprotected readonly _maxDate = computed(() => parseDate(this.max()));\n\n\t// ── Derived selection ─────────────────────────────────────────────────────────\n\n\tprotected readonly rangeStart = computed<Date | null>(() => {\n\t\tconst v = this._value();\n\t\treturn this.mode() === 'range' ? parseDate((v as HubDateRange | null)?.start ?? null) : parseDate(v as string | null);\n\t});\n\n\tprotected readonly rangeEnd = computed<Date | null>(() => {\n\t\tconst v = this._value();\n\t\treturn this.mode() === 'range' ? parseDate((v as HubDateRange | null)?.end ?? null) : null;\n\t});\n\n\t/** Locale-formatted display string for the input. */\n\tprotected readonly displayValue = computed<string>(() => {\n\t\tconst fmt = (d: Date | null) => (d ? new Intl.DateTimeFormat(this.locale(), this._displayFormat()).format(d) : '');\n\t\tconst start = this.rangeStart();\n\n\t\tif (this.mode() !== 'range') {\n\t\t\treturn fmt(start);\n\t\t}\n\n\t\tconst end = this.rangeEnd();\n\n\t\tif (!start && !end) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn `${fmt(start)}${this._rangeSeparator()}${fmt(end)}`;\n\t});\n\n\tprotected readonly weekdays = computed<string[]>(() =>\n\t\tweekdayLabels(this.locale(), this._firstDayOfWeek(), this._weekdayFormat())\n\t);\n\n\tprotected readonly monthYearLabel = computed<string>(() =>\n\t\tnew Intl.DateTimeFormat(this.locale(), { month: 'long', year: 'numeric' }).format(this._viewDate())\n\t);\n\n\t/** Enriched 6×7 grid for the displayed month. */\n\tprotected readonly grid = computed<DatepickerCell[]>(() => {\n\t\tconst start = this.rangeStart();\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\n\t\treturn buildCalendarGrid(this._viewDate(), this._firstDayOfWeek()).map((c) => ({\n\t\t\t...c,\n\t\t\tdisabled: isDateDisabled(c.date, min, max, disabledFn),\n\t\t\tselected: this.mode() !== 'range' && isSameDay(c.date, start),\n\t\t\trangeStart: this.mode() === 'range' && isSameDay(c.date, start),\n\t\t\trangeEnd: this.mode() === 'range' && isSameDay(c.date, end),\n\t\t\tinRange: this.mode() === 'range' && isInRange(c.date, start, end),\n\t\t\tfocused: isSameDay(c.date, focused)\n\t\t}));\n\t});\n\n\t// ── CVA ───────────────────────────────────────────────────────────────────────\n\n\twriteValue(value: HubDateValue | Date): void {\n\t\tif (this.mode() === 'range') {\n\t\t\tconst range = (value ?? {}) as HubDateRange;\n\t\t\tconst start = parseDate(range?.start ?? null);\n\t\t\tconst end = parseDate(range?.end ?? null);\n\t\t\tthis._value.set(start || end ? { start: start ? formatISO(start) : null, end: end ? formatISO(end) : null } : null);\n\t\t\tthis._viewDate.set(start ?? new Date());\n\t\t} else {\n\t\t\tconst date = parseDate(value as string | Date | null);\n\t\t\tthis._value.set(date ? formatISO(date) : null);\n\t\t\tthis._viewDate.set(date ?? new Date());\n\t\t}\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\tconst anchor = this.rangeStart() ?? new Date();\n\t\tthis._viewDate.set(anchor);\n\t\tthis._focusedDate.set(anchor);\n\t\tthis._open.set(true);\n\t\tthis.opened.emit();\n\t}\n\n\t/** Closes the calendar and marks the control as touched. */\n\tprotected close(): void {\n\t\tif (!this._open()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._open.set(false);\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\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\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._value.set(null);\n\t\tthis.onChange?.(null);\n\t\tthis.valueChange.emit(null);\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\n\t\tif (this.mode() !== 'range') {\n\t\t\tconst iso = formatISO(cell.date);\n\t\t\tthis.#emit(iso);\n\n\t\t\tif (this.closeOnSelect()) {\n\t\t\t\tthis.close();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst start = this.rangeStart();\n\t\tconst end = this.rangeEnd();\n\n\t\tif (!start || end) {\n\t\t\t// Begin a new range.\n\t\t\tthis.#emit({ start: formatISO(cell.date), end: null });\n\t\t} else {\n\t\t\t// Complete the range, ordering the endpoints.\n\t\t\tconst [a, b] = compareDay(cell.date, start) < 0 ? [cell.date, start] : [start, cell.date];\n\t\t\tthis.#emit({ start: formatISO(a), end: formatISO(b) });\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\t/**\n\t * Keyboard navigation within the 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\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#addDays(date: Date, days: number): Date {\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);\n\t}\n\n\t#emit(value: HubDateValue): void {\n\t\tthis._value.set(value);\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\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--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body hub-datepicker__trigger\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\n\t\t<input\n\t\t\tclass=\"hub-field__control hub-datepicker__input\"\n\t\t\t[class.hub-field__control--invalid]=\"isInvalid\"\n\t\t\t[class.hub-field__control--valid]=\"showsValid\"\n\t\t\t[class.hub-datepicker__input--clearable]=\"clearable() && displayValue()\"\n\t\t\t[id]=\"id\"\n\t\t\ttype=\"text\"\n\t\t\treadonly\n\t\t\t[value]=\"displayValue()\"\n\t\t\t[placeholder]=\"placeholder()\"\n\t\t\t[disabled]=\"disabled()\"\n\t\t\t[required]=\"!!required()\"\n\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t[attr.aria-expanded]=\"_open()\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\t(click)=\"toggleCalendar()\"\n\t\t\t(blur)=\"handleBlur($event)\"\n\t\t/>\n\t\t@if (clearable() && displayValue() && !disabled() && !readonly()) {\n\t\t\t<button type=\"button\" class=\"hub-datepicker__clear\" [attr.aria-label]=\"_labels().clear\" (click)=\"clear()\">×</button>\n\t\t}\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"hub-datepicker__icon\"\n\t\t\ttabindex=\"-1\"\n\t\t\t[attr.aria-label]=\"_labels().openCalendar\"\n\t\t\t[disabled]=\"disabled() || readonly()\"\n\t\t\t(click)=\"toggleCalendar()\"\n\t\t></button>\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n</div>\n\n<ng-template\n\tcdkConnectedOverlay\n\t[cdkConnectedOverlayOrigin]=\"trigger\"\n\t[cdkConnectedOverlayOpen]=\"_open()\"\n\t[cdkConnectedOverlayHasBackdrop]=\"true\"\n\tcdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n\t[cdkConnectedOverlayOffsetY]=\"4\"\n\t(backdropClick)=\"close()\"\n\t(detach)=\"close()\"\n>\n\t<div class=\"hub-datepicker__panel\" role=\"dialog\" [attr.aria-label]=\"monthYearLabel()\">\n\t\t<header class=\"hub-datepicker__header\">\n\t\t\t<div class=\"hub-datepicker__nav-group\">\n\t\t\t\t<button type=\"button\" class=\"hub-datepicker__nav\" [attr.aria-label]=\"_labels().previousYear\" (click)=\"shiftMonth(-12)\">«</button>\n\t\t\t\t<button type=\"button\" class=\"hub-datepicker__nav\" [attr.aria-label]=\"_labels().previousMonth\" (click)=\"shiftMonth(-1)\">‹</button>\n\t\t\t</div>\n\t\t\t<span class=\"hub-datepicker__title\" aria-live=\"polite\">{{ monthYearLabel() }}</span>\n\t\t\t<div class=\"hub-datepicker__nav-group\">\n\t\t\t\t<button type=\"button\" class=\"hub-datepicker__nav\" [attr.aria-label]=\"_labels().nextMonth\" (click)=\"shiftMonth(1)\">›</button>\n\t\t\t\t<button type=\"button\" class=\"hub-datepicker__nav\" [attr.aria-label]=\"_labels().nextYear\" (click)=\"shiftMonth(12)\">»</button>\n\t\t\t</div>\n\t\t</header>\n\n\t\t<div class=\"hub-datepicker__weekdays\" aria-hidden=\"true\">\n\t\t\t@for (wd of weekdays(); track $index) {\n\t\t\t\t<span class=\"hub-datepicker__weekday\">{{ wd }}</span>\n\t\t\t}\n\t\t</div>\n\n\t\t<div class=\"hub-datepicker__grid\" role=\"grid\" (keydown)=\"onGridKeydown($event)\">\n\t\t\t@for (cell of grid(); 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__cell\"\n\t\t\t\t\t[class.hub-datepicker__cell--outside]=\"!cell.currentMonth\"\n\t\t\t\t\t[class.hub-datepicker__cell--today]=\"cell.today\"\n\t\t\t\t\t[class.hub-datepicker__cell--selected]=\"cell.selected || cell.rangeStart || cell.rangeEnd\"\n\t\t\t\t\t[class.hub-datepicker__cell--range-start]=\"cell.rangeStart\"\n\t\t\t\t\t[class.hub-datepicker__cell--range-end]=\"cell.rangeEnd\"\n\t\t\t\t\t[class.hub-datepicker__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)=\"selectDay(cell)\"\n\t\t\t\t>\n\t\t\t\t\t{{ cell.day }}\n\t\t\t\t</button>\n\t\t\t}\n\t\t</div>\n\n\t\t@if (showToday() || clearable()) {\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</footer>\n\t\t}\n\t</div>\n</ng-template>\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport { HubFileItem } from '../interfaces/file-input.interface';\n\n/** Context handed to a projected `hubFileIcon` template. */\nexport interface HubFileIconContext {\n\t/** The item whose icon is being rendered. */\n\t$implicit: HubFileItem;\n}\n\n/**\n * Overrides the glyph `<hub-file-input>` renders next to a non-image file.\n *\n * The library never depends on `ng-hub-ui-icons`: it draws a neutral document glyph from the\n * `--hub-file-input-file-icon` CSS token and lets you project anything richer — a `<hub-icon>` from\n * any pack, an inline `<svg>`, an emoji — through this template. The item is the implicit context,\n * so the glyph can vary with `file.type`.\n *\n * @example\n * ```html\n * <hub-file-input formControlName=\"attachments\" [multiple]=\"true\">\n * <ng-template hubFileIcon let-item>\n * <hub-icon [name]=\"item.file.type === 'application/pdf' ? 'fa:solid:file-pdf' : 'fa:solid:file'\" />\n * </ng-template>\n * </hub-file-input>\n * ```\n */\n@Directive({\n\tselector: '[hubFileIcon]'\n})\nexport class HubFileIconDirective {\n\t/** Template reference for the icon. */\n\treadonly template = inject<TemplateRef<HubFileIconContext>>(TemplateRef);\n\n\t/**\n\t * Narrows the implicit context for the template type-checker.\n\t *\n\t * @param _directive - The directive instance.\n\t * @param _context - The candidate context.\n\t * @returns Always `true`; exists only to type `let-item`.\n\t */\n\tstatic ngTemplateContextGuard(_directive: HubFileIconDirective, _context: unknown): _context is HubFileIconContext {\n\t\treturn true;\n\t}\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Projects arbitrary markup inside a `<hub-file-input>` dropzone, between the glyph and the\n * invitation.\n *\n * The slot exists for a notice the consumer computes per instance — \"2 documents still missing\",\n * a badge, a warning — which neither `dropText` (the invitation) nor `hint` (the constraints\n * summary, rendered at the bottom) can express, and which is too instance-specific to live in the\n * global labels.\n *\n * Renders nothing when the template is absent, so the dropzone is unchanged for every consumer\n * that does not project one.\n *\n * @example\n * ```html\n * <hub-file-input [multiple]=\"true\">\n * <ng-template hubFileDropzoneNotice>\n * <strong class=\"missing\">2 documents still missing</strong>\n * </ng-template>\n * </hub-file-input>\n * ```\n */\n@Directive({\n\tselector: '[hubFileDropzoneNotice]'\n})\nexport class HubFileDropzoneNoticeDirective {\n\t/** Template reference for the notice. */\n\treadonly template = inject<TemplateRef<void>>(TemplateRef);\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport { HubFileItem } from '../interfaces/file-input.interface';\n\n/** Context handed to a projected `hubFilePreview` template. */\nexport interface HubFilePreviewContext {\n\t/** The item being rendered. */\n\t$implicit: HubFileItem;\n\t/** Removes this item from the selection (and cancels its upload, if any). */\n\tremove: () => void;\n\t/** Re-runs the upload of this item. No-op when no uploader is registered. */\n\tretry: () => void;\n\t/** Aborts the in-flight upload of this item. No-op when it is not uploading. */\n\tcancel: () => void;\n}\n\n/**\n * Replaces the entire rendering of a selected file in `<hub-file-input>`.\n *\n * Where `hubFileIcon` swaps a glyph, this takes over the whole row (or grid tile): thumbnail, name,\n * size, progress bar and buttons. The template receives the item plus the actions it needs, so a\n * custom preview keeps working removal, retry and cancel without reaching into the component.\n *\n * @example\n * ```html\n * <hub-file-input formControlName=\"attachments\" [multiple]=\"true\">\n * <ng-template hubFilePreview let-item let-remove=\"remove\">\n * <article class=\"attachment\">\n * <img *ngIf=\"item.previewUrl\" [src]=\"item.previewUrl\" alt=\"\" />\n * <span>{{ item.file.name }}</span>\n * <button type=\"button\" (click)=\"remove()\">Remove</button>\n * </article>\n * </ng-template>\n * </hub-file-input>\n * ```\n */\n@Directive({\n\tselector: '[hubFilePreview]'\n})\nexport class HubFilePreviewDirective {\n\t/** Template reference for the item. */\n\treadonly template = inject<TemplateRef<HubFilePreviewContext>>(TemplateRef);\n\n\t/**\n\t * Narrows the context for the template type-checker.\n\t *\n\t * @param _directive - The directive instance.\n\t * @param _context - The candidate context.\n\t * @returns Always `true`; exists only to type `let-item` and the action bindings.\n\t */\n\tstatic ngTemplateContextGuard(_directive: HubFilePreviewDirective, _context: unknown): _context is HubFilePreviewContext {\n\t\treturn true;\n\t}\n}\n","/**\n * Tests a file against an `accept` specification.\n *\n * The native `accept` attribute only filters the operating-system file dialog: files arriving by\n * drag-and-drop or paste bypass it entirely. This function applies the same rules by hand, so a\n * dropped file is held to the constraint the consumer declared.\n *\n * Supported tokens, comma-separated, matched case-insensitively:\n * - an extension — `.pdf`\n * - a wildcard MIME type — `image/*`\n * - an exact MIME type — `application/pdf`\n * - the catch-alls `*` and `*/*`\n *\n * Note that a MIME token can never match a file the browser could not type (`file.type === ''`,\n * common for unusual extensions); use an extension token for those.\n *\n * @param file - The file to test.\n * @param accept - The `accept` specification. Empty or `*` accepts everything.\n * @returns `true` when the file satisfies at least one token.\n */\nexport function matchesAccept(file: File, accept: string): boolean {\n\tconst specification = (accept ?? '').trim();\n\n\tif (!specification || specification === '*' || specification === '*/*') {\n\t\treturn true;\n\t}\n\n\tconst name = file.name.toLowerCase();\n\tconst type = (file.type ?? '').toLowerCase();\n\n\treturn specification\n\t\t.split(',')\n\t\t.map((token) => token.trim().toLowerCase())\n\t\t.filter((token) => token.length > 0)\n\t\t.some((token) => {\n\t\t\tif (token === '*' || token === '*/*') {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// An extension, e.g. `.pdf`\n\t\t\tif (token.startsWith('.')) {\n\t\t\t\treturn name.endsWith(token);\n\t\t\t}\n\n\t\t\t// A wildcard MIME type, e.g. `image/*` — the file's type must start with `image/`\n\t\t\tif (token.endsWith('/*')) {\n\t\t\t\treturn type.length > 0 && type.startsWith(token.slice(0, -1));\n\t\t\t}\n\n\t\t\t// An exact MIME type\n\t\t\treturn type === token;\n\t\t});\n}\n","/**\n * Builds the identity key used to detect duplicate selections.\n *\n * Two `File` objects are never referentially equal across separate drops, so identity is derived\n * from the tuple the browser exposes: name, byte size and last-modified timestamp. Collisions are\n * possible in theory (same name, size and mtime) but describe the same file in every practical case.\n *\n * @param file - The file to key.\n * @returns A stable string key for the file.\n */\nexport function fileKey(file: File): string {\n\treturn `${file.name}:${file.size}:${file.lastModified}`;\n}\n","/** The value a `<hub-file-input>` writes to its form control. */\nexport type HubFileValue = File | File[] | null;\n\n/**\n * Normalizes any file-shaped control value to a plain array.\n *\n * Accepts the shapes a control can realistically hold: a single `File` (single mode), an array of\n * files (multiple mode), a native `FileList` (a control fed straight from a DOM event or from the\n * deprecated `<hub-input type=\"file\">`), or `null`/`undefined`.\n *\n * @param value - The raw control value.\n * @returns The files it contains, in order; an empty array when it holds none.\n */\nexport function toFileArray(value: unknown): File[] {\n\tif (value == null) {\n\t\treturn [];\n\t}\n\n\tif (value instanceof File) {\n\t\treturn [value];\n\t}\n\n\tif (Array.isArray(value)) {\n\t\treturn value.filter((entry): entry is File => entry instanceof File);\n\t}\n\n\tif (typeof FileList !== 'undefined' && value instanceof FileList) {\n\t\treturn Array.from(value);\n\t}\n\n\treturn [];\n}\n","import { isPlatformBrowser, KeyValuePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tnumberAttribute,\n\toutput,\n\tPLATFORM_ID,\n\tsignal,\n\tviewChild,\n\tViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { HubFileIconDirective } from '../../directives/file-icon.directive';\nimport { HubFileDropzoneNoticeDirective } from '../../directives/file-dropzone-notice.directive';\nimport { HubFilePreviewContext, HubFilePreviewDirective } from '../../directives/file-preview.directive';\nimport { FormTextType, FormTextTypes } from '../../interfaces/common.interface';\nimport {\n\tHubFileItem,\n\tHubFilePreview,\n\tHubFileRejection,\n\tHubFileRejectionReason,\n\tHubFileStatus\n} from '../../interfaces/file-input.interface';\nimport { HUB_FILE_UPLOADER } from '../../services/file-uploader';\nimport { HUB_FORMS_CONFIG } from '../../services/forms-config';\nimport { HubFieldControl } from '../../shared/hub-field-control';\nimport { matchesAccept } from '../../utils/file-accept';\nimport { fileKey } from '../../utils/file-key';\nimport { HubFileValue, toFileArray } from '../../utils/file-value';\nimport { uuid } from '../../utils/utils';\n\n/**\n * Accessible file field with drag-and-drop, clipboard paste, per-file constraints, previews and\n * optional upload progress.\n *\n * A full `ng-hub-ui-forms` field: it extends {@link HubFieldControl}, so it binds with\n * `formControlName` / `ngModel` and shares the label, helper text and validation chrome with every\n * other control.\n *\n * The **form value stays native** — a `File` in single mode, a `File[]` in multiple mode, `null`\n * when empty — so it can be handed straight to a `FormData`. The rich per-file state (preview URL,\n * upload status, progress, error) lives in the {@link files} signal instead of contaminating the\n * control.\n *\n * Constraints declared as inputs (`accept`, `maxSize`, `minSize`, `maxTotalSize`, `maxFiles`) act as\n * a **filter**: an offending file never reaches the value and surfaces through {@link rejected}.\n * They are enforced by hand rather than delegated to the native `accept` attribute, which only\n * filters the operating-system dialog and is bypassed entirely by a drop or a paste. To make the\n * *control itself* invalid — the right choice when a value can also be patched in programmatically —\n * add the matching validators (`hubAcceptedFiles`, `hubMaxFileSize`, …).\n *\n * Uploading is opt-in and transport-agnostic: register a {@link HubFileUploader} with\n * `provideHubFileUploader()` and the component drives progress, cancel and retry. With no uploader\n * registered it is a pure picker.\n *\n * @example\n * ```html\n * <hub-file-input\n * formControlName=\"attachments\"\n * label=\"Attachments\"\n * [multiple]=\"true\"\n * accept=\"image/*,.pdf\"\n * [maxSize]=\"5 * 1024 * 1024\"\n * [maxFiles]=\"3\"\n * preview=\"grid\"\n * (rejected)=\"notify($event)\"\n * />\n * ```\n */\n@Component({\n\tselector: 'hub-file-input',\n\timports: [NgTemplateOutlet, KeyValuePipe],\n\ttemplateUrl: './file-input.component.html',\n\tstyleUrl: './file-input.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\t'[class]': 'classlist()',\n\t\t'[class.hub-file-input-host]': 'true',\n\t\t'(paste)': 'handlePaste($event)'\n\t}\n})\nexport class HubFileInputComponent extends HubFieldControl {\n\treadonly #config = inject(HUB_FORMS_CONFIG);\n\treadonly #uploader = inject(HUB_FILE_UPLOADER, { optional: true });\n\treadonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\treadonly #subscriptions = new Map<string, Subscription>();\n\n\tprotected readonly _formTextTypes = FormTextTypes;\n\tprotected readonly _items = signal<HubFileItem[]>([]);\n\n\t/** Depth counter for `dragenter`/`dragleave`: children of the dropzone fire their own events. */\n\t#dragDepth = 0;\n\n\t/** Releases every object URL and aborts every in-flight upload when the field goes away. */\n\tprivate readonly _cleanup = inject(DestroyRef).onDestroy(() => {\n\t\tthis.#subscriptions.forEach((subscription) => subscription.unsubscribe());\n\t\tthis.#subscriptions.clear();\n\t\tthis._items().forEach((item) => this.#revokePreview(item));\n\t});\n\n\t/** Label text. */\n\treadonly label = input<string>('');\n\n\t/** Whether more than one file can be held. Switches the control value to `File[]`. */\n\treadonly multiple = input(false, { transform: booleanAttribute });\n\n\t/** Accepted file types, e.g. `image/*,.pdf`. Enforced on drop and paste, not just in the dialog. */\n\treadonly accept = input<string>('*');\n\n\t/** Maximum size per file, in bytes. */\n\treadonly maxSize = input<number | null>(null);\n\n\t/** Minimum size per file, in bytes. Rejects the 0-byte files a failed export produces. */\n\treadonly minSize = input<number | null>(null);\n\n\t/** Maximum combined size of every held file, in bytes. */\n\treadonly maxTotalSize = input<number | null>(null);\n\n\t/** Maximum number of files. Only meaningful with `multiple`. */\n\treadonly maxFiles = input<number | null>(null);\n\n\t/** Whether files can be dropped onto the field. */\n\treadonly dragDrop = input(true, { transform: booleanAttribute });\n\n\t/** Whether files can be pasted into the focused field (e.g. a screenshot). */\n\treadonly paste = input(true, { transform: booleanAttribute });\n\n\t/** How the held files are rendered: not at all, as a list, or as a thumbnail grid. */\n\treadonly preview = input<HubFilePreview>('list');\n\n\t/** Whether the same file can be selected twice (keyed on name, size and last-modified date). */\n\treadonly allowDuplicates = input(false, { transform: booleanAttribute });\n\n\t/** Opens the device camera instead of the file browser, on the platforms that support it. */\n\treadonly capture = input<'user' | 'environment' | null>(null);\n\n\t/** Whether a newly accepted file starts uploading immediately. Ignored with no uploader registered. */\n\treadonly autoUpload = input(true, { transform: booleanAttribute });\n\n\t/** Overrides the \"browse\" button text coming from the global labels. */\n\treadonly buttonLabel = input<string | null>(null);\n\n\t/** Overrides the dropzone invitation coming from the global labels. */\n\treadonly dropText = input<string | null>(null);\n\n\t/** Overrides the second invitation line coming from the global labels. Pass `''` to hide it. */\n\treadonly dropSubtext = input<string | null>(null);\n\n\t/** Overrides the auto-generated hint that summarizes the active constraints. Pass `''` to hide it. */\n\treadonly hint = input<string | null>(null);\n\n\t/** Helper text shown below the control. */\n\treadonly formText = input<string>('');\n\n\t/** Helper text placement. Only `bottom` is supported. */\n\treadonly formTextType = input<FormTextType>(FormTextTypes.Bottom);\n\n\t/** Extra CSS classes applied to the host element. */\n\treadonly classlist = input<string>('');\n\n\t/** Emits the native value whenever the selection changes. */\n\treadonly valueChange = output<HubFileValue>();\n\n\t/** Emits the files refused by the declared constraints, with the reason for each. */\n\treadonly rejected = output<HubFileRejection[]>();\n\n\t/** Emits the file removed from the selection. */\n\treadonly fileRemoved = output<File>();\n\n\t/** Emits the full item list whenever an upload changes status or progress. */\n\treadonly uploadStateChange = output<readonly HubFileItem[]>();\n\n\t/** The hidden native file input, kept focusable so the dropzone label activates it. */\n\tprotected readonly nativeInput = viewChild<ElementRef<HTMLInputElement>>('nativeInput');\n\n\t/** Projected per-file icon template. */\n\tprotected readonly iconTpt = contentChild(HubFileIconDirective);\n\n\t/** Projected per-file preview template, replacing the built-in item rendering. */\n\tprotected readonly previewTpt = contentChild(HubFilePreviewDirective);\n\n\t/** Projected notice rendered between the glyph and the invitation. */\n\tprotected readonly noticeTpt = contentChild(HubFileDropzoneNoticeDirective);\n\n\t/** Whether a drag is currently hovering the dropzone. */\n\tprotected readonly isDragging = signal(false);\n\n\t/** Latest message for the screen-reader live region. */\n\tprotected readonly announcement = signal('');\n\n\t/** The rich, per-file state of the current selection. */\n\treadonly files = this._items.asReadonly();\n\n\t/** Whether at least one file is currently uploading. Gate a submit button on this. */\n\treadonly uploading = computed<boolean>(() => this._items().some((item) => item.status === 'uploading'));\n\n\t/** Whether an uploader is registered, which is what enables progress, cancel and retry. */\n\tprotected readonly hasUploader = !!this.#uploader;\n\n\t/** The resolved, localizable labels. */\n\tprotected readonly labels = computed(() => this.#config.fileInput);\n\n\t/** Text of the browse action. */\n\tprotected readonly browseLabel = computed<string>(() => this.buttonLabel() ?? this.labels().browse);\n\n\t/** The dropzone invitation. */\n\tprotected readonly dropTextLabel = computed<string>(() => this.dropText() ?? this.labels().dropHere);\n\n\t/** The second invitation line. Empty renders nothing. */\n\tprotected readonly dropSubtextLabel = computed<string>(() => this.dropSubtext() ?? this.labels().dropSubtext);\n\n\t/** The hint summarizing the active constraints. */\n\tprotected readonly constraintsHint = computed<string>(() => {\n\t\tconst override = this.hint();\n\n\t\tif (override != null) {\n\t\t\treturn override;\n\t\t}\n\n\t\tconst accept = this.accept();\n\n\t\treturn this.labels().constraints({\n\t\t\taccept: !accept || accept === '*' || accept === '*/*' ? null : accept,\n\t\t\tmaxSize: this.maxSize(),\n\t\t\tmaxFiles: this.multiple() ? this.maxFiles() : null\n\t\t});\n\t});\n\n\t/** Whether the dropzone currently accepts a drop. */\n\tprotected readonly dropEnabled = computed<boolean>(() => this.dragDrop() && !this.disabled());\n\n\t/**\n\t * Derives the native validation errors from the held files rather than from the DOM.\n\t *\n\t * The hidden native input is emptied after every `change` so the same file can be picked twice,\n\t * and it never sees a dropped or pasted file at all. Its `validity` therefore reports\n\t * `valueMissing` even when files are held — reading it would mark a satisfied field as required.\n\t *\n\t * @param _target - Ignored; the file state is the source of truth.\n\t */\n\tprotected override updateNativeErrors(_target?: EventTarget | null): void {\n\t\tif (this._control) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._nativeErrors.set(this.required() && this._items().length === 0 ? { required: true } : null);\n\t}\n\n\t/**\n\t * Resolves a human-readable message for a failed upload.\n\t *\n\t * @param item - The item in the `error` state.\n\t * @returns The error message.\n\t */\n\tprotected errorText(item: HubFileItem): string {\n\t\tconst error = item.error as { message?: string } | null;\n\n\t\treturn error?.message ?? String(error ?? '');\n\t}\n\n\twriteValue(value: HubFileValue | FileList): void {\n\t\tthis._items().forEach((item) => this.#revokePreview(item));\n\t\tthis.#subscriptions.forEach((subscription) => subscription.unsubscribe());\n\t\tthis.#subscriptions.clear();\n\t\tthis._items.set(toFileArray(value).map((file) => this.#createItem(file)));\n\t}\n\n\t/** Opens the native file dialog. */\n\topen(): void {\n\t\tif (!this.disabled()) {\n\t\t\tthis.nativeInput()?.nativeElement.click();\n\t\t}\n\t}\n\n\t/**\n\t * Removes a file from the selection, aborting its upload and releasing its preview.\n\t *\n\t * @param id - The id of the item to remove.\n\t */\n\tremove(id: string): void {\n\t\tconst item = this._items().find((candidate) => candidate.id === id);\n\n\t\tif (!item || this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#abort(id);\n\t\tthis.#revokePreview(item);\n\t\tthis._items.update((items) => items.filter((candidate) => candidate.id !== id));\n\t\tthis.#emitValue();\n\t\tthis.fileRemoved.emit(item.file);\n\t\tthis.#announce(this.labels().filesSelected(this._items().length));\n\t}\n\n\t/** Removes every file, aborting any upload in flight. */\n\tclear(): void {\n\t\tif (this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#subscriptions.forEach((subscription) => subscription.unsubscribe());\n\t\tthis.#subscriptions.clear();\n\t\tthis._items().forEach((item) => this.#revokePreview(item));\n\t\tthis._items.set([]);\n\t\tthis.#emitValue();\n\t\tthis.#announce(this.labels().filesSelected(0));\n\t}\n\n\t/** Uploads every file that has not been uploaded yet. No-op without a registered uploader. */\n\tupload(): void {\n\t\tthis._items()\n\t\t\t.filter((item) => item.status === 'ready' || item.status === 'error')\n\t\t\t.forEach((item) => this.#startUpload(item.id));\n\t}\n\n\t/**\n\t * Aborts an in-flight upload, returning the file to the `ready` state.\n\t *\n\t * @param id - The id of the uploading item.\n\t */\n\tcancel(id: string): void {\n\t\tif (!this.#subscriptions.has(id)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#abort(id);\n\t\tthis.#patch(id, { status: 'ready', progress: null, error: null, response: null });\n\t}\n\n\t/**\n\t * Re-runs the upload of a file, typically after a failure.\n\t *\n\t * @param id - The id of the item to upload again.\n\t */\n\tretry(id: string): void {\n\t\tthis.#startUpload(id);\n\t}\n\n\t/**\n\t * Reads the files chosen through the native dialog.\n\t *\n\t * @param event - The `change` event of the hidden native input.\n\t */\n\tprotected handleNativeChange(event: Event): void {\n\t\tconst native = event.target as HTMLInputElement;\n\n\t\tthis.#addFiles(Array.from(native.files ?? []));\n\n\t\t// Without this, re-picking the very same file fires no second `change` event.\n\t\tnative.value = '';\n\t}\n\n\t/**\n\t * Accepts files dropped onto the dropzone.\n\t *\n\t * @param event - The drop event.\n\t */\n\tprotected handleDrop(event: DragEvent): void {\n\t\tif (!this.dropEnabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.#dragDepth = 0;\n\t\tthis.isDragging.set(false);\n\t\tthis.#addFiles(this.#extractFiles(event.dataTransfer));\n\t\tthis.handleBlur();\n\t}\n\n\t/**\n\t * Highlights the dropzone once a drag carrying files enters it.\n\t *\n\t * @param event - The dragenter event.\n\t */\n\tprotected handleDragEnter(event: DragEvent): void {\n\t\tif (!this.dropEnabled() || !this.#carriesFiles(event)) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.#dragDepth++;\n\t\tthis.isDragging.set(true);\n\t}\n\n\t/**\n\t * Keeps the drop target alive. A `dragover` that does not call `preventDefault` refuses the drop.\n\t *\n\t * @param event - The dragover event.\n\t */\n\tprotected handleDragOver(event: DragEvent): void {\n\t\tif (!this.dropEnabled() || !this.#carriesFiles(event)) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tif (event.dataTransfer) {\n\t\t\tevent.dataTransfer.dropEffect = 'copy';\n\t\t}\n\t}\n\n\t/**\n\t * Un-highlights the dropzone, but only once the drag has left it *and* all of its children.\n\t *\n\t * @param event - The dragleave event.\n\t */\n\tprotected handleDragLeave(event: DragEvent): void {\n\t\tif (!this.dropEnabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tthis.#dragDepth = Math.max(0, this.#dragDepth - 1);\n\n\t\tif (this.#dragDepth === 0) {\n\t\t\tthis.isDragging.set(false);\n\t\t}\n\t}\n\n\t/**\n\t * Accepts files pasted into the focused field, e.g. a screenshot from the clipboard.\n\t *\n\t * @param event - The paste event.\n\t */\n\tprotected handlePaste(event: ClipboardEvent): void {\n\t\tif (!this.paste() || this.disabled()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst files = this.#extractFiles(event.clipboardData);\n\n\t\tif (files.length > 0) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.#addFiles(files);\n\t\t}\n\t}\n\n\t/**\n\t * Builds the context handed to a projected `hubFilePreview` template.\n\t *\n\t * @param item - The item being rendered.\n\t * @returns The template context, complete with the actions the item needs.\n\t */\n\tprotected previewContext(item: HubFileItem): HubFilePreviewContext {\n\t\treturn {\n\t\t\t$implicit: item,\n\t\t\tremove: () => this.remove(item.id),\n\t\t\tretry: () => this.retry(item.id),\n\t\t\tcancel: () => this.cancel(item.id)\n\t\t};\n\t}\n\n\t/**\n\t * Validates and appends the incoming files, emitting the new value and any rejections.\n\t *\n\t * In single mode the incoming file replaces the current one, so the constraint checks run against\n\t * an empty baseline rather than against the file about to be discarded.\n\t *\n\t * @param incoming - The files to add.\n\t */\n\t#addFiles(incoming: File[]): void {\n\t\tif (this.disabled() || incoming.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst multiple = this.multiple();\n\t\tconst current = this._items();\n\t\tconst baseline = multiple ? current : [];\n\t\tconst accepted: HubFileItem[] = [];\n\t\tconst rejections: HubFileRejection[] = [];\n\t\tconst keys = new Set(baseline.map((item) => fileKey(item.file)));\n\n\t\tlet count = baseline.length;\n\t\tlet total = baseline.reduce((sum, item) => sum + item.file.size, 0);\n\n\t\tfor (const file of incoming) {\n\t\t\tconst rejection = this.#reject(file, count, total, keys);\n\n\t\t\tif (rejection) {\n\t\t\t\trejections.push(rejection);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tkeys.add(fileKey(file));\n\t\t\tcount++;\n\t\t\ttotal += file.size;\n\t\t\taccepted.push(this.#createItem(file));\n\t\t}\n\n\t\tif (accepted.length > 0) {\n\t\t\tif (!multiple) {\n\t\t\t\tcurrent.forEach((item) => this.#abort(item.id));\n\t\t\t\tcurrent.forEach((item) => this.#revokePreview(item));\n\t\t\t}\n\n\t\t\tthis._items.set([...baseline, ...accepted]);\n\t\t\tthis.#emitValue();\n\n\t\t\tif (this.#uploader && this.autoUpload()) {\n\t\t\t\taccepted.forEach((item) => this.#startUpload(item.id));\n\t\t\t}\n\t\t}\n\n\t\tif (rejections.length > 0) {\n\t\t\tthis.rejected.emit(rejections);\n\t\t}\n\n\t\tthis.#announce(this.#summarize(accepted.length, rejections));\n\t}\n\n\t/**\n\t * Applies the declared constraints to a single candidate file.\n\t *\n\t * @param file - The candidate.\n\t * @param count - How many files are already accepted.\n\t * @param total - The combined size of the already-accepted files.\n\t * @param keys - Identity keys of the already-accepted files, for duplicate detection.\n\t * @returns The rejection, or `null` when the file passes every constraint.\n\t */\n\t#reject(file: File, count: number, total: number, keys: Set<string>): HubFileRejection | null {\n\t\tconst build = (reason: HubFileRejectionReason, limit: string | number | null): HubFileRejection => ({\n\t\t\tfile,\n\t\t\treason,\n\t\t\tlimit\n\t\t});\n\n\t\tif (!this.allowDuplicates() && keys.has(fileKey(file))) {\n\t\t\treturn build('duplicate', null);\n\t\t}\n\n\t\tif (!matchesAccept(file, this.accept())) {\n\t\t\treturn build('accept', this.accept());\n\t\t}\n\n\t\tconst minSize = this.minSize();\n\n\t\tif (minSize != null && file.size < minSize) {\n\t\t\treturn build('minSize', minSize);\n\t\t}\n\n\t\tconst maxSize = this.maxSize();\n\n\t\tif (maxSize != null && file.size > maxSize) {\n\t\t\treturn build('maxSize', maxSize);\n\t\t}\n\n\t\tconst maxFiles = this.multiple() ? this.maxFiles() : 1;\n\n\t\tif (maxFiles != null && count + 1 > maxFiles) {\n\t\t\treturn build('maxFiles', maxFiles);\n\t\t}\n\n\t\tconst maxTotalSize = this.maxTotalSize();\n\n\t\tif (maxTotalSize != null && total + file.size > maxTotalSize) {\n\t\t\treturn build('maxTotalSize', maxTotalSize);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Wraps a file in an item, minting its preview URL when it is a previewable image.\n\t *\n\t * @param file - The accepted file.\n\t * @returns The new item, in the `ready` state.\n\t */\n\t#createItem(file: File): HubFileItem {\n\t\tconst previewable = this.#isBrowser && this.preview() !== 'none' && file.type.startsWith('image/');\n\n\t\treturn {\n\t\t\tid: uuid(),\n\t\t\tfile,\n\t\t\tpreviewUrl: previewable ? URL.createObjectURL(file) : null,\n\t\t\tstatus: 'ready',\n\t\t\tprogress: null,\n\t\t\terror: null,\n\t\t\tresponse: null\n\t\t};\n\t}\n\n\t/**\n\t * Releases the object URL of an item. Skipping this leaks the whole file for the page's lifetime.\n\t *\n\t * @param item - The item whose preview should be released.\n\t */\n\t#revokePreview(item: HubFileItem): void {\n\t\tif (item.previewUrl && this.#isBrowser) {\n\t\t\tURL.revokeObjectURL(item.previewUrl);\n\t\t}\n\t}\n\n\t/** Writes the native value to the form control and emits it. */\n\t#emitValue(): void {\n\t\tconst files = this._items().map((item) => item.file);\n\t\tconst value: HubFileValue = this.multiple() ? files : (files[0] ?? null);\n\n\t\tthis.onChange?.(value);\n\t\tthis.valueChange.emit(value);\n\t}\n\n\t/**\n\t * Subscribes to the registered uploader for one item, mapping its events onto the item's status.\n\t *\n\t * @param id - The id of the item to upload.\n\t */\n\t#startUpload(id: string): void {\n\t\tconst uploader = this.#uploader;\n\t\tconst item = this._items().find((candidate) => candidate.id === id);\n\n\t\tif (!uploader || !item) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#abort(id);\n\t\tthis.#patch(id, { status: 'uploading', progress: null, error: null, response: null });\n\n\t\tconst subscription = uploader.upload(item.file, { id }).subscribe({\n\t\t\tnext: (event) => {\n\t\t\t\tif (event.status === 'progress') {\n\t\t\t\t\t// A transport that cannot report a total leaves `progress` null, which the template\n\t\t\t\t\t// renders as an indeterminate bar rather than a bar frozen at 0%.\n\t\t\t\t\tconst progress = event.total ? Math.round((event.loaded / event.total) * 100) : null;\n\t\t\t\t\tthis.#patch(id, { status: 'uploading', progress });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (event.status === 'done') {\n\t\t\t\t\t// The body is what identifies the stored file server-side; without keeping it the\n\t\t\t\t\t// application has no way to reference what it just uploaded.\n\t\t\t\t\tthis.#patch(id, { status: 'done', progress: 100, error: null, response: event.response ?? null });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.#patch(id, { status: 'error', error: event.error });\n\t\t\t},\n\t\t\terror: (error: unknown) => this.#patch(id, { status: 'error', error }),\n\t\t\tcomplete: () => {\n\t\t\t\t// An uploader that completes without emitting `done` still finished successfully.\n\t\t\t\tconst current = this._items().find((candidate) => candidate.id === id);\n\n\t\t\t\tif (current?.status === 'uploading') {\n\t\t\t\t\tthis.#patch(id, { status: 'done', progress: 100, error: null });\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.#subscriptions.set(id, subscription);\n\t}\n\n\t/**\n\t * Unsubscribes from an item's upload, which aborts the underlying request.\n\t *\n\t * @param id - The id of the item.\n\t */\n\t#abort(id: string): void {\n\t\tthis.#subscriptions.get(id)?.unsubscribe();\n\t\tthis.#subscriptions.delete(id);\n\t}\n\n\t/**\n\t * Immutably updates one item and notifies listeners of the new upload state.\n\t *\n\t * @param id - The id of the item to update.\n\t * @param patch - The fields to overwrite.\n\t */\n\t#patch(\n\t\tid: string,\n\t\tpatch: Partial<Pick<HubFileItem, 'status' | 'progress' | 'error' | 'response'>> & { status: HubFileStatus }\n\t): void {\n\t\tlet changed = false;\n\n\t\tthis._items.update((items) =>\n\t\t\titems.map((item) => {\n\t\t\t\tif (item.id !== id) {\n\t\t\t\t\treturn item;\n\t\t\t\t}\n\n\t\t\t\tchanged = true;\n\t\t\t\treturn { ...item, ...patch };\n\t\t\t})\n\t\t);\n\n\t\tif (changed) {\n\t\t\tthis.uploadStateChange.emit(this._items());\n\t\t}\n\t}\n\n\t/**\n\t * Extracts the files carried by a drop or a paste.\n\t *\n\t * Reads `items` when present so non-file payloads (dragged text, HTML) are skipped, and falls\n\t * back to `files` otherwise.\n\t *\n\t * @param transfer - The `DataTransfer` of the event.\n\t * @returns The files it carries.\n\t */\n\t#extractFiles(transfer: DataTransfer | null): File[] {\n\t\tif (!transfer) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (transfer.items?.length) {\n\t\t\treturn Array.from(transfer.items)\n\t\t\t\t.filter((item) => item.kind === 'file')\n\t\t\t\t.map((item) => item.getAsFile())\n\t\t\t\t.filter((file): file is File => file !== null);\n\t\t}\n\n\t\treturn Array.from(transfer.files ?? []);\n\t}\n\n\t/**\n\t * Whether a drag event carries files, as opposed to text or a page element.\n\t *\n\t * @param event - The drag event.\n\t * @returns `true` when the payload includes files.\n\t */\n\t#carriesFiles(event: DragEvent): boolean {\n\t\treturn Array.from(event.dataTransfer?.types ?? []).includes('Files');\n\t}\n\n\t/**\n\t * Builds the live-region message describing the outcome of an add.\n\t *\n\t * @param acceptedCount - How many files were accepted.\n\t * @param rejections - The files that were refused.\n\t * @returns The message to announce.\n\t */\n\t#summarize(acceptedCount: number, rejections: HubFileRejection[]): string {\n\t\tconst labels = this.labels();\n\t\tconst parts: string[] = [];\n\n\t\tif (acceptedCount > 0) {\n\t\t\tparts.push(labels.filesSelected(this._items().length));\n\t\t}\n\n\t\trejections.forEach((rejection) => parts.push(labels.rejection(rejection)));\n\n\t\treturn parts.join(' ');\n\t}\n\n\t/**\n\t * Publishes a message to the live region, forcing a re-announcement of identical text.\n\t *\n\t * @param message - The message to announce.\n\t */\n\t#announce(message: string): void {\n\t\tif (!message) {\n\t\t\treturn;\n\t\t}\n\n\t\t// A screen reader ignores a live region whose text did not change; the zero-width space makes\n\t\t// two consecutive identical messages differ.\n\t\tthis.announcement.set(this.announcement() === message ? `${message}` : message);\n\t}\n}\n","<div\n\tclass=\"hub-field hub-file-input\"\n\t[class.hub-field--disabled]=\"disabled()\"\n\t[class.hub-field--invalid]=\"isInvalid\"\n\t[class.hub-field--valid]=\"showsValid\"\n>\n\t@if (label() || required()) {\n\t\t<label [for]=\"id\" class=\"hub-field__label\">\n\t\t\t{{ label() }}\n\t\t\t@if (required()) {\n\t\t\t\t<span class=\"hub-field__required\" aria-hidden=\"true\">*</span>\n\t\t\t}\n\t\t</label>\n\t}\n\n\t<div class=\"hub-field__body\">\n\t\t<!--\n\t\t\tThe dropzone is a <label> bound to the hidden native input: clicking or activating it with\n\t\t\tthe keyboard opens the file dialog through the platform, so no role, tabindex or key\n\t\t\thandler is needed. The \"browse\" affordance is a <span>, not a <button>, because a button\n\t\t\tinside a label would open the dialog twice.\n\t\t-->\n\t\t<label\n\t\t\tclass=\"hub-file-input__dropzone\"\n\t\t\t[for]=\"id\"\n\t\t\t[class.hub-file-input__dropzone--dragover]=\"isDragging()\"\n\t\t\t[class.hub-file-input__dropzone--no-drop]=\"!dragDrop()\"\n\t\t\t[class.hub-file-input__dropzone--invalid]=\"isInvalid\"\n\t\t\t(dragenter)=\"handleDragEnter($event)\"\n\t\t\t(dragover)=\"handleDragOver($event)\"\n\t\t\t(dragleave)=\"handleDragLeave($event)\"\n\t\t\t(drop)=\"handleDrop($event)\"\n\t\t>\n\t\t\t<input\n\t\t\t\t#nativeInput\n\t\t\t\ttype=\"file\"\n\t\t\t\tclass=\"hub-file-input__native\"\n\t\t\t\t[id]=\"id\"\n\t\t\t\t[accept]=\"accept()\"\n\t\t\t\t[multiple]=\"multiple()\"\n\t\t\t\t[disabled]=\"disabled()\"\n\t\t\t\t[attr.capture]=\"capture()\"\n\t\t\t\t[attr.aria-required]=\"required() ? 'true' : null\"\n\t\t\t\t[attr.aria-invalid]=\"isInvalid\"\n\t\t\t\t[attr.aria-describedby]=\"constraintsHint() ? id + '-hint' : null\"\n\t\t\t\t(change)=\"handleNativeChange($event)\"\n\t\t\t\t(blur)=\"handleBlur($event)\"\n\t\t\t/>\n\n\t\t\t<span class=\"hub-file-input__icon\" aria-hidden=\"true\"></span>\n\n\t\t\t@if (noticeTpt(); as notice) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"notice.template\"></ng-container>\n\t\t\t}\n\n\t\t\t<span class=\"hub-file-input__prompt\">\n\t\t\t\t@if (dragDrop()) {\n\t\t\t\t\t<span class=\"hub-file-input__drop-text\">{{ dropTextLabel() }}</span>\n\t\t\t\t}\n\t\t\t\t@if (dropSubtextLabel()) {\n\t\t\t\t\t<span class=\"hub-file-input__drop-subtext\">{{ dropSubtextLabel() }}</span>\n\t\t\t\t}\n\t\t\t\t<span class=\"hub-file-input__browse\">{{ browseLabel() }}</span>\n\t\t\t</span>\n\n\t\t\t@if (constraintsHint()) {\n\t\t\t\t<span class=\"hub-file-input__hint\" [id]=\"id + '-hint'\">{{ constraintsHint() }}</span>\n\t\t\t}\n\t\t</label>\n\n\t\t@if (preview() !== 'none' && _items().length > 0) {\n\t\t\t<ul class=\"hub-file-input__list\" [class.hub-file-input__list--grid]=\"preview() === 'grid'\">\n\t\t\t\t@for (item of _items(); track item.id) {\n\t\t\t\t\t<li class=\"hub-file-input__item\" [attr.data-status]=\"item.status\">\n\t\t\t\t\t\t@if (previewTpt(); as tpt) {\n\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"tpt.template\"\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"previewContext(item)\"\n\t\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t<span class=\"hub-file-input__thumb\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t@if (item.previewUrl) {\n\t\t\t\t\t\t\t\t\t<img class=\"hub-file-input__image\" [src]=\"item.previewUrl\" alt=\"\" />\n\t\t\t\t\t\t\t\t} @else if (iconTpt(); as icon) {\n\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"icon.template\"\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item }\"\n\t\t\t\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-file-input__file-icon\"></span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t\t<span class=\"hub-file-input__meta\">\n\t\t\t\t\t\t\t\t<span class=\"hub-file-input__name\" [title]=\"item.file.name\">{{ item.file.name }}</span>\n\t\t\t\t\t\t\t\t<span class=\"hub-file-input__size\">{{ labels().formatSize(item.file.size) }}</span>\n\n\t\t\t\t\t\t\t\t@if (item.status === 'uploading') {\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__progress\"\n\t\t\t\t\t\t\t\t\t\t[class.hub-file-input__progress--indeterminate]=\"item.progress === null\"\n\t\t\t\t\t\t\t\t\t\trole=\"progressbar\"\n\t\t\t\t\t\t\t\t\t\taria-valuemin=\"0\"\n\t\t\t\t\t\t\t\t\t\taria-valuemax=\"100\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-valuenow]=\"item.progress\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__progress-bar\"\n\t\t\t\t\t\t\t\t\t\t\t[style.--hub-file-input-progress-value]=\"item.progress ?? 0\"\n\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@if (item.status === 'error') {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-file-input__error\">{{ errorText(item) }}</span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t\t<span class=\"hub-file-input__actions\">\n\t\t\t\t\t\t\t\t@if (item.status === 'uploading') {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__action hub-file-input__action--cancel\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().cancel\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"cancel(item.id)\"\n\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@if (item.status === 'error') {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__action hub-file-input__action--retry\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().retry\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"retry(item.id)\"\n\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@if (!disabled() && item.status !== 'uploading') {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-file-input__action hub-file-input__action--remove\"\n\t\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"labels().remove\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"remove(item.id)\"\n\t\t\t\t\t\t\t\t\t></button>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\n\t\t\t@if (_items().length > 1 && !disabled()) {\n\t\t\t\t<button type=\"button\" class=\"hub-file-input__clear\" (click)=\"clear()\">{{ labels().clear }}</button>\n\t\t\t}\n\t\t}\n\t</div>\n\n\t@if (formText() || formTextTmp()) {\n\t\t<div class=\"hub-field__form-text\" [class.hub-field__form-text--disabled]=\"disabled()\">\n\t\t\t@if (formTextTmp()) {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"formTextTmp()!\"></ng-container>\n\t\t\t} @else {\n\t\t\t\t{{ formText() }}\n\t\t\t}\n\t\t</div>\n\t}\n\n\t@if (isInvalid) {\n\t\t<div class=\"hub-field__feedback\" role=\"alert\">\n\t\t\t<ul>\n\t\t\t\t@for (error of errors | keyvalue; track error.key) {\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"_errorTemplates[error.key] ?? defaultErrorTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: error.value, value: error.value }\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t\t<ng-template #defaultErrorTpt>\n\t\t\t\t\t\t\t<span class=\"hub-field__feedback-text\" [innerHTML]=\"getInvalidFeedbackTemplate(error.key, error.value)\"></span>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t</li>\n\t\t\t\t}\n\t\t\t</ul>\n\t\t</div>\n\t}\n\n\t@if (showsValid && validFeedback()) {\n\t\t<div class=\"hub-field__feedback hub-field__feedback--valid\" role=\"status\">\n\t\t\t<span class=\"hub-field__feedback-text\">{{ validFeedback() }}</span>\n\t\t</div>\n\t}\n\n\t<span class=\"hub-file-input__live\" aria-live=\"polite\">{{ announcement() }}</span>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Inverts a HEX color, or returns the best contrasting black/white when `bw` is enabled.\n */\n@Pipe({\n\tname: 'hubInvertColor'\n})\nexport class HubInvertColorPipe implements PipeTransform {\n\t/**\n\t * @param hex - HEX color (`#rgb` or `#rrggbb`).\n\t * @param bw - When `true`, returns `#000000` or `#FFFFFF` for maximum contrast.\n\t * @returns The inverted (or contrasting) HEX color.\n\t */\n\ttransform(hex: string, bw: boolean = false): unknown {\n\t\tif (!hex) {\n\t\t\treturn '#000000';\n\t\t}\n\n\t\tif (hex.indexOf('#') === 0) {\n\t\t\thex = hex.slice(1);\n\t\t}\n\n\t\t// Convert 3-digit hex to 6-digits.\n\t\tif (hex.length === 3) {\n\t\t\thex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n\t\t}\n\n\t\tif (hex.length !== 6) {\n\t\t\tthrow new Error('Invalid HEX color.');\n\t\t}\n\n\t\tlet r: any = parseInt(hex.slice(0, 2), 16);\n\t\tlet g: any = parseInt(hex.slice(2, 4), 16);\n\t\tlet b: any = parseInt(hex.slice(4, 6), 16);\n\n\t\tif (bw) {\n\t\t\t// http://stackoverflow.com/a/3943023/112731\n\t\t\treturn r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#FFFFFF';\n\t\t}\n\n\t\t// Invert color components.\n\t\tr = (255 - r).toString(16);\n\t\tg = (255 - g).toString(16);\n\t\tb = (255 - b).toString(16);\n\n\t\t// Pad each with zeros and return.\n\t\treturn '#' + r.padStart(2, '0') + g.padStart(2, '0') + b.padStart(2, '0');\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { joinButLast } from '../utils/utils';\n\n/**\n * Joins an array using a separator for all but the last element, which uses a dedicated glue.\n */\n@Pipe({\n\tname: 'hubJoinButLast'\n})\nexport class HubJoinButLastPipe implements PipeTransform {\n\t/**\n\t * @param values - Values to join.\n\t * @param glue - Separator between all but the last element.\n\t * @param lastGlue - Separator before the last element.\n\t * @returns The joined string.\n\t */\n\ttransform(values: any[], glue?: string, lastGlue?: string): string {\n\t\treturn joinButLast(values, glue, lastGlue);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { get } from '../utils/utils';\n\n/**\n * Maps an array of objects to an array of values read from a dot-separated path.\n */\n@Pipe({\n\tname: 'hubMap'\n})\nexport class HubMapPipe implements PipeTransform {\n\t/**\n\t * @param value - Array of objects.\n\t * @param path - Dot-separated path read from each item.\n\t * @returns The array of resolved values.\n\t */\n\ttransform(value: any[], path: string): any[] {\n\t\treturn value.map((item) => get(item, path));\n\t}\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\n/**\n * Marks a URL as a trusted resource URL via the `DomSanitizer`.\n */\n@Pipe({\n\tname: 'hubSafeUrl'\n})\nexport class HubSafeUrlPipe implements PipeTransform {\n\tprivate readonly sanitizer = inject(DomSanitizer);\n\n\t/**\n\t * @param value - The raw URL.\n\t * @returns A `SafeUrl` trusted as a resource URL.\n\t */\n\ttransform(value: string): SafeUrl {\n\t\treturn this.sanitizer.bypassSecurityTrustResourceUrl(value);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { camelToSnakeUpper } from '../utils/utils';\n\n/**\n * Converts a camelCase string to UPPER_SNAKE_CASE.\n */\n@Pipe({\n\tname: 'hubSnakeUpper'\n})\nexport class HubSnakeUpperPipe implements PipeTransform {\n\t/**\n\t * @param value - camelCase identifier.\n\t * @returns The UPPER_SNAKE_CASE representation.\n\t */\n\ttransform(value: string): unknown {\n\t\treturn camelToSnakeUpper(value);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/** Matches a single letter, including accented and special Latin characters. */\nconst LETTERS_REGEXP = /^[a-zA-ZáéíóúüñçÁÉÍÓÚÜÑÇ]$/;\n\n/**\n * Capitalizes the first letter of a string, skipping leading non-letter characters.\n */\n@Pipe({\n\tname: 'hubUcfirst'\n})\nexport class HubUcfirstPipe implements PipeTransform {\n\t/**\n\t * @param value - Input string.\n\t * @returns The string with its first letter uppercased.\n\t */\n\ttransform(value: string = ''): string {\n\t\tif (typeof value !== 'string') {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst stringArray = value.split('');\n\n\t\tfor (let i = 0; i < stringArray.length; i++) {\n\t\t\tif (LETTERS_REGEXP.test(stringArray[i])) {\n\t\t\t\tstringArray[i] = stringArray[i].toUpperCase();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn stringArray.join('');\n\t}\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { areEqual } from '../utils/utils';\n\n/**\n * Cross-field validator that checks whether two controls of a `FormGroup` hold equal values.\n *\n * Sets the `equal` error on the group when the values differ. Returns `null` (valid) when either\n * control is empty, so the requirement is only enforced once both have a value.\n *\n * @param primaryControlName - Name of the first control.\n * @param secondaryControlName - Name of the second control.\n * @returns A validator function for use on a `FormGroup`.\n *\n * @example\n * ```ts\n * new FormGroup({\n * password: new FormControl(''),\n * confirm: new FormControl('')\n * }, { validators: hubAreEqual('password', 'confirm') });\n * ```\n */\nexport function hubAreEqual(primaryControlName: string, secondaryControlName: string): ValidatorFn {\n\treturn (group: AbstractControl): ValidationErrors | null => {\n\t\tconst primaryControl = group.get(primaryControlName);\n\t\tconst secondaryControl = group.get(secondaryControlName);\n\n\t\tif (!primaryControl?.value || !secondaryControl?.value) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!areEqual(primaryControl.value, secondaryControl.value)) {\n\t\t\treturn { equal: true };\n\t\t}\n\n\t\treturn null;\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { matchesAccept } from '../utils/file-accept';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that every file held by the control matches an `accept` specification.\n *\n * Complements the `accept` input of `<hub-file-input>`, which *filters* offending files before they\n * reach the value. This validator instead makes the control **invalid**, which is what you want when\n * files can also arrive from outside the component (patched value, restored draft, another control).\n *\n * Sets the `fileAccept` error with `{ accept, files }`, where `files` lists the offending names.\n * An empty control is valid — pair it with `Validators.required` to demand a file.\n *\n * @param accept - The accept specification, e.g. `'image/*,.pdf'`.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File[]>([], [hubAcceptedFiles('image/*,.pdf')]);\n * ```\n */\nexport function hubAcceptedFiles(accept: string): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst offending = toFileArray(control.value).filter((file) => !matchesAccept(file, accept));\n\n\t\tif (offending.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn { fileAccept: { accept, files: offending.map((file) => file.name) } };\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that no file held by the control exceeds a maximum size.\n *\n * Sets the `fileMaxSize` error with `{ max, actual, files }`, where `actual` is the size of the\n * largest offending file and `files` lists the offending names. An empty control is valid.\n *\n * @param maxBytes - The maximum size per file, in bytes.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File | null>(null, [hubMaxFileSize(5 * 1024 * 1024)]);\n * ```\n */\nexport function hubMaxFileSize(maxBytes: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst offending = toFileArray(control.value).filter((file) => file.size > maxBytes);\n\n\t\tif (offending.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tfileMaxSize: {\n\t\t\t\tmax: maxBytes,\n\t\t\t\tactual: Math.max(...offending.map((file) => file.size)),\n\t\t\t\tfiles: offending.map((file) => file.name)\n\t\t\t}\n\t\t};\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that no file held by the control falls below a minimum size.\n *\n * Useful to reject empty or truncated uploads (a 0-byte file is a common symptom of a failed export).\n * Sets the `fileMinSize` error with `{ min, actual, files }`, where `actual` is the size of the\n * smallest offending file. An empty control is valid.\n *\n * @param minBytes - The minimum size per file, in bytes.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File | null>(null, [hubMinFileSize(1)]);\n * ```\n */\nexport function hubMinFileSize(minBytes: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst offending = toFileArray(control.value).filter((file) => file.size < minBytes);\n\n\t\tif (offending.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tfileMinSize: {\n\t\t\t\tmin: minBytes,\n\t\t\t\tactual: Math.min(...offending.map((file) => file.size)),\n\t\t\t\tfiles: offending.map((file) => file.name)\n\t\t\t}\n\t\t};\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that the combined size of every file held by the control stays within a budget.\n *\n * This is the constraint a request-body limit actually enforces, and it is not implied by a\n * per-file maximum: ten files of 2 MB pass `hubMaxFileSize(5 MB)` and still blow a 10 MB request.\n *\n * Sets the `fileMaxTotalSize` error with `{ max, actual }`. An empty control is valid.\n *\n * @param maxBytes - The maximum combined size, in bytes.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File[]>([], [hubMaxTotalSize(20 * 1024 * 1024)]);\n * ```\n */\nexport function hubMaxTotalSize(maxBytes: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst files = toFileArray(control.value);\n\n\t\tif (files.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst total = files.reduce((sum, file) => sum + file.size, 0);\n\n\t\treturn total > maxBytes ? { fileMaxTotalSize: { max: maxBytes, actual: total } } : null;\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that the control holds at most `max` files.\n *\n * Sets the `fileMaxFiles` error with `{ max, actual }`. An empty control is valid.\n *\n * @param max - The maximum number of files.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File[]>([], [hubMaxFiles(3)]);\n * ```\n */\nexport function hubMaxFiles(max: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst count = toFileArray(control.value).length;\n\n\t\treturn count > max ? { fileMaxFiles: { max, actual: count } } : null;\n\t};\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { toFileArray } from '../utils/file-value';\n\n/**\n * Validates that the control holds at least `min` files.\n *\n * Unlike the other file validators, this one **does** reject an empty control: holding zero files\n * is precisely what a minimum forbids. It therefore subsumes `Validators.required`, and adding both\n * only produces two errors for the same cause.\n *\n * Sets the `fileMinFiles` error with `{ min, actual }`.\n *\n * @param min - The minimum number of files.\n * @returns A validator function for a file-valued control.\n *\n * @example\n * ```ts\n * new FormControl<File[]>([], [hubMinFiles(2)]);\n * ```\n */\nexport function hubMinFiles(min: number): ValidatorFn {\n\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\tconst count = toFileArray(control.value).length;\n\n\t\treturn count < min ? { fileMinFiles: { min, actual: count } } : null;\n\t};\n}\n","import { ViewContainerRef } from '@angular/core';\nimport { HubInputComponent } from '../components/input/input.component';\nimport { HubSelectComponent } from '../select/select.component';\n\n/** A `{ value, label }` option for select-kind controls. */\nexport interface HubFormControlOption {\n\tvalue: unknown;\n\tlabel: string;\n}\n\n/**\n * Framework-neutral description of a primitive control to render dynamically.\n *\n * The shape mirrors (structurally) the contract other ng-hub-ui libraries expose\n * for optional control hosting (e.g. `ng-hub-ui-paginable`'s table), so this\n * adapter can be wired into them without either package importing the other.\n */\nexport interface HubFormControlConfig {\n\tkind: 'input' | 'select';\n\tvalue: unknown;\n\ttype?: string;\n\tplaceholder?: string;\n\tariaLabel?: string;\n\tcssClass?: string;\n\toptions?: ReadonlyArray<HubFormControlOption>;\n\tonValueChange: (value: unknown) => void;\n}\n\n/** Live handle to a control created by {@link hubFormControlAdapter}. */\nexport interface HubFormControlHandle {\n\t/** Pushes a new value into the control (external updates). */\n\tsetValue(value: unknown): void;\n\t/** Destroys the control and releases its resources. */\n\tdestroy(): void;\n}\n\n/** Adapter that renders primitive controls with the ng-hub-ui-forms components. */\nexport interface HubFormControlAdapter {\n\tcreate(container: ViewContainerRef, config: HubFormControlConfig): HubFormControlHandle;\n}\n\n/**\n * Ready-made {@link HubFormControlAdapter} backed by `HubInputComponent` /\n * `HubSelectComponent`.\n *\n * Wire it into any ng-hub-ui primitive that exposes an optional form-controls\n * token, e.g. `provideHubPaginableFormControls(hubFormControlAdapter)`. The host\n * library keeps **zero hard dependency** on `ng-hub-ui-forms`; only an app that\n * opts in pulls these components.\n *\n * Requires `provideHubForms()` (or the default config) to be available in the\n * environment so the field components can resolve their configuration.\n */\nexport const hubFormControlAdapter: HubFormControlAdapter = {\n\tcreate(container: ViewContainerRef, config: HubFormControlConfig): HubFormControlHandle {\n\t\tif (config.kind === 'select') {\n\t\t\tconst ref = container.createComponent(HubSelectComponent);\n\t\t\tref.setInput('items', (config.options ?? []).map((option) => ({ ...option })));\n\t\t\tref.setInput('bindLabel', 'label');\n\t\t\tref.setInput('bindValue', 'value');\n\t\t\tref.setInput('clearable', false);\n\t\t\tref.setInput('searchable', false);\n\t\t\tif (config.placeholder) {\n\t\t\t\tref.setInput('placeholder', config.placeholder);\n\t\t\t}\n\t\t\tif (config.cssClass) {\n\t\t\t\tref.setInput('classlist', config.cssClass);\n\t\t\t}\n\t\t\tref.instance.writeValue(config.value);\n\t\t\tconst subscription = ref.instance.valueChange.subscribe((value: unknown) => config.onValueChange(value));\n\t\t\tref.changeDetectorRef.detectChanges();\n\n\t\t\treturn {\n\t\t\t\tsetValue: (value) => ref.instance.writeValue(value as never),\n\t\t\t\tdestroy: () => {\n\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\tref.destroy();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tconst ref = container.createComponent(HubInputComponent);\n\t\tref.setInput('type', config.type ?? 'text');\n\t\tif (config.placeholder) {\n\t\t\tref.setInput('placeholder', config.placeholder);\n\t\t}\n\t\tif (config.cssClass) {\n\t\t\tref.setInput('classlist', config.cssClass);\n\t\t}\n\t\tref.instance.writeValue(config.value as never);\n\t\tconst subscription = ref.instance.valueChange.subscribe((value: unknown) => config.onValueChange(value));\n\t\tref.changeDetectorRef.detectChanges();\n\n\t\treturn {\n\t\t\tsetValue: (value) => ref.instance.writeValue(value as never),\n\t\t\tdestroy: () => {\n\t\t\t\tsubscription.unsubscribe();\n\t\t\t\tref.destroy();\n\t\t\t}\n\t\t};\n\t}\n};\n","/*\n * Public API Surface of ng-hub-ui-forms\n */\n\n// Shared base\nexport { HubFormControl } from './lib/shared/hub-form-control';\nexport { HubFieldControl } from './lib/shared/hub-field-control';\nexport { HubGroupControl } from './lib/shared/hub-group-control';\nexport type { HubGroupErrorTrigger } from './lib/shared/hub-group-control';\nexport { defaultInvalidFeedback } from './lib/shared/hub-error-display';\n\n// Configuration\nexport { HUB_FORMS_CONFIG, defaultHubFormsConfig, provideHubForms } from './lib/services/forms-config';\nexport type { HubFormsConfig } from './lib/services/forms-config';\nexport { HUB_FILE_UPLOADER, provideHubFileUploader } from './lib/services/file-uploader';\n\n// Components\nexport { HubInputComponent } from './lib/components/input/input.component';\nexport { HubOtpInputComponent } from './lib/components/otp/otp.component';\nexport type { HubOtpMode } from './lib/components/otp/otp.component';\nexport { HubTextareaComponent } from './lib/components/textarea/textarea.component';\nexport { HubSliderComponent } from './lib/components/slider/slider.component';\nexport type { HubSliderValue } from './lib/components/slider/slider.component';\nexport { HubSegmentedComponent } from './lib/components/segmented/segmented.component';\nexport type { HubSegmentedOption, HubSegmentedSize } from './lib/components/segmented/segmented.component';\nexport { HubFieldsetComponent } from './lib/components/fieldset/fieldset.component';\nexport { HubFormComponent } from './lib/components/form/form.component';\nexport { HubLegendComponent } from './lib/components/legend/legend.component';\nexport { HubSelectComponent } from './lib/select/select.component';\nexport { HubDatepickerComponent } from './lib/components/datepicker/datepicker.component';\nexport { HubFileInputComponent } from './lib/components/file-input/file-input.component';\n\n// Select — dropdown customization passthrough (vendored ng-select template directives)\nexport { NgOptionComponent } from './lib/select/vendor/lib/ng-option.component';\nexport { NgSelectConfig } from './lib/select/vendor/lib/config.service';\nexport {\n\tNgOptionTemplateDirective,\n\tNgOptgroupTemplateDirective,\n\tNgLabelTemplateDirective,\n\tNgMultiLabelTemplateDirective,\n\tNgHeaderTemplateDirective,\n\tNgFooterTemplateDirective,\n\tNgNotFoundTemplateDirective,\n\tNgTypeToSearchTemplateDirective,\n\tNgLoadingTextTemplateDirective,\n\tNgLoadingSpinnerTemplateDirective,\n\tNgTagTemplateDirective,\n\tNgClearButtonTemplateDirective\n} from './lib/select/vendor/lib/ng-templates.directive';\n\n// Directives\nexport { HubFormTextDirective } from './lib/directives/form-text.directive';\nexport { HubValidationErrorDirective } from './lib/directives/validation-error.directive';\nexport { HubLegendDirective } from './lib/directives/legend.directive';\nexport { HubAutoresizeDirective } from './lib/directives/autoresize.directive';\nexport { HubInputPrefixDirective } from './lib/directives/input-prefix.directive';\nexport { HubInputSuffixDirective } from './lib/directives/input-suffix.directive';\nexport { 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 { HubFileDropzoneNoticeDirective } from './lib/directives/file-dropzone-notice.directive';\n\n// Pipes\nexport { HubInvertColorPipe } from './lib/pipes/invert-color.pipe';\nexport { HubJoinButLastPipe } from './lib/pipes/join-but-last.pipe';\nexport { HubMapPipe } from './lib/pipes/map.pipe';\nexport { HubSafeUrlPipe } from './lib/pipes/safe-url.pipe';\nexport { HubSnakeUpperPipe } from './lib/pipes/snake-upper.pipe';\nexport { HubUcfirstPipe } from './lib/pipes/ucfirst.pipe';\n\n// Validators\nexport { hubAreEqual } from './lib/validators/are-equal.validator';\nexport { hubAcceptedFiles } from './lib/validators/accepted-files.validator';\nexport { hubMaxFileSize } from './lib/validators/max-file-size.validator';\nexport { hubMinFileSize } from './lib/validators/min-file-size.validator';\nexport { hubMaxTotalSize } from './lib/validators/max-total-size.validator';\nexport { hubMaxFiles } from './lib/validators/max-files.validator';\nexport { hubMinFiles } from './lib/validators/min-files.validator';\n\n// Interfaces & types\nexport type { FormTextType, HubLabelType } from './lib/interfaces/common.interface';\nexport { FormTextTypes, HubLabelTypes } from './lib/interfaces/common.interface';\nexport type { HubInputFormat } from './lib/interfaces/input.interface';\nexport { HubInputFormats } from './lib/interfaces/input.interface';\nexport type { HubSelectFormat } from './lib/interfaces/select.interface';\nexport { HubSelectFormats } from './lib/interfaces/select.interface';\nexport type { HubDatepickerMode, HubDateRange, HubDateValue, HubDatepickerLabels, HubDatepickerConfig } from './lib/interfaces/datepicker.interface';\nexport { defaultHubDatepickerConfig, defaultHubDatepickerLabels } from './lib/interfaces/datepicker.interface';\nexport type {\n\tHubFileConstraints,\n\tHubFileInputLabels,\n\tHubFileItem,\n\tHubFilePreview,\n\tHubFileRejection,\n\tHubFileRejectionReason,\n\tHubFileStatus\n} from './lib/interfaces/file-input.interface';\nexport { defaultHubFileInputLabels } from './lib/interfaces/file-input.interface';\nexport type { HubFileUploader, HubFileUploadEvent } from './lib/interfaces/file-uploader.interface';\n\n// Utilities\nexport { formatFileSize } from './lib/utils/file-size';\nexport { matchesAccept } from './lib/utils/file-accept';\nexport { fileKey } from './lib/utils/file-key';\nexport { toFileArray } from './lib/utils/file-value';\nexport type { HubFileValue } from './lib/utils/file-value';\nexport {\n\tareEqual,\n\tcamelToSnakeUpper,\n\tcontrolHasMinOrMaxValidator,\n\tget,\n\tgetActiveElement,\n\tgetMinOrMaxValueFromValidator,\n\tisDefined,\n\tisString,\n\tjoinButLast,\n\trunInZone,\n\tuuid\n} from './lib/utils/utils';\nexport { applyMask, isMaskActive } from './lib/utils/mask';\nexport type { HubMaskResult } from './lib/utils/mask';\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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E,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;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,EAA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"}
|