@ng-modular-forms/core 0.7.6 → 0.7.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ng-modular-forms-core.mjs","sources":["../../../projects/core/src/lib/base/form-control-base.ts","../../../projects/core/src/lib/number-utils.ts","../../../projects/core/src/lib/form-utils.ts","../../../projects/core/src/lib/base/form-handler-base.ts","../../../projects/core/src/lib/base/form-mapper-base.ts","../../../projects/core/src/lib/behavior/currency.behavior.ts","../../../projects/core/src/lib/behavior/text.behavior.ts","../../../projects/core/src/lib/input/input-currency.component.ts","../../../projects/core/src/lib/input/input-datepicker.component.ts","../../../projects/core/src/lib/input/input-number.component.ts","../../../projects/core/src/lib/input/input-select.component.ts","../../../projects/core/src/lib/input/input-text.component.ts","../../../projects/core/src/lib/input/input-textarea.component.ts","../../../projects/core/src/lib/input/input-timepicker.component.ts","../../../projects/core/src/lib/type-guards.ts","../../../projects/core/src/lib/form-hydrator.ts","../../../projects/core/src/lib/form-serializer.ts","../../../projects/core/src/lib/form-orchestrator.ts","../../../projects/core/src/public-api.ts","../../../projects/core/src/ng-modular-forms-core.ts"],"sourcesContent":["import {\n ControlValueAccessor,\n FormControl,\n NgControl,\n TouchedChangeEvent,\n Validators,\n} from '@angular/forms';\nimport {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { merge, startWith } from 'rxjs';\n\n@Directive()\nexport abstract class FormControlBase<T> implements ControlValueAccessor {\n protected readonly destroyRef = inject(DestroyRef);\n\n static nextId = 0;\n readonly id = input<string | null>(\n `nmf-form-control-${FormControlBase.nextId++}`,\n { alias: 'id' },\n );\n\n readonly label = input<string>('');\n readonly classList = input<string[]>([]);\n readonly loading = input<boolean>(false);\n readonly name = input<string>('');\n readonly placeholder = input<string>('');\n\n readonly _disabledByInput = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n readonly _disabledByCva = signal(false);\n\n readonly ngControl = inject(NgControl, {\n self: true,\n optional: true,\n });\n\n protected readonly standaloneControl = new FormControl<T | null>(null);\n\n get formControl(): FormControl<T | null> {\n return (\n (this.ngControl?.control as FormControl<T | null> | null) ??\n this.standaloneControl\n );\n }\n\n protected readonly disabled = computed(\n () => this._disabledByInput() || this._disabledByCva(),\n );\n\n protected readonly isRequired = signal(\n this.ngControl?.control?.hasValidator(Validators.required) ?? false,\n );\n\n protected readonly hasErrors = signal(false);\n\n protected onChange: (value: T | null) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n ngOnInit() {\n const control = this.ngControl?.control;\n if (!control) return;\n\n merge(control.statusChanges, control.valueChanges)\n .pipe(startWith(null), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.hasErrors.set(control.invalid && control.touched);\n this.isRequired.set(control.hasValidator(Validators.required) ?? false);\n });\n\n control.events\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n if (event instanceof TouchedChangeEvent) {\n this.hasErrors.set(control.invalid && control.touched);\n }\n });\n }\n\n writeValue(value: T | null): void {\n const control = this.ngControl?.control;\n if (!control) return;\n\n if (control.value !== value) {\n control.setValue(value, { emitEvent: false });\n }\n }\n\n registerOnChange(fn: (value: T | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabledByCva.set(isDisabled);\n }\n\n protected errorMessage(): string | null {\n const control = this.ngControl?.control;\n if (control == null || !control.errors || !control.touched) return null;\n\n const firstKey = Object.keys(control.errors)[0];\n const error = control.errors[firstKey];\n\n switch (firstKey) {\n case 'required':\n return 'This field is required';\n\n case 'minlength':\n return `Minimum length is ${error.requiredLength}`;\n\n case 'maxlength':\n return `Maximum length is ${error.requiredLength}`;\n\n case 'min':\n return `Minimum value is ${error.min}`;\n\n case 'max':\n return `Maximum value is ${error.max}`;\n\n case 'email':\n return 'Invalid email address';\n\n case 'pattern':\n return 'Invalid format';\n\n case 'custom':\n if (typeof error === 'string') {\n return error;\n }\n return 'Invalid value';\n\n default:\n return 'Invalid value';\n }\n }\n}\n","export function parseNumber(\n input: string | number | null | undefined,\n): number | null {\n if (input == null || input === '') return null;\n\n if (typeof input === 'number') {\n return Number.isFinite(input) ? input : null;\n }\n\n const normalized = input\n .trim()\n .replace(/,/g, '') // remove thousands\n .replace(/(?!^)-/g, ''); // only allow leading '-'\n\n if (normalized === '-' || normalized === '.' || normalized === '-.') {\n return null;\n }\n\n const num = Number(normalized);\n\n return Number.isFinite(num) ? num : null;\n}\n\nexport function formatNumber(\n value: string | number | null,\n locale: string = 'en-US',\n options: Intl.NumberFormatOptions = { maximumFractionDigits: 2 },\n): string | null {\n if (value == null || value === '') {\n return null;\n }\n if (typeof value !== 'string') {\n value = String(value);\n }\n\n value = value.replace(/[^\\d\\-,.]/g, '');\n\n if (value === '') {\n return null;\n }\n\n const isNegative = value.startsWith('-');\n const numericValue = Number(value.replace(/[,$-]/g, ''));\n const formatted = numericValue.toLocaleString(locale, options);\n\n return isNegative ? `-${formatted}` : formatted;\n}\n","import type { FormControl, FormGroup } from '@angular/forms';\nimport { parseNumber } from './number-utils';\n\nexport function getControl<T = unknown>(controlName: string, form: FormGroup) {\n if (!form) {\n throw new Error(\n `Missing form instance while getting the control of \"${controlName}\"`,\n );\n }\n\n const control = form.get(controlName) as FormControl<T>;\n if (!control) {\n throw new Error(`Missing control \"${controlName}\" in form \"${form}\"`);\n }\n\n return control;\n}\n\nexport function getControlValue<T = unknown>(\n controlName: string,\n form: FormGroup,\n): T | null;\n\nexport function getControlValue(\n controlName: string,\n form: FormGroup,\n): number | null;\n\nexport function getControlValue<T = unknown>(\n controlName: string,\n form: FormGroup,\n): T | null {\n const control = getControl<T>(controlName, form);\n if (!control) {\n throw new Error(`Missing control \"${controlName}\" in form \"${form}\"`);\n }\n\n const value = control.getRawValue();\n if (value === '') {\n return null;\n }\n\n if (typeof value === 'string') {\n const cleaned = value.replace(/,/g, '');\n\n if (!Number.isNaN(Number(cleaned))) {\n return parseNumber(value) as T;\n }\n }\n\n return value;\n}\n","import type { FormControl, FormGroup } from '@angular/forms';\nimport type { Observable, Subscription } from 'rxjs';\nimport { getControl } from '../form-utils';\n\nexport abstract class FormHandlerBase<ControlNames extends string = string> {\n abstract getReactiveLogic(form: FormGroup): Subscription;\n\n private registeredControls: Partial<\n Record<ControlNames, FormControl<unknown>>\n > = {};\n\n /**\n * Registers form controls for later reactive access.\n */\n public registerControls(\n form: FormGroup,\n controlNames: readonly ControlNames[],\n ): void {\n controlNames.forEach((controlName) => {\n const control = getControl(controlName.replace(/_/g, '.'), form);\n\n if (!control) {\n throw new Error(\n `Failed to register control \"${controlName}\". Available controls: ${Object.keys(form.controls).join(', ')}`,\n );\n }\n\n this.registeredControls[controlName] = control;\n });\n }\n\n public valueChangesOf<T>(key: ControlNames): Observable<T> {\n const control = this.registeredControls[key];\n\n if (!control) {\n throw new Error(\n `Control with name: \"${key}\" not found. Ensure it is registered in registerControls(...) before usage.`,\n );\n }\n\n return control.valueChanges as Observable<T>;\n }\n}\n","export abstract class FormMapperBase<TIn = unknown, TOut = TIn, TForm = TIn> {\n public fromModel(model: TIn): TForm {\n return structuredClone(model) as unknown as TForm;\n }\n\n public toRequest(formValue: TForm): TOut {\n return formValue as unknown as TOut;\n }\n}\n","export class CurrencyBehavior {\n blockNonDigitKey(event: KeyboardEvent) {\n const input = event.target as HTMLInputElement;\n const value = input.value;\n\n if (event.ctrlKey || event.metaKey) {\n return;\n }\n\n const allowedKeys = [\n 'Backspace',\n 'Delete',\n 'Tab',\n 'Enter',\n 'Escape',\n 'ArrowLeft',\n 'ArrowRight',\n 'Home',\n 'End',\n ];\n\n if (allowedKeys.includes(event.key)) {\n return;\n }\n\n const isDigit = /^[0-9]$/.test(event.key);\n if (isDigit) {\n return;\n }\n\n if (event.key === '.') {\n if (value.includes('.')) {\n event.preventDefault();\n }\n return;\n }\n\n if (event.key === ',') {\n event.preventDefault();\n return;\n }\n\n if (event.key === '-') {\n const hasMinus = value.includes('-');\n const isAtStart = input.selectionStart === 0;\n\n if (hasMinus || !isAtStart) {\n event.preventDefault();\n }\n return;\n }\n\n event.preventDefault();\n }\n}\n","import { signal } from '@angular/core';\n\nexport class TextBehavior {\n private _showPassword = signal<boolean>(false);\n\n showPassword = this._showPassword.asReadonly();\n\n toggleShowPassword(event?: MouseEvent): void {\n event?.stopPropagation();\n this._showPassword.set(!this.showPassword());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n signal,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormControlBase } from '../base/form-control-base';\nimport { CurrencyBehavior } from '../behavior/currency.behavior';\nimport { formatNumber, parseNumber } from '../number-utils';\n\n@Component({\n selector: 'nmf-currency',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"nmf-field\">\n @if (label()) {\n <label class=\"nmf-label\">\n {{ label() }}\n @if (isRequired()) {\n <span class=\"nmf-required\">*</span>\n }\n </label>\n }\n\n <div class=\"nmf-input-wrapper nmf-input-prefix\">\n @if (displayValue() != null) {\n <span\n class=\"nmf-prefix\"\n [class.error]=\"hasErrors()\"\n [class.nmf-prefix-disabled]=\"disabled()\"\n [style.color]=\"textColor()\"\n >\n $\n </span>\n }\n\n <input\n type=\"text\"\n autocomplete=\"off\"\n class=\"nmf-input\"\n [ngClass]=\"classList()\"\n [class.error]=\"hasErrors()\"\n [class.disabled]=\"disabled()\"\n [class.nmf-input-with-prefix]=\"displayValue() != null\"\n [style.color]=\"textColor()\"\n [id]=\"id()\"\n [name]=\"name()\"\n [value]=\"displayValue()\"\n [disabled]=\"disabled()\"\n [required]=\"isRequired()\"\n [placeholder]=\"placeholder()\"\n (blur)=\"onTouched()\"\n (input)=\"onInput($event)\"\n (keydown)=\"handleKeyDown($event)\"\n />\n </div>\n\n <ng-content></ng-content>\n\n @if (loading()) {\n <div class=\"nmf-loading\">\n <span class=\"nmf-spinner\"></span>\n </div>\n }\n\n <p class=\"nmf-error\">\n {{ errorMessage() }}\n </p>\n </div>\n `,\n})\nexport class InputCurrencyComponent extends FormControlBase<number | null> {\n displayValue = signal<string | null>(null);\n\n behavior = new CurrencyBehavior();\n\n override writeValue(value: number | null): void {\n super.writeValue(value);\n this.displayValue.set(value != null ? formatNumber(value) : null);\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n this.behavior.blockNonDigitKey(event);\n }\n\n onInput(event: Event) {\n if (this._disabledByInput()) return;\n\n const rawValue = (event.target as HTMLInputElement).value ?? null;\n const value = parseNumber(rawValue);\n\n this.displayValue.set(value != null ? formatNumber(value) : null);\n\n this.onChange(value);\n }\n\n textColor = computed(() => {\n const value = this.displayValue();\n if (this._disabledByInput() || !value) {\n return 'inherit';\n }\n\n const parsedValue = parseNumber(value);\n const valid = parsedValue != null && parsedValue >= 0;\n\n return valid ? 'inherit' : '#dc6262';\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FormControlBase } from '../base/form-control-base';\n\n@Component({\n selector: 'nmf-datepicker',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"nmf-field\" [class.loading]=\"loading()\">\n @if (label()) {\n <label class=\"nmf-label\">\n {{ label() }}\n @if (isRequired()) {\n <span class=\"nmf-required\">*</span>\n }\n </label>\n }\n\n <input\n type=\"date\"\n class=\"nmf-input\"\n [ngClass]=\"classList()\"\n [class.error]=\"hasErrors()\"\n [class.disabled]=\"disabled()\"\n [id]=\"id()\"\n [min]=\"formatDate(minDate())\"\n [max]=\"formatDate(maxDate())\"\n [name]=\"name()\"\n [value]=\"displayValue()\"\n [disabled]=\"disabled()\"\n [required]=\"isRequired()\"\n [placeholder]=\"placeholder()\"\n (blur)=\"onTouched()\"\n (input)=\"onInput($event)\"\n />\n\n <ng-content></ng-content>\n\n @if (loading()) {\n <div class=\"nmf-loading\">\n <span class=\"nmf-spinner\"></span>\n </div>\n }\n\n <p class=\"nmf-error\">\n {{ errorMessage() }}\n </p>\n </div>\n `,\n})\nexport class InputDatepickerComponent extends FormControlBase<Date | null> {\n minDate = input<Date | null>(null);\n maxDate = input<Date | null>(null);\n\n displayValue = signal<string>('');\n\n formatDate(date: Date | null | undefined): string | null {\n if (!date) return null;\n\n // yyyy-MM-dd (required by input[type=\"date\"])\n const yyyy = date.getFullYear();\n const mm = String(date.getMonth() + 1).padStart(2, '0');\n const dd = String(date.getDate()).padStart(2, '0');\n\n return `${yyyy}-${mm}-${dd}`;\n }\n\n parseDate(value: string): Date | null {\n if (!value) return null;\n const [y, m, d] = value.split('-').map(Number);\n return new Date(y, m - 1, d);\n }\n\n override writeValue(value: Date | null): void {\n super.writeValue(value);\n\n this.displayValue.set(this.formatDate(value) ?? '');\n }\n\n onInput(event: Event): void {\n if (this._disabledByInput()) return;\n\n const input = event.target as HTMLInputElement;\n const parsed = this.parseDate(input.value);\n\n this.displayValue.set(this.formatDate(parsed) ?? '');\n\n this.onChange(parsed);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n signal,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormControlBase } from '../base/form-control-base';\nimport { CurrencyBehavior } from '../behavior/currency.behavior';\nimport { TextBehavior } from '../behavior/text.behavior';\nimport { formatNumber, parseNumber } from '../number-utils';\n\n@Component({\n selector: 'nmf-number',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"nmf-field\">\n @if (label()) {\n <label class=\"nmf-label\">\n {{ label() }}\n @if (isRequired()) {\n <span class=\"nmf-required\">*</span>\n }\n </label>\n }\n\n <input\n autocomplete=\"off\"\n class=\"nmf-input\"\n [ngClass]=\"classList()\"\n [class.error]=\"hasErrors()\"\n [class.disabled]=\"disabled()\"\n [id]=\"id()\"\n [name]=\"name()\"\n [type]=\"formatNumberValue() ? 'text' : 'number'\"\n [value]=\"displayValue()\"\n [disabled]=\"disabled()\"\n [required]=\"isRequired()\"\n [placeholder]=\"placeholder()\"\n (blur)=\"onTouched()\"\n (input)=\"onInput($event)\"\n (keydown)=\"handleKeyDown($event)\"\n />\n\n <ng-content></ng-content>\n\n <p class=\"nmf-error\">\n {{ errorMessage() }}\n </p>\n\n @if (loading()) {\n <div class=\"nmf-loading\">\n <span class=\"nmf-spinner\"></span>\n </div>\n }\n </div>\n `,\n})\nexport class InputNumberComponent extends FormControlBase<\n string | number | null\n> {\n formatNumberValue = input<boolean>(false);\n displayValue = signal<string>('');\n\n behavior = new TextBehavior();\n currencyBehavior = new CurrencyBehavior();\n\n override writeValue(value: string | number | null): void {\n super.writeValue(value);\n this.updateDisplayValue(value);\n }\n\n handleKeyDown(event: KeyboardEvent) {\n this.currencyBehavior.blockNonDigitKey(event);\n }\n\n onInput(event: Event): void {\n if (this._disabledByInput()) return;\n\n const raw = (event.target as HTMLInputElement).value;\n const parsed = parseNumber(raw);\n\n this.updateDisplayValue(parsed);\n\n this.onChange(parsed);\n }\n\n updateDisplayValue(value: string | number | null) {\n if (this.formatNumberValue() && value != null) {\n this.displayValue.set(formatNumber(value) ?? '');\n } else {\n this.displayValue.set(value != null ? String(value) : '');\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormControlBase } from '../base/form-control-base';\n\nexport interface SelectOption {\n key: string | number;\n label: string | number;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'nmf-select',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"nmf-field\" [class.loading]=\"loading()\">\n @if (label()) {\n <label class=\"nmf-label\">\n {{ label() }}\n @if (isRequired()) {\n <span class=\"nmf-required\">*</span>\n }\n </label>\n }\n <div class=\"select-wrapper\" [class.disabled]=\"disabled()\">\n <select\n class=\"nmf-input\"\n [ngClass]=\"classList()\"\n [class.error]=\"hasErrors()\"\n [class.disabled]=\"disabled()\"\n [required]=\"isRequired()\"\n [formControl]=\"formControl\"\n (blur)=\"onTouched()\"\n >\n <!-- Empty option -->\n <option [ngValue]=\"null\" disabled>\n {{ emptyOptionLabel() }}\n </option>\n\n <!-- Options -->\n @for (option of options(); track option.key) {\n <option [ngValue]=\"option.key\" [disabled]=\"option.disabled\">\n {{ option.label }}\n </option>\n }\n\n <!-- Clear option -->\n @if (clearOptionLabel()) {\n <option [ngValue]=\"null\">\n {{ clearOptionLabel() }}\n </option>\n }\n </select>\n </div>\n\n @if (loading()) {\n <div class=\"nmf-loading\">\n <span class=\"nmf-spinner\"></span>\n </div>\n }\n\n <p class=\"nmf-error\">\n {{ errorMessage() }}\n </p>\n </div>\n `,\n})\nexport class InputSelectComponent extends FormControlBase<\n string | number | null\n> {\n options = input<SelectOption[]>([]);\n emptyOptionLabel = input<string>('Select an option');\n clearOptionLabel = input<string | null>('Clear selection');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormControlBase } from '../base/form-control-base';\nimport { TextBehavior } from '../behavior/text.behavior';\n\n@Component({\n selector: 'nmf-text',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"nmf-field\">\n @if (label()) {\n <label class=\"nmf-label\">\n {{ label() }}\n @if (isRequired()) {\n <span class=\"nmf-required\">*</span>\n }\n </label>\n }\n\n <div class=\"nmf-input-wrapper\">\n <input\n class=\"nmf-input\"\n [ngClass]=\"classList()\"\n [class.error]=\"hasErrors()\"\n [class.disabled]=\"disabled()\"\n [id]=\"id()\"\n [name]=\"name()\"\n [type]=\"computedType()\"\n [required]=\"isRequired()\"\n [placeholder]=\"placeholder()\"\n [formControl]=\"formControl\"\n (blur)=\"onTouched()\"\n />\n\n @if (type() === 'password' && !loading() && !disabled()) {\n <button\n type=\"button\"\n class=\"nmf-password-toggle\"\n aria-label=\"Toggle password visibility\"\n (click)=\"behavior.toggleShowPassword($event)\"\n >\n @if (behavior.showPassword()) {\n <ng-container [ngTemplateOutlet]=\"eyeOffIcon\"></ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"eyeIcon\"></ng-container>\n }\n </button>\n }\n </div>\n\n <ng-content></ng-content>\n\n <p class=\"nmf-error\">\n {{ errorMessage() }}\n </p>\n\n @if (loading()) {\n <div class=\"nmf-loading\">\n <span class=\"nmf-spinner\"></span>\n </div>\n }\n </div>\n\n <ng-template #eyeIcon>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"#e3e3e3\"\n class=\"nmf-icon\"\n >\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path\n d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"\n />\n </svg>\n </ng-template>\n\n <ng-template #eyeOffIcon>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"#e3e3e3\"\n class=\"nmf-icon\"\n >\n <path\n d=\"M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z\"\n fill=\"none\"\n />\n <path\n d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\"\n />\n </svg>\n </ng-template>\n `,\n})\nexport class InputTextComponent extends FormControlBase<\n string | number | null\n> {\n type = input<\n 'text' | 'number' | 'email' | 'tel' | 'url' | 'password' | 'search'\n >('text');\n\n behavior = new TextBehavior();\n\n computedType = computed(() =>\n this.behavior.showPassword() && this.type() === 'password'\n ? 'text'\n : this.type(),\n );\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormControlBase } from '../base/form-control-base';\n\n@Component({\n selector: 'nmf-textarea',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"nmf-field\">\n @if (label()) {\n <label class=\"nmf-label\">\n {{ label() }}\n @if (isRequired()) {\n <span class=\"nmf-required\">*</span>\n }\n </label>\n }\n\n <textarea\n class=\"nmf-input\"\n [ngClass]=\"classList()\"\n [class.error]=\"hasErrors()\"\n [class.disabled]=\"disabled()\"\n [id]=\"id()\"\n [rows]=\"rows()\"\n [cols]=\"cols()\"\n [required]=\"isRequired()\"\n [placeholder]=\"placeholder()\"\n [formControl]=\"formControl\"\n (blur)=\"onTouched()\"\n ></textarea>\n\n <p class=\"nmf-error\">\n {{ errorMessage() }}\n </p>\n\n @if (loading()) {\n <div class=\"nmf-loading\">\n <span class=\"nmf-spinner\"></span>\n </div>\n }\n </div>\n `,\n})\nexport class InputTextareaComponent extends FormControlBase<string | null> {\n rows = input<number>(5);\n cols = input<number>(5);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FormControlBase } from '../base/form-control-base';\n\n@Component({\n selector: 'nmf-timepicker',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"nmf-field\" [class.loading]=\"loading()\">\n @if (label()) {\n <label class=\"nmf-label\">\n {{ label() }}\n @if (isRequired()) {\n <span class=\"nmf-required\">*</span>\n }\n </label>\n }\n\n <input\n type=\"time\"\n autocomplete=\"off\"\n class=\"nmf-input\"\n [ngClass]=\"classList()\"\n [class.error]=\"hasErrors()\"\n [class.disabled]=\"disabled()\"\n [id]=\"id()\"\n [name]=\"name()\"\n [step]=\"step()\"\n [value]=\"displayValue()\"\n [disabled]=\"disabled()\"\n [required]=\"isRequired()\"\n [placeholder]=\"placeholder()\"\n (blur)=\"onTouched()\"\n (input)=\"onInput($event)\"\n />\n\n <ng-content></ng-content>\n\n @if (loading()) {\n <div class=\"nmf-loading\">\n <span class=\"nmf-spinner\"></span>\n </div>\n }\n\n <p class=\"nmf-error\">\n {{ errorMessage() }}\n </p>\n </div>\n `,\n})\nexport class InputTimepickerComponent extends FormControlBase<Date | null> {\n // step in seconds: 60 = minutes only, 1 = show seconds\n step = input<number>(60);\n displayValue = signal<string>('');\n\n formatTime(date: Date | null | undefined): string | null {\n if (!date) return null;\n\n const hh = String(date.getHours()).padStart(2, '0');\n const mm = String(date.getMinutes()).padStart(2, '0');\n const ss = String(date.getSeconds()).padStart(2, '0');\n\n return this.step() < 60 ? `${hh}:${mm}:${ss}` : `${hh}:${mm}`;\n }\n\n parseTime(value: string): Date | null {\n if (!value) return null;\n\n const [h, m, s = 0] = value.split(':').map(Number);\n const date = new Date();\n date.setHours(h, m, s, 0);\n return date;\n }\n\n override writeValue(value: Date | null): void {\n super.writeValue(value);\n this.displayValue.set(this.formatTime(value) ?? '');\n }\n\n onInput(event: Event): void {\n if (this._disabledByInput()) return;\n\n const input = event.target as HTMLInputElement;\n const parsed = this.parseTime(input.value);\n\n this.displayValue.set(this.formatTime(parsed) ?? '');\n\n this.onChange(parsed);\n }\n}\n","export function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { Injectable } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { isRecord } from './type-guards';\nimport type { MapperRegistry } from './types';\n\n@Injectable({ providedIn: 'root' })\nexport class FormHydrator {\n hydrate<TModel extends Record<string, unknown>>(\n form: FormGroup,\n model: TModel,\n registry: MapperRegistry = {},\n ) {\n Object.entries(form.controls).forEach(([key, control]) => {\n if (!(key in model)) return;\n\n const mapFn = registry[key]?.fromModel;\n const value = model?.[key];\n\n if (control instanceof FormGroup) {\n if (mapFn) {\n const mapped = mapFn(value);\n\n if (isRecord(mapped)) {\n control.patchValue(mapped, { emitEvent: false });\n }\n } else {\n this.hydrate(\n control,\n (value ?? {}) as Record<string, unknown>,\n registry,\n );\n }\n return;\n }\n\n control.patchValue(value, { emitEvent: false });\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport type { MapperRegistry } from './types';\n\n@Injectable({ providedIn: 'root' })\nexport class FormSerializer {\n toRequest(form: FormGroup, registry: MapperRegistry = {}) {\n const result: Record<string, unknown> = {};\n\n Object.entries(form.controls).forEach(([key, control]) => {\n const mapFn = registry[key]?.toRequest;\n\n if (control instanceof FormGroup) {\n result[key] = mapFn\n ? mapFn(control.value)\n : this.toRequest(control, registry);\n return;\n }\n\n result[key] = control.value;\n });\n\n return result;\n }\n}\n","import { FormGroup } from '@angular/forms';\nimport { Directive, OnDestroy, signal } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { FormHandlerBase } from './base/form-handler-base';\nimport { FormMapperBase } from './base/form-mapper-base';\nimport { FormHydrator } from './form-hydrator';\nimport { FormSerializer } from './form-serializer';\nimport type {\n FormHandlerRegistry,\n FormOrchestratorOptions,\n FormStatus,\n MapperRegistry,\n} from './types';\nimport { isRecord } from './type-guards';\n\n@Directive()\nexport abstract class FormOrchestrator\n extends FormMapperBase\n implements OnDestroy\n{\n private readonly _form = signal<FormGroup>(new FormGroup({}));\n private readonly _handlerRegistry = signal<FormHandlerRegistry>([]);\n private readonly _mapperRegistry = signal<MapperRegistry>({});\n private readonly _status = signal<FormStatus>('idle');\n private readonly _errorMessage = signal<string | null>(null);\n\n public readonly form = this._form.asReadonly();\n public readonly handlerRegistry = this._handlerRegistry.asReadonly();\n public readonly mapperRegistry = this._mapperRegistry.asReadonly();\n public readonly status = this._status.asReadonly();\n public readonly errorMessage = this._errorMessage.asReadonly();\n\n private _logicSubscription = new Subscription();\n\n constructor(\n protected readonly hydrator: FormHydrator,\n protected readonly serializer: FormSerializer,\n ) {\n super();\n }\n\n /**\n * Initializes orchestration state.\n * Must be called before any subform registration or handler execution.\n */\n public orchestrate(options: FormOrchestratorOptions) {\n const { form, mapperRegistry = {}, handlerRegistry = [] } = options;\n this._form.set(form);\n this._mapperRegistry.set(mapperRegistry);\n this._handlerRegistry.set(handlerRegistry);\n\n Object.values(this.handlerRegistry()).forEach((handler) => {\n this.addReactiveLogic(handler.getReactiveLogic(form));\n });\n }\n\n public setForm(form: FormGroup) {\n this._form.set(form);\n }\n\n public getSubForm(key: string): FormGroup {\n return this.form().get(key) as FormGroup;\n }\n\n public addHandlerToRegistry(handler: FormHandlerBase) {\n this._handlerRegistry.set([...this._handlerRegistry(), handler]);\n }\n\n public addReactiveLogic(subscription: Subscription) {\n this._logicSubscription.add(subscription);\n }\n\n public setStatus(status: FormStatus) {\n this._status.set(status);\n }\n\n public setErrorMessage(message: string | null) {\n this._errorMessage.set(message);\n }\n\n public hydrateFromModel<TModel extends Record<string, unknown>>(\n model: TModel,\n ) {\n const form = this.form();\n const registry = this.mapperRegistry();\n\n Object.entries(form.controls).forEach(([key, control]) => {\n if (!(key in model)) return;\n\n const mapper = registry[key];\n const value = model?.[key];\n\n if (control instanceof FormGroup) {\n const mapped = mapper ? mapper.fromModel(value) : value;\n\n if (isRecord(mapped)) {\n this.hydrator.hydrate(control, mapped);\n }\n }\n });\n }\n\n public buildRequest(): Record<string, unknown> {\n return this.serializer.toRequest(this.form(), this.mapperRegistry());\n }\n\n ngOnDestroy(): void {\n this._logicSubscription.unsubscribe();\n }\n}\n","/*\n * Public API Surface of core\n */\n\nexport * from './lib/base/form-control-base';\nexport * from './lib/base/form-handler-base';\nexport * from './lib/base/form-mapper-base';\n\nexport * from './lib/behavior/currency.behavior';\nexport * from './lib/behavior/text.behavior';\n\nexport * from './lib/input/input-currency.component';\nexport * from './lib/input/input-datepicker.component';\nexport * from './lib/input/input-number.component';\nexport * from './lib/input/input-select.component';\nexport * from './lib/input/input-text.component';\nexport * from './lib/input/input-textarea.component';\nexport * from './lib/input/input-timepicker.component';\n\nexport * from './lib/form-hydrator';\nexport * from './lib/form-orchestrator';\nexport * from './lib/form-serializer';\nexport * from './lib/form-utils';\nexport * from './lib/number-utils';\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FormHydrator","i2.FormSerializer"],"mappings":"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"}
1
+ {"version":3,"file":"ng-modular-forms-core.mjs","sources":["../../../projects/core/src/lib/base/form-control-base.ts","../../../projects/core/src/lib/number-utils.ts","../../../projects/core/src/lib/form-utils.ts","../../../projects/core/src/lib/base/form-handler-base.ts","../../../projects/core/src/lib/base/form-mapper-base.ts","../../../projects/core/src/lib/behavior/currency.behavior.ts","../../../projects/core/src/lib/behavior/text.behavior.ts","../../../projects/core/src/lib/input/form-field.component.ts","../../../projects/core/src/lib/input/input-currency.component.ts","../../../projects/core/src/lib/input/input-datepicker.component.ts","../../../projects/core/src/lib/input/input-number.component.ts","../../../projects/core/src/lib/input/input-select.component.ts","../../../projects/core/src/lib/input/input-text.component.ts","../../../projects/core/src/lib/input/input-textarea.component.ts","../../../projects/core/src/lib/input/input-timepicker.component.ts","../../../projects/core/src/lib/type-guards.ts","../../../projects/core/src/lib/form-hydrator.ts","../../../projects/core/src/lib/form-serializer.ts","../../../projects/core/src/lib/form-orchestrator.ts","../../../projects/core/src/public-api.ts","../../../projects/core/src/ng-modular-forms-core.ts"],"sourcesContent":["import {\n ControlValueAccessor,\n FormControl,\n NgControl,\n TouchedChangeEvent,\n Validators,\n} from '@angular/forms';\nimport {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { merge, startWith } from 'rxjs';\n\n@Directive()\nexport abstract class FormControlBase<T> implements ControlValueAccessor {\n protected readonly destroyRef = inject(DestroyRef);\n\n static nextId = 0;\n readonly id = input<string | null>(\n `nmf-form-control-${FormControlBase.nextId++}`,\n { alias: 'id' },\n );\n\n readonly label = input<string>('');\n readonly classList = input<string[]>([]);\n readonly loading = input<boolean>(false);\n readonly name = input<string>('');\n readonly placeholder = input<string>('');\n\n readonly _disabledByInput = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n alias: 'disabledOverride',\n });\n readonly _disabledByCva = signal(false);\n\n readonly ngControl = inject(NgControl, {\n self: true,\n optional: true,\n });\n\n protected readonly standaloneControl = new FormControl<T | null>(null);\n\n get formControl(): FormControl<T | null> {\n return (\n (this.ngControl?.control as FormControl<T | null> | null) ??\n this.standaloneControl\n );\n }\n\n protected readonly disabled = computed(\n () => this._disabledByInput() || this._disabledByCva(),\n );\n\n protected readonly isRequired = signal(\n this.ngControl?.control?.hasValidator(Validators.required) ?? false,\n );\n\n protected readonly hasErrors = signal(false);\n\n protected onChange: (value: T | null) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n ngOnInit() {\n const control = this.ngControl?.control;\n if (!control) return;\n\n merge(control.statusChanges, control.valueChanges)\n .pipe(startWith(null), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.hasErrors.set(control.invalid && control.touched);\n this.isRequired.set(control.hasValidator(Validators.required) ?? false);\n });\n\n control.events\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n if (event instanceof TouchedChangeEvent) {\n this.hasErrors.set(control.invalid && control.touched);\n }\n });\n }\n\n writeValue(value: T | null): void {\n const control = this.ngControl?.control;\n if (!control) return;\n\n if (control.value !== value) {\n control.setValue(value, { emitEvent: false });\n }\n }\n\n registerOnChange(fn: (value: T | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabledByCva.set(isDisabled);\n }\n\n protected errorMessage(): string | null {\n const control = this.ngControl?.control;\n if (control == null || !control.errors || !control.touched) return null;\n\n const firstKey = Object.keys(control.errors)[0];\n const error = control.errors[firstKey];\n\n switch (firstKey) {\n case 'required':\n return 'This field is required';\n\n case 'minlength':\n return `Minimum length is ${error.requiredLength}`;\n\n case 'maxlength':\n return `Maximum length is ${error.requiredLength}`;\n\n case 'min':\n return `Minimum value is ${error.min}`;\n\n case 'max':\n return `Maximum value is ${error.max}`;\n\n case 'email':\n return 'Invalid email address';\n\n case 'pattern':\n return 'Invalid format';\n\n case 'custom':\n if (typeof error === 'string') {\n return error;\n }\n return 'Invalid value';\n\n default:\n return 'Invalid value';\n }\n }\n}\n","export function parseNumber(\n input: string | number | null | undefined,\n): number | null {\n if (input == null || input === '') return null;\n\n if (typeof input === 'number') {\n return Number.isFinite(input) ? input : null;\n }\n\n const normalized = input\n .trim()\n .replace(/,/g, '') // remove thousands\n .replace(/(?!^)-/g, ''); // only allow leading '-'\n\n if (normalized === '-' || normalized === '.' || normalized === '-.') {\n return null;\n }\n\n const num = Number(normalized);\n\n return Number.isFinite(num) ? num : null;\n}\n\nexport function formatNumber(\n value: string | number | null,\n locale: string = 'en-US',\n options: Intl.NumberFormatOptions = { maximumFractionDigits: 2 },\n): string | null {\n if (value == null || value === '') {\n return null;\n }\n if (typeof value !== 'string') {\n value = String(value);\n }\n\n value = value.replace(/[^\\d\\-,.]/g, '');\n\n if (value === '') {\n return null;\n }\n\n const isNegative = value.startsWith('-');\n const numericValue = Number(value.replace(/[,$-]/g, ''));\n const formatted = numericValue.toLocaleString(locale, options);\n\n return isNegative ? `-${formatted}` : formatted;\n}\n","import type { FormControl, FormGroup } from '@angular/forms';\nimport { parseNumber } from './number-utils';\n\nexport function getControl<T = unknown>(controlName: string, form: FormGroup) {\n if (!form) {\n throw new Error(\n `Missing form instance while getting the control of \"${controlName}\"`,\n );\n }\n\n const control = form.get(controlName) as FormControl<T>;\n if (!control) {\n throw new Error(`Missing control \"${controlName}\" in form \"${form}\"`);\n }\n\n return control;\n}\n\nexport function getControlValue<T = unknown>(\n controlName: string,\n form: FormGroup,\n): T | null;\n\nexport function getControlValue(\n controlName: string,\n form: FormGroup,\n): number | null;\n\nexport function getControlValue<T = unknown>(\n controlName: string,\n form: FormGroup,\n): T | null {\n const control = getControl<T>(controlName, form);\n if (!control) {\n throw new Error(`Missing control \"${controlName}\" in form \"${form}\"`);\n }\n\n const value = control.getRawValue();\n if (value === '') {\n return null;\n }\n\n if (typeof value === 'string') {\n const cleaned = value.replace(/,/g, '');\n\n if (!Number.isNaN(Number(cleaned))) {\n return parseNumber(value) as T;\n }\n }\n\n return value;\n}\n","import type { FormControl, FormGroup } from '@angular/forms';\nimport type { Observable, Subscription } from 'rxjs';\nimport { getControl } from '../form-utils';\n\nexport abstract class FormHandlerBase<ControlNames extends string = string> {\n abstract getReactiveLogic(form: FormGroup): Subscription;\n\n private registeredControls: Partial<\n Record<ControlNames, FormControl<unknown>>\n > = {};\n\n /**\n * Registers form controls for later reactive access.\n */\n public registerControls(\n form: FormGroup,\n controlNames: readonly ControlNames[],\n ): void {\n controlNames.forEach((controlName) => {\n const control = getControl(controlName.replace(/_/g, '.'), form);\n\n if (!control) {\n throw new Error(\n `Failed to register control \"${controlName}\". Available controls: ${Object.keys(form.controls).join(', ')}`,\n );\n }\n\n this.registeredControls[controlName] = control;\n });\n }\n\n public getControl<T>(key: ControlNames): T {\n const control = this.registeredControls[key];\n\n if (!control) {\n throw new Error(\n `Control with name: \"${key}\" not found. Ensure it is registered in registerControls(...) before usage.`,\n );\n }\n\n return control as T;\n }\n\n public valueChangesOf<T>(key: ControlNames): Observable<T> {\n const control = this.registeredControls[key];\n\n if (!control) {\n throw new Error(\n `Control with name: \"${key}\" not found. Ensure it is registered in registerControls(...) before usage.`,\n );\n }\n\n return control.valueChanges as Observable<T>;\n }\n}\n","export abstract class FormMapperBase<\n TIn = unknown,\n TOut = TIn,\n TForm = TIn,\n TOptions extends object = object,\n> {\n public fromModel(model: TIn): TForm {\n return structuredClone(model) as unknown as TForm;\n }\n\n public toRequest(formValue: TForm, _options?: TOptions): TOut {\n return formValue as unknown as TOut;\n }\n}\n","export class CurrencyBehavior {\n blockNonDigitKey(event: KeyboardEvent) {\n const input = event.target as HTMLInputElement;\n const value = input.value;\n\n if (event.ctrlKey || event.metaKey) {\n return;\n }\n\n const allowedKeys = [\n 'Backspace',\n 'Delete',\n 'Tab',\n 'Enter',\n 'Escape',\n 'ArrowLeft',\n 'ArrowRight',\n 'Home',\n 'End',\n ];\n\n if (allowedKeys.includes(event.key)) {\n return;\n }\n\n const isDigit = /^[0-9]$/.test(event.key);\n if (isDigit) {\n return;\n }\n\n if (event.key === '.') {\n if (value.includes('.')) {\n event.preventDefault();\n }\n return;\n }\n\n if (event.key === ',') {\n event.preventDefault();\n return;\n }\n\n if (event.key === '-') {\n const hasMinus = value.includes('-');\n const isAtStart = input.selectionStart === 0;\n\n if (hasMinus || !isAtStart) {\n event.preventDefault();\n }\n return;\n }\n\n event.preventDefault();\n }\n}\n","import { signal } from '@angular/core';\n\nexport class TextBehavior {\n private _showPassword = signal<boolean>(false);\n\n showPassword = this._showPassword.asReadonly();\n\n toggleShowPassword(event?: MouseEvent): void {\n event?.stopPropagation();\n this._showPassword.set(!this.showPassword());\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'nmf-form-field',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"nmf-field\" [class.loading]=\"loading()\">\n @if (label()) {\n <label class=\"nmf-label\">\n {{ label() }}\n @if (isRequired()) {\n <span class=\"nmf-required\">*</span>\n }\n </label>\n }\n\n <ng-content></ng-content>\n\n @if (loading()) {\n <div class=\"nmf-loading\">\n <span class=\"nmf-spinner\"></span>\n </div>\n }\n\n <p class=\"nmf-error\">\n {{ errorMessage() }}\n </p>\n </div>\n `,\n})\nexport class FormFieldComponent {\n label = input<string>();\n isRequired = input<boolean>();\n loading = input<boolean>();\n errorMessage = input<string | null>();\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n signal,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormControlBase } from '../base/form-control-base';\nimport { CurrencyBehavior } from '../behavior/currency.behavior';\nimport { formatNumber, parseNumber } from '../number-utils';\nimport { FormFieldComponent } from './form-field.component';\n\n@Component({\n selector: 'nmf-currency',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormFieldComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nmf-form-field\n [label]=\"label()\"\n [isRequired]=\"isRequired()\"\n [loading]=\"loading()\"\n [errorMessage]=\"errorMessage()\"\n >\n <div class=\"nmf-input-wrapper nmf-input-prefix\">\n @if (displayValue() != null) {\n <span\n class=\"nmf-prefix\"\n [class.error]=\"hasErrors()\"\n [class.nmf-prefix-disabled]=\"disabled()\"\n [style.color]=\"textColor()\"\n >\n $\n </span>\n }\n\n <input\n type=\"text\"\n autocomplete=\"off\"\n class=\"nmf-input\"\n [ngClass]=\"classList()\"\n [class.error]=\"hasErrors()\"\n [class.disabled]=\"disabled()\"\n [class.nmf-input-with-prefix]=\"displayValue() != null\"\n [style.color]=\"textColor()\"\n [id]=\"id()\"\n [name]=\"name()\"\n [value]=\"displayValue()\"\n [disabled]=\"disabled()\"\n [required]=\"isRequired()\"\n [placeholder]=\"placeholder()\"\n (blur)=\"onTouched()\"\n (input)=\"onInput($event)\"\n (keydown)=\"handleKeyDown($event)\"\n />\n </div>\n </nmf-form-field>\n `,\n})\nexport class InputCurrencyComponent extends FormControlBase<number | null> {\n displayValue = signal<string | null>(null);\n\n behavior = new CurrencyBehavior();\n\n override writeValue(value: number | null): void {\n super.writeValue(value);\n this.displayValue.set(value != null ? formatNumber(value) : null);\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n this.behavior.blockNonDigitKey(event);\n }\n\n onInput(event: Event) {\n if (this._disabledByInput()) return;\n\n const rawValue = (event.target as HTMLInputElement).value ?? null;\n const value = parseNumber(rawValue);\n\n this.displayValue.set(value != null ? formatNumber(value) : null);\n\n this.onChange(value);\n }\n\n textColor = computed(() => {\n const value = this.displayValue();\n if (this._disabledByInput() || !value) {\n return 'inherit';\n }\n\n const parsedValue = parseNumber(value);\n const valid = parsedValue != null && parsedValue >= 0;\n\n return valid ? 'inherit' : '#dc6262';\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FormControlBase } from '../base/form-control-base';\nimport { FormFieldComponent } from './form-field.component';\n\n@Component({\n selector: 'nmf-datepicker',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormFieldComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nmf-form-field\n [label]=\"label()\"\n [isRequired]=\"isRequired()\"\n [loading]=\"loading()\"\n [errorMessage]=\"errorMessage()\"\n >\n <input\n type=\"date\"\n class=\"nmf-input\"\n [ngClass]=\"classList()\"\n [class.error]=\"hasErrors()\"\n [class.disabled]=\"disabled()\"\n [id]=\"id()\"\n [min]=\"formatDate(minDate())\"\n [max]=\"formatDate(maxDate())\"\n [name]=\"name()\"\n [value]=\"displayValue()\"\n [disabled]=\"disabled()\"\n [required]=\"isRequired()\"\n [placeholder]=\"placeholder()\"\n (blur)=\"onTouched()\"\n (input)=\"onInput($event)\"\n />\n </nmf-form-field>\n `,\n})\nexport class InputDatepickerComponent extends FormControlBase<Date | null> {\n minDate = input<Date | null>(null);\n maxDate = input<Date | null>(null);\n\n displayValue = signal<string>('');\n\n formatDate(date: Date | null | undefined): string | null {\n if (!date) return null;\n\n // yyyy-MM-dd (required by input[type=\"date\"])\n const yyyy = date.getFullYear();\n const mm = String(date.getMonth() + 1).padStart(2, '0');\n const dd = String(date.getDate()).padStart(2, '0');\n\n return `${yyyy}-${mm}-${dd}`;\n }\n\n parseDate(value: string): Date | null {\n if (!value) return null;\n const [y, m, d] = value.split('-').map(Number);\n return new Date(y, m - 1, d);\n }\n\n override writeValue(value: Date | null): void {\n super.writeValue(value);\n\n this.displayValue.set(this.formatDate(value) ?? '');\n }\n\n onInput(event: Event): void {\n if (this._disabledByInput()) return;\n\n const input = event.target as HTMLInputElement;\n const parsed = this.parseDate(input.value);\n\n this.displayValue.set(this.formatDate(parsed) ?? '');\n\n this.onChange(parsed);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n signal,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormControlBase } from '../base/form-control-base';\nimport { CurrencyBehavior } from '../behavior/currency.behavior';\nimport { TextBehavior } from '../behavior/text.behavior';\nimport { formatNumber, parseNumber } from '../number-utils';\nimport { FormFieldComponent } from './form-field.component';\n\n@Component({\n selector: 'nmf-number',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormFieldComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nmf-form-field\n [label]=\"label()\"\n [isRequired]=\"isRequired()\"\n [loading]=\"loading()\"\n [errorMessage]=\"errorMessage()\"\n >\n <input\n autocomplete=\"off\"\n class=\"nmf-input\"\n [ngClass]=\"classList()\"\n [class.error]=\"hasErrors()\"\n [class.disabled]=\"disabled()\"\n [id]=\"id()\"\n [name]=\"name()\"\n [type]=\"formatValue() ? 'text' : 'number'\"\n [value]=\"displayValue()\"\n [disabled]=\"disabled()\"\n [required]=\"isRequired()\"\n [placeholder]=\"placeholder()\"\n (blur)=\"onTouched()\"\n (input)=\"onInput($event)\"\n (keydown)=\"handleKeyDown($event)\"\n />\n </nmf-form-field>\n `,\n})\nexport class InputNumberComponent extends FormControlBase<\n string | number | null\n> {\n formatValue = input<boolean>(false);\n displayValue = signal<string>('');\n\n behavior = new TextBehavior();\n currencyBehavior = new CurrencyBehavior();\n\n override writeValue(value: string | number | null): void {\n super.writeValue(value);\n this.updateDisplayValue(value);\n }\n\n handleKeyDown(event: KeyboardEvent) {\n this.currencyBehavior.blockNonDigitKey(event);\n }\n\n onInput(event: Event): void {\n if (this._disabledByInput()) return;\n\n const raw = (event.target as HTMLInputElement).value;\n const parsed = parseNumber(raw);\n\n this.updateDisplayValue(parsed);\n\n this.onChange(parsed);\n }\n\n updateDisplayValue(value: string | number | null) {\n if (this.formatValue() && value != null) {\n this.displayValue.set(formatNumber(value) ?? '');\n } else {\n this.displayValue.set(value != null ? String(value) : '');\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormControlBase } from '../base/form-control-base';\nimport { FormFieldComponent } from './form-field.component';\n\nexport interface SelectOption {\n key: string | number;\n label: string | number;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'nmf-select',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormFieldComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nmf-form-field\n [label]=\"label()\"\n [isRequired]=\"isRequired()\"\n [loading]=\"loading()\"\n [errorMessage]=\"errorMessage()\"\n >\n <div class=\"select-wrapper\" [class.disabled]=\"disabled()\">\n <select\n class=\"nmf-input\"\n [ngClass]=\"classList()\"\n [class.error]=\"hasErrors()\"\n [class.disabled]=\"disabled()\"\n [required]=\"isRequired()\"\n [formControl]=\"formControl\"\n (blur)=\"onTouched()\"\n >\n <!-- Empty option -->\n <option [ngValue]=\"null\" disabled>\n {{ emptyOptionLabel() }}\n </option>\n\n <!-- Options -->\n @for (option of options(); track option.key) {\n <option [ngValue]=\"option.key\" [disabled]=\"option.disabled\">\n {{ option.label }}\n </option>\n }\n\n <!-- Clear option -->\n @if (clearOptionLabel()) {\n <option [ngValue]=\"null\">\n {{ clearOptionLabel() }}\n </option>\n }\n </select>\n </div>\n </nmf-form-field>\n `,\n})\nexport class InputSelectComponent extends FormControlBase<\n string | number | null\n> {\n options = input<SelectOption[]>([]);\n emptyOptionLabel = input<string>('Select an option');\n clearOptionLabel = input<string | null>('Clear selection');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormControlBase } from '../base/form-control-base';\nimport { TextBehavior } from '../behavior/text.behavior';\nimport { FormFieldComponent } from './form-field.component';\n\n@Component({\n selector: 'nmf-text',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormFieldComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nmf-form-field\n [label]=\"label()\"\n [isRequired]=\"isRequired()\"\n [loading]=\"loading()\"\n [errorMessage]=\"errorMessage()\"\n >\n <div class=\"nmf-input-wrapper\">\n <input\n class=\"nmf-input\"\n [ngClass]=\"classList()\"\n [class.error]=\"hasErrors()\"\n [class.disabled]=\"disabled()\"\n [id]=\"id()\"\n [name]=\"name()\"\n [type]=\"computedType()\"\n [required]=\"isRequired()\"\n [placeholder]=\"placeholder()\"\n [formControl]=\"formControl\"\n (blur)=\"onTouched()\"\n />\n\n @if (type() === 'password' && !loading() && !disabled()) {\n <button\n type=\"button\"\n class=\"nmf-password-toggle\"\n aria-label=\"Toggle password visibility\"\n (click)=\"behavior.toggleShowPassword($event)\"\n >\n @if (behavior.showPassword()) {\n <ng-container [ngTemplateOutlet]=\"eyeOffIcon\"></ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"eyeIcon\"></ng-container>\n }\n </button>\n }\n </div>\n </nmf-form-field>\n\n <ng-template #eyeIcon>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"#e3e3e3\"\n class=\"nmf-icon\"\n >\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path\n d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"\n />\n </svg>\n </ng-template>\n\n <ng-template #eyeOffIcon>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n fill=\"#e3e3e3\"\n class=\"nmf-icon\"\n >\n <path\n d=\"M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z\"\n fill=\"none\"\n />\n <path\n d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\"\n />\n </svg>\n </ng-template>\n `,\n})\nexport class InputTextComponent extends FormControlBase<\n string | number | null\n> {\n type = input<\n 'text' | 'number' | 'email' | 'tel' | 'url' | 'password' | 'search'\n >('text');\n\n behavior = new TextBehavior();\n\n computedType = computed(() =>\n this.behavior.showPassword() && this.type() === 'password'\n ? 'text'\n : this.type(),\n );\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormControlBase } from '../base/form-control-base';\nimport { FormFieldComponent } from './form-field.component';\n\n@Component({\n selector: 'nmf-textarea',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormFieldComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nmf-form-field\n [label]=\"label()\"\n [isRequired]=\"isRequired()\"\n [loading]=\"loading()\"\n [errorMessage]=\"errorMessage()\"\n >\n <textarea\n class=\"nmf-input\"\n [ngClass]=\"classList()\"\n [class.error]=\"hasErrors()\"\n [class.disabled]=\"disabled()\"\n [id]=\"id()\"\n [rows]=\"rows()\"\n [cols]=\"cols()\"\n [required]=\"isRequired()\"\n [placeholder]=\"placeholder()\"\n [formControl]=\"formControl\"\n (blur)=\"onTouched()\"\n ></textarea>\n </nmf-form-field>\n `,\n})\nexport class InputTextareaComponent extends FormControlBase<string | null> {\n rows = input<number>(5);\n cols = input<number>(5);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FormControlBase } from '../base/form-control-base';\nimport { FormFieldComponent } from './form-field.component';\n\n@Component({\n selector: 'nmf-timepicker',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormFieldComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nmf-form-field\n [label]=\"label()\"\n [isRequired]=\"isRequired()\"\n [loading]=\"loading()\"\n [errorMessage]=\"errorMessage()\"\n >\n <input\n type=\"time\"\n autocomplete=\"off\"\n class=\"nmf-input\"\n [ngClass]=\"classList()\"\n [class.error]=\"hasErrors()\"\n [class.disabled]=\"disabled()\"\n [id]=\"id()\"\n [name]=\"name()\"\n [step]=\"step()\"\n [value]=\"displayValue()\"\n [disabled]=\"disabled()\"\n [required]=\"isRequired()\"\n [placeholder]=\"placeholder()\"\n (blur)=\"onTouched()\"\n (input)=\"onInput($event)\"\n />\n </nmf-form-field>\n `,\n})\nexport class InputTimepickerComponent extends FormControlBase<Date | null> {\n // step in seconds: 60 = minutes only, 1 = show seconds\n step = input<number>(60);\n displayValue = signal<string>('');\n\n formatTime(date: Date | null | undefined): string | null {\n if (!date) return null;\n\n const hh = String(date.getHours()).padStart(2, '0');\n const mm = String(date.getMinutes()).padStart(2, '0');\n const ss = String(date.getSeconds()).padStart(2, '0');\n\n return this.step() < 60 ? `${hh}:${mm}:${ss}` : `${hh}:${mm}`;\n }\n\n parseTime(value: string): Date | null {\n if (!value) return null;\n\n const [h, m, s = 0] = value.split(':').map(Number);\n const date = new Date();\n date.setHours(h, m, s, 0);\n return date;\n }\n\n override writeValue(value: Date | null): void {\n super.writeValue(value);\n this.displayValue.set(this.formatTime(value) ?? '');\n }\n\n onInput(event: Event): void {\n if (this._disabledByInput()) return;\n\n const input = event.target as HTMLInputElement;\n const parsed = this.parseTime(input.value);\n\n this.displayValue.set(this.formatTime(parsed) ?? '');\n\n this.onChange(parsed);\n }\n}\n","export function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { Injectable } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { isRecord } from './type-guards';\nimport type { MapperRegistry } from './types';\n\n@Injectable({ providedIn: 'root' })\nexport class FormHydrator {\n hydrate<TModel extends Record<string, unknown>>(\n form: FormGroup,\n model: TModel,\n registry: MapperRegistry = {},\n ) {\n Object.entries(form.controls).forEach(([key, control]) => {\n if (!(key in model)) return;\n\n const mapFn = registry[key]?.fromModel;\n const value = model?.[key];\n\n if (control instanceof FormGroup) {\n if (mapFn) {\n const mapped = mapFn(value);\n\n if (isRecord(mapped)) {\n control.patchValue(mapped, { emitEvent: false });\n }\n } else {\n this.hydrate(\n control,\n (value ?? {}) as Record<string, unknown>,\n registry,\n );\n }\n return;\n }\n\n control.patchValue(value, { emitEvent: false });\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport type { MapperRegistry } from './types';\n\n@Injectable({ providedIn: 'root' })\nexport class FormSerializer {\n toRequest<TOptions extends object = object>(\n form: FormGroup,\n registry: MapperRegistry = {},\n options?: TOptions,\n ): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n Object.entries(form.controls).forEach(([key, control]) => {\n const mapFn = registry[key]?.toRequest;\n\n if (control instanceof FormGroup) {\n result[key] = mapFn\n ? mapFn(control.value, options)\n : this.toRequest(control, registry, options);\n return;\n }\n\n result[key] = control.value;\n });\n\n return result;\n }\n}\n","import { FormGroup } from '@angular/forms';\nimport { Directive, OnDestroy, signal } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { FormHandlerBase } from './base/form-handler-base';\nimport { FormMapperBase } from './base/form-mapper-base';\nimport { FormHydrator } from './form-hydrator';\nimport { FormSerializer } from './form-serializer';\nimport type {\n FormHandlerRegistry,\n FormOrchestratorOptions,\n FormStatus,\n MapperRegistry,\n} from './types';\nimport { isRecord } from './type-guards';\n\n@Directive()\nexport abstract class FormOrchestrator\n extends FormMapperBase\n implements OnDestroy\n{\n private readonly _form = signal<FormGroup>(new FormGroup({}));\n private readonly _handlerRegistry = signal<FormHandlerRegistry>([]);\n private readonly _mapperRegistry = signal<MapperRegistry>({});\n private readonly _status = signal<FormStatus>('idle');\n private readonly _errorMessage = signal<string | null>(null);\n\n public readonly form = this._form.asReadonly();\n public readonly handlerRegistry = this._handlerRegistry.asReadonly();\n public readonly mapperRegistry = this._mapperRegistry.asReadonly();\n public readonly status = this._status.asReadonly();\n public readonly errorMessage = this._errorMessage.asReadonly();\n\n private _logicSubscription = new Subscription();\n\n constructor(\n protected readonly hydrator: FormHydrator,\n protected readonly serializer: FormSerializer,\n ) {\n super();\n }\n\n /**\n * Initializes orchestration state.\n * Must be called before any subform registration or handler execution.\n */\n public orchestrate(options: FormOrchestratorOptions) {\n const { form, mapperRegistry = {}, handlerRegistry = [] } = options;\n this._form.set(form);\n this._mapperRegistry.set(mapperRegistry);\n this._handlerRegistry.set(handlerRegistry);\n\n Object.values(this.handlerRegistry()).forEach((handler) => {\n this.addReactiveLogic(handler.getReactiveLogic(form));\n });\n }\n\n public setForm(form: FormGroup) {\n this._form.set(form);\n }\n\n public getSubForm(key: string): FormGroup {\n return this.form().get(key) as FormGroup;\n }\n\n public addHandlerToRegistry(handler: FormHandlerBase) {\n this._handlerRegistry.set([...this._handlerRegistry(), handler]);\n }\n\n public addReactiveLogic(subscription: Subscription) {\n this._logicSubscription.add(subscription);\n }\n\n public setStatus(status: FormStatus) {\n this._status.set(status);\n }\n\n public setErrorMessage(message: string | null) {\n this._errorMessage.set(message);\n }\n\n public hydrateFromModel<TModel extends object>(model: TModel) {\n const form = this.form();\n const registry = this.mapperRegistry();\n\n Object.entries(form.controls).forEach(([key, control]) => {\n if (!(key in model)) return;\n\n const mapper = registry[key];\n const value = (model as Record<string, unknown>)[key];\n\n if (control instanceof FormGroup) {\n const mapped = mapper ? mapper.fromModel(value) : value;\n\n if (isRecord(mapped)) {\n this.hydrator.hydrate(control, mapped);\n }\n }\n });\n }\n\n public buildRequest<TOptions extends object>(\n options?: TOptions,\n ): Record<string, unknown> {\n return this.serializer.toRequest<TOptions>(\n this.form(),\n this.mapperRegistry(),\n options,\n );\n }\n\n ngOnDestroy(): void {\n this._logicSubscription.unsubscribe();\n }\n}\n","/*\n * Public API Surface of core\n */\n\nexport * from './lib/base/form-control-base';\nexport * from './lib/base/form-handler-base';\nexport * from './lib/base/form-mapper-base';\n\nexport * from './lib/behavior/currency.behavior';\nexport * from './lib/behavior/text.behavior';\n\nexport * from './lib/input/input-currency.component';\nexport * from './lib/input/input-datepicker.component';\nexport * from './lib/input/input-number.component';\nexport * from './lib/input/input-select.component';\nexport * from './lib/input/input-text.component';\nexport * from './lib/input/input-textarea.component';\nexport * from './lib/input/input-timepicker.component';\n\nexport * from './lib/form-hydrator';\nexport * from './lib/form-orchestrator';\nexport * from './lib/form-serializer';\nexport * from './lib/form-utils';\nexport * from './lib/number-utils';\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FormHydrator","i2.FormSerializer"],"mappings":"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"}
@@ -28,5 +28,5 @@ export declare abstract class FormControlBase<T> implements ControlValueAccessor
28
28
  setDisabledState(isDisabled: boolean): void;
29
29
  protected errorMessage(): string | null;
30
30
  static ɵfac: i0.ɵɵFactoryDeclaration<FormControlBase<any>, never>;
31
- static ɵdir: i0.ɵɵDirectiveDeclaration<FormControlBase<any>, never, never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "classList": { "alias": "classList"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "_disabledByInput": { "alias": "_disabledByInput"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
31
+ static ɵdir: i0.ɵɵDirectiveDeclaration<FormControlBase<any>, never, never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "classList": { "alias": "classList"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "_disabledByInput": { "alias": "disabledOverride"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
32
32
  }
@@ -7,5 +7,6 @@ export declare abstract class FormHandlerBase<ControlNames extends string = stri
7
7
  * Registers form controls for later reactive access.
8
8
  */
9
9
  registerControls(form: FormGroup, controlNames: readonly ControlNames[]): void;
10
+ getControl<T>(key: ControlNames): T;
10
11
  valueChangesOf<T>(key: ControlNames): Observable<T>;
11
12
  }
@@ -1,4 +1,4 @@
1
- export declare abstract class FormMapperBase<TIn = unknown, TOut = TIn, TForm = TIn> {
1
+ export declare abstract class FormMapperBase<TIn = unknown, TOut = TIn, TForm = TIn, TOptions extends object = object> {
2
2
  fromModel(model: TIn): TForm;
3
- toRequest(formValue: TForm): TOut;
3
+ toRequest(formValue: TForm, _options?: TOptions): TOut;
4
4
  }
@@ -33,8 +33,8 @@ export declare abstract class FormOrchestrator extends FormMapperBase implements
33
33
  addReactiveLogic(subscription: Subscription): void;
34
34
  setStatus(status: FormStatus): void;
35
35
  setErrorMessage(message: string | null): void;
36
- hydrateFromModel<TModel extends Record<string, unknown>>(model: TModel): void;
37
- buildRequest(): Record<string, unknown>;
36
+ hydrateFromModel<TModel extends object>(model: TModel): void;
37
+ buildRequest<TOptions extends object>(options?: TOptions): Record<string, unknown>;
38
38
  ngOnDestroy(): void;
39
39
  static ɵfac: i0.ɵɵFactoryDeclaration<FormOrchestrator, never>;
40
40
  static ɵdir: i0.ɵɵDirectiveDeclaration<FormOrchestrator, never, never, {}, {}, never, never, true, never>;
@@ -2,7 +2,7 @@ import { FormGroup } from '@angular/forms';
2
2
  import type { MapperRegistry } from './types';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class FormSerializer {
5
- toRequest(form: FormGroup, registry?: MapperRegistry): Record<string, unknown>;
5
+ toRequest<TOptions extends object = object>(form: FormGroup, registry?: MapperRegistry, options?: TOptions): Record<string, unknown>;
6
6
  static ɵfac: i0.ɵɵFactoryDeclaration<FormSerializer, never>;
7
7
  static ɵprov: i0.ɵɵInjectableDeclaration<FormSerializer>;
8
8
  }
@@ -0,0 +1,9 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class FormFieldComponent {
3
+ label: import("@angular/core").InputSignal<string | undefined>;
4
+ isRequired: import("@angular/core").InputSignal<boolean | undefined>;
5
+ loading: import("@angular/core").InputSignal<boolean | undefined>;
6
+ errorMessage: import("@angular/core").InputSignal<string | null | undefined>;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormFieldComponent, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<FormFieldComponent, "nmf-form-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "isRequired": { "alias": "isRequired"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
9
+ }
@@ -9,5 +9,5 @@ export declare class InputCurrencyComponent extends FormControlBase<number | nul
9
9
  onInput(event: Event): void;
10
10
  textColor: import("@angular/core").Signal<"inherit" | "#dc6262">;
11
11
  static ɵfac: i0.ɵɵFactoryDeclaration<InputCurrencyComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<InputCurrencyComponent, "nmf-currency", never, {}, {}, never, ["*"], true, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<InputCurrencyComponent, "nmf-currency", never, {}, {}, never, never, true, never>;
13
13
  }
@@ -9,5 +9,5 @@ export declare class InputDatepickerComponent extends FormControlBase<Date | nul
9
9
  writeValue(value: Date | null): void;
10
10
  onInput(event: Event): void;
11
11
  static ɵfac: i0.ɵɵFactoryDeclaration<InputDatepickerComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<InputDatepickerComponent, "nmf-datepicker", never, { "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<InputDatepickerComponent, "nmf-datepicker", never, { "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
13
13
  }
@@ -3,7 +3,7 @@ import { CurrencyBehavior } from '../behavior/currency.behavior';
3
3
  import { TextBehavior } from '../behavior/text.behavior';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class InputNumberComponent extends FormControlBase<string | number | null> {
6
- formatNumberValue: import("@angular/core").InputSignal<boolean>;
6
+ formatValue: import("@angular/core").InputSignal<boolean>;
7
7
  displayValue: import("@angular/core").WritableSignal<string>;
8
8
  behavior: TextBehavior;
9
9
  currencyBehavior: CurrencyBehavior;
@@ -12,5 +12,5 @@ export declare class InputNumberComponent extends FormControlBase<string | numbe
12
12
  onInput(event: Event): void;
13
13
  updateDisplayValue(value: string | number | null): void;
14
14
  static ɵfac: i0.ɵɵFactoryDeclaration<InputNumberComponent, never>;
15
- static ɵcmp: i0.ɵɵComponentDeclaration<InputNumberComponent, "nmf-number", never, { "formatNumberValue": { "alias": "formatNumberValue"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<InputNumberComponent, "nmf-number", never, { "formatValue": { "alias": "formatValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
16
16
  }
@@ -6,5 +6,5 @@ export declare class InputTextComponent extends FormControlBase<string | number
6
6
  behavior: TextBehavior;
7
7
  computedType: import("@angular/core").Signal<"number" | "email" | "search" | "text" | "tel" | "url" | "password">;
8
8
  static ɵfac: i0.ɵɵFactoryDeclaration<InputTextComponent, never>;
9
- static ɵcmp: i0.ɵɵComponentDeclaration<InputTextComponent, "nmf-text", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<InputTextComponent, "nmf-text", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
10
10
  }
@@ -8,5 +8,5 @@ export declare class InputTimepickerComponent extends FormControlBase<Date | nul
8
8
  writeValue(value: Date | null): void;
9
9
  onInput(event: Event): void;
10
10
  static ɵfac: i0.ɵɵFactoryDeclaration<InputTimepickerComponent, never>;
11
- static ɵcmp: i0.ɵɵComponentDeclaration<InputTimepickerComponent, "nmf-timepicker", never, { "step": { "alias": "step"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<InputTimepickerComponent, "nmf-timepicker", never, { "step": { "alias": "step"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
12
12
  }
package/package.json CHANGED
@@ -1,20 +1,35 @@
1
1
  {
2
2
  "name": "@ng-modular-forms/core",
3
- "version": "0.7.6",
4
- "description": "Core primitives, behaviors, and input components for orchestrating complex Angular reactive forms.",
3
+ "version": "0.7.8",
4
+ "description": "Composable Angular reactive form primitives, custom controls, and Material-compatible components for building enterprise-ready, complex typed forms.",
5
5
  "keywords": [
6
6
  "angular",
7
- "angular-material",
8
- "forms",
9
- "reactive-forms",
10
- "reusable-forms",
11
- "controlvalueaccessor",
12
- "material-design",
13
- "ui-components",
14
- "form-controls",
15
- "input-components",
7
+ "angular 19",
8
+ "angular 20",
9
+ "angular 21",
10
+ "angular forms",
11
+ "reactive forms",
12
+ "typed forms",
13
+ "dynamic forms",
14
+ "form library",
15
+ "form framework",
16
+ "form controls",
17
+ "input components",
18
+ "control value accessor",
19
+ "cva",
20
+ "angular material",
21
+ "material design",
22
+ "ui components",
23
+ "enterprise forms",
24
+ "validation",
25
+ "reusable forms",
26
+ "custom form controls",
27
+ "headless forms",
28
+ "rxjs",
16
29
  "ng-modular-forms"
17
30
  ],
31
+ "license": "MIT",
32
+ "author": "Ron Bodnar <ron.bodnar@outlook.com> (https://ronbodnar.com)",
18
33
  "homepage": "https://ngmf.ronbodnar.com",
19
34
  "repository": {
20
35
  "type": "git",
@@ -23,6 +38,10 @@
23
38
  "bugs": {
24
39
  "url": "https://github.com/ronbodnar/ng-modular-forms/issues"
25
40
  },
41
+ "funding": {
42
+ "type": "github",
43
+ "url": "https://github.com/sponsors/ronbodnar"
44
+ },
26
45
  "peerDependencies": {
27
46
  "@angular/core": ">=19.0.0 <22.0.0",
28
47
  "@angular/common": ">=19.0.0 <22.0.0",