{"version":3,"file":"ng-error-tooltips.mjs","sources":["../../../projects/ng-error-tooltips/src/lib/validators/error-messages.const.ts","../../../projects/ng-error-tooltips/src/lib/options/default-options.const.ts","../../../projects/ng-error-tooltips/src/lib/options/error-tooltip-options.token.ts","../../../projects/ng-error-tooltips/src/lib/error-tooltip-lang.token.ts","../../../projects/ng-error-tooltips/src/lib/tooltip/ng-error-tooltip.component.ts","../../../projects/ng-error-tooltips/src/lib/tooltip/ng-error-tooltip.component.html","../../../projects/ng-error-tooltips/src/lib/error-tooltip.directive.ts","../../../projects/ng-error-tooltips/src/lib/error-tooltip-sig.directive.ts","../../../projects/ng-error-tooltips/src/lib/error-tooltip-sig-validate.token.ts","../../../projects/ng-error-tooltips/src/lib/provide-error-tooltips.ts","../../../projects/ng-error-tooltips/src/lib/validators/custom-validators.ts","../../../projects/ng-error-tooltips/src/lib/validators/custom-sig-validators.ts","../../../projects/ng-error-tooltips/src/lib/error-tooltip-sig-form.directive.ts","../../../projects/ng-error-tooltips/src/lib/mocks/mock-error-tooltip.directive.ts","../../../projects/ng-error-tooltips/src/lib/mocks/mock-error-tooltip-sig.directive.ts","../../../projects/ng-error-tooltips/src/lib/mocks/mock-error-tooltip-sig-form.directive.ts","../../../projects/ng-error-tooltips/src/lib/mocks/mock-custom-validators.ts","../../../projects/ng-error-tooltips/src/lib/mocks/mock-custom-sig-validators.ts","../../../projects/ng-error-tooltips/src/public-api.ts","../../../projects/ng-error-tooltips/src/ng-error-tooltips.ts"],"sourcesContent":["import { TriLangText } from \"./tri-lang-text.type\";\n\ntype MsgFn0 = () => string;\ntype MsgFn1 = (n: number) => string;\n\n/**\n * Format numbers without decimal places using the Swiss locale.\n * Note: I keep de-CH formatting here intentionally (Swiss thousands separator),\n * regardless of UI language, because these are mostly \"numeric hints\".\n */\nexport function formatNumber(value: number): string {\n\treturn new Intl.NumberFormat('de-CH', {\n\t\tminimumFractionDigits: 0,\n\t\tmaximumFractionDigits: 0\n\t}).format(value);\n}\n\n/**\n * Central error message catalog (DE/FR/EN).\n * Keys should match the error-keys used in validators.\n */\nexport const ERROR_MESSAGES = {\n\trequired: {\n\t\tde: (() => 'Eingabe erforderlich') satisfies MsgFn0,\n\t\tfr: (() => 'Saisie requise') satisfies MsgFn0,\n\t\ten: (() => 'Input required') satisfies MsgFn0\n\t},\n\n\ttrueRequired: {\n\t\tde: () => 'Bitte bestätigen.',\n\t\ten: () => 'Please confirm.',\n\t\tfr: () => 'Veuillez confirmer.',\n\t},\n\n\tminLength: {\n\t\tde: ((min: number) => `Min. Länge: ${formatNumber(min)} Zeichen`) satisfies MsgFn1,\n\t\tfr: ((min: number) => `Longueur min. : ${formatNumber(min)} caractères`) satisfies MsgFn1,\n\t\ten: ((min: number) => `Min. length: ${formatNumber(min)} characters`) satisfies MsgFn1\n\t},\n\n\tmaxLength: {\n\t\tde: ((max: number) => `Max. Länge: ${formatNumber(max)} Zeichen`) satisfies MsgFn1,\n\t\tfr: ((max: number) => `Longueur max. : ${formatNumber(max)} caractères`) satisfies MsgFn1,\n\t\ten: ((max: number) => `Max. length: ${formatNumber(max)} characters`) satisfies MsgFn1\n\t},\n\n\tminValue: {\n\t\tde: ((min: number) => `Muss mindestens ${min} betragen`) satisfies MsgFn1,\n\t\tfr: ((min: number) => `Doit être au moins ${min}`) satisfies MsgFn1,\n\t\ten: ((min: number) => `Must be at least ${min}`) satisfies MsgFn1\n\t},\n\n\tformattedMinValue: {\n\t\tde: ((min: number) => `Muss mindestens ${formatNumber(min)} betragen`) satisfies MsgFn1,\n\t\tfr: ((min: number) => `Doit être au moins ${formatNumber(min)}`) satisfies MsgFn1,\n\t\ten: ((min: number) => `Must be at least ${formatNumber(min)}`) satisfies MsgFn1\n\t},\n\n\tmaxValue: {\n\t\tde: ((max: number) => `Darf maximal ${max} betragen`) satisfies MsgFn1,\n\t\tfr: ((max: number) => `Ne doit pas dépasser ${max}`) satisfies MsgFn1,\n\t\ten: ((max: number) => `Must not exceed ${max}`) satisfies MsgFn1\n\t},\n\n\tformattedMaxValue: {\n\t\tde: ((max: number) => `Darf maximal ${formatNumber(max)} betragen`) satisfies MsgFn1,\n\t\tfr: ((max: number) => `Ne doit pas dépasser ${formatNumber(max)}`) satisfies MsgFn1,\n\t\ten: ((max: number) => `Must not exceed ${formatNumber(max)}`) satisfies MsgFn1\n\t},\n\n\tsmallerThan: {\n\t\tde: ((ref: number) => `Muss kleiner sein als ${ref}`) satisfies MsgFn1,\n\t\tfr: ((ref: number) => `Doit être inférieur à ${ref}`) satisfies MsgFn1,\n\t\ten: ((ref: number) => `Must be less than ${ref}`) satisfies MsgFn1\n\t},\n\n\tformattedSmallerThan: {\n\t\tde: ((ref: number) => `Muss kleiner sein als ${formatNumber(ref)}`) satisfies MsgFn1,\n\t\tfr: ((ref: number) => `Doit être inférieur à ${formatNumber(ref)}`) satisfies MsgFn1,\n\t\ten: ((ref: number) => `Must be less than ${formatNumber(ref)}`) satisfies MsgFn1\n\t},\n\n\tgreaterThan: {\n\t\tde: ((ref: number) => `Muss grösser sein als ${ref}`) satisfies MsgFn1,\n\t\tfr: ((ref: number) => `Doit être supérieur à ${ref}`) satisfies MsgFn1,\n\t\ten: ((ref: number) => `Must be greater than ${ref}`) satisfies MsgFn1\n\t},\n\n\tformattedGreaterThan: {\n\t\tde: ((ref: number) => `Muss grösser sein als ${formatNumber(ref)}`) satisfies MsgFn1,\n\t\tfr: ((ref: number) => `Doit être supérieur à ${formatNumber(ref)}`) satisfies MsgFn1,\n\t\ten: ((ref: number) => `Must be greater than ${formatNumber(ref)}`) satisfies MsgFn1\n\t},\n\n\tlettersOnly: {\n\t\tde: (() => 'Nur Buchstaben sind erlaubt') satisfies MsgFn0,\n\t\tfr: (() => 'Seules les lettres sont autorisées') satisfies MsgFn0,\n\t\ten: (() => 'Only letters are allowed') satisfies MsgFn0\n\t},\n\n\tminNumberOfDigits: {\n\t\tde: ((min: number) => `Muss mindestens ${formatNumber(min)} Nummern enthalten`) satisfies MsgFn1,\n\t\tfr: ((min: number) => `Doit contenir au moins ${formatNumber(min)} chiffres`) satisfies MsgFn1,\n\t\ten: ((min: number) => `Must contain at least ${formatNumber(min)} digits`) satisfies MsgFn1\n\t},\n\n\tminNumberOfCapitalLetters: {\n\t\tde: ((min: number) => `Muss mindestens ${formatNumber(min)} Grossbuchstaben enthalten`) satisfies MsgFn1,\n\t\tfr: ((min: number) => `Doit contenir au moins ${formatNumber(min)} majuscules`) satisfies MsgFn1,\n\t\ten: ((min: number) => `Must contain at least ${formatNumber(min)} capital letters`) satisfies MsgFn1\n\t},\n\n\tinvalidEmail: {\n\t\tde: (() => 'Ungültige E-Mail-Adresse') satisfies MsgFn0,\n\t\tfr: (() => 'Adresse e-mail invalide') satisfies MsgFn0,\n\t\ten: (() => 'Invalid email address') satisfies MsgFn0\n\t}\n} as const;\n\n/**\n * Helper: returns all three translations for a given key.\n * Args must match the function signature of the DE variant for that key.\n */\nexport function tri<K extends keyof typeof ERROR_MESSAGES>\n\t(key: K, ...args: Parameters<(typeof ERROR_MESSAGES)[K]['de']>): TriLangText {\n\treturn {\n\t\tde: (ERROR_MESSAGES[key].de as any)(...args),\n\t\tfr: (ERROR_MESSAGES[key].fr as any)(...args),\n\t\ten: (ERROR_MESSAGES[key].en as any)(...args)\n\t};\n}\n\nexport function isTriLangText(v: unknown): v is TriLangText {\n\treturn !!v && typeof v === 'object' && 'de' in (v as any) && 'fr' in (v as any) && 'en' in (v as any);\n}\n","import { ErrorTooltipOptions } from \"./error-tooltip-options.interface\";\n\n\nexport const defaultOptions: ErrorTooltipOptions = {\n\tid: 0,\n\tplacement: 'bottom-left',\n\tshowFirstErrorOnly: false,\n\tzIndex: 1101,\n\ttooltipClass: '',\n\tshadow: true,\n\toffset: 8,\n\tmaxWidth: '350px',\n\ttextColor: '',\n\tbackgroundColor: '',\n\tborderColor: '',\n\tpointerEvents: 'auto', // 'none' would mean that there is no reaction to clicks\n\n\tappendTooltipToBody: true,\n}\n","import { InjectionToken, makeEnvironmentProviders } from '@angular/core';\n\nimport { ErrorTooltipOptions } from './error-tooltip-options.interface';\n\nexport const ERROR_TOOLTIP_OPTIONS = new InjectionToken<ErrorTooltipOptions>(\n\t'ERROR_TOOLTIP_OPTIONS',\n\t{\n\t\tprovidedIn: 'root',\n\t\tfactory: () => ({}),\n\t}\n);\n\nexport function provideErrorTooltipOptions(options: ErrorTooltipOptions) {\n\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: ERROR_TOOLTIP_OPTIONS,\n\t\t\tuseValue: options,\n\t\t},\n\t]);\n}\n","import { InjectionToken, Signal, signal } from '@angular/core';\nimport { SupportedLanguage } from './validators/supported-language.type';\n\nexport const ERROR_TOOLTIP_LANG = new InjectionToken<Signal<SupportedLanguage>>(\n\t'ERROR_TOOLTIP_LANG',\n\t{\n\t\t// Default for apps that don't provide anything (backwards-compatible)\n\t\tfactory: () => signal<SupportedLanguage>('de')\n\t}\n);","import { Component, computed, effect, ElementRef, inject, input, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { ERROR_TOOLTIP_LANG } from '../error-tooltip-lang.token';\nimport { defaultOptions } from '../options/default-options.const';\nimport { ErrorTooltipOptions } from '../options/error-tooltip-options.interface';\nimport { ErrorPayload } from '../error-payload.type';\nimport { Placement } from './placement.type';\n\n@Component({\n\tselector: 'lib-ng-error-tooltip',\n\ttemplateUrl: './ng-error-tooltip.component.html',\n\tstyleUrls: ['./ng-error-tooltip.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\t'[class]': '_classList()',\n\n\t\t'[style.position]': '_position()',\n\t\t'[style.top]': '_hostTop()',\n\t\t'[style.left]': '_hostLeft()',\n\t\t'[style.zIndex]': '_zIndex()',\n\n\t\t'[style.width]': '_width()',\n\t\t'[style.maxWidth]': '_maxWidth()',\n\t\t'[style.pointerEvents]': '_pointerEvents()',\n\t\t'[style.--ng-error-tooltip-text-color]': '_textColor()',\n\t\t'[style.--ng-error-tooltip-background-color]': '_backgroundColor()',\n\t\t'[style.--ng-error-tooltip-border-color]': '_borderColor()',\n\t},\n})\nexport class NgErrorTooltipComponent {\n\tprivate readonly langSig = inject(ERROR_TOOLTIP_LANG);\n\tprivate readonly elementRef = inject(ElementRef);\n\n\t/* Inputs passed by error-tooltip-directive (signals) */\n\n\treadonly errors = input.required<ErrorPayload[]>();\n\treadonly options = input.required<ErrorTooltipOptions>();\n\treadonly formControl = input.required<any>();\n\n\treadonly translatedErrors = computed(() => {\n\t\tconst lang = this.langSig();\n\t\treturn this.errors()\n\t\t\t.map(e => (typeof e === 'string' ? e : e[lang]))\n\t\t\t// Remove empty, null, or whitespace-only error messages:\n\t\t\t.filter((e): e is string => !!e && e.trim().length > 0);\n\t});\n\n\t// Will be used by error-tooltip-directive to decide whether to still show or destroy the tooltip:\n\treadonly hasErrors = computed(() => this.translatedErrors().length > 0);\n\n\t// Informs error-tooltip-directive when user clicked on tooltip:\n\tprivate readonly userClickOnTooltipSubject = new Subject<void>();\n\treadonly userClickOnTooltip$ = this.userClickOnTooltipSubject.asObservable();\n\n\t// --- State as signals ---\n\n\tprivate readonly _top = signal<number>(-9999);\n\tprivate readonly _left = signal<number>(-9999);\n\n\tprotected readonly _zIndex = signal<number>(defaultOptions.zIndex ?? 0);\n\tprotected readonly _width = signal<string>('');\n\tprotected readonly _maxWidth = signal<string>(defaultOptions.maxWidth ?? '');\n\tprotected readonly _pointerEvents = signal<string>(defaultOptions.pointerEvents ?? 'auto');\n\tprotected readonly _textColor = signal<string>('');\n\tprotected readonly _backgroundColor = signal<string>('');\n\tprotected readonly _borderColor = signal<string>('');\n\tprotected readonly _position = signal<'absolute' | 'fixed'>('absolute');\n\n\tprivate readonly _isShown = signal(false);\n\tprivate readonly _displayNone = signal(true);\n\n\tprivate readonly _placement = signal<Placement>(defaultOptions.placement!);\n\tprivate readonly _placementClass = computed(() => `tooltip-${this._placement()}`);\n\n\tprivate readonly _hasShadow = signal<boolean>(defaultOptions.shadow ?? true);\n\tprivate readonly _shadowClass = computed(() => (this._hasShadow() ? 'tooltip-shadow' : ''));\n\n\tprivate readonly _customClass = signal<string>('');\n\n\tprotected readonly _classList = computed(() => {\n\t\tconst parts = [\n\t\t\t'tooltip',\n\t\t\t'tooltip-error',\n\t\t\tthis._isShown() ? 'tooltip-show' : 'tooltip-hide',\n\t\t\tthis._displayNone() ? 'tooltip-display-none' : '',\n\t\t\tthis._placementClass(),\n\t\t\tthis._shadowClass(),\n\t\t\tthis._customClass().trim(),\n\t\t];\n\t\treturn parts.filter(Boolean).join(' ');\n\t});\n\n\tprotected readonly _hostTop = computed(() => `${this._top()}px`);\n\tprotected readonly _hostLeft = computed(() => `${this._left()}px`);\n\n\tconstructor() {\n\t\t// Re-apply whenever options input changes\n\t\teffect(() => {\n\t\t\tconst opts = this.options(); // track dependency\n\t\t\tthis.applyOptions(opts);\n\t\t});\n\t}\n\n\tshowTooltip(formControlRef: ElementRef<any>) {\n\t\tconst placement = this.options()?.placement ?? defaultOptions.placement!;\n\t\tthis._placement.set(placement);\n\n\t\tthis.setVisibilityAndPosition(formControlRef);\n\t}\n\n\thandleTooltipClick() {\n\t\tthis.userClickOnTooltipSubject.next();\n\t}\n\n\tsetVisibilityAndPosition(formControlRef: ElementRef<any>): void {\n\t\tconst wasVisible = this._isShown();\n\t\tconst isVisible = this.setVisibilityOfTooltip(formControlRef);\n\n\t\tif (wasVisible && isVisible) {\n\t\t\tconst pos = formControlRef.nativeElement.getBoundingClientRect();\n\t\t\tthis.setAbsolutePosition(pos);\n\t\t} \n\t\telse if (!wasVisible && isVisible) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst pos = formControlRef.nativeElement.getBoundingClientRect();\n\t\t\t\tthis.setAbsolutePosition(pos);\n\t\t\t}, 0);\n\t\t}\n\t}\n\n\tprivate setVisibilityOfTooltip(formControlRef: ElementRef<any>): boolean {\n\t\tconst visible = !this.isElementCovered(formControlRef);\n\n\t\tthis._displayNone.set(!visible);\n\t\tthis._isShown.set(visible);\n\n\t\treturn visible;\n\t}\n\n\tprivate setAbsolutePosition(formControlPosition: DOMRect): void {\n\t\tconst fc = this.formControl();\n\t\tconst isFormCtrlSVG = fc instanceof SVGElement;\n\n\t\tconst tooltip = this.elementRef.nativeElement as HTMLElement;\n\t\tconst formCtr = fc as HTMLElement;\n\t\tconst options = this.options();\n\n\t\tconst formControlHeight = isFormCtrlSVG ? formCtr.getBoundingClientRect().height : formCtr.offsetHeight;\n\t\tconst formControlWidth = isFormCtrlSVG ? formCtr.getBoundingClientRect().width : formCtr.offsetWidth;\n\n\t\tconst tooltipHeight = tooltip.clientHeight;\n\t\tconst tooltipWidth = tooltip.clientWidth;\n\t\t\n\t\tconst appendTooltipToBody = options?.appendTooltipToBody ?? defaultOptions.appendTooltipToBody!;\n\t\tconst scrollY = appendTooltipToBody ? window.scrollY : 0;\n\n\t\tconst placement = options?.placement ?? defaultOptions.placement!;\n\t\tconst tooltipOffset = options?.offset ?? defaultOptions.offset!;\n\n\t\tlet topStyle: number | undefined;\n\n\t\tswitch (placement) {\n\t\t\tcase 'top':\n\t\t\tcase 'top-left':\n\t\t\t\ttopStyle = (formControlPosition.top + scrollY) - (tooltipHeight + tooltipOffset);\n\t\t\t\tbreak;\n\t\t\tcase 'bottom':\n\t\t\tcase 'bottom-left':\n\t\t\t\ttopStyle = (formControlPosition.top + scrollY) + formControlHeight + tooltipOffset;\n\t\t\t\tbreak;\n\t\t\tcase 'left':\n\t\t\tcase 'right':\n\t\t\t\ttopStyle = (formControlPosition.top + scrollY) + formControlHeight / 2 - tooltipHeight / 2;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tlet leftStyle: number | undefined;\n\n\t\tswitch (placement) {\n\t\t\tcase 'top':\n\t\t\tcase 'bottom':\n\t\t\t\tleftStyle = (formControlPosition.left + formControlWidth / 2) - tooltipWidth / 2;\n\t\t\t\tbreak;\n\t\t\tcase 'bottom-left':\n\t\t\tcase 'top-left':\n\t\t\t\tleftStyle = formControlPosition.left;\n\t\t\t\tbreak;\n\t\t\tcase 'left':\n\t\t\t\tleftStyle = formControlPosition.left - tooltipWidth - tooltipOffset;\n\t\t\t\tbreak;\n\t\t\tcase 'right':\n\t\t\t\tleftStyle = formControlPosition.left + formControlWidth + tooltipOffset;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (topStyle === undefined || leftStyle === undefined) return;\n\n\t\tconst roundedTop = Math.round(topStyle * 100) / 100;\n\t\tconst roundedLeft = Math.round(leftStyle * 100) / 100;\n\n\t\tif (this._top() !== roundedTop) this._top.set(roundedTop);\n\t\tif (this._left() !== roundedLeft) this._left.set(roundedLeft);\n\t}\n\n\tprivate isElementCovered(formControlRef: ElementRef<any>): boolean {\n\t\tconst rect = formControlRef.nativeElement.getBoundingClientRect();\n\t\tconst x = rect.left + rect.width / 2;\n\t\tconst y = rect.top + rect.height / 2;\n\n\t\tconst elementAtPoint = document.elementFromPoint(x, y);\n\n\t\tif (elementAtPoint && elementAtPoint.isSameNode(formControlRef.nativeElement)) return false;\n\n\t\tif (\n\t\t\telementAtPoint &&\n\t\t\t(elementAtPoint.tagName === 'LIB-NG-ERROR-TOOLTIP' ||\n\t\t\t\telementAtPoint.className === 'tooltip-label' ||\n\t\t\t\telementAtPoint.className === 'tooltip-arrow' ||\n\t\t\t\telementAtPoint.className === 'tooltip-error-list')\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet currentElement = elementAtPoint as HTMLElement | null;\n\t\twhile (currentElement) {\n\t\t\tif (currentElement.isSameNode(formControlRef.nativeElement)) return false;\n\t\t\tcurrentElement = currentElement.parentElement;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate applyOptions(options: ErrorTooltipOptions) {\n\t\tconst zIndex = typeof options.zIndex === 'number' ? options.zIndex : (defaultOptions.zIndex ?? 0);\n\t\tthis._zIndex.set(zIndex);\n\n\t\tconst appendTooltipToBody = options.appendTooltipToBody ?? defaultOptions.appendTooltipToBody!;\n\t\tthis._position.set(appendTooltipToBody ? 'absolute' : 'fixed');\n\n\t\tthis._customClass.set(options.tooltipClass?.trim() ?? '');\n\t\tthis._pointerEvents.set(options.pointerEvents ?? defaultOptions.pointerEvents!);\n\t\tthis._hasShadow.set(options.shadow ?? defaultOptions.shadow!);\n\t\tthis._textColor.set(options.textColor ?? defaultOptions.textColor ?? '');\n\t\tthis._backgroundColor.set(options.backgroundColor ?? defaultOptions.backgroundColor ?? '');\n\t\tthis._borderColor.set(options.borderColor ?? defaultOptions.borderColor ?? '');\n\n\t\tthis._width.set(options.width ?? '');\n\t\tthis._maxWidth.set(options.maxWidth ?? defaultOptions.maxWidth!);\n\t}\n}\n","\n<div class=\"tooltip-arrow\"></div>\n\n<div class=\"tooltip-label\" (click)=\"handleTooltipClick()\">\n\t@if (translatedErrors().length > 1) {\n\t\t<ul class=\"tooltip-error-list\">\n\t\t\t@for (err of translatedErrors(); track err) { <li>{{ err }}</li> }\n\t\t</ul>\n\t}\n\t@else if (translatedErrors().length === 1) {\n\t\t{{ translatedErrors()[0] }}\n\t}\n</div>\n","import { ComponentRef, computed, Directive, effect, ElementRef, EnvironmentInjector, inject, input, OnDestroy, signal, ViewContainerRef } from '@angular/core';\nimport { ControlContainer, FormGroupDirective, NgControl } from '@angular/forms';\nimport { Subject, filter, fromEvent, interval, merge, race, takeUntil, tap } from 'rxjs';\n\nimport { Placement } from './tooltip/placement.type';\nimport { ErrorPayload } from './error-payload.type';\nimport { isTriLangText } from './validators/error-messages.const';\nimport { defaultOptions } from './options/default-options.const';\nimport { ErrorTooltipOptions } from './options/error-tooltip-options.interface';\nimport { ERROR_TOOLTIP_OPTIONS } from './options/error-tooltip-options.token';\nimport { NgErrorTooltipComponent } from './tooltip/ng-error-tooltip.component';\n\n@Directive({\n  selector: '[ngErrorTooltip]',\n  standalone: true\n})\nexport class ErrorTooltipDirective implements OnDestroy {\n\tprivate readonly hostEl = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprivate readonly viewContainerRef = inject(ViewContainerRef);\n\tprivate readonly envInjector = inject(EnvironmentInjector);\n\tprivate readonly controlContainer = inject(ControlContainer, { optional: true });\n\tprivate readonly ngControl = inject(NgControl, { self: true, optional: true });\n\tprivate readonly globalOptions = inject(ERROR_TOOLTIP_OPTIONS);\n\n\t// ---- inputs (signals) ----\n\treadonly options = input<ErrorTooltipOptions>({});\n\treadonly id = input<string | number | null>(null);\n\treadonly showFirstErrorOnly = input<boolean | null>(null);\n\treadonly placement = input<Placement | null>(null);\n\treadonly zIndex = input<number | null>(null);\n\treadonly tooltipClass = input<string | null>(null);\n\treadonly shadow = input<boolean | null>(null);\n\treadonly offset = input<number | null>(null);\n\treadonly width = input<string | null>(null);\n\treadonly maxWidth = input<string | null>(null);\n\treadonly textColor = input<string | null>(null);\n\treadonly backgroundColor = input<string | null>(null);\n\treadonly borderColor = input<string | null>(null);\n\treadonly pointerEvents = input<'auto' | 'none' | null>(null);\n\treadonly appendTooltipToBody = input<boolean | null>(null);\n\n\tprivate readonly mergedOptions = computed<ErrorTooltipOptions>(() => (\n\t\t{\n\t\t...defaultOptions,\n\t\t...this.globalOptions,\n\t\t...this.options(),\n\t\t...(this.id() != null ? { id: this.id()! } : {}),\n\t\t...(this.showFirstErrorOnly() != null ? { showFirstErrorOnly: this.showFirstErrorOnly()! } : {}),\n\t\t...(this.placement() != null ? { placement: this.placement()! } : {}),\n\t\t...(this.zIndex() != null ? { zIndex: this.zIndex()! } : {}),\n\t\t...(this.tooltipClass() != null ? { tooltipClass: this.tooltipClass()! } : {}),\n\t\t...(this.shadow() != null ? { shadow: this.shadow()! } : {}),\n\t\t...(this.offset() != null ? { offset: this.offset()! } : {}),\n\t\t...(this.width() != null ? { width: this.width()! } : {}),\n\t\t...(this.maxWidth() != null ? { maxWidth: this.maxWidth()! } : {}),\n\t\t...(this.textColor() != null ? { textColor: this.textColor()! } : {}),\n\t\t...(this.backgroundColor() != null ? { backgroundColor: this.backgroundColor()! } : {}),\n\t\t...(this.borderColor() != null ? { borderColor: this.borderColor()! } : {}),\n\t\t...(this.pointerEvents() != null ? { pointerEvents: this.pointerEvents()! } : {}),\n\t\t...(this.appendTooltipToBody() != null ? { appendTooltipToBody: this.appendTooltipToBody()! } : {}),\n\t}));\n\n\t// ---- internal state ----\n\tprivate refToTooltip = signal<ComponentRef<NgErrorTooltipComponent> | null>(null);\n\tprivate tooltipComponent = computed(() => this.refToTooltip()?.instance ?? null);\n\tprivate formControlPosition = signal<DOMRect | null>(null);\n\tprivate isTooltipVisible = signal<boolean>(false);\n\n\t// Bridge signal: triggers recomputation when reactive forms state changes\n\tprivate readonly controlTick = signal(0);\n\n\tprivate readonly destroyAll$ = new Subject<void>();\n\tprivate readonly tooltipDestroyed$ = new Subject<void>();\n\n\tprivate readonly errorPayloads = computed<ErrorPayload[]>(() => {\n\t\t// <-- the important part: depend on controlTick()\n\t\tthis.controlTick();\n\n\t\tconst entries = Object.entries(this.ngControl?.errors ?? {}) as Array<[string, unknown]>;\n\n\t\tconst errors = entries.reduce<ErrorPayload[]>((acc, [, err]) => {\n\t\t\tif (Array.isArray(err)) {\n\t\t\t\tfor (const e of err as any[]) {\n\t\t\t\tconst t = e?.text;\n\t\t\t\tif (typeof t === 'string' || isTriLangText(t)) acc.push(t);\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t}\n\n\t\t\tif (typeof err === 'string' || isTriLangText(err)) {\n\t\t\t\tacc.push(err as ErrorPayload);\n\t\t\t}\n\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst { showFirstErrorOnly } = this.mergedOptions();\n\t\treturn showFirstErrorOnly && errors.length > 1 ? [errors[0]] : errors;\n\t});\n\n\tconstructor() {\n\t\t// Keep tooltip inputs in sync (only if tooltip exists)\n\t\teffect(() => {\n\n\t\t\t// Always read these so the effect tracks them as dependencies\n\t\t\tconst opts = this.mergedOptions();\n\t\t\tconst errs = this.errorPayloads();\n\t\t\tconst host = this.hostEl.nativeElement;\t\t\t\n\n\t\t\tconst ref = this.refToTooltip();\n\t\t\tif (!ref) { return; }\n\n\t\t\tref.setInput('options', opts);\n\t\t\tref.setInput('errors', errs);\n\t\t\tref.setInput('formControl', host);\n\n\t\t\t// Re-position if visible (placement/offset changes need it)\n\t\t\tconst comp = this.tooltipComponent();\n\t\t\tif (this.isTooltipVisible() && comp) {\n\t\t\t\tcomp.showTooltip(this.hostEl);\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit(): void {\n\t\t// Bridge Rx -> Signal\n\t\tconst ctrl = this.ngControl?.control;\n\t\tif (ctrl) {\n\t\t\tmerge(ctrl.statusChanges ?? [], ctrl.valueChanges ?? [])\n\t\t\t\t.pipe(\n\t\t\t\t\ttap(() => this.controlTick.update(x => x + 1)),\n\t\t\t\t\ttakeUntil(this.destroyAll$)\n\t\t\t\t)\n\t\t\t\t.subscribe();\n\t\t}\n\n\t\t// One-time: listen to parent form submit (lifetime listener)\n\t\tthis.handleTooltipVisibilityOnFormSubmission();\n\t}\n\n\t/** Public API **/\n\tpublic showErrorTooltip(): void {\n\t\t// Ensure we read fresh errors (in case submit just happened)\n\t\tif (this.errorPayloads().length > 0) { this.displayTooltip(); }\n\t}\n\n\tpublic hideErrorTooltip(): void {\n\t\tthis.destroyTooltip();\n\t}\n\n\t/** Submit listener **/\n\tprivate handleTooltipVisibilityOnFormSubmission(): void {\n\t\tconst parent = this.controlContainer?.control ? (this.controlContainer.formDirective as FormGroupDirective) : null;\n\t\tif (!parent) { return; }\n\n\t\tparent.ngSubmit\n\t\t\t.pipe(\n\t\t\t\ttap(() => {\n\t\t\t\t\t// bump tick to pick up touched/validation updates that happened during submit\n\t\t\t\t\tthis.controlTick.update(x => x + 1);\n\n\t\t\t\t\tif (this.errorPayloads().length > 0) { this.displayTooltip(); }\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.destroyAll$)\n\t\t\t)\n\t\t\t.subscribe();\n\t}\n\n\t/** Tooltip lifecycle **/\n\tprivate displayTooltip(): void {\n\t\tthis.destroyTooltip();\n\t\tthis.setupTooltipComponent();\n\n\t\trequestAnimationFrame(() => {\n\t\t\tthis.formControlPosition.set(this.getFormControlPosition());\n\t\t\tthis.tooltipComponent()?.showTooltip(this.hostEl);\n\t\t\tthis.isTooltipVisible.set(true);\n\t\t});\n\t}\n\n\tprivate setupTooltipComponent(): void {\n\t\tconst ref = this.viewContainerRef.createComponent(NgErrorTooltipComponent, {\n\t\t\t// EnvironmentInjector is the correct one for standalone components\n\t\t\tenvironmentInjector: this.envInjector });\n\n\t\tthis.refToTooltip.set(ref);\n\n\t\tconst comp = this.tooltipComponent();\n\t\tif (!comp) { return; }\n\n\t\tthis.attachListeners(comp);\n\t\t\n\t\tconst tooltipElement = ref.location.nativeElement as HTMLElement;\n\t\tconst appendTooltipToBody = this.mergedOptions().appendTooltipToBody ?? defaultOptions.appendTooltipToBody!;\n\n\t\tif (appendTooltipToBody) {\n\t\t\tdocument.body.appendChild(tooltipElement);\n\t\t}\n\t\telse {\n\t\t\tconst hostParent = this.hostEl.nativeElement.parentElement;\n\n\t\t\tif (hostParent instanceof HTMLElement) {\n\t\t\t\thostParent.appendChild(tooltipElement);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdocument.body.appendChild(tooltipElement);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate attachListeners(tooltipComponent: NgErrorTooltipComponent): void {\n\t\tconst clickOnTooltip$ = tooltipComponent.userClickOnTooltip$;\n\t\tconst focusOnHost$ = fromEvent(this.hostEl.nativeElement, 'focusin');\n\t\tconst pointerDownOnHost$ = fromEvent(this.hostEl.nativeElement, 'pointerdown');\n\n\t\trace(clickOnTooltip$, pointerDownOnHost$, focusOnHost$)\n\t\t\t.pipe(\n\t\t\t\tfilter(() => this.isTooltipVisible() && !!this.tooltipComponent()),\n\t\t\t\ttap(() => this.destroyTooltip()),\n\t\t\t\ttakeUntil(merge(this.tooltipDestroyed$, this.destroyAll$))\n\t\t\t)\n\t\t\t.subscribe();\n\n\t\tinterval(300)\n\t\t\t.pipe(\n\t\t\t\ttap(() => {\n\t\t\t\tconst newPos = this.getFormControlPosition();\n\t\t\t\tconst oldPos = this.formControlPosition();\n\n\t\t\t\tconst hasPosChanged =\n\t\t\t\t\tthis.isTooltipVisible() &&\n\t\t\t\t\t!!this.tooltipComponent() &&\n\t\t\t\t\t!!oldPos &&\n\t\t\t\t\t(oldPos.top !== newPos.top || oldPos.left !== newPos.left);\n\n\t\t\t\tif (hasPosChanged) {\n\t\t\t\t\tthis.formControlPosition.set(newPos);\n\t\t\t\t\tthis.tooltipComponent()?.setVisibilityAndPosition(this.hostEl);\n\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttakeUntil(merge(this.tooltipDestroyed$, this.destroyAll$))\n\t\t\t)\n\t\t\t.subscribe();\n\t}\n\n\tprivate destroyTooltip(): void {\n\t\tthis.tooltipDestroyed$.next();\n\t\tthis.refToTooltip()?.destroy();\n\t\tthis.refToTooltip.set(null);\n\t\tthis.isTooltipVisible.set(false);\n\t\tthis.formControlPosition.set(null);\n\t}\n\n\tprivate getFormControlPosition(): DOMRect {\n\t\treturn this.hostEl.nativeElement.getBoundingClientRect();\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.destroyTooltip();\n\t\tthis.destroyAll$.next();\n\t\tthis.destroyAll$.complete();\n\t\tthis.tooltipDestroyed$.complete();\n\t}\n}\n","import { ComponentRef, computed, Directive, effect, ElementRef, EnvironmentInjector, inject, input, OnDestroy, signal, ViewContainerRef } from '@angular/core';\n\nimport { Subject, filter, fromEvent, interval, race, takeUntil, tap } from 'rxjs';\nimport { Placement } from './tooltip/placement.type';\nimport { ErrorPayload } from './error-payload.type';\nimport { defaultOptions } from './options/default-options.const';\nimport { ErrorTooltipOptions } from './options/error-tooltip-options.interface';\nimport { ERROR_TOOLTIP_OPTIONS } from './options/error-tooltip-options.token';\nimport { NgErrorTooltipComponent } from './tooltip/ng-error-tooltip.component';\nimport { FieldTree } from '@angular/forms/signals';\nimport { TriLangText } from './validators/tri-lang-text.type';\n\n\n@Directive({\n\tselector: '[ngErrorTooltipSig]',\n\tstandalone: true\n})\n\nexport class ErrorTooltipSigDirective implements OnDestroy {\n\tprivate readonly hostEl = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprivate readonly viewContainerRef = inject(ViewContainerRef);\n\tprivate readonly injector = inject(EnvironmentInjector);\n\tprivate readonly globalOptions = inject(ERROR_TOOLTIP_OPTIONS);\n\n\t// Pass options as a single object:\n\treadonly options = input<ErrorTooltipOptions>({});\n\n\treadonly errorTooltipField = input.required<FieldTree<unknown, string | number>>();\n\treadonly id = input<string | number | null>(null);\n\treadonly showFirstErrorOnly = input<boolean | null>(null);\n\treadonly placement = input<Placement | null>(null);\n\treadonly zIndex = input<number | null>(null);\n\treadonly tooltipClass = input<string | null>(null);\n\treadonly shadow = input<boolean | null>(null);\n\treadonly offset = input<number | null>(null);\n\treadonly width = input<string | null>(null);\n\treadonly maxWidth = input<string | null>(null);\n\treadonly textColor = input<string | null>(null);\n\treadonly backgroundColor = input<string | null>(null);\n\treadonly borderColor = input<string | null>(null);\n\treadonly pointerEvents = input<'auto' | 'none' | null>(null);\n\treadonly appendTooltipToBody = input<boolean | null>(null);\n\n\t// A merge of all options that were passed in various ways:\n\tprivate readonly mergedOptions = computed<ErrorTooltipOptions>(() => ({\n\t\t...defaultOptions,\n\t\t...this.globalOptions,\n\t\t...this.options(),\n\t\t...(this.id() != null ? { id: this.id()! } : {}),\n\t\t...(this.showFirstErrorOnly() != null ? { showFirstErrorOnly: this.showFirstErrorOnly()! } : {}),\n\t\t...(this.placement() != null ? { placement: this.placement()! } : {}),\n\t\t...(this.zIndex() != null ? { zIndex: this.zIndex()! } : {}),\n\t\t...(this.tooltipClass() != null ? { tooltipClass: this.tooltipClass()! } : {}),\n\t\t...(this.shadow() != null ? { shadow: this.shadow()! } : {}),\n\t\t...(this.offset() != null ? { offset: this.offset()! } : {}),\n\t\t...(this.width() != null ? { width: this.width()! } : {}),\n\t\t...(this.maxWidth() != null ? { maxWidth: this.maxWidth()! } : {}),\n\t\t...(this.textColor() != null ? { textColor: this.textColor()! } : {}),\n\t\t...(this.backgroundColor() != null ? { backgroundColor: this.backgroundColor()! } : {}),\n\t\t...(this.borderColor() != null ? { borderColor: this.borderColor()! } : {}),\n\t\t...(this.pointerEvents() != null ? { pointerEvents: this.pointerEvents()! } : {}),\n\t\t...(this.appendTooltipToBody() != null ? { appendTooltipToBody: this.appendTooltipToBody()! } : {}),\n\t}));\n\n\t// --- internal state ---\n\tprivate refToTooltip = signal<ComponentRef<NgErrorTooltipComponent> | null>(null);\n\tprivate tooltipComponent = computed(() => this.refToTooltip()?.instance ?? null);\n\tprivate formControlPosition = signal<DOMRect | null>(null);\n\n\n\tprivate readonly field = computed(() => {\n\t\ttry {\n\t\t\treturn this.errorTooltipField()();\n\t\t}\n\t\tcatch {\n\t\t\tthrow new Error(\n\t\t\t\t'ngErrorTooltipSig requires [errorTooltipField]=\"...\" on the same host element.'\n\t\t\t);\n\t\t}\n\t});\n\n\n\tprivate readonly errorPayloads = computed<ErrorPayload[]>(() => {\n\t\tconst { showFirstErrorOnly } = this.mergedOptions();\n\t\tconst errors = this.field().errors() ?? [];\n\n\t\tconst payloads = errors.map(err =>\n\t\t\terr.message === 'i18n' && 'i18n' in err\n\t\t\t? err.i18n as TriLangText\n\t\t\t: err.message as string\n\t\t);\n\n\t\treturn showFirstErrorOnly && payloads.length\n\t\t\t? [payloads[0]]\n\t\t\t: payloads;\n\t});\n\n\n\tprivate isTooltipVisible = signal<boolean>(false);\n\n\tprivate readonly destroy$ = new Subject<void>();\n\n\tconstructor() {\n\t\t// Update tooltip inputs whenever options/errors change (if tooltip exists)\n\t\teffect(() => {\n\t\t\t\n\t\t\t// Always read these so the effect tracks them as dependencies\n\t\t\tconst opts = this.mergedOptions();\n\t\t\tconst errs = this.errorPayloads();\n\t\t\tconst host = this.hostEl.nativeElement;\n\n\t\t\tconst ref = this.refToTooltip();\n\t\t\tif (!ref) { return; }\n\n\t\t\tref.setInput('options', opts);\n\t\t\tref.setInput('errors', errs);\n\t\t\tref.setInput('formControl', host);\n\n\t\t\t// If there are no more errors, remove the tooltip completely\n\t\t\tif (!ref.instance.hasErrors()) {\n\t\t\t\tthis.destroyTooltip();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Re-position if visible (placement/offset changes need it)\n\t\t\tconst comp = this.tooltipComponent();\n\t\t\tif (this.isTooltipVisible() && comp) {\n\t\t\t\tcomp.showTooltip(this.hostEl);\n\t\t\t}\n\t\t});\n\t}\n\n\t/** Public User-Methods **/\n\n\tpublic showErrorTooltip() {\n\t\tif (this.errorPayloads().length > 0) {\n\t\t\tthis.displayTooltip();\n\t\t}\n\t}\n\n\tpublic hideErrorTooltip() {\n\t\tthis.destroyTooltip();\n\t}\n\n\t/** Listeners **/\n\n\tprivate attachListeners(tooltipComponent: NgErrorTooltipComponent, formControlRef: ElementRef<any>) {\n\t\t// Listens to interactions with the tooltip or the form control:\n\t\tthis.listenToUserInteraction(tooltipComponent, formControlRef);\n\n\t\t// Listens for changes in the position of the form control element to which the tooltip is attached:\n\t\tthis.listenForPositionChangesOfFormControl();\n\t}\n\n\n\t/* Handles interactions to hide the tooltip */\n\tprivate listenToUserInteraction(tooltipComponent: NgErrorTooltipComponent, formControlRef: ElementRef<any>): void {\n\t\tconst clickOnTooltip$ = tooltipComponent.userClickOnTooltip$;\n\t\tconst focusOnFormControl$ = fromEvent(formControlRef.nativeElement, 'focusin'); // Handles tab navigation\n\t\tconst pointerDownOnFormControl$ = fromEvent(formControlRef.nativeElement, 'pointerdown'); // Handles mouse and touch input\n\n\t\trace(clickOnTooltip$, pointerDownOnFormControl$, focusOnFormControl$)\n\t\t\t.pipe(\n\t\t\t\tfilter(() => this.isTooltipVisible() && !!this.tooltipComponent()),\n\t\t\t\ttap(() => this.destroyTooltip()),\n\t\t\t\ttakeUntil(this.destroy$)\n\t\t\t)\n\t\t\t.subscribe();\n\t}\n\n\t/* Listens for changes in the position of the form control element by periodically checking its position every 300ms. */\n\t/* If the position changes, and the tooltip is visible, it updates the position of the tooltip accordingly. */\n\t/* Needs to be active while tooltip is visible */\n\tprivate listenForPositionChangesOfFormControl() {\n\t\tinterval(300)\n\t\t\t.pipe(\n\t\t\t\ttap(() => {\n\t\t\t\t\tconst newPos = this.getFormControlPosition();\n\t\t\t\t\tconst hasPosChanged = this.isTooltipVisible() && !!this.tooltipComponent() && !!this.formControlPosition() &&\n\t\t\t\t\t\t(this.formControlPosition()!.top !== newPos.top || this.formControlPosition()!.left !== newPos.left);\n\n\t\t\t\t\tif (hasPosChanged && this.tooltipComponent()) {\n\t\t\t\t\t\tthis.formControlPosition.set(newPos);\n\t\t\t\t\t\tthis.tooltipComponent()?.setVisibilityAndPosition(this.hostEl);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.destroy$)\n\t\t\t)\n\t\t\t.subscribe();\n\t}\n\n\tprivate displayTooltip(): void {\n\t\t// Make sure there is no existing tooltip before showing a new one:\n\t\tthis.destroyTooltip();\n\t\t// Instantiate the tooltip, pass the options/error-message, attach listeners and add it to the DOM:\n\t\tthis.setupTooltipComponent();\n\n\t\t// Wait for hostEl.nativeElement to be visible and trigger the tooltip to show:\n\t\trequestAnimationFrame(() => {\n\t\t\tthis.formControlPosition.set(this.getFormControlPosition());\n\n\t\t\tif (this.tooltipComponent()) {\n\t\t\t\tthis.tooltipComponent()?.showTooltip(this.hostEl);\n\t\t\t\tthis.isTooltipVisible.set(true);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate setupTooltipComponent(): void {\n\t\t// Create the component using the ViewContainerRef.\n\t\t// This way the component is automatically added to the change detection cycle of the Angular application\n\t\tconst ref = this.viewContainerRef.createComponent(NgErrorTooltipComponent, { injector: this.injector });\n\n\t\tthis.refToTooltip.set(ref);\n\n\t\tconst comp = this.tooltipComponent();\n\t\tif (!comp) { return; }\n\n\t\tthis.attachListeners(comp, this.hostEl);\n\n\t\tconst tooltipElement = ref.location.nativeElement as HTMLElement;\n\t\tconst appendTooltipToBody = this.mergedOptions().appendTooltipToBody ?? defaultOptions.appendTooltipToBody!;\n\n\t\tif (appendTooltipToBody) {\n\t\t\tdocument.body.appendChild(tooltipElement);\n\t\t}\n\t\telse {\n\t\t\tconst hostParent = this.hostEl.nativeElement.parentElement;\n\n\t\t\tif (hostParent instanceof HTMLElement) {\n\t\t\t\thostParent.appendChild(tooltipElement);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdocument.body.appendChild(tooltipElement);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate destroyTooltip(): void {\n\t\tthis.destroy$.next();\n\t\tthis.refToTooltip()?.destroy();\n\t\tthis.refToTooltip.set(null);\n\t\tthis.isTooltipVisible.set(false);\n\t\tthis.formControlPosition.set(null);\n\t}\n\n\tprivate getFormControlPosition(): DOMRect {\n\t\treturn this.hostEl.nativeElement.getBoundingClientRect();\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.destroyTooltip();\n\t\tthis.destroy$.next();\n\t\tthis.destroy$.complete();\n\t}\n}\n","import { InjectionToken } from '@angular/core';\nimport type { validate as validateFn } from '@angular/forms/signals';\n\nexport type SignalValidateFn = typeof validateFn;\n\nexport const ERROR_TOOLTIP_SIG_VALIDATE =\n  \tnew InjectionToken<SignalValidateFn>('ERROR_TOOLTIP_SIG_VALIDATE');","import { isSignal, makeEnvironmentProviders, Signal, signal } from '@angular/core';\n\nimport { ERROR_TOOLTIP_LANG } from './error-tooltip-lang.token';\nimport { ERROR_TOOLTIP_SIG_VALIDATE, SignalValidateFn } from './error-tooltip-sig-validate.token';\nimport { SupportedLanguage } from './validators/supported-language.type';\n\nexport interface ErrorTooltipProviderOptions {\n\tlang?: SupportedLanguage | Signal<SupportedLanguage>;\n\tvalidate?: SignalValidateFn;\n}\n\nexport function provideErrorTooltips(options: ErrorTooltipProviderOptions = {}) {\n\tconst langSig: Signal<SupportedLanguage> = isSignal(options.lang)\n\t\t? options.lang\n\t\t: signal(options.lang ?? 'de');\n\n\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: ERROR_TOOLTIP_LANG,\n\t\t\tuseValue: langSig,\n\t\t},\n\t\t...(options.validate\n\t\t\t? [{\n\t\t\t\tprovide: ERROR_TOOLTIP_SIG_VALIDATE,\n\t\t\t\tuseValue: options.validate,\n\t\t\t}]\n\t\t\t: []),\n\t]);\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { ERROR_MESSAGES, tri } from './error-messages.const';\nimport { TriLangText } from './tri-lang-text.type';\n\nexport class CustomValidators {\n\n\t/* VALIDATORS (returning error-messages as well) */\n\n\tstatic required(errorMessage?: string): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst errorMsg = errorMessage ?? ERROR_MESSAGES.required.de();\n\t\t\tconst isEmpty = control.value === null || control.value === undefined || control.value === ''\n\t\t\t\t\t\t\t|| (Array.isArray(control.value) && control.value.length === 0);\n\t\t\t// object-property-name must be unique among validators:\n\t\t\treturn isEmpty ? { required: errorMsg } : null;\n\t\t};\n\t}\n\n\tstatic trueRequired(errorMessage?: string): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst msg = errorMessage ?? ERROR_MESSAGES.trueRequired.de();\n\t\t\treturn control.value === true ? null : { trueRequired: msg };\n\t\t};\n\t}\n\n\tstatic minLength(minLength: number, errorMessage?: string): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst errorMsg = errorMessage ?? ERROR_MESSAGES.minLength.de(minLength);\n\t\t\t// object-property-name must be unique among validators:\n\t\t\treturn !!control.value && control.value.length < minLength ? { minLength: errorMsg } : null;\n\t\t};\n\t}\n\n\tstatic maxLength(maxLength: number, errorMessage?: string): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst errorMsg = errorMessage ?? ERROR_MESSAGES.maxLength.de(maxLength);\n\t\t\t// object-property-name must be unique among validators:\n\t\t\treturn !!control.value && control.value.length > maxLength ? { maxLength: errorMsg } : null;\n\t\t};\n\t}\n\n\tstatic smallerThan(referenceValue: number, errorMessage?: string): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst value = control.value;\n\t\t\t// Skip validation for null, undefined, or empty string\n\t\t\tif (value === null || value === undefined || value === \"\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst numericValue = Number(value);\n\n\t\t\t// If it's not a number, do not validate\n\t\t\tif (isNaN(numericValue)) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst errorMsg = errorMessage ?? ERROR_MESSAGES.smallerThan.de(referenceValue);\n\t\t\t// object-property-name must be unique among validators:\n\t\t\treturn numericValue >= referenceValue ? { smallerThan: errorMsg } : null;\n\t\t};\n\t}\n\n\tstatic formattedSmallerThan(referenceValue: number, errorMessage?: string): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst value = control.value;\n\t\t\t// Skip validation for null, undefined, or empty string\n\t\t\tif (value === null || value === undefined || value === \"\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst numericValue = Number(value);\n\n\t\t\t// If it's not a number, do not validate\n\t\t\tif (isNaN(numericValue)) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst errorMsg = errorMessage ?? ERROR_MESSAGES.formattedSmallerThan.de(referenceValue);\n\t\t\t// object-property-name must be unique among validators:\n\t\t\treturn numericValue >= referenceValue ? { smallerThan: errorMsg } : null;\n\t\t};\n\t}\n\n\tstatic greaterThan(referenceValue: number, errorMessage?: string): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst value = control.value;\n\t\t\t// Skip validation for null, undefined, or empty string\n\t\t\tif (value === null || value === undefined || value === \"\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst numericValue = Number(value);\n\t\t\t// If it's not a number, do not validate:\n\t\t\tif (isNaN(numericValue)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst errorMsg = errorMessage ?? ERROR_MESSAGES.greaterThan.de(referenceValue);\n\t\t\t// object-property-name must be unique among validators:\n\t\t\treturn numericValue <= referenceValue ? { greaterThan: errorMsg } : null;\n\t\t};\n\t}\n\n\tstatic formattedGreaterThan(referenceValue: number, errorMessage?: string): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst value = control.value;\n\t\t\t// Skip validation for null, undefined, or empty string\n\t\t\tif (value === null || value === undefined || value === \"\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst numericValue = Number(value);\n\t\t\t// If it's not a number, do not validate:\n\t\t\tif (isNaN(numericValue)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst errorMsg = errorMessage ?? ERROR_MESSAGES.formattedGreaterThan.de(referenceValue);\n\t\t\t// object-property-name must be unique among validators:\n\t\t\treturn numericValue <= referenceValue ? { greaterThan: errorMsg } : null;\n\t\t};\n\t}\n\n\tstatic minValue(referenceValue: number, errorMessage?: string): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst value = control.value;\n\t\t\t// Skip validation for null, undefined, or empty string\n\t\t\tif (value === null || value === undefined || value === \"\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst numericValue = Number(value);\n\t\t\t// If it's not a number, do not validate:\n\t\t\tif (isNaN(numericValue)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst errorMsg = errorMessage ?? ERROR_MESSAGES.minValue.de(referenceValue);\n\t\t\t// object-property-name must be unique among validators:\n\t\t\treturn numericValue < referenceValue ? { greaterThan: errorMsg } : null;\n\t\t};\n\t}\n\n\tstatic formattedMinValue(referenceValue: number, errorMessage?: string): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst value = control.value;\n\t\t\t// Skip validation for null, undefined, or empty string\n\t\t\tif (value === null || value === undefined || value === \"\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst numericValue = Number(value);\n\t\t\t// If it's not a number, do not validate:\n\t\t\tif (isNaN(numericValue)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst errorMsg = errorMessage ?? ERROR_MESSAGES.formattedMinValue.de(referenceValue);\n\t\t\t// object-property-name must be unique among validators:\n\t\t\treturn numericValue < referenceValue ? { greaterThan: errorMsg } : null;\n\t\t};\n\t}\n\n\tstatic maxValue(referenceValue: number, errorMessage?: string): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst value = control.value;\n\t\t\t// Skip validation for null, undefined, or empty string\n\t\t\tif (value === null || value === undefined || value === \"\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst numericValue = Number(value);\n\n\t\t\t// If it's not a number, do not validate\n\t\t\tif (isNaN(numericValue)) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst errorMsg = errorMessage ?? ERROR_MESSAGES.maxValue.de(referenceValue);\n\t\t\t// object-property-name must be unique among validators:\n\t\t\treturn numericValue > referenceValue ? { smallerThan: errorMsg } : null;\n\t\t};\n\t}\n\n\tstatic formattedMaxValue(referenceValue: number, errorMessage?: string): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst value = control.value;\n\t\t\t// Skip validation for null, undefined, or empty string\n\t\t\tif (value === null || value === undefined || value === \"\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst numericValue = Number(value);\n\n\t\t\t// If it's not a number, do not validate\n\t\t\tif (isNaN(numericValue)) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst errorMsg = errorMessage ?? ERROR_MESSAGES.formattedMaxValue.de(referenceValue);\n\t\t\t// object-property-name must be unique among validators:\n\t\t\treturn numericValue > referenceValue ? { smallerThan: errorMsg } : null;\n\t\t};\n\t}\n\n\tstatic lettersOnly(errorMessage?: string): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst errorMsg = errorMessage ?? ERROR_MESSAGES.lettersOnly.de();\n\t\t\tconst regex = new RegExp('^[A-Za-zÀ-ÖØ-öø-ÿ ]*$');\n\t\t\t  const isValid = regex.test(control.value);\n\t\t\t  // object-property-name must be unique among validators:\n\t\t\t  return isValid ? null : { lettersOnly : errorMsg };\n\t\t};\n\t}\n\n\tstatic email(errorMessage?: string): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t  const value = control.value;\n\n\t\t  // Skip validation for null, undefined, or empty string\n\t\t  if (value === null || value === undefined || value === \"\") {\n\t\t\t\treturn null;\n\t\t  }\n\n\t\t  // Simple regex for email validation\n\t\t  const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\n\n\t\t  // If the value does not match the regex, return the error\n\t\t  if (!emailRegex.test(value)) {\n\t\t\t\tconst errorMsg = errorMessage ?? ERROR_MESSAGES.invalidEmail.de();\n\t\t\t\treturn { invalidEmail: errorMsg };\n\t\t  }\n\n\t\t  // If validation passes, return null (no error)\n\t\t  return null;\n\t\t};\n\t}\n\n\t/* Can show *MULTIPLE* errors at once: */\n\n\tstatic passwordErrors(minLength: number, minDigits: number, minCapitalLetters: number): ValidatorFn {\n\t\treturn (control:AbstractControl)=> {\n\t\t\tconst isEmpty = !control.value.length;\n\t\t\tconst violatesMinLength =  isEmpty || control.value.length < minLength;\n\t\t\tconst violatesMinDigits = isEmpty || control.value.split('').filter((c: any) => !isNaN(c)).length < minDigits;\n\t\t\tconst violatesMinCapitalLetters = isEmpty|| control.value.split('').filter((c: any) => /^[A-Za-zÀ-ÖØ-öø-ÿ]*$/.test(c) && c === c.toUpperCase()).length < minCapitalLetters;\n\n\t\t\tconst errors = [{\n\t\t\t\terror: violatesMinLength,\n\t\t\t\ttext: ERROR_MESSAGES.minLength.de(minLength)\n\t\t\t},\n\t\t\t{\n\t\t\t\terror: violatesMinDigits,\n\t\t\t\ttext: ERROR_MESSAGES.minNumberOfDigits.de(minDigits)\n\t\t\t},\n\t\t\t{\n\t\t\t\terror: violatesMinCapitalLetters,\n\t\t\t\ttext: ERROR_MESSAGES.minNumberOfCapitalLetters.de(minCapitalLetters)\n\t\t\t}];\n\n\t\t\tconst errorsInFormControl = errors.filter(e => e.error === true);\n\t\t\treturn errorsInFormControl.length ? { passwordErrors: errorsInFormControl } : null;\n\t\t}\n\t}\n\n\tstatic regexPattern(pattern: RegExp, errorMessage: string): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst value = control.value;\n\n\t\t\t// Skip validation if the value is empty (null = valid):\n\t\t\tif (value === null || value === undefined || value === '') {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst isValid = pattern.test(value);\n\n\t\t\t// The object property name must be unique among validators:\n\t\t\treturn isValid ? null : { regexPattern: errorMessage };\n\t\t};\n\t}\n\n\n\t/*** i18 variants of custom validators ***/\n\n\t/* VALIDATORS (returning tri-language error messages) */\n\n\tstatic requiredI18n(errorMessage?: TriLangText): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst isEmpty = this.isEmptyValue(control.value);\n\t\t\tconst msg = errorMessage ?? tri('required');\n\t\t\treturn isEmpty ? { required: msg } : null;\n\t\t};\n\t}\n\n\tstatic trueRequiredI18n(errorMessage?: TriLangText): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst msg = errorMessage ?? tri('trueRequired');\n\t\t\treturn control.value === true ? null : { trueRequired: msg };\n\t\t};\n\t}\n\n\tstatic minLengthI18n(minLength: number, errorMessage?: TriLangText): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst value = control.value;\n\t\t\tif (!value) return null; // keep legacy behaviour: only validate when there is a value\n\t\t\tconst msg = errorMessage ?? tri('minLength', minLength);\n\t\t\treturn value.length < minLength ? { minLength: msg } : null;\n\t\t};\n\t}\n\n\tstatic maxLengthI18n(maxLength: number, errorMessage?: TriLangText): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst value = control.value;\n\t\t\tif (!value) return null; // keep legacy behaviour: only validate when there is a value\n\t\t\tconst msg = errorMessage ?? tri('maxLength', maxLength);\n\t\t\treturn value.length > maxLength ? { maxLength: msg } : null;\n\t\t};\n\t}\n\n\tstatic smallerThanI18n(referenceValue: number, errorMessage?: TriLangText): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst numericValue = this.toNumberOrNull(control.value);\n\t\t\tif (numericValue === null) return null;\n\n\t\t\tconst msg = errorMessage ?? tri('smallerThan', referenceValue);\n\t\t\treturn numericValue >= referenceValue ? { smallerThan: msg } : null;\n\t\t};\n\t}\n\n\tstatic formattedSmallerThanI18n(referenceValue: number, errorMessage?: TriLangText): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst numericValue = this.toNumberOrNull(control.value);\n\t\t\tif (numericValue === null) return null;\n\n\t\t\tconst msg = errorMessage ?? tri('formattedSmallerThan', referenceValue);\n\t\t\treturn numericValue >= referenceValue ? { smallerThan: msg } : null;\n\t\t};\n\t}\n\n\tstatic greaterThanI18n(referenceValue: number, errorMessage?: TriLangText): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst numericValue = this.toNumberOrNull(control.value);\n\t\t\tif (numericValue === null) return null;\n\n\t\t\tconst msg = errorMessage ?? tri('greaterThan', referenceValue);\n\t\t\treturn numericValue <= referenceValue ? { greaterThan: msg } : null;\n\t\t};\n\t}\n\n\tstatic formattedGreaterThanI18n(referenceValue: number, errorMessage?: TriLangText): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst numericValue = this.toNumberOrNull(control.value);\n\t\t\tif (numericValue === null) return null;\n\n\t\t\tconst msg = errorMessage ?? tri('formattedGreaterThan', referenceValue);\n\t\t\treturn numericValue <= referenceValue ? { greaterThan: msg } : null;\n\t\t};\n\t}\n\n\tstatic minValueI18n(referenceValue: number, errorMessage?: TriLangText): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst numericValue = this.toNumberOrNull(control.value);\n\t\t\tif (numericValue === null) return null;\n\n\t\t\tconst msg = errorMessage ?? tri('minValue', referenceValue);\n\t\t\t// keep your legacy keying (even if it looks odd): { greaterThan: ... }\n\t\t\treturn numericValue < referenceValue ? { greaterThan: msg } : null;\n\t\t};\n\t}\n\n\tstatic formattedMinValueI18n(referenceValue: number, errorMessage?: TriLangText): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst numericValue = this.toNumberOrNull(control.value);\n\t\t\tif (numericValue === null) return null;\n\n\t\t\tconst msg = errorMessage ?? tri('formattedMinValue', referenceValue);\n\t\t\t// keep your legacy keying (even if it looks odd): { greaterThan: ... }\n\t\t\treturn numericValue < referenceValue ? { greaterThan: msg } : null;\n\t\t};\n\t}\n\n\tstatic maxValueI18n(referenceValue: number, errorMessage?: TriLangText): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst numericValue = this.toNumberOrNull(control.value);\n\t\t\tif (numericValue === null) return null;\n\n\t\t\tconst msg = errorMessage ?? tri('maxValue', referenceValue);\n\t\t\t// keep your legacy keying (even if it looks odd): { smallerThan: ... }\n\t\t\treturn numericValue > referenceValue ? { smallerThan: msg } : null;\n\t\t};\n\t}\n\n\tstatic formattedMaxValueI18n(referenceValue: number, errorMessage?: TriLangText): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst numericValue = this.toNumberOrNull(control.value);\n\t\t\tif (numericValue === null) return null;\n\n\t\t\tconst msg = errorMessage ?? tri('formattedMaxValue', referenceValue);\n\t\t\t// keep your legacy keying (even if it looks odd): { smallerThan: ... }\n\t\t\treturn numericValue > referenceValue ? { smallerThan: msg } : null;\n\t\t};\n\t}\n\n\tstatic lettersOnlyI18n(errorMessage?: TriLangText): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst msg = errorMessage ?? tri('lettersOnly');\n\t\t\tconst regex = new RegExp('^[A-Za-zÀ-ÖØ-öø-ÿ ]*$');\n\t\t\tconst isValid = regex.test(control.value);\n\t\t\treturn isValid ? null : { lettersOnly: msg };\n\t\t};\n\t}\n\n\tstatic emailI18n(errorMessage?: TriLangText): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst value = control.value;\n\n\t\t\tif (value === null || value === undefined || value === '') {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\n\n\t\t\tif (!emailRegex.test(value)) {\n\t\t\t\tconst msg = errorMessage ?? tri('invalidEmail');\n\t\t\t\treturn { invalidEmail: msg };\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t}\n\n\t/* Can show MULTIPLE errors at once (i18n variant): */\n\n\tstatic passwordErrorsI18n(minLength: number, minDigits: number, minCapitalLetters: number): ValidatorFn {\n\t\treturn (control: AbstractControl) => {\n\t\t\tconst isEmpty = !control.value?.length;\n\n\t\t\tconst violatesMinLength = isEmpty || control.value.length < minLength;\n\t\t\tconst violatesMinDigits = isEmpty || control.value.split('').filter((c: any) => !isNaN(c)).length < minDigits;\n\t\t\tconst violatesMinCapitalLetters =\n\t\t\t\tisEmpty || control.value.split('').filter((c: any) => /^[A-Za-zÀ-ÖØ-öø-ÿ]*$/.test(c) && c === c.toUpperCase()).length < minCapitalLetters;\n\n\t\t\t// keep legacy structure: array of objects with a `text` property\n\t\t\tconst errors = [\n\t\t\t\t{ error: violatesMinLength, text: tri('minLength', minLength) },\n\t\t\t\t{ error: violatesMinDigits, text: tri('minNumberOfDigits', minDigits) },\n\t\t\t\t{ error: violatesMinCapitalLetters, text: tri('minNumberOfCapitalLetters', minCapitalLetters) }\n\t\t\t];\n\n\t\t\tconst errorsInFormControl = errors.filter(e => e.error === true);\n\t\t\treturn errorsInFormControl.length ? { passwordErrors: errorsInFormControl } : null;\n\t\t};\n\t}\n\n\t/**\n\t * i18n regexPattern:\n\t * Here it's mandatory that the caller provides all three translations (app-specific text).\n\t */\n\tstatic regexPatternI18n(pattern: RegExp, errorMessage: TriLangText): ValidatorFn {\n\t\treturn (control: AbstractControl): ValidationErrors | null => {\n\t\t\tconst value = control.value;\n\n\t\t\tif (value === null || value === undefined || value === '') {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst isValid = pattern.test(value);\n\t\t\treturn isValid ? null : { regexPattern: errorMessage };\n\t\t};\n\t}\n\n\n\t/*** Helpers ***/\n\n\tprivate static isEmptyValue(value: unknown): boolean {\n\t\t// null / undefined / empty string\n\t\tif (value == null) {\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\tif (typeof value === 'string') {\n\t\t\treturn value.trim().length === 0;\n\t\t}\n\n\t\t// number: treat NaN as empty\n\t\tif (typeof value === 'number') {\n\t\t\treturn Number.isNaN(value);\n\t\t}\n\n\t\t// arrays\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.length === 0;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate static toNumberOrNull(value: unknown): number | null {\n\t\tif (value === null || value === undefined || value === '') {\n\t\t\treturn null;\n\t\t}\n\t\t\n\t\tconst n = Number(value);\n\t\treturn Number.isNaN(n) ? null : n;\n\t}\n\n}\n","import { SchemaPath } from '@angular/forms/signals';\nimport { ERROR_MESSAGES, tri } from './error-messages.const';\nimport { TriLangText } from './tri-lang-text.type';\nimport { inject, Service, Signal } from '@angular/core';\nimport { ERROR_TOOLTIP_SIG_VALIDATE } from '../error-tooltip-sig-validate.token';\n\ntype TriLangTextLike =\n\t| TriLangText\n\t| Signal<TriLangText | null | undefined>\n\t| (() => TriLangText | null | undefined);\n\ntype ValueLike<T> = T | Signal<T> | (() => T);\n\n@Service()\nexport class CustomSigValidators {\n\tprivate readonly validate = inject(ERROR_TOOLTIP_SIG_VALIDATE);\n\n\tprivate resolve<T>(v: ValueLike<T>): T {\n\t\t// Signal<T> is a function at runtime\n\t\treturn typeof v === 'function' ? (v as any)() : v;\n\t}\n\n\tprivate resolveTriLangText(v?: TriLangTextLike): TriLangText | null {\n\t\tif (!v) return null;\n\t\tif (typeof v === 'function') return (v as () => TriLangText | null | undefined)() ?? null;\n\t\tif (typeof v === 'object') {\n\t\t\t// Signal is a function at runtime. But typing-wise it's an object here if it comes through Signal<T>.\n\t\t\t// In Angular signals, `Signal<T>` is callable, so we handle it via \"as any\".\n\t\t\tconst maybeFn = v as any;\n\t\t\treturn typeof maybeFn === 'function' ? (maybeFn() ?? null) : (v as TriLangText);\n\t\t}\n\t\treturn null;\n\t}\n\n\trequired(path: SchemaPath<any>, errorMessage?: ValueLike<string>): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst errorMsg = errorMessage ? this.resolve(errorMessage) : ERROR_MESSAGES.required.de();\n\t\t\tconst value = ctx.value();\n\t\t\tconst isEmpty =\n\t\t\t\tvalue === null || value === undefined || value === '' ||\n\t\t\t\t(Array.isArray(value) && value.length === 0);\n\n\t\t\treturn isEmpty ? { kind: 'required', message: errorMsg } : undefined;\n\t\t});\n\t}\n\n\ttrueRequired(path: SchemaPath<boolean | null | undefined>, errorMessage?: ValueLike<string>): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst msg = errorMessage ? this.resolve(errorMessage) : ERROR_MESSAGES.trueRequired.de();\n\t\t\treturn ctx.value() === true ? undefined : { kind: 'trueRequired', message: msg };\n\t\t});\n\t}\n\n\tminLength(\n\t\tpath: SchemaPath<string | number | null | undefined>,\n\t\tminLength: ValueLike<number>,\n\t\terrorMessage?: ValueLike<string>\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst min = this.resolve(minLength);\n\t\t\tconst errorMsg = errorMessage ? this.resolve(errorMessage) : ERROR_MESSAGES.minLength.de(min);\n\t\t\tconst value = ctx.value();\n\t\t\tconst str = value === null || value === undefined ? '' : String(value);\n\t\t\treturn !!str && str.length < min\n\t\t\t\t? { kind: 'minLength', message: errorMsg }\n\t\t\t\t: undefined;\n\t\t});\n\t}\n\n\tmaxLength(\n\t\tpath: SchemaPath<string | number | null | undefined>,\n\t\tmaxLength: ValueLike<number>,\n\t\terrorMessage?: ValueLike<string>\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst max = this.resolve(maxLength);\n\t\t\tconst errorMsg = errorMessage ? this.resolve(errorMessage) : ERROR_MESSAGES.maxLength.de(max);\n\t\t\tconst value = ctx.value();\n\t\t\tconst str = value === null || value === undefined ? '' : String(value);\n\t\t\treturn !!str && str.length > max\n\t\t\t\t? { kind: 'maxLength', message: errorMsg }\n\t\t\t\t: undefined;\n\t\t});\n\t}\n\n\tsmallerThan(\n\t\tpath: SchemaPath<any>,\n\t\treferenceValue: ValueLike<number>,\n\t\terrorMessage?: ValueLike<string>\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst value = ctx.value();\n\n\t\t\t// Skip validation for null, undefined, or empty string\n\t\t\tif (value === null || value === undefined || value === '') return undefined;\n\n\t\t\tconst numericValue = Number(value);\n\t\t\t// If it's not a number, do not this.validate\n\t\t\tif (isNaN(numericValue)) return undefined;\n\n\t\t\tconst ref = this.resolve(referenceValue);\n\t\t\tconst errorMsg = errorMessage ? this.resolve(errorMessage) : ERROR_MESSAGES.smallerThan.de(ref);\n\t\t\treturn numericValue >= ref\n\t\t\t\t? { kind: 'smallerThan', message: errorMsg }\n\t\t\t\t: undefined;\n\t\t});\n\t}\n\n\tformattedSmallerThan(\n\t\tpath: SchemaPath<any>,\n\t\treferenceValue: ValueLike<number>,\n\t\terrorMessage?: ValueLike<string>\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst value = ctx.value();\n\t\t\tif (value === null || value === undefined || value === '') return undefined;\n\n\t\t\tconst numericValue = Number(value);\n\t\t\tif (isNaN(numericValue)) return undefined;\n\n\t\t\tconst ref = this.resolve(referenceValue);\n\t\t\tconst errorMsg = errorMessage ? this.resolve(errorMessage) : ERROR_MESSAGES.formattedSmallerThan.de(ref);\n\t\t\treturn numericValue >= ref\n\t\t\t\t? { kind: 'smallerThan', message: errorMsg }\n\t\t\t\t: undefined;\n\t\t});\n\t}\n\n\tgreaterThan(\n\t\tpath: SchemaPath<any>,\n\t\treferenceValue: ValueLike<number>,\n\t\terrorMessage?: ValueLike<string>\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst value = ctx.value();\n\t\t\tif (value === null || value === undefined || value === '') return undefined;\n\n\t\t\tconst numericValue = Number(value);\n\t\t\tif (isNaN(numericValue)) return undefined;\n\n\t\t\tconst ref = this.resolve(referenceValue);\n\t\t\tconst errorMsg = errorMessage ? this.resolve(errorMessage) : ERROR_MESSAGES.greaterThan.de(ref);\n\t\t\treturn numericValue <= ref\n\t\t\t\t? { kind: 'greaterThan', message: errorMsg }\n\t\t\t\t: undefined;\n\t\t});\n\t}\n\n\tformattedGreaterThan(\n\t\tpath: SchemaPath<any>,\n\t\treferenceValue: ValueLike<number>,\n\t\terrorMessage?: ValueLike<string>\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst value = ctx.value();\n\t\t\tif (value === null || value === undefined || value === '') return undefined;\n\n\t\t\tconst numericValue = Number(value);\n\t\t\tif (isNaN(numericValue)) return undefined;\n\n\t\t\tconst ref = this.resolve(referenceValue);\n\t\t\tconst errorMsg = errorMessage ? this.resolve(errorMessage) : ERROR_MESSAGES.formattedGreaterThan.de(ref);\n\t\t\treturn numericValue <= ref\n\t\t\t\t? { kind: 'greaterThan', message: errorMsg }\n\t\t\t\t: undefined;\n\t\t});\n\t}\n\n\tminValue(\n\t\tpath: SchemaPath<any>,\n\t\treferenceValue: ValueLike<number>,\n\t\terrorMessage?: ValueLike<string>\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst value = ctx.value();\n\t\t\tif (value === null || value === undefined || value === '') return undefined;\n\n\t\t\tconst numericValue = Number(value);\n\t\t\tif (isNaN(numericValue)) return undefined;\n\n\t\t\tconst ref = this.resolve(referenceValue);\n\t\t\tconst errorMsg = errorMessage ? this.resolve(errorMessage) : ERROR_MESSAGES.minValue.de(ref);\n\n\t\t\t// NOTE: replicate exactly your legacy keying: { greaterThan: msg }\n\t\t\treturn numericValue < ref\n\t\t\t\t? { kind: 'greaterThan', message: errorMsg }\n\t\t\t\t: undefined;\n\t\t});\n\t}\n\n\tformattedMinValue(\n\t\tpath: SchemaPath<any>,\n\t\treferenceValue: ValueLike<number>,\n\t\terrorMessage?: ValueLike<string>\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst value = ctx.value();\n\t\t\tif (value === null || value === undefined || value === '') return undefined;\n\n\t\t\tconst numericValue = Number(value);\n\t\t\tif (isNaN(numericValue)) return undefined;\n\n\t\t\tconst ref = this.resolve(referenceValue);\n\t\t\tconst errorMsg = errorMessage ? this.resolve(errorMessage) : ERROR_MESSAGES.formattedMinValue.de(ref);\n\n\t\t\t// replicate legacy keying\n\t\t\treturn numericValue < ref\n\t\t\t\t? { kind: 'greaterThan', message: errorMsg }\n\t\t\t\t: undefined;\n\t\t});\n\t}\n\n\tmaxValue(\n\t\tpath: SchemaPath<any>,\n\t\treferenceValue: ValueLike<number>,\n\t\terrorMessage?: ValueLike<string>\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst value = ctx.value();\n\t\t\tif (value === null || value === undefined || value === '') return undefined;\n\n\t\t\tconst numericValue = Number(value);\n\t\t\tif (isNaN(numericValue)) return undefined;\n\n\t\t\tconst ref = this.resolve(referenceValue);\n\t\t\tconst errorMsg = errorMessage ? this.resolve(errorMessage) : ERROR_MESSAGES.maxValue.de(ref);\n\t\t\treturn numericValue > ref\n\t\t\t\t? { kind: 'smallerThan', message: errorMsg }\n\t\t\t\t: undefined;\n\t\t});\n\t}\n\n\tformattedMaxValue(\n\t\tpath: SchemaPath<any>,\n\t\treferenceValue: ValueLike<number>,\n\t\terrorMessage?: ValueLike<string>\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst value = ctx.value();\n\t\t\tif (value === null || value === undefined || value === '') return undefined;\n\n\t\t\tconst numericValue = Number(value);\n\t\t\tif (isNaN(numericValue)) return undefined;\n\n\t\t\tconst ref = this.resolve(referenceValue);\n\t\t\tconst errorMsg = errorMessage ? this.resolve(errorMessage) : ERROR_MESSAGES.formattedMaxValue.de(ref);\n\t\t\treturn numericValue > ref\n\t\t\t\t? { kind: 'smallerThan', message: errorMsg }\n\t\t\t\t: undefined;\n\t\t});\n\t}\n\n\tlettersOnly(path: SchemaPath<string | null | undefined>, errorMessage?: ValueLike<string>): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst errorMsg = errorMessage ? this.resolve(errorMessage) : ERROR_MESSAGES.lettersOnly.de();\n\t\t\tconst regex = new RegExp('^[A-Za-zÀ-ÖØ-öø-ÿ ]*$');\n\t\t\tconst value = ctx.value();\n\n\t\t\t// Skip validation for null, undefined, or empty string (keep behaviour consistent with other optional validators)\n\t\t\tif (value === null || value === undefined || value === '') return undefined;\n\n\t\t\tconst isValid = regex.test(value);\n\t\t\treturn isValid ? undefined : { kind: 'lettersOnly', message: errorMsg };\n\t\t});\n\t}\n\n\temail(path: SchemaPath<string | null | undefined>, errorMessage?: ValueLike<string>): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst value = ctx.value();\n\n\t\t\t// Skip validation for null, undefined, or empty string\n\t\t\tif (value === null || value === undefined || value === '') return undefined;\n\n\t\t\tconst emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\n\n\t\t\tif (!emailRegex.test(value)) {\n\t\t\t\tconst errorMsg = errorMessage ? this.resolve(errorMessage) : ERROR_MESSAGES.invalidEmail.de();\n\t\t\t\treturn { kind: 'invalidEmail', message: errorMsg };\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t});\n\t}\n\n\t/* Can show *MULTIPLE* errors at once: */\n\n\tpasswordErrors(\n\t\tpath: SchemaPath<string | null | undefined>,\n\t\tminLength: ValueLike<number>,\n\t\tminDigits: ValueLike<number>,\n\t\tminCapitalLetters: ValueLike<number>\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst value = ctx.value() ?? '';\n\n\t\t\tconst minLen = this.resolve(minLength);\n\t\t\tconst digits = this.resolve(minDigits);\n\t\t\tconst capitals = this.resolve(minCapitalLetters);\n\n\t\t\tconst isEmpty = !value.length;\n\t\t\tconst violatesMinLength = isEmpty || value.length < minLen;\n\t\t\tconst violatesMinDigits = isEmpty || value.split('').filter((c: any) => !isNaN(c)).length < digits;\n\t\t\tconst violatesMinCapitalLetters =\n\t\t\t\tisEmpty || value.split('').filter((c: any) => /^[A-Za-zÀ-ÖØ-öø-ÿ]*$/.test(c) && c === c.toUpperCase()).length < capitals;\n\n\t\t\tconst errors = [\n\t\t\t\t{ error: violatesMinLength, text: ERROR_MESSAGES.minLength.de(minLen) },\n\t\t\t\t{ error: violatesMinDigits, text: ERROR_MESSAGES.minNumberOfDigits.de(digits) },\n\t\t\t\t{ error: violatesMinCapitalLetters, text: ERROR_MESSAGES.minNumberOfCapitalLetters.de(capitals) },\n\t\t\t];\n\n\t\t\tconst errorsInFormControl = errors.filter(e => e.error === true);\n\n\t\t\treturn errorsInFormControl.length\n\t\t\t\t? errorsInFormControl.map(e => ({ kind: 'passwordErrors', message: e.text }))\n\t\t\t\t: undefined;\n\t\t});\n\t}\n\n\tregexPattern(\n\t\tpath: SchemaPath<string | null | undefined>,\n\t\tpattern: RegExp,\n\t\terrorMessage: ValueLike<string>\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst value = ctx.value();\n\n\t\t\t// Skip validation if the value is empty (null = valid):\n\t\t\tif (value === null || value === undefined || value === '') return undefined;\n\n\t\t\tconst isValid = pattern.test(value);\n\t\t\treturn isValid ? undefined : { kind: 'regexPattern', message: this.resolve(errorMessage) };\n\t\t});\n\t}\n\n\t/*** i18 variants of custom validators ***/\n\n\t/* VALIDATORS (returning tri-language error messages) */\n\n\trequiredI18n(path: SchemaPath<any>, errorMessage?: TriLangTextLike): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst isEmpty = this.isEmptyValue(ctx.value());\n\t\t\tconst msg = this.resolveTriLangText(errorMessage) ?? tri('required');\n\t\t\treturn isEmpty ? { kind: 'required', message: 'i18n', i18n: msg } : undefined;\n\t\t});\n\t}\n\n\ttrueRequiredI18n(path: SchemaPath<boolean | null | undefined>, errorMessage?: TriLangTextLike): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst msg = this.resolveTriLangText(errorMessage) ?? tri('trueRequired');\n\t\t\treturn ctx.value() === true ? undefined : { kind: 'trueRequired', message: 'i18n', i18n: msg };\n\t\t});\n\t}\n\n\tminLengthI18n(\n\t\tpath: SchemaPath<string | number | null | undefined>,\n\t\tminLength: ValueLike<number>,\n\t\terrorMessage?: TriLangTextLike\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst value = ctx.value();\n\t\t\tif (!value) return undefined; // keep legacy behaviour (0 stays \"empty\", as before)\n\n\t\t\tconst min = this.resolve(minLength);\n\t\t\tconst msg = this.resolveTriLangText(errorMessage) ?? tri('minLength', min);\n\n\t\t\tconst str = String(value);\n\t\t\treturn str.length < min ? { kind: 'minLength', message: 'i18n', i18n: msg } : undefined;\n\t\t});\n\t}\n\n\tmaxLengthI18n(\n\t\tpath: SchemaPath<string | number | null | undefined>,\n\t\tmaxLength: ValueLike<number>,\n\t\terrorMessage?: TriLangTextLike\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst value = ctx.value();\n\t\t\tif (!value) return undefined; // keep legacy behaviour (0 stays \"empty\", as before)\n\n\t\t\tconst max = this.resolve(maxLength);\n\t\t\tconst msg = this.resolveTriLangText(errorMessage) ?? tri('maxLength', max);\n\n\t\t\tconst str = String(value);\n\t\t\treturn str.length > max ? { kind: 'maxLength', message: 'i18n', i18n: msg } : undefined;\n\t\t});\n\t}\n\n\tsmallerThanI18n(\n\t\tpath: SchemaPath<any>,\n\t\treferenceValue: ValueLike<number>,\n\t\terrorMessage?: TriLangTextLike\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst numericValue = this.toNumberOrNull(ctx.value());\n\t\t\tif (numericValue === null) return undefined;\n\n\t\t\tconst ref = this.resolve(referenceValue);\n\t\t\tconst msg = this.resolveTriLangText(errorMessage) ?? tri('smallerThan', ref);\n\t\t\treturn numericValue >= ref ? { kind: 'smallerThan', message: 'i18n', i18n: msg } : undefined;\n\t\t});\n\t}\n\n\tformattedSmallerThanI18n(\n\t\tpath: SchemaPath<any>,\n\t\treferenceValue: ValueLike<number>,\n\t\terrorMessage?: TriLangTextLike\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst numericValue = this.toNumberOrNull(ctx.value());\n\t\t\tif (numericValue === null) return undefined;\n\n\t\t\tconst ref = this.resolve(referenceValue);\n\t\t\tconst msg = this.resolveTriLangText(errorMessage) ?? tri('formattedSmallerThan', ref);\n\t\t\treturn numericValue >= ref ? { kind: 'smallerThan', message: 'i18n', i18n: msg } : undefined;\n\t\t});\n\t}\n\n\tgreaterThanI18n(\n\t\tpath: SchemaPath<any>,\n\t\treferenceValue: ValueLike<number>,\n\t\terrorMessage?: TriLangTextLike\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst numericValue = this.toNumberOrNull(ctx.value());\n\t\t\tif (numericValue === null) return undefined;\n\n\t\t\tconst ref = this.resolve(referenceValue);\n\t\t\tconst msg = this.resolveTriLangText(errorMessage) ?? tri('greaterThan', ref);\n\t\t\treturn numericValue <= ref ? { kind: 'greaterThan', message: 'i18n', i18n: msg } : undefined;\n\t\t});\n\t}\n\n\tformattedGreaterThanI18n(\n\t\tpath: SchemaPath<any>,\n\t\treferenceValue: ValueLike<number>,\n\t\terrorMessage?: TriLangTextLike\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst numericValue = this.toNumberOrNull(ctx.value());\n\t\t\tif (numericValue === null) return undefined;\n\n\t\t\tconst ref = this.resolve(referenceValue);\n\t\t\tconst msg = this.resolveTriLangText(errorMessage) ?? tri('formattedGreaterThan', ref);\n\t\t\treturn numericValue <= ref ? { kind: 'greaterThan', message: 'i18n', i18n: msg } : undefined;\n\t\t});\n\t}\n\n\tminValueI18n(\n\t\tpath: SchemaPath<any>,\n\t\treferenceValue: ValueLike<number>,\n\t\terrorMessage?: TriLangTextLike\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst numericValue = this.toNumberOrNull(ctx.value());\n\t\t\tif (numericValue === null) return undefined;\n\n\t\t\tconst ref = this.resolve(referenceValue);\n\t\t\tconst msg = this.resolveTriLangText(errorMessage) ?? tri('minValue', ref);\n\t\t\t// keep legacy keying: { greaterThan: ... }\n\t\t\treturn numericValue < ref ? { kind: 'greaterThan', message: 'i18n', i18n: msg } : undefined;\n\t\t});\n\t}\n\n\tformattedMinValueI18n(\n\t\tpath: SchemaPath<any>,\n\t\treferenceValue: ValueLike<number>,\n\t\terrorMessage?: TriLangTextLike\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst numericValue = this.toNumberOrNull(ctx.value());\n\t\t\tif (numericValue === null) return undefined;\n\n\t\t\tconst ref = this.resolve(referenceValue);\n\t\t\tconst msg = this.resolveTriLangText(errorMessage) ?? tri('formattedMinValue', ref);\n\t\t\t// keep legacy keying\n\t\t\treturn numericValue < ref ? { kind: 'greaterThan', message: 'i18n', i18n: msg } : undefined;\n\t\t});\n\t}\n\n\tmaxValueI18n(\n\t\tpath: SchemaPath<any>,\n\t\treferenceValue: ValueLike<number>,\n\t\terrorMessage?: TriLangTextLike\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst numericValue = this.toNumberOrNull(ctx.value());\n\t\t\tif (numericValue === null) return undefined;\n\n\t\t\tconst ref = this.resolve(referenceValue);\n\t\t\tconst msg = this.resolveTriLangText(errorMessage) ?? tri('maxValue', ref);\n\t\t\t// keep legacy keying: { smallerThan: ... }\n\t\t\treturn numericValue > ref ? { kind: 'smallerThan', message: 'i18n', i18n: msg } : undefined;\n\t\t});\n\t}\n\n\tformattedMaxValueI18n(\n\t\tpath: SchemaPath<any>,\n\t\treferenceValue: ValueLike<number>,\n\t\terrorMessage?: TriLangTextLike\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst numericValue = this.toNumberOrNull(ctx.value());\n\t\t\tif (numericValue === null) return undefined;\n\n\t\t\tconst ref = this.resolve(referenceValue);\n\t\t\tconst msg = this.resolveTriLangText(errorMessage) ?? tri('formattedMaxValue', ref);\n\t\t\t// keep legacy keying\n\t\t\treturn numericValue > ref ? { kind: 'smallerThan', message: 'i18n', i18n: msg } : undefined;\n\t\t});\n\t}\n\n\tlettersOnlyI18n(path: SchemaPath<string | null | undefined>, errorMessage?: TriLangTextLike): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst msg = this.resolveTriLangText(errorMessage) ?? tri('lettersOnly');\n\t\t\tconst regex = new RegExp('^[A-Za-zÀ-ÖØ-öø-ÿ ]*$');\n\t\t\tconst value = ctx.value();\n\n\t\t\tif (value === null || value === undefined || value === '') return undefined;\n\n\t\t\tconst isValid = regex.test(value);\n\t\t\treturn isValid ? undefined : { kind: 'lettersOnly', message: 'i18n', i18n: msg };\n\t\t});\n\t}\n\n\temailI18n(path: SchemaPath<string | null | undefined>, errorMessage?: TriLangTextLike): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst value = ctx.value();\n\n\t\t\tif (value === null || value === undefined || value === '') return undefined;\n\n\t\t\tconst emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\n\n\t\t\tif (!emailRegex.test(value)) {\n\t\t\t\tconst msg = this.resolveTriLangText(errorMessage) ?? tri('invalidEmail');\n\t\t\t\treturn { kind: 'invalidEmail', message: 'i18n', i18n: msg };\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t});\n\t}\n\n\t/* Can show MULTIPLE errors at once (i18n variant): */\n\n\tpasswordErrorsI18n(\n\t\tpath: SchemaPath<string | null | undefined>,\n\t\tminLength: ValueLike<number>,\n\t\tminDigits: ValueLike<number>,\n\t\tminCapitalLetters: ValueLike<number>\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst value = ctx.value() ?? '';\n\t\t\tconst isEmpty = !value.length;\n\n\t\t\tconst minLen = this.resolve(minLength);\n\t\t\tconst minDigit = this.resolve(minDigits);\n\t\t\tconst minCapitals = this.resolve(minCapitalLetters);\n\n\t\t\tconst violatesMinLength = isEmpty || value.length < minLen;\n\t\t\tconst violatesMinDigits = isEmpty || value.split('').filter((c: any) => !isNaN(c)).length < minDigit;\n\t\t\tconst violatesMinCapitalLetters =\n\t\t\t\tisEmpty || value.split('').filter((c: any) => /^[A-Za-zÀ-ÖØ-öø-ÿ]*$/.test(c) && c === c.toUpperCase()).length < minCapitals;\n\n\t\t\tconst errors = [\n\t\t\t\t{ error: violatesMinLength, text: tri('minLength', minLen) },\n\t\t\t\t{ error: violatesMinDigits, text: tri('minNumberOfDigits', minDigit) },\n\t\t\t\t{ error: violatesMinCapitalLetters, text: tri('minNumberOfCapitalLetters', minCapitals) },\n\t\t\t];\n\n\t\t\tconst errorsInFormControl = errors.filter(e => e.error === true);\n\n\t\t\treturn errorsInFormControl.length\n\t\t\t\t? errorsInFormControl.map(e => ({ kind: 'passwordErrors', message: 'i18n', i18n: e.text }))\n\t\t\t\t: undefined;\n\t\t});\n\t}\n\n\tregexPatternI18n(\n\t\tpath: SchemaPath<string | null | undefined>,\n\t\tpattern: RegExp,\n\t\terrorMessage: TriLangTextLike\n\t): void {\n\t\tthis.validate(path, (ctx) => {\n\t\t\tconst value = ctx.value();\n\n\t\t\tif (value === null || value === undefined || value === '') return undefined;\n\n\t\t\tconst msg = this.resolveTriLangText(errorMessage);\n\t\t\tconst isValid = pattern.test(value);\n\t\t\treturn isValid ? undefined : { kind: 'regexPattern', message: 'i18n', i18n: msg };\n\t\t});\n\t}\n\n\t/*** Helpers ***/\n\n\tprivate isEmptyValue(value: unknown): boolean {\n\t\t// null / undefined / empty string\n\t\tif (value == null) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (typeof value === 'string') {\n\t\t\treturn value.trim().length === 0;\n\t\t}\n\n\t\t// number: treat NaN as empty\n\t\tif (typeof value === 'number') {\n\t\t\treturn Number.isNaN(value);\n\t\t}\n\n\t\t// arrays\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.length === 0;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate toNumberOrNull(value: unknown): number | null {\n\t\tif (value === null || value === undefined || value === '') {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst n = Number(value);\n\t\treturn Number.isNaN(n) ? null : n;\n\t}\n}\n","import { Directive, contentChildren } from '@angular/core';\nimport { ErrorTooltipSigDirective } from './error-tooltip-sig.directive';\n\n@Directive({\n  selector: '[ngErrorTooltipSigForm]',\n  standalone: true,\n  exportAs: 'ngErrorTooltipSigForm'\n})\nexport class ErrorTooltipSigFormDirective {\n\tprivate readonly tooltips = contentChildren(ErrorTooltipSigDirective, { descendants: true });\n\n\tshowErrorTooltips(): void {\n\t\tthis.tooltips().forEach(t => t.showErrorTooltip());\n\t}\n\n\thideErrorTooltips(): void {\n\t\tthis.tooltips().forEach(t => t.hideErrorTooltip());\n\t}\n}","import { Directive, Input } from \"@angular/core\";\nimport { Placement } from \"../tooltip/placement.type\";\nimport { ErrorTooltipOptions } from \"../options/error-tooltip-options.interface\";\n\n@Directive({\n    selector: '[ngErrorTooltip]',\n    exportAs: 'ngErrorTooltip',\n    standalone: true\n  })\n  export class MockErrorTooltipDirective {\n  \n      // Will contain all options collected from the @Inputs\n      private collectedOptions: Partial<ErrorTooltipOptions> = {};\n    \n      // Pass options as a single object:\n      @Input()\n      options: ErrorTooltipOptions = {};\n    \n    \n      @Input()\n      set id(val: string | number) {\n          this.collectedOptions.id = val;\n      }\n    \n      @Input()\n      set showFirstErrorOnly(val: boolean) {\n          this.collectedOptions.showFirstErrorOnly = val;\n      }\n    \n      @Input()\n      set placement(val: Placement) {\n          this.collectedOptions.placement = val;\n      }\n    \n      @Input()\n      set zIndex(val: number) {\n          this.collectedOptions.zIndex = val;\n      }\n    \n      @Input()\n      set tooltipClass(val: string) {\n        this.collectedOptions.tooltipClass = val;\n      }\n    \n      @Input()\n      set shadow(val: boolean) {\n        this.collectedOptions.shadow = val;\n      }\n    \n      @Input()\n      set offset(val: number) {\n        this.collectedOptions.offset = val;\n      }\n    \n      @Input()\n      set width(val: string) {\n          this.collectedOptions.width = val;\n      }\n    \n      @Input()\n      set maxWidth(val: string) {\n        this.collectedOptions.maxWidth = val;\n      }\n\n      @Input()\n      set textColor(val: string) {\n        this.collectedOptions.textColor = val;\n      }\n\n      @Input()\n      set backgroundColor(val: string) {\n        this.collectedOptions.backgroundColor = val;\n      }\n\n      @Input()\n      set borderColor(val: string) {\n        this.collectedOptions.borderColor = val;\n      }\n    \n      @Input()\n      set pointerEvents(val: 'auto' | 'none') {\n          this.collectedOptions.pointerEvents = val;\n      }\n  }\n","import { Directive, Input } from '@angular/core';\nimport { FieldTree } from '@angular/forms/signals';\nimport { Placement } from '../tooltip/placement.type';\nimport { ErrorTooltipOptions } from '../options/error-tooltip-options.interface';\n\n@Directive({\n\tselector: '[ngErrorTooltipSig]',\n\texportAs: 'ngErrorTooltipSig',\n\tstandalone: true,\n})\nexport class MockErrorTooltipSigDirective {\n\t// Optional: keep what the test passed in (useful for assertions/debugging)\n\tprivate collectedOptions: Partial<ErrorTooltipOptions> = {};\n\n\t// Matches your real directive API (signal-inputs replaced with @Input)\n\t@Input()\n\toptions: ErrorTooltipOptions = {};\n\n\t@Input({ required: true })\n\terrorTooltipField!: FieldTree<unknown, string | number>;\n\n\t@Input()\n\tset id(val: string | number | null) {\n\t\tif (val != null) this.collectedOptions.id = val;\n\t}\n\n\t@Input()\n\tset showFirstErrorOnly(val: boolean | null) {\n\t\tif (val != null) this.collectedOptions.showFirstErrorOnly = val;\n\t}\n\n\t@Input()\n\tset placement(val: Placement | null) {\n\t\tif (val != null) this.collectedOptions.placement = val;\n\t}\n\n\t@Input()\n\tset zIndex(val: number | null) {\n\t\tif (val != null) this.collectedOptions.zIndex = val;\n\t}\n\n\t@Input()\n\tset tooltipClass(val: string | null) {\n\t\tif (val != null) this.collectedOptions.tooltipClass = val;\n\t}\n\n\t@Input()\n\tset shadow(val: boolean | null) {\n\t\tif (val != null) this.collectedOptions.shadow = val;\n\t}\n\n\t@Input()\n\tset offset(val: number | null) {\n\t\tif (val != null) this.collectedOptions.offset = val;\n\t}\n\n\t@Input()\n\tset width(val: string | null) {\n\t\tif (val != null) this.collectedOptions.width = val;\n\t}\n\n\t@Input()\n\tset maxWidth(val: string | null) {\n\t\tif (val != null) this.collectedOptions.maxWidth = val;\n\t}\n\n\t@Input()\n\tset textColor(val: string | null) {\n\t\tif (val != null) this.collectedOptions.textColor = val;\n\t}\n\n\t@Input()\n\tset backgroundColor(val: string | null) {\n\t\tif (val != null) this.collectedOptions.backgroundColor = val;\n\t}\n\n\t@Input()\n\tset borderColor(val: string | null) {\n\t\tif (val != null) this.collectedOptions.borderColor = val;\n\t}\n\n\t@Input()\n\tset pointerEvents(val: 'auto' | 'none' | null) {\n\t\tif (val != null) this.collectedOptions.pointerEvents = val;\n\t}\n\n\t// Public API in the real directive – keep it so component code can call it in tests\n\tshowErrorTooltip(): void {\n\t\t// noop\n\t}\n\n\thideErrorTooltip(): void {\n\t\t// noop\n\t}\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Mock for ErrorTooltipSigFormDirective (Signal Forms).\n * Keeps tests lightweight: no contentChildren/querying, just spyable methods.\n */\n@Directive({\n  selector: '[ngErrorTooltipSigForm]',\n  standalone: true,\n  exportAs: 'ngErrorTooltipSigForm',\n})\nexport class MockErrorTooltipSigFormDirective {\n  // Spy-friendly, no-op implementations\n  showErrorTooltips(): void {\n    // Intentionally empty\n  }\n\n  hideErrorTooltips(): void {\n    // Intentionally empty\n  }\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nimport { TriLangText } from '../validators/tri-lang-text.type';\n\nexport class MockCustomValidators {\n\tstatic required(_errorMessage?: string): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic trueRequired(_errorMessage?: string): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic minLength(_minLength: number, _errorMessage?: string): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic maxLength(_maxLength: number, _errorMessage?: string): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic smallerThan(_referenceValue: number, _errorMessage?: string): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic formattedSmallerThan(_referenceValue: number, _errorMessage?: string): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic greaterThan(_referenceValue: number, _errorMessage?: string): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic formattedGreaterThan(_referenceValue: number, _errorMessage?: string): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic minValue(_referenceValue: number, _errorMessage?: string): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic formattedMinValue(_referenceValue: number, _errorMessage?: string): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic maxValue(_referenceValue: number, _errorMessage?: string): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic formattedMaxValue(_referenceValue: number, _errorMessage?: string): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic lettersOnly(_errorMessage?: string): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic email(_errorMessage?: string): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic passwordErrors(_minLength: number, _minDigits: number, _minCapitalLetters: number): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic regexPattern(_pattern: RegExp, _errorMessage: string): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic requiredI18n(_errorMessage?: TriLangText): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic trueRequiredI18n(_errorMessage?: TriLangText): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic minLengthI18n(_minLength: number, _errorMessage?: TriLangText): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic maxLengthI18n(_maxLength: number, _errorMessage?: TriLangText): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic smallerThanI18n(_referenceValue: number, _errorMessage?: TriLangText): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic formattedSmallerThanI18n(_referenceValue: number, _errorMessage?: TriLangText): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic greaterThanI18n(_referenceValue: number, _errorMessage?: TriLangText): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic formattedGreaterThanI18n(_referenceValue: number, _errorMessage?: TriLangText): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic minValueI18n(_referenceValue: number, _errorMessage?: TriLangText): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic formattedMinValueI18n(_referenceValue: number, _errorMessage?: TriLangText): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic maxValueI18n(_referenceValue: number, _errorMessage?: TriLangText): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic formattedMaxValueI18n(_referenceValue: number, _errorMessage?: TriLangText): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic lettersOnlyI18n(_errorMessage?: TriLangText): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic emailI18n(_errorMessage?: TriLangText): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic passwordErrorsI18n(_minLength: number, _minDigits: number, _minCapitalLetters: number): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tstatic regexPatternI18n(_pattern: RegExp, _errorMessage: TriLangText): ValidatorFn {\n\t\treturn MockCustomValidators.valid();\n\t}\n\n\tprivate static valid(): ValidatorFn {\n\t\treturn (_control: AbstractControl): ValidationErrors | null => null;\n\t}\n}\n","import { Injectable, Signal } from '@angular/core';\nimport { SchemaPath } from '@angular/forms/signals';\n\nimport { TriLangText } from '../validators/tri-lang-text.type';\n\ntype TriLangTextLike =\n\t| TriLangText\n\t| Signal<TriLangText | null | undefined>\n\t| (() => TriLangText | null | undefined);\n\ntype ValueLike<T> = T | Signal<T> | (() => T);\n\n@Injectable()\nexport class MockCustomSigValidators {\n\trequired(_path: SchemaPath<any>, _errorMessage?: ValueLike<string>): void {}\n\n\ttrueRequired(_path: SchemaPath<boolean | null | undefined>, _errorMessage?: ValueLike<string>): void {}\n\n\tminLength(\n\t\t_path: SchemaPath<string | number | null | undefined>,\n\t\t_minLength: ValueLike<number>,\n\t\t_errorMessage?: ValueLike<string>\n\t): void {}\n\n\tmaxLength(\n\t\t_path: SchemaPath<string | number | null | undefined>,\n\t\t_maxLength: ValueLike<number>,\n\t\t_errorMessage?: ValueLike<string>\n\t): void {}\n\n\tsmallerThan(_path: SchemaPath<any>, _referenceValue: ValueLike<number>, _errorMessage?: ValueLike<string>): void {}\n\n\tformattedSmallerThan(_path: SchemaPath<any>, _referenceValue: ValueLike<number>, _errorMessage?: ValueLike<string>): void {}\n\n\tgreaterThan(_path: SchemaPath<any>, _referenceValue: ValueLike<number>, _errorMessage?: ValueLike<string>): void {}\n\n\tformattedGreaterThan(_path: SchemaPath<any>, _referenceValue: ValueLike<number>, _errorMessage?: ValueLike<string>): void {}\n\n\tminValue(_path: SchemaPath<any>, _referenceValue: ValueLike<number>, _errorMessage?: ValueLike<string>): void {}\n\n\tformattedMinValue(_path: SchemaPath<any>, _referenceValue: ValueLike<number>, _errorMessage?: ValueLike<string>): void {}\n\n\tmaxValue(_path: SchemaPath<any>, _referenceValue: ValueLike<number>, _errorMessage?: ValueLike<string>): void {}\n\n\tformattedMaxValue(_path: SchemaPath<any>, _referenceValue: ValueLike<number>, _errorMessage?: ValueLike<string>): void {}\n\n\tlettersOnly(_path: SchemaPath<string | null | undefined>, _errorMessage?: ValueLike<string>): void {}\n\n\temail(_path: SchemaPath<string | null | undefined>, _errorMessage?: ValueLike<string>): void {}\n\n\tpasswordErrors(\n\t\t_path: SchemaPath<string | null | undefined>,\n\t\t_minLength: ValueLike<number>,\n\t\t_minDigits: ValueLike<number>,\n\t\t_minCapitalLetters: ValueLike<number>\n\t): void {}\n\n\tregexPattern(\n\t\t_path: SchemaPath<string | null | undefined>,\n\t\t_pattern: RegExp,\n\t\t_errorMessage: ValueLike<string>\n\t): void {}\n\n\trequiredI18n(_path: SchemaPath<any>, _errorMessage?: TriLangTextLike): void {}\n\n\ttrueRequiredI18n(_path: SchemaPath<boolean | null | undefined>, _errorMessage?: TriLangTextLike): void {}\n\n\tminLengthI18n(\n\t\t_path: SchemaPath<string | number | null | undefined>,\n\t\t_minLength: ValueLike<number>,\n\t\t_errorMessage?: TriLangTextLike\n\t): void {}\n\n\tmaxLengthI18n(\n\t\t_path: SchemaPath<string | number | null | undefined>,\n\t\t_maxLength: ValueLike<number>,\n\t\t_errorMessage?: TriLangTextLike\n\t): void {}\n\n\tsmallerThanI18n(_path: SchemaPath<any>, _referenceValue: ValueLike<number>, _errorMessage?: TriLangTextLike): void {}\n\n\tformattedSmallerThanI18n(_path: SchemaPath<any>, _referenceValue: ValueLike<number>, _errorMessage?: TriLangTextLike): void {}\n\n\tgreaterThanI18n(_path: SchemaPath<any>, _referenceValue: ValueLike<number>, _errorMessage?: TriLangTextLike): void {}\n\n\tformattedGreaterThanI18n(_path: SchemaPath<any>, _referenceValue: ValueLike<number>, _errorMessage?: TriLangTextLike): void {}\n\n\tminValueI18n(_path: SchemaPath<any>, _referenceValue: ValueLike<number>, _errorMessage?: TriLangTextLike): void {}\n\n\tformattedMinValueI18n(_path: SchemaPath<any>, _referenceValue: ValueLike<number>, _errorMessage?: TriLangTextLike): void {}\n\n\tmaxValueI18n(_path: SchemaPath<any>, _referenceValue: ValueLike<number>, _errorMessage?: TriLangTextLike): void {}\n\n\tformattedMaxValueI18n(_path: SchemaPath<any>, _referenceValue: ValueLike<number>, _errorMessage?: TriLangTextLike): void {}\n\n\tlettersOnlyI18n(_path: SchemaPath<string | null | undefined>, _errorMessage?: TriLangTextLike): void {}\n\n\temailI18n(_path: SchemaPath<string | null | undefined>, _errorMessage?: TriLangTextLike): void {}\n\n\tpasswordErrorsI18n(\n\t\t_path: SchemaPath<string | null | undefined>,\n\t\t_minLength: ValueLike<number>,\n\t\t_minDigits: ValueLike<number>,\n\t\t_minCapitalLetters: ValueLike<number>\n\t): void {}\n\n\tregexPatternI18n(\n\t\t_path: SchemaPath<string | null | undefined>,\n\t\t_pattern: RegExp,\n\t\t_errorMessage: TriLangTextLike\n\t): void {}\n}\n","/*\n * Public API Surface of ng-error-tooltips\n */\nexport * from './lib/error-tooltip.directive';\nexport * from './lib/error-tooltip-sig.directive';\nexport * from './lib/provide-error-tooltips';\nexport * from './lib/options/error-tooltip-options.token';\nexport * from './lib/options/error-tooltip-options.interface';\nexport * from './lib/validators/custom-validators';\nexport * from './lib/validators/custom-sig-validators';\nexport * from './lib/validators/supported-language.type';\nexport * from './lib/validators/tri-lang-text.type';\nexport * from './lib/error-tooltip-lang.token';\nexport * from './lib/error-tooltip-sig-validate.token';\nexport * from './lib/error-tooltip-sig-form.directive';\n\n// Export the mocks\nexport * from './lib/mocks/mock-error-tooltip.directive';\nexport * from './lib/mocks/mock-error-tooltip-sig.directive';\nexport * from './lib/mocks/mock-error-tooltip-sig-form.directive';\nexport * from './lib/mocks/mock-custom-validators';\nexport * from './lib/mocks/mock-custom-sig-validators';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}