UNPKG

signal-template-forms

Version:

A powerful, type-safe Angular forms library built with signals, providing reactive form management with excellent developer experience and performance.

1 lines 371 kB
{"version":3,"file":"signal-template-forms.mjs","sources":["../../../projects/lib/src/lib/enums/form-field-type.enum.ts","../../../projects/lib/src/lib/helpers/value.helper.ts","../../../projects/lib/src/lib/services/field-role-attributes.service.ts","../../../projects/lib/src/lib/services/validation.service.ts","../../../projects/lib/src/lib/directives/signal-model.directive.ts","../../../projects/lib/src/lib/enums/form-status.enum.ts","../../../projects/lib/src/lib/enums/number-input-type.enum.ts","../../../projects/lib/src/lib/form-builder/engine/form-engine.ts","../../../projects/lib/src/lib/form-builder/utils/field-utils.ts","../../../projects/lib/src/lib/form-builder/factory/field-factory.ts","../../../projects/lib/src/lib/form-builder/builder/form-builder.ts","../../../projects/lib/src/lib/helpers/is-required.ts","../../../projects/lib/src/lib/helpers/with-meta.ts","../../../projects/lib/src/lib/models/unit-conversion.model.ts","../../../projects/lib/src/lib/models/index.ts","../../../projects/lib/src/lib/components/ui/form-dropdown-overlay/form-dropdown-overlay.component.ts","../../../projects/lib/src/lib/components/ui/form-dropdown-overlay/form-dropdown-overlay.component.html","../../../projects/lib/src/lib/services/form-dropdown.service.ts","../../../projects/lib/src/lib/services/theme.service.ts","../../../projects/lib/src/lib/services/unsaved-changes.guard.ts","../../../projects/lib/src/lib/services/word-count.service.ts","../../../projects/lib/src/lib/validators/signal-validators.ts","../../../projects/lib/src/lib/validators/validator-fns.ts","../../../projects/lib/src/lib/components/base/base-input/base-input.directive.ts","../../../projects/lib/src/lib/components/base/host-directive/signal-form-host.directive.ts","../../../projects/lib/src/lib/components/fields/signal-form-autocomplete-field/signal-form-autocomplete-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-autocomplete-field/signal-form-autocomplete-field.component.html","../../../projects/lib/src/lib/components/fields/signal-form-checkbox-field/signal-form-checkbox-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-checkbox-field/signal-form-checkbox-field.component.html","../../../projects/lib/src/lib/components/fields/signal-form-checkbox-group-field/signal-form-checkbox-group-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-checkbox-group-field/signal-form-checkbox-group-field.component.html","../../../projects/lib/src/lib/components/fields/signal-form-chip-list-field/signal-form-chip-list-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-chip-list-field/signal-form-chip-list-field.component.html","../../../projects/lib/src/lib/components/fields/signal-form-color-field/signal-form-color-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-color-field/signal-form-color-field.component.html","../../../projects/lib/src/lib/components/fields/signal-form-datetime-field/signal-form-datetime-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-datetime-field/signal-form-datetime-field.component.html","../../../projects/lib/src/lib/components/fields/signal-form-file-field/signal-form-file-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-file-field/signal-form-file-field.component.html","../../../projects/lib/src/lib/components/fields/signal-form-multiselect-field/signal-form-multiselect-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-multiselect-field/signal-form-multiselect-field.component.html","../../../projects/lib/src/lib/components/fields/signal-form-number-field/signal-form-number-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-number-field/signal-form-number-field.component.html","../../../projects/lib/src/lib/components/fields/signal-form-password-field/signal-form-password-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-password-field/signal-form-password-field.component.html","../../../projects/lib/src/lib/components/fields/signal-form-radio-field/signal-form-radio-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-radio-field/signal-form-radio-field.component.html","../../../projects/lib/src/lib/components/fields/signal-form-rating-field/signal-form-rating-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-rating-field/signal-form-rating-field.component.html","../../../projects/lib/src/lib/components/ui/skeletons/form-field-skeleton.component.ts","../../../projects/lib/src/lib/components/ui/skeletons/form-field-skeleton.component.html","../../../projects/lib/src/lib/components/ui/skeletons/form-field-skeleton-mapper.component.ts","../../../projects/lib/src/lib/components/renderers/signal-form-input-item/signal-form-input-item.component.ts","../../../projects/lib/src/lib/components/renderers/signal-form-input-item/signal-form-input-item.component.html","../../../projects/lib/src/lib/components/fields/signal-form-repeatable-field/signal-form-repeatable-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-repeatable-field/signal-form-repeatable-field.component.html","../../../projects/lib/src/lib/components/fields/signal-form-select-field/signal-form-select-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-select-field/signal-form-select-field.component.html","../../../projects/lib/src/lib/components/fields/signal-form-slider-field/signal-form-slider-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-slider-field/signal-form-slider-field.component.html","../../../projects/lib/src/lib/components/fields/signal-form-switch-field/signal-form-switch-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-switch-field/signal-form-switch-field.component.html","../../../projects/lib/src/lib/components/ui/word-count/word-count.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-text-field/signal-form-text-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-text-field/signal-form-text-field.component.html","../../../projects/lib/src/lib/components/fields/signal-form-textarea-field/signal-form-textarea-field.component.ts","../../../projects/lib/src/lib/components/fields/signal-form-textarea-field/signal-form-textarea-field.component.html","../../../projects/lib/src/lib/form-builder/utils/field-traversal.utils.ts","../../../projects/lib/src/lib/components/renderers/form-field-error-summary/signal-form-error-summary.component.ts","../../../projects/lib/src/lib/components/renderers/form-field-error-summary/signal-form-error-summary.component.html","../../../projects/lib/src/lib/animations/animations.ts","../../../projects/lib/src/lib/components/ui/collapsable-section/collapsable-section.component.ts","../../../projects/lib/src/lib/components/ui/collapsable-section/collapsable-section.component.html","../../../projects/lib/src/lib/components/renderers/signal-form-fields/signal-form-fields.component.ts","../../../projects/lib/src/lib/components/renderers/signal-form-fields/signal-form-fields.component.html","../../../projects/lib/src/lib/components/renderers/signal-form-save-button/signal-form-save-button.component.ts","../../../projects/lib/src/lib/components/renderers/signal-form-save-button/signal-form-save-button.component.html","../../../projects/lib/src/lib/components/renderers/signal-form-stepper/signal-form-stepper-nav/signal-form-stepper-nav.component.ts","../../../projects/lib/src/lib/components/renderers/signal-form-stepper/signal-form-stepper-nav/signal-form-stepper-nav.component.html","../../../projects/lib/src/lib/components/renderers/signal-form-stepper/signal-form-stepper.component.ts","../../../projects/lib/src/lib/components/renderers/signal-form-stepper/signal-form-stepper.component.html","../../../projects/lib/src/lib/components/renderers/signal-form/signal-form.component.ts","../../../projects/lib/src/lib/components/renderers/signal-form/signal-form.component.html","../../../projects/lib/src/public-api.ts","../../../projects/lib/src/signal-template-forms.ts"],"sourcesContent":["export enum FormFieldType {\n  AUTOCOMPLETE = 'autocomplete',\n  CHECKBOX = 'checkbox',\n  CHECKBOX_GROUP = 'checkbox-group',\n  CHIPLIST = 'chiplist',\n  COLOR = 'color',\n  DATETIME = 'datetime',\n  FILE = 'file',\n  MULTISELECT = 'multiselect',\n  NUMBER = 'number',\n  PASSWORD = 'password',\n  RADIO = 'radio',\n  RATING = 'rating',\n  REPEATABLE_GROUP = 'repeatable-group',\n  SELECT = 'select',\n  SLIDER = 'slider',\n  SWITCH = 'switch',\n  TEXT = 'text',\n  TEXTAREA = 'textarea',\n}\n","export class ValueHelper {\n  static isNull(value: unknown): value is null | undefined {\n    return value === null || value === undefined;\n  }\n\n  static isString(value: unknown): value is string {\n    return typeof value === 'string';\n  }\n\n  static isNumber(value: unknown): value is number {\n    return typeof value === 'number' && !isNaN(value);\n  }\n\n  static isBoolean(value: unknown): value is boolean {\n    return typeof value === 'boolean';\n  }\n\n  static isDate(value: unknown): value is Date {\n    return value instanceof Date && !isNaN(value.getTime());\n  }\n\n  static isObject(value: unknown): value is object {\n    return typeof value === 'object' && value !== null;\n  }\n\n  static hasValueProperty(\n    value: unknown,\n  ): value is { label: string; value: unknown } {\n    return ValueHelper.isObject(value) && 'value' in value;\n  }\n\n  static isCheckboxInput(element: Element): element is HTMLInputElement {\n    return element instanceof HTMLInputElement && element.type === 'checkbox';\n  }\n\n  static isDateInput(element: Element): element is HTMLInputElement {\n    return element instanceof HTMLInputElement && element.type === 'date';\n  }\n\n  static isNumberInput(element: Element): element is HTMLInputElement {\n    return element instanceof HTMLInputElement && element.type === 'number';\n  }\n\n  static isComboboxDiv(element: Element): element is HTMLDivElement {\n    return (\n      element instanceof HTMLDivElement &&\n      element.getAttribute('role') === 'combobox'\n    );\n  }\n\n  static isFormElement(\n    element: Element,\n  ): element is HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement {\n    return (\n      element instanceof HTMLInputElement ||\n      element instanceof HTMLSelectElement ||\n      element instanceof HTMLTextAreaElement\n    );\n  }\n\n  static extractValueString(value: unknown): string {\n    if (ValueHelper.isNull(value)) {\n      return '';\n    }\n    if (ValueHelper.isString(value)) {\n      return value;\n    }\n    if (ValueHelper.isNumber(value) || ValueHelper.isBoolean(value))\n      return String(value);\n\n    if (ValueHelper.hasValueProperty(value)) {\n      return String(value.label);\n    }\n\n    return String(value);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { FormFieldType } from '../enums/form-field-type.enum';\nimport {\n  type RoleAttributes,\n  type SignalFormField,\n} from '../models/signal-form.model';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class FieldRoleAttributesService {\n  getAttributesForField<\n    TModel extends object,\n    K extends keyof TModel = keyof TModel,\n  >(field: SignalFormField<TModel, K>): RoleAttributes {\n    const baseAttributes = this.getBaseAttributes(field);\n    const roleAttributes = this.getRoleSpecificAttributes(field);\n    const typeAttributes = this.getTypeSpecificAttributes(field);\n\n    return {\n      role: roleAttributes.role,\n      ariaAttributes: {\n        ...baseAttributes.ariaAttributes,\n        ...roleAttributes.ariaAttributes,\n        ...typeAttributes.ariaAttributes,\n      },\n      inputAttributes: {\n        ...baseAttributes.inputAttributes,\n        ...roleAttributes.inputAttributes,\n        ...typeAttributes.inputAttributes,\n      },\n    };\n  }\n\n  private getBaseAttributes<TModel extends object, K extends keyof TModel>(\n    field: SignalFormField<TModel, K>,\n  ): RoleAttributes {\n    const name = String(field.name);\n\n    return {\n      ariaAttributes: {\n        'aria-invalid': field.error() ? 'true' : 'false',\n        'aria-describedby': field.error() ? `${name}-error` : null,\n      },\n      inputAttributes: {\n        disabled: field.isDisabled() ? true : null,\n        placeholder: this.getPlaceholder(field),\n      },\n    };\n  }\n\n  /**\n   * Generates intelligent default placeholders based on field type and name\n   */\n  private getPlaceholder<TModel extends object, K extends keyof TModel>(\n    field: SignalFormField<TModel, K>,\n  ): string | null {\n    // If user provided a custom placeholder, use it\n    if (field.config?.placeholder) {\n      return field.config.placeholder;\n    }\n\n    // Generate smart defaults based on field type\n    const fieldName = String(field.name);\n    const label = field.label || fieldName;\n\n    switch (field.type) {\n      case FormFieldType.TEXT:\n      case FormFieldType.PASSWORD:\n      case FormFieldType.TEXTAREA:\n      case FormFieldType.NUMBER:\n        return `Type ${label.toLowerCase()} here`;\n\n      case FormFieldType.SELECT:\n      case FormFieldType.AUTOCOMPLETE:\n        return `Select a ${label.toLowerCase()}`;\n\n      case FormFieldType.MULTISELECT:\n      case FormFieldType.CHIPLIST:\n        return `Select ${label.toLowerCase()}`;\n\n      case FormFieldType.DATETIME:\n        return `Select ${label.toLowerCase()}`;\n\n      case FormFieldType.FILE:\n        return `Choose ${label.toLowerCase()} file`;\n\n      case FormFieldType.COLOR:\n        return `Pick a color for ${label.toLowerCase()}`;\n\n      // These field types don't typically use placeholders\n      case FormFieldType.CHECKBOX:\n      case FormFieldType.CHECKBOX_GROUP:\n      case FormFieldType.RADIO:\n      case FormFieldType.SWITCH:\n      case FormFieldType.SLIDER:\n      case FormFieldType.RATING:\n        return null;\n\n      default:\n        return `Enter ${label.toLowerCase()}`;\n    }\n  }\n\n  private getRoleSpecificAttributes<\n    TModel extends object,\n    K extends keyof TModel,\n  >(field: SignalFormField<TModel, K>): RoleAttributes {\n    const name = String(field.name);\n    switch (field.type) {\n      case FormFieldType.SELECT:\n      case FormFieldType.AUTOCOMPLETE:\n        return {\n          role: 'combobox',\n          ariaAttributes: {\n            'aria-owns': `${name}-listbox`,\n            'aria-controls': `${name}-listbox`,\n            'aria-haspopup': 'listbox',\n          },\n          inputAttributes: {},\n        };\n\n      case FormFieldType.CHECKBOX_GROUP:\n        return {\n          role: 'group',\n          ariaAttributes: {\n            'aria-labelledby': `${name}-legend`,\n          },\n          inputAttributes: {},\n        };\n\n      case FormFieldType.RADIO:\n        return {\n          role: 'radiogroup',\n          ariaAttributes: {\n            'aria-labelledby': `${name}-legend`,\n          },\n          inputAttributes: {},\n        };\n\n      case FormFieldType.SWITCH:\n        const fieldValue = field.value();\n        let ariaChecked: string | null = null;\n\n        if (fieldValue === null || fieldValue === undefined) {\n          ariaChecked = null;\n        } else if (typeof fieldValue === 'boolean') {\n          ariaChecked = fieldValue ? 'true' : 'false';\n        } else if (fieldValue) {\n          ariaChecked = String(fieldValue);\n        } else {\n          ariaChecked = String(fieldValue);\n        }\n\n        return {\n          role: 'switch',\n          ariaAttributes: {\n            'aria-checked': ariaChecked,\n          },\n          inputAttributes: {\n            checked: Boolean(fieldValue),\n          },\n        };\n\n      case FormFieldType.SLIDER:\n        const min = String(field.config?.min ?? 0);\n        const max = String(field.config?.max ?? 100);\n        const step = String(field.config?.step ?? 1);\n        const value = String(field.value() ?? 0);\n\n        return {\n          role: 'slider',\n          ariaAttributes: {\n            'aria-valuemin': min,\n            'aria-valuemax': max,\n            'aria-valuenow': value,\n          },\n          inputAttributes: {\n            min,\n            max,\n            step,\n          },\n        };\n\n      case FormFieldType.RATING:\n        return {\n          role: 'radiogroup',\n          ariaAttributes: {\n            'aria-valuemin': '0',\n            'aria-valuemax': field.config?.max?.toString() ?? '5',\n            'aria-valuenow': field.value()?.toString() ?? '0',\n            'aria-label': field.label,\n            'aria-invalid': field.error() ? 'true' : 'false',\n            'aria-describedby': field.error()\n              ? `error-${String(field.name)}`\n              : `hint-${String(field.name)}`,\n          },\n          inputAttributes: {},\n        };\n\n      case FormFieldType.FILE:\n        const accept = Array.isArray(field.config?.accept)\n          ? field.config.accept.join(',')\n          : null;\n\n        return {\n          role: 'button',\n          ariaAttributes: {\n            'aria-label':\n              field.config?.uploadText ?? 'Click or drag a file to upload',\n          },\n          inputAttributes: {\n            accept,\n          },\n        };\n\n      case FormFieldType.MULTISELECT:\n        return {\n          role: 'listbox',\n          ariaAttributes: {\n            'aria-label': field.label,\n            'aria-multiselectable': 'true',\n          },\n          inputAttributes: {},\n        };\n\n      default:\n        return {\n          ariaAttributes: {},\n          inputAttributes: {},\n        };\n    }\n  }\n\n  private getTypeSpecificAttributes<\n    TModel extends object,\n    K extends keyof TModel,\n  >(field: SignalFormField<TModel, K>): RoleAttributes {\n    switch (field.type) {\n      case FormFieldType.PASSWORD:\n        return {\n          ariaAttributes: {\n            'aria-label': `Password field for ${field.label}`,\n          },\n          inputAttributes: {\n            autocomplete: 'current-password',\n          },\n        };\n\n      case FormFieldType.COLOR:\n        return {\n          ariaAttributes: {\n            'aria-label': `Color picker for ${field.label}`,\n          },\n          inputAttributes: {},\n        };\n\n      case FormFieldType.DATETIME:\n        return {\n          ariaAttributes: {},\n          inputAttributes: {},\n        };\n\n      default:\n        return {\n          ariaAttributes: {},\n          inputAttributes: {},\n        };\n    }\n  }\n}\n","import { effect, inject, Injectable, Injector, signal } from '@angular/core';\nimport { firstValueFrom, from, timer } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport {\n  type SignalFormContainer,\n  type SignalFormField,\n  type ValidationConfig,\n  type ValidationTrigger,\n} from '../models/signal-form.model';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ValidationService {\n  private readonly injector = inject(Injector);\n\n  private readonly validatedFields = new Map<\n    string,\n    {\n      field: SignalFormField<any, any>;\n      form: SignalFormContainer<any>;\n      config: ValidationConfig;\n    }\n  >();\n\n  // Blur refresh signal to track blur events\n  private readonly blurRefresh = signal<string | null>(null);\n\n  constructor() {\n    this.setupSyncValidationEffect();\n    this.setupBlurValidationEffect();\n  }\n\n  /**\n   * Trigger blur validation for a specific field\n   * This creates a refresh signal that triggers validation\n   */\n  public triggerBlurValidation(fieldPath: string): void {\n    this.blurRefresh.set(fieldPath);\n    // Reset after a short delay to allow for multiple triggers\n    setTimeout(() => {\n      if (this.blurRefresh() === fieldPath) {\n        this.blurRefresh.set(null);\n      }\n    }, 50);\n  }\n\n  private setupSyncValidationEffect(): void {\n    effect(\n      () => {\n        this.validatedFields.forEach(({ field, form, config }) => {\n          const value = field.value();\n\n          if (config.trigger === 'change') {\n            this.runSyncValidation(field, value, form);\n          }\n\n          if (config.trigger === 'change' && field.asyncValidators?.length) {\n            timer(config.debounceMs || 300).subscribe(() => {\n              this.runAsyncValidation(field, value, form);\n            });\n          }\n        });\n      },\n      { injector: this.injector },\n    );\n  }\n\n  private setupBlurValidationEffect(): void {\n    effect(\n      () => {\n        const blurredFieldPath = this.blurRefresh();\n\n        if (!blurredFieldPath) {\n          return;\n        }\n\n        const fieldData = this.validatedFields.get(blurredFieldPath);\n        if (!fieldData) {\n          return;\n        }\n\n        const { field, form, config } = fieldData;\n\n        if (config.trigger === 'blur') {\n          // Mark as touched since blur occurred\n          field.touched.set(true);\n\n          // Run validation\n          this.runSyncValidation(field, field.value(), form);\n\n          if (field.asyncValidators?.length) {\n            this.runAsyncValidation(field, field.value(), form);\n          }\n        }\n      },\n      { injector: this.injector },\n    );\n  }\n\n  /**\n   * Register a field for validation\n   */\n  setupFieldValidation<TModel, K extends keyof TModel>(\n    field: SignalFormField<TModel, K>,\n    form: SignalFormContainer<TModel>,\n  ): void {\n    const fieldPath = field.path;\n    const config = this.getValidationConfig(field);\n\n    if (this.validatedFields.has(fieldPath)) {\n      return;\n    }\n\n    this.validatedFields.set(fieldPath, { field, form, config });\n\n    if (config.validateAsyncOnInit && field.asyncValidators?.length) {\n      timer(0).subscribe(() => {\n        this.runAsyncValidation(field, field.value(), form);\n      });\n    }\n  }\n\n  /**\n   * Get the effective validation configuration for a field\n   */\n  private getValidationConfig<TModel, K extends keyof TModel>(\n    field: SignalFormField<TModel, K>,\n  ): ValidationConfig {\n    const fieldConfig = field.validationConfig;\n    const configFromFieldConfig = field.config?.validation;\n\n    return {\n      trigger:\n        fieldConfig?.trigger || configFromFieldConfig?.trigger || 'change',\n      debounceMs:\n        fieldConfig?.debounceMs || configFromFieldConfig?.debounceMs || 300,\n      validateAsyncOnInit:\n        fieldConfig?.validateAsyncOnInit ||\n        configFromFieldConfig?.validateAsyncOnInit ||\n        false,\n    };\n  }\n\n  /**\n   * Run synchronous validation\n   */\n  private runSyncValidation<TModel, K extends keyof TModel>(\n    field: SignalFormField<TModel, K>,\n    value: TModel[K],\n    form: SignalFormContainer<TModel>,\n  ): void {\n    const validators = field.validators ?? [];\n\n    for (const validator of validators) {\n      const error = validator(value, form);\n      if (error) {\n        field.error.set(error);\n        return;\n      }\n    }\n\n    field.error.set(null);\n  }\n\n  /**\n   * Run asynchronous validation\n   */\n  private runAsyncValidation<TModel, K extends keyof TModel>(\n    field: SignalFormField<TModel, K>,\n    value: TModel[K],\n    form: SignalFormContainer<TModel>,\n  ): void {\n    const asyncValidators = field.asyncValidators ?? [];\n\n    if (asyncValidators.length === 0) {\n      return;\n    }\n\n    field.validating.set(true);\n    field.asyncError.set(null);\n\n    // Run all async validators in parallel\n    const validationPromises = asyncValidators.map((validator) => {\n      const result = validator(value, form);\n      return result instanceof Promise ? result : firstValueFrom(result);\n    });\n\n    from(Promise.all(validationPromises))\n      .pipe(\n        tap((results) => {\n          // Find the first error\n          const firstError = results.find((result) => result !== null);\n          field.asyncError.set(firstError || null);\n          field.validating.set(false);\n        }),\n      )\n      .subscribe({\n        error: (error) => {\n          console.error('Async validation error:', error);\n          field.asyncError.set('Validation failed');\n          field.validating.set(false);\n        },\n      });\n  }\n\n  /**\n   * Manually trigger validation for a field\n   */\n  triggerValidation<TModel, K extends keyof TModel>(\n    field: SignalFormField<TModel, K>,\n    trigger: ValidationTrigger = 'submit',\n  ): void {\n    const value = field.value();\n    const fieldData = this.validatedFields.get(field.path);\n\n    if (fieldData) {\n      if (trigger === 'submit' || fieldData.config.trigger === 'change') {\n        this.runSyncValidation(field, value, fieldData.form);\n      }\n\n      if (trigger === 'submit' && field.asyncValidators?.length) {\n        this.runAsyncValidation(field, value, fieldData.form);\n      }\n    }\n  }\n\n  /**\n   * Get the combined error for a field (sync + async)\n   */\n  getCombinedError<TModel, K extends keyof TModel>(\n    field: SignalFormField<TModel, K>,\n  ): string | null {\n    const hasAsyncValidation = 'asyncError' in field && 'validating' in field;\n\n    if (hasAsyncValidation && 'error' in field) {\n      const syncError = (field as any).error();\n      const asyncError = (field as any).asyncError();\n\n      return syncError || asyncError;\n    }\n\n    if ('error' in field) {\n      const error = (field as any).error();\n\n      if (typeof error === 'boolean') {\n        return error ? 'Field has errors' : null;\n      }\n\n      return error;\n    }\n\n    return null;\n  }\n\n  /**\n   * Check if a field is currently validating or has any errors\n   */\n  isFieldInvalid<TModel, K extends keyof TModel>(\n    field: SignalFormField<TModel, K>,\n  ): boolean {\n    // Check if field has async validation properties\n    const hasAsyncValidation = 'asyncError' in field && 'validating' in field;\n\n    if (hasAsyncValidation && 'error' in field) {\n      const error = (field as any).error();\n      const asyncError = (field as any).asyncError();\n      const validating = (field as any).validating();\n\n      return !!(error || asyncError || validating);\n    }\n\n    // For fields without async validation, just check sync error\n    if ('error' in field) {\n      const error = (field as any).error();\n\n      // Handle both string | null and boolean error types\n      if (typeof error === 'boolean') {\n        return error;\n      }\n\n      return !!error;\n    }\n\n    return false;\n  }\n\n  /**\n   * Validate all fields for submit trigger and return if form is valid\n   */\n  validateFormForSubmit<TModel>(\n    fields: SignalFormField<TModel>[],\n    form: SignalFormContainer<TModel>,\n  ): boolean {\n    let valid = true;\n\n    for (const field of fields) {\n      field.touched.set(true);\n\n      if (this.isFieldWithForm(field)) {\n        const nestedValid = field.form.validateForm();\n        valid = valid && nestedValid;\n        continue;\n      }\n\n      if (this.isRepeatableField(field)) {\n        const nestedForms = field.repeatableForms();\n        const allValid = nestedForms.every((form) => form.validateForm());\n        valid = valid && allValid;\n        continue;\n      }\n\n      const fieldData = this.validatedFields.get(field.path);\n      if (fieldData) {\n        this.runSyncValidation(field, field.value(), form);\n\n        if (field.error()) {\n          valid = false;\n        }\n      } else {\n        const validators = field.validators ?? [];\n        for (const validator of validators) {\n          const error = validator(field.value(), form);\n          if (error) {\n            field.error.set(error);\n            valid = false;\n            break;\n          } else {\n            field.error.set(null);\n          }\n        }\n      }\n    }\n\n    return valid;\n  }\n\n  private isFieldWithForm<TModel>(\n    field: SignalFormField<TModel>,\n  ): field is SignalFormField<TModel> & { form: SignalFormContainer<any> } {\n    return 'form' in field && field.form !== undefined;\n  }\n\n  private isRepeatableField<TModel>(\n    field: SignalFormField<TModel>,\n  ): field is SignalFormField<TModel> & {\n    repeatableForms: () => SignalFormContainer<any>[];\n  } {\n    return 'repeatableForms' in field && field.repeatableForms !== undefined;\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  HostBinding,\n  HostListener,\n  Injector,\n  OnInit,\n  Renderer2,\n  Signal,\n  computed,\n  effect,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\nimport { FormFieldType } from '../enums/form-field-type.enum';\nimport { ValueHelper } from '../helpers/value.helper';\nimport { SelectFieldConfig } from '../models/signal-field-configs.model';\nimport {\n  FormOption,\n  type ElementTypeForField,\n  type SignalFormContainer,\n  type SignalFormField,\n} from '../models/signal-form.model';\nimport { FieldRoleAttributesService } from '../services/field-role-attributes.service';\nimport { ValidationService } from '../services/validation.service';\n\n/**\n * Signal-based form field directive that handles two-way data binding, validation,\n * and accessibility attributes for form elements\n *\n * @template TModel - The form model type\n * @template K - The field key type\n * @template TFieldType - The form field type enum\n */\n@Directive({\n  selector: '[signalModel]',\n  standalone: true,\n})\nexport class SignalModelDirective<\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n  TFieldType extends FormFieldType = FormFieldType,\n> implements OnInit\n{\n  public signalModel = input.required<SignalFormField<TModel, K>>();\n\n  private initialValue = signal<TModel[K] | null>(null);\n  private hasCapturedInitial = signal(false);\n  private roleAttributes = computed(() =>\n    this.roleService.getAttributesForField(this.signalModel()),\n  );\n\n  private readonly elementRef = inject(\n    ElementRef<ElementTypeForField<TFieldType>>,\n  );\n  private readonly renderer = inject(Renderer2);\n  private readonly injector = inject(Injector);\n  private readonly roleService = inject(FieldRoleAttributesService);\n  private readonly validationService = inject(ValidationService);\n\n  private form = computed<SignalFormContainer<TModel> | null>(() =>\n    this.signalModel().getForm(),\n  );\n\n  /**\n   * Binds the field name as the element's name attribute\n   * @returns The field name as a string\n   */\n  @HostBinding('attr.name')\n  public get name(): string {\n    return String(this.signalModel().name);\n  }\n\n  /**\n   * Binds the field name as the element's id attribute\n   * @returns The field name as a string\n   */\n  @HostBinding('attr.id')\n  public get id(): string {\n    const baseName = String(this.signalModel().name);\n\n    // For radio buttons, we need unique IDs within the group\n    if (this.elementRef.nativeElement.type === 'radio') {\n      return this.generateUniqueRadioId(baseName);\n    }\n\n    return baseName;\n  }\n\n  /**\n   * Generates a unique ID for radio buttons by checking existing IDs in the DOM\n   */\n  private generateUniqueRadioId(baseName: string): string {\n    // Check if any other radio with the same name already exists\n    const existingRadios = document.querySelectorAll(\n      `input[name=\"${baseName}\"]`,\n    );\n    const existingIds = Array.from(existingRadios).map((radio) => radio.id);\n\n    // Generate ID with index\n    let index = 0;\n    let candidateId = `${baseName}_${index}`;\n\n    while (existingIds.includes(candidateId)) {\n      index++;\n      candidateId = `${baseName}_${index}`;\n    }\n\n    return candidateId;\n  }\n\n  /**\n   * Initializes the directive by setting up all reactive effects\n   */\n  constructor() {\n    this.setupInitialValueEffect();\n    this.setupFocusEffect();\n    this.setupValueSyncEffect();\n    this.setupAttributesEffect();\n  }\n\n  /**\n   * Angular lifecycle hook that sets the initial element value\n   */\n  ngOnInit(): void {\n    this.setInitialValue();\n  }\n\n  /**\n   * Sets up effect to capture the initial field value for dirty state tracking\n   */\n  private setupInitialValueEffect(): void {\n    effect(\n      () => {\n        if (!this.hasCapturedInitial() && this.signalModel().value()) {\n          this.initialValue.set(this.signalModel().value());\n          this.hasCapturedInitial.set(true);\n        }\n      },\n      { injector: this.injector },\n    );\n  }\n\n  /**\n   * Sets up effect to handle focus highlighting behavior and auto-focus\n   */\n  private setupFocusEffect(): void {\n    effect(\n      () => {\n        if (!this.signalModel().focus()) return;\n\n        const native = this.elementRef.nativeElement;\n        native.focus?.();\n        this.renderer.addClass(native, 'form-error-highlight');\n\n        setTimeout(() => {\n          this.renderer.removeClass(native, 'form-error-highlight');\n          this.signalModel().focus.set(false);\n        }, 800);\n      },\n      { injector: this.injector },\n    );\n  }\n\n  /**\n   * Sets up effect to sync element value with model value changes\n   */\n  private setupValueSyncEffect(): void {\n    effect(\n      () => {\n        const value = this.signalModel().value();\n        this.setElementValue(this.elementRef.nativeElement, value);\n      },\n      { injector: this.injector },\n    );\n  }\n\n  /**\n   * Sets up effect to dynamically apply all field attributes (role, aria, input)\n   */\n  private setupAttributesEffect(): void {\n    effect(\n      () => {\n        const attrs = this.roleAttributes();\n        const el = this.elementRef.nativeElement;\n\n        if (attrs.role) {\n          this.renderer.setAttribute(el, 'role', attrs.role);\n        }\n\n        Object.entries(attrs.ariaAttributes).forEach(([key, value]) => {\n          if (value !== null && value !== undefined) {\n            this.renderer.setAttribute(el, key, String(value));\n            return;\n          }\n\n          this.renderer.removeAttribute(el, key);\n        });\n\n        Object.entries(attrs.inputAttributes).forEach(([key, value]) => {\n          if (value !== null && value !== undefined) {\n            this.renderer.setAttribute(el, key, String(value));\n            return;\n          }\n\n          this.renderer.removeAttribute(el, key);\n        });\n\n        const fieldValue = this.getFieldValue();\n\n        if (fieldValue !== null) {\n          this.renderer.setAttribute(el, 'value', fieldValue);\n        }\n      },\n      { injector: this.injector },\n    );\n  }\n\n  /**\n   * Sets the initial element value from the field model\n   */\n  private setInitialValue(): void {\n    this.setElementValue(\n      this.elementRef.nativeElement,\n      this.signalModel().value(),\n    );\n  }\n\n  /**\n   * Extracts the field value as a display string\n   * @returns The field value formatted as a string, or null if no value\n   */\n  private getFieldValue(): string | null {\n    const value = this.signalModel().value();\n    return ValueHelper.extractValueString(value);\n  }\n\n  /**\n   * Handles blur events by marking the field as touched and triggering blur validation\n   */\n  @HostListener('blur')\n  onBlur(): void {\n    const field = this.signalModel();\n    field.touched.set(true);\n\n    // Trigger blur validation through the validation service\n    this.validationService.triggerBlurValidation(field.path);\n  }\n\n  /**\n   * Handles focus events by updating the field focus state\n   */\n  @HostListener('focus')\n  onFocus(): void {\n    this.signalModel().focus.set(true);\n  }\n\n  /**\n   * Handles input events and updates the model value with parsed data\n   */\n  @HostListener('input', ['$event'])\n  onInput(event: Event): void {\n    const target = event.target as ElementTypeForField<TFieldType>;\n    const raw = this.extractValue(target);\n    const parsed = this.signalModel().parser?.(raw as string) ?? raw;\n\n    this.signalModel().value.set(parsed as TModel[K]);\n\n    const dirty =\n      JSON.stringify(parsed) !== JSON.stringify(this.initialValue());\n    this.signalModel().dirty.set(dirty);\n    this.signalModel().touched.set(true);\n  }\n\n  /**\n   * Extracts the raw value from different types of form elements\n   * @param target - The form element to extract value from\n   * @returns The extracted value based on element type\n   */\n  private extractValue(target: ElementTypeForField<TFieldType>): unknown {\n    if (target instanceof HTMLInputElement) {\n      const raw = target.value;\n\n      switch (target.type) {\n        case 'checkbox':\n          return target.checked;\n        case 'number':\n        case 'range':\n          const parsed = parseFloat(raw);\n          return isNaN(parsed) ? 0 : parsed;\n        case 'date':\n          return target.valueAsDate;\n        case 'radio':\n          if (this.signalModel().type === FormFieldType.RADIO) {\n            const config = this.signalModel().config as any;\n            if (config?.valueType === 'number') {\n              return parseFloat(raw);\n            }\n            if (config?.valueType === 'boolean') {\n              return raw === 'true';\n            }\n          }\n          return raw;\n        default:\n          return raw;\n      }\n    }\n\n    if (\n      target instanceof HTMLSelectElement ||\n      this.signalModel().type === FormFieldType.AUTOCOMPLETE\n    ) {\n      const raw = target.value;\n      const field = this.signalModel();\n\n      if (field.type === FormFieldType.SELECT) {\n        if ('options' in field) {\n          const foundOption = (\n            field.options as unknown as Signal<FormOption[]>\n          )().find((opt: FormOption) => String(opt.label) === raw);\n          if (foundOption) {\n            return foundOption.label;\n          }\n        }\n\n        const config = field.config as SelectFieldConfig<TModel, keyof TModel>;\n        if (config?.valueType === 'number') {\n          return parseFloat(raw);\n        }\n        if (config?.valueType === 'boolean') {\n          return raw === 'true';\n        }\n      }\n\n      return raw;\n    }\n\n    if (target instanceof HTMLTextAreaElement) {\n      return target.value;\n    }\n\n    return null;\n  }\n\n  /**\n   * Sets the value of a form element based on its type\n   * @param element - The form element to update\n   * @param value - The value to set\n   */\n  private setElementValue(\n    element: ElementTypeForField<TFieldType>,\n    value: unknown,\n  ): void {\n    if (ValueHelper.isCheckboxInput(element)) {\n      this.setCheckboxValue(element, Boolean(value));\n      return;\n    }\n\n    if (ValueHelper.isDateInput(element) && ValueHelper.isDate(value)) {\n      this.setDateValue(element, value);\n      return;\n    }\n\n    if (ValueHelper.isNumberInput(element) && ValueHelper.isNumber(value)) {\n      this.setNumberValue(element, value);\n      return;\n    }\n\n    if (ValueHelper.isFormElement(element)) {\n      this.setStandardValue(element, value);\n      return;\n    }\n\n    if (ValueHelper.isComboboxDiv(element)) {\n      this.setComboboxValue(element, value);\n      return;\n    }\n  }\n\n  /**\n   * Sets the checked state of a checkbox input\n   * @param element - The checkbox input element\n   * @param value - The boolean value to set\n   */\n  private setCheckboxValue(element: HTMLInputElement, value: boolean): void {\n    element.checked = value;\n  }\n\n  /**\n   * Sets the date value of a date input\n   * @param element - The date input element\n   * @param value - The Date object to set\n   */\n  private setDateValue(element: HTMLInputElement, value: Date): void {\n    element.valueAsDate = value;\n  }\n\n  /**\n   * Sets the numeric value of a number input\n   * @param element - The number input element\n   * @param value - The number value to set\n   */\n  private setNumberValue(element: HTMLInputElement, value: number): void {\n    element.valueAsNumber = value;\n  }\n\n  /**\n   * Sets the string value of standard form elements\n   * @param element - The form element (input, select, textarea)\n   * @param value - The value to convert to string and set\n   */\n  private setStandardValue(\n    element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n    value: unknown,\n  ): void {\n    element.value = ValueHelper.extractValueString(value);\n  }\n\n  /**\n   * Sets accessibility attributes for custom combobox elements\n   * @param element - The div element with combobox role\n   * @param value - The value to set as aria-valuenow\n   */\n  private setComboboxValue(element: HTMLDivElement, value: unknown): void {\n    const valueString = ValueHelper.extractValueString(value);\n\n    if (valueString) {\n      this.renderer.setAttribute(element, 'aria-valuenow', valueString);\n    } else {\n      this.renderer.removeAttribute(element, 'aria-valuenow');\n    }\n  }\n}\n","export enum FormStatus {\n  Error = 'Error',\n  Idle = 'Idle',\n  Submitting = 'Submitting',\n  Success = 'Success',\n}\n","export enum NumberInputType {\n  STANDARD = 'standard',\n  CURRENCY = 'currency',\n  PERCENTAGE = 'percentage',\n  DECIMAL = 'decimal',\n  INTEGER = 'integer',\n  UNIT_CONVERSION = 'unitConversion',\n}\n","import { computed, WritableSignal } from '@angular/core';\nimport { FormFieldType } from '../../enums/form-field-type.enum';\nimport { FormStatus } from '../../enums/form-status.enum';\nimport {\n  type CheckboxGroupField,\n  type DeepPartial,\n  type ErrorMessage,\n  type FieldWithForm,\n  type InferFieldType,\n  type RepeatableField,\n  type SignalFormContainer,\n  type SignalFormField,\n} from '../../models/signal-form.model';\nimport { ValidationService } from '../../services/validation.service';\n\nexport class FormEngine {\n  static validateForm<TModel>(\n    fields: SignalFormField<TModel>[],\n    form: SignalFormContainer<TModel>,\n    validationService?: ValidationService,\n  ) {\n    return (): boolean => {\n      if (\n        validationService &&\n        typeof validationService.validateFormForSubmit === 'function'\n      ) {\n        let valid = true;\n\n        for (const field of fields) {\n          if (this.isFieldWithForm(field)) {\n            const nestedValid = field.form.validateForm();\n            valid = valid && nestedValid;\n            continue;\n          }\n\n          if (this.isRepeatableField(field)) {\n            const nestedForms = field.repeatableForms();\n            const allValid = nestedForms.every((form) => form.validateForm());\n            valid = valid && allValid;\n            continue;\n          }\n        }\n\n        const fieldsValid = validationService.validateFormForSubmit(\n          fields,\n          form,\n        );\n        return valid && fieldsValid;\n      }\n\n      let valid = true;\n\n      for (const field of fields) {\n        if (this.isFieldWithForm(field)) {\n          const nestedValid = field.form.validateForm();\n          valid = valid && nestedValid;\n          continue;\n        }\n\n        if (this.isRepeatableField(field)) {\n          const nestedForms = field.repeatableForms();\n          const allValid = nestedForms.every((form) => form.validateForm());\n          valid = valid && allValid;\n          continue;\n        }\n\n        field.touched.set(true);\n        const validators = field.validators ?? [];\n\n        for (const validator of validators) {\n          const error = validator(field.value(), form);\n          if (error) {\n            field.error.set(error);\n            valid = false;\n            break;\n          } else {\n            field.error.set(null);\n          }\n        }\n      }\n\n      return valid;\n    };\n  }\n\n  static resetForm<TModel>(\n    fields: SignalFormField<TModel>[],\n    initialModel: TModel,\n  ): () => void {\n    return () => {\n      for (const field of fields) {\n        if (this.isFieldWithForm(field)) {\n          field.form.reset();\n          continue;\n        }\n\n        const initialValue = initialModel[field.name];\n        field.value.set(initialValue);\n        field.touched.set(false);\n        field.dirty.set(false);\n        field.error.set(null);\n        field.focus.set(false);\n      }\n    };\n  }\n\n  static patchForm<TModel>(\n    fields: SignalFormField<TModel>[],\n  ): (patch: DeepPartial<TModel>) => void {\n    return (patch: DeepPartial<TModel>) => {\n      for (const field of fields) {\n        const fieldName = field.name;\n        const newValue = patch[fieldName];\n\n        if (newValue === undefined) continue;\n\n        if (this.isFieldWithForm(field) && typeof newValue === 'object') {\n          field.form.patchValue(newValue as DeepPartial<TModel[keyof TModel]>);\n        } else {\n          field.value.set(newValue as TModel[keyof TModel]);\n          field.dirty.set(true);\n        }\n      }\n    };\n  }\n\n  static setFormValue<TModel>(\n    fields: SignalFormField<TModel>[],\n  ): (value: TModel) => void {\n    return (value: TModel) => {\n      for (const field of fields) {\n        const fieldName = field.name;\n        const newValue = value[fieldName];\n\n        if (this.isFieldWithForm(field) && typeof newValue === 'object') {\n          field.form.setValue(newValue as TModel[keyof TModel]);\n        } else {\n          field.value.set(newValue);\n          field.dirty.set(true);\n        }\n      }\n    };\n  }\n\n  static getErrors<TModel>(fields: SignalFormField<TModel>[]) {\n    return (): ErrorMessage<TModel>[] => {\n      const errors: ErrorMessage<TModel>[] = [];\n\n      for (const field of fields) {\n        if (this.isFieldWithForm(field)) {\n          const nestedErrors = field.form.getErrors() as ErrorMessage<TModel>[];\n          const updatedNestedErrors = nestedErrors.map((err) => ({\n            ...err,\n            path: `${field.path}.${err.path}`,\n          }));\n          errors.push(...updatedNestedErrors);\n          continue;\n        }\n\n        if (this.isRepeatableField(field)) {\n          const nestedForms = field.repeatableForms();\n          nestedForms.forEach((form) => {\n            const nestedErrors = form.getErrors();\n            const updatedNestedErrors = nestedErrors.map((err) => ({\n              name: err.name as keyof TModel,\n              message: err.message,\n              path: err.path,\n              field: err.field,\n              focusField: err.focusField,\n              trigger: err.trigger,\n            }));\n            errors.push(...updatedNestedErrors);\n          });\n          continue;\n        }\n\n        if (field.error()) {\n          const trigger =\n            field.validationConfig?.trigger ||\n            field.config?.validation?.trigger ||\n            'change';\n\n          errors.push({\n            name: field.name,\n            message: field.error() ?? '',\n            path: field.path,\n            field: field as SignalFormField<unknown>,\n            trigger,\n            focusField: () => {\n              if (field.focus) {\n                field.focus.set(true);\n              }\n            },\n          });\n        }\n      }\n\n      return errors;\n    };\n  }\n\n  static getValueFromFields<TModel>(\n    fields: SignalFormField<TModel>[],\n    form: SignalFormContainer<TModel>,\n  ): TModel {\n    return fields.reduce((acc, field) => {\n      const name = field.name;\n      const disabled =\n        typeof field.disabled === 'function'\n          ? field.disabled(form)\n          : field.disabled;\n\n      if (!disabled) {\n        acc[name] = this.getFieldOutputValue(field) as TModel[keyof TModel];\n      }\n\n      return acc;\n    }, {} as TModel);\n  }\n\n  static getFieldOutputValue<TModel>(field: SignalFormField<TModel>): unknown {\n    if (this.isRepeatableField(field)) {\n      return field.repeatableForms().map((form) => form.getValue());\n    }\n\n    if (this.isCheckboxGroupField(field)) {\n      const val = field.value();\n      const valueType = field.valueType ?? 'array';\n\n      if (valueType === 'map') {\n        return val;\n      }\n\n      if (typeof val === 'object' && val !== null && !Array.isArray(val)) {\n        return Object.entries(val)\n          .filter(([, checked]) => checked)\n          .map(([key]) => key);\n      }\n\n      return val;\n    }\n\n    if (this.isFieldWithForm(field)) {\n      return field.form.getValue();\n    }\n\n    return field.value();\n  }\n\n  static getValue<TModel>(fields: SignalFormField<TModel>[]) {\n    return (): TModel =>\n      fields.reduce((acc, field) => {\n        acc[field.name] = field.value() as TModel[keyof TModel];\n        return acc;\n      }, {} as TModel);\n  }\n\n  static getField<TModel>(fields: SignalFormField<TModel>[]) {\n    return <K extends keyof TModel>(key: K): InferFieldType<TModel, K> => {\n      const field = fields.find((f) => f.name === key);\n      if (!field) {\n        throw new Error(`Field ${String(key)} not found`);\n      }\n\n      // Handle repeatable fields\n      if (this.isRepeatableField(field)) {\n        return field as InferFieldType<TModel, K>;\n      }\n\n      // Handle nested form fields\n      if (this.isFieldWithForm(field)) {\n        return field as InferFieldType<TModel, K>;\n      }\n\n      // Handle regular fields\n      return field as InferFieldType<TModel, K>;\n    };\n  }\n\n  static getRawValue<TModel>(fields: SignalFormField<TModel>[]) {\n    return computed(() => {\n      return fields.reduce((acc, field) => {\n        acc[field.name] = field.value() as TModel[keyof TModel];\n        return acc;\n      }, {} as TModel);\n    });\n  }\n\n  static runSaveHandler<TModel>(\n    fields: SignalFormField<TModel>[],\n    status: WritableSignal<FormStatus>,\n    form: SignalFormContainer<TModel>,\n    onSave?: (value: TModel) => void,\n  ): () => void {\n    return () => {\n      const isValid = this.validateForm(fields, form);\n\n      if (!isValid()) {\n        status.set(FormStatus.Error);\n        return;\n      }\n\n      status.set(FormStatus.Submitting);\n\n      try {\n        const getValue = this.getValue(fields);\n        onSave?.(getValue());\n        status.set(FormStatus.Success);\n\n        for (const field of fields) {\n          if (this.isFieldWithForm(field)) {\n            field.form.save();\n          } else {\n            field.touched.set(false);\n            field.dirty.set(false);\n            if (form.config?.disableUponComplete) {\n              field.disabled = () => true;\n            }\n          }\n        }\n\n        if (!form.config?.disableUponComplete) {\n          setTimeout(() => status.set(FormStatus.Idle), 2000);\n        }\n      } catch {\n        status.set(FormStatus.Error);\n      }\n    };\n  }\n\n  private static isFieldWithForm<TModel>(\n    field: SignalFormField<TModel>,\n  ): field is FieldWithForm<TModel> {\n    return 'form' in field && field.form !== undefined;\n  }\n\n  private static isRepeatableField<TModel>(\n    field: SignalFormField<TModel>,\n  ): field is RepeatableField<TModel> {\n    return 'repeatableForms' in field && field.repeatableForms !== undefined;\n  }\n\n  private static isCheckboxGroupField<TModel>(\n    field: SignalFormField<TModel>,\n  ): field is CheckboxGroupField<TModel> {\n    return field.type === FormFieldType.CHECKBOX_GROUP;\n  }\n}\n","import { computed } from '@angular/core';\nimport { FormStatus } from '../../enums/form-status.enum';\nimport {\n  type FieldWithForm,\n  type RepeatableField,\n  type SignalFormConfig,\n  type SignalFormContainer,\n  type SignalFormField,\n} from '../../models/signal-form.model';\n\nexport class FieldUtils {\n  /**\n   * Creates default form configuration with theme settings\n   * @param config - Optional user configuration to merge with defaults\n   * @returns Complete configuration with defaults applied\n   */\n  static createDefaultConfig<TModel>(\n    config?: SignalFormConfig<TModel>,\n  ): SignalFormConfig<TModel> {\n    const defaults = {\n      layout: 'flex' as const,\n      theme: 'light' as const,\n      allowDarkMode: false,\n    };\n\n    if (!config) {\n      return defaults;\n    }\n\n    // Apply theme defaults based on allowDarkMode setting\n    const themeDefaults = {\n      theme: config.allowDarkMode ? ('auto' as const) : ('light' as const),\n      allowDarkMode: config.allowDarkMode ?? defaults.allowDarkMode,\n    };\n\n    return {\n      ...defaults,\n      ...config,\n      ...themeDefaults,\n    };\n  }\n\n  static anyTouched<TModel>(fields: SignalFormField<TModel>[]) {\n    return computed(() => {\n      return fields.some((field) => {\n        if (this.isFieldWithForm(field)) {\n          return field.form.anyTouched();\n        }\n\n        if (this.isRepeatableField(field)) {\n          if (field.touched()) {\n            return true;\n          }\n\n          return field.repeatableForms().some((form) => form.anyTouched());\n        }\n\n        return field.touched();\n      });\n    });\n  }\n\n  static hasSaved<TModel>(form: SignalFormContainer<TModel>) {\n    return computed((): boolean => {\n      return (\n        !form.anyTouched() &&\n        !form.anyDirty() &&\n        form.status() === FormStatus.Success\n      );\n    });\n  }\n\n  static anyDirty<TModel>(fields: SignalFormField<TModel>[]) {\n    return computed(() => {\n      return fields.some((field) => {\n        if (this.isFieldWithForm(field)) {\n          return field.form.anyDirty();\n        }\n\n        if (this.isRepeatableField(field)) {\n          if (field.dirty()) {\n            return true;\n          }\n\n          return field.repeatableForms().some((form) => form.anyDirty());\n        }\n\n        return field.dirty();\n      });\n    });\n  }\n\n  private static isFieldWithForm<TModel>(\n    field: SignalFormField<TModel>,\n  ): field is FieldWithForm<TModel> {\n    return 'form' in field && field.form !== undefined;\n  }\n\n  private static isRepeatableField<TModel>(\n    field: SignalFormField<TModel>,\n  ): field is RepeatableField<TModel> {\n    return 'repeatableForms' in field && field.repeatableForms !== undefined;\n  }\n}\n","// field-factory.ts\nimport { computed, signal } from '@angular/core';\nimport { FormFieldType } from '../../enums/form-field-type.enum';\nimport {\n  FieldWithOptions,\n  type BaseFieldState,\n  type ItemOf,\n  type NestedGroupBuilderField,\n  type RepeatableGroupBuilderField,\n  type RepeatableGroupSignalFormField,\n  type SignalFormContainer,\n  type SignalFormField,\n  type SignalFormFieldBuilderInput,\n} from '../../models/signal-form.model';\nimport { SignalFormBuilder } from '../builder/form-builder';\nimport { FieldUtils } from '../utils/field-utils';\n\n/**\n * FieldFactory - Factory class for building Signal Form fields\n *\n * Responsible for converting field builder configurations into fully\n * initialized SignalFormField instances with reactive state management.\n * Handles different field types including nested forms, repeatable groups,\n * and fields with static or computed options.\n *\n * Features:\n * - Type-safe field construction with TypeScript generics\n * - Automatic reactive state binding (value, error, validation, etc.)\n * - Support for nested form groups and repeatable field arrays\n * - Dynamic and computed options for select-type fields\n * - Path tracking for nested field references\n *\n * @example\n * ```typescript\n * const textField = FieldFactory.build(\n *   { name: 'email', type: FormFieldType.TEXT, label: 'Email' },\n *   { email: '' },\n *   formContainer,\n *   'user'\n * );\n * ```\n */\nexport class FieldFactory {\n  /**\n   * Builds a complete SignalFormField from a field configuration\n   *\n   * Converts field builder input into a reactive field with full state management.\n   * Automatically detects field type (normal, nested group, or repeatable group)\n   * and creates appropriate field structure with computed properties and signals.\n   *\n   * @template TModel - The TypeScript type of the form data model\n   * @param field - Field configuration from form builder\n   * @param model - Current form data model containing initial values\n   * @param formRef - Reference to the parent form container\n   * @param parentPath - Path prefix for nested fields (e.g., \"user.address\")\n   * @returns Fully initialized SignalFormField with reactive state\n   *\n   * @example\n   * ```typescript\n   * // Build a simple text field\n   * const nameField = FieldFactory.build(\n   *   { name: 'firstName', type: FormFieldType.TEXT, label: 'First Name' },\n   *   { firstName: 'John' },\n   *   formContainer\n   * );\n   *\n   * // Build a select field with options\n   * const countryField = FieldFactory.build(\n   *   {\n   *     name: 'country',\n   *     type: FormFieldType.SELECT,\n   *     label: 'Country',\n   *     options: [{ value: 'US', label: 'United States' }]\n   *   },\n   *   { country: 'US' },\n   *   formContainer\n   * );\n   * ```\n   */\n  static build<TModel>(\n    field: SignalFormFieldBuilderInput<TModel>,\n    model: TModel,\n    formRef: SignalFormContainer<TModel>,\n    parentPath = '',\n  ): SignalFormField<TModel> {\n    const rawValue = model[field.name as keyof TModel];\n    const referencePath = parentPath\n      ? `${parentPath}.${String(field.name)}`\n      : `${String(field.name)}`;\n\n    // Create base reactive state that all fields share\n    const baseFieldState: BaseFieldState<TModel, TModel[keyof TModel]> = {\n      path: referencePath,\n      error: signal<string | null>(null),\n      asyncError: signal<string | null>(null),\n      validating: signal<boolean>(false),\n      touched: signal<boolean>(false),\n      dirty: signal<boolean>(false),\n      focus: signal<boolean>(false),\n      value: signal(rawValue),\n      getForm: () => formRef,\n      isDisabled: computed(() =>\n        typeof field.disabled === 'function'\n          ? field.disabled(formRef)\n          : (field.disabled ?? false),\n      ),\n      isHidden: computed(() =>\n        typeof field.hidden === 'function'\n          ? field.hidden(formRef)\n          : (field.hidden ?? false),\n      ),\n    };\n\n    // Handle Repeatable Group fields (arrays of forms)\n    if (this.isRepeatableGroupField(field)) {\n      return this.buildRepeatableGroup(\n        { ...field, path: referencePath },\n        rawValue,\n        formRef,\n        referencePath,\n        baseFieldState,\n      );\n    }\n\n    // Handle Nested Form Group fields (nested forms)\n    if (this.isNestedGroupField(field)) {\n      return this.buildNestedForm(\n        { ...field, path: referencePath },\n        rawValue,\n        formRef,\n        referencePath,\n        baseFieldState,\n      );\n    }\n\n    // Handle normal fields (text, select, etc.)\n    let baseField = {\n      ...field,\n      ...baseFieldState,\n      path: referencePath,\n    } as SignalFormField<TModel>;\n\n    // Handle options for fields that support them (select, radio, etc.)\n    if (!this.hasOptions(field)) {\n      return baseField;\n    }\n    if (this.hasComputedOptions(field)) {\n      // Create computed options that react to form state changes\n      const fieldWithComputedOptions = field as any;\n      const computedOptionsSignal = computed(() => {\n        const sourceValue =\n          fieldWithComputedOptions.computedOptions.source(formRef);\n        return fieldWithComputedOptions.computedOptions.filterFn(\n          sourceValue,\n          fieldWithComputedOptions.options,\n          baseField.value(),\n        );\n      });\n\n      return {\n        ...baseField,\n        options: computedOptionsSignal,\n      } as unknown as SignalFormField<TModel>;\n    }\n    // Use static options wrapped in a signal\n    return {\n      ...baseField,\n      options: signal(field.options),\n    } as unknown as SignalFormField<TModel>;\n  }\n\n  /**\n   * Type guard to check if a field is a repeatable group field\n   * Repeatable groups contain arrays of form items that can be added/removed\n   *\n   * @template TModel - The form model type\n   * @param field - Field configuration to check\n   * @returns True if field is a repeatable group, false otherwise\n   * @private\n   */\n  private static isRepeatableGroupField<TModel>(\n    field: SignalFormFieldBuilderInput<TModel>,\n  ): field is Extract<\n    SignalFormFieldBuilderInput<TModel>,\n    RepeatableGroupBuilderField<TModel, keyof TModel>\n  > {\n    return 'type' in field && field.type === FormFieldType.REPEATABLE_GROUP;\n  }\n\n  /**\n   * Type guard to check if a field is a nested group field\n   * Nested groups contain sub-forms with their own field collections\n   *\n   * @template TModel - The form model type\n   * @param field - Field configuration to check\n   * @returns True if field is a nested group, false otherwise\n   * @private\n   */\n  private static isNestedGroupField<TModel>(\n    field: SignalFormFieldBuilderInput<TModel>,\n  ): field is Extract<\n    SignalFormFieldBuilderInput<TModel>,\n    NestedGroupBuilderField<TModel, keyof TModel>\n  > {\n    return (\n      !('type' in field) && 'fields' in field && Array.isArray(field.fields)\n    );\n  }\n\n  /**\n   * Type guard to check if a field supports options (select, radio, etc.)\n   * Uses Extract to get only field types that have options property\n   *\n   * @template TModel - The form model type\n   * @param field - Field configuration to check\n   * @returns True if field supports options, false otherwise\n   * @private\n   */\n  private static hasOptions<TModel>(\n    field: SignalFormFieldBuilderInput<TModel>,\n  ): field is FieldWithOptions<TModel> {\n    return (\n      'type' in field &&\n      'options' in field &&\n      Array.isArray((field as FieldWithOptions<TModel>).options) &&\n      [\n        FormFieldType.SELECT,\n        FormFieldType.RADIO,\n        FormFieldType.CHECKBOX,\n        FormFieldType.CHECKBOX_GROUP,\n        FormFieldType.MULTISELECT,\n        FormFieldType.CHIPLIST,\n      ].includes((field as FieldWithOptions<TModel>).type)\n    );\n  }\n\n  /**\n   * Checks if a field has computed/dynamic options configuration\n   * Computed options change based on form state or other reactive values\n   *\n   * @template TModel - The form model type\n   * @param field - Field configuration to check\n   * @returns True if field has computed options, false otherwise\n   * @private\n   */\n  private static hasComputedOptions<TModel>(\n    field: SignalFormFieldBuilderInput<TModel>,\n  ): boolean {\n    return (\n      'computedOptions' in field && (field as any).computedOptions !== undefined\n    );\n  }\n\n  /**\n   * Builds a repeatable group field that manages an array of sub-forms\n   *\n   * Creates a field that contains multiple instances of the same form structure,\n   * allowing users to add and remove items dynamically. Each item is a complete\n   * form with its own validation and state management.\n   *\n   * @template TModel - The form model type\n   * @param field - Repeatable group field configuration\n   * @param rawValue - Current array value from the model\n   * @param parentForm - Reference to the parent form container\n   * @param referencePath - Path to this field for nested references\n   * @param baseFieldState - Base reactive state for the field\n   * @returns Configured repeatable group field with add/remove functionality\n   * @private\n   */\n  private static buildRepeatableGroup<TModel>(\n    field: RepeatableGroupBuilderField<TModel, keyof TModel>,\n    rawValue: TModel[keyof TModel],\n    parentForm: SignalFormContainer<TModel>,\n    referencePath: string,\n    baseFieldState: BaseFieldState<TModel, TModel[keyof TModel]>,\n  ): SignalFormField<TModel> {\n    const items = Array.isArray(rawValue) ? rawValue : [];\n    type TItemType = ItemOf<TModel[keyof TModel]>;\n\n    // Create individual forms for each array item\n    const repeatableForms = signal(\n      items.map((item, index) =>\n        SignalFormBuilder.createForm<TItemType>({\n          model: item,\n          fields: field.fields,\n          config: FieldUtils.createDefaultConfig(field.config),\n          parentForm: parentForm as unknown as SignalFormContainer<unknown>,\n          parentPath: `${referencePath}[${index}]`,\n        }),\n      ),\n    );\n\n    const repeatableField: RepeatableGroupSignalFormField<\n      TModel,\n      keyof TModel\n    > = {\n      ...field,\n      error: signal(false),\n      touched: signal(false),\n      dirty: signal(false),\n      value: computed(() => repeatableForms().map((f) => f.getValue())),\n      repeatableForms,\n      addItem: (initial = {} as TItemType) => {\n        const currentForms = repeatableForms();\n        const newIndex = currentForms.length;\n        const newForm = SignalFormBuilder.createForm<TItemType>({\n          model: initial,\n          fields: field.fields,\n          config: FieldUtils.createDefaultConfig(field.config),\n          parentForm: parentForm as unknown as SignalFormContainer<unknown>,\n          parentPath: `${referencePath}[${newIndex}]`,\n        });\n\n        repeatableForms.update((forms) => [...forms, newForm]);\n        repeatableField.dirty.set(true);\n        repeatableField.touched.set(true);\n      },\n      removeItem: (index: number) => {\n        repeatableForms.update((forms) => forms.filter((_, i) => i !== index));\n        repeatableField.dirty.set(true);\n        repeatableField.touched.set(true);\n      },\n    };\n\n    return repeatableField as unknown as SignalFormField<TModel>;\n  }\n\n  /**\n   * Builds a nested form group field that contains a sub-form\n   *\n   * Creates a field that embeds another complete form within the current form.\n   * The nested form has its own fields, validation, and state management while\n   * being part of the parent form's structure.\n   *\n   * @template TModel - The form model type\n   * @param field - Nested group field configuration\n   * @param rawValue - Current nested object value from the model\n   * @param parentForm - Reference to the parent form container\n   * @param referencePath - Path to this field for nested references\n   * @param baseFieldState - Base reactive state for the field\n   * @returns Configured nested form field with embedded sub-form\n   * @private\n   */\n  private static buildNestedForm<TModel>(\n    field: NestedGroupBuilderField<TModel, keyof TModel>,\n    rawValue: TModel[keyof TModel],\n    parentForm: SignalFormContainer<TModel>,\n    referencePath: string,\n    baseFieldState: BaseFieldState<TModel, TModel[keyof TModel]>,\n  ): SignalFormField<TModel> {\n    type TNestedType = TModel[keyof TModel];\n\n    // Create embedded form for the nested object\n    const nestedForm = SignalFormBuilder.createForm<TNestedType>({\n      model: rawValue,\n      fields: field.fields,\n      config: FieldUtils.createDefaultConfig(field.config),\n      parentForm: parentForm as unknown as SignalFormContainer<unknown>,\n      parentPath: referencePath,\n    });\n\n    const nestedField = {\n      ...field,\n      ...baseFieldState,\n      form: nestedForm,\n      fields: nestedForm.fields,\n    };\n\n    return nestedField as unknown as SignalFormField<TModel>;\n  }\n}\n","// # region\nimport { computed, signal } from '@angular/core';\nimport { FormStatus } from '../../enums/form-status.enum';\nimport {\n  type ArrayFormBuilderArgs,\n  type ArrayFormContainer,\n  type ErrorMessage,\n  type FormBuilderArgs,\n  type SignalFormContainer,\n  type SignalFormField,\n  type SignalSteppedFormContainer,\n  type SteppedFormBuilderArgs,\n} from '../../models/signal-form.model';\nimport { FormEngine } from '../engine/form-engine';\nimport { FieldFactory } from '../factory/field-factory';\nimport { FieldUtils } from '../utils/field-utils';\n// #endregion\n\n/**\n * SignalFormBuilder - Main factory class for creating Signal Forms\n *\n * Provides static methods to create different types of forms:\n * - Single forms with standard fields\n * - Stepped/wizard forms with multiple pages\n * - Array forms for managing collections of items\n *\n * Features:\n * - Type-safe form creation with TypeScript generics\n * - Automatic field binding and validation setup\n * - Reactive computed properties for form state\n * - Built-in save/reset functionality\n * - Parent-child form relationships\n *\n * @example\n * ```typescript\n * const userForm = SignalFormBuilder.createForm({\n *   model: { name: '', email: '' },\n *   fields: [\n *     { name: 'name', type: FormFieldType.TEXT, label: 'Name' },\n *     { name: 'email', type: FormFieldType.TEXT, label: 'Email' }\n *   ],\n *   onSave: (data) => console.log('Saved:', data)\n * });\n * ```\n */\nexport class SignalFormBuilder {\n  /**\n   * Creates a standard single-page form with specified fields\n   *\n   * Builds a complete form container with reactive state management,\n   * validation, and save functionality. The form automatically binds\n   * to the provided model and creates appropriate field components.\n   *\n   * @template TModel - The TypeScript type of the form data model\n   * @param args - Configuration object for the form\n   * @param args.model - Initial data model for the form\n   * @param args.fields - Array of field configurations\n   * @param args.title - Optional form title\n   * @param args.config - Layout and behavior configuration\n   * @param args.onSave - Callback function when form is saved\n   * @param args.parentForm - Parent form if this is a nested form\n   * @param args.parentPath - Path prefix for nested form fields\n   * @returns Complete form container with reactive state and methods\n   *\n   * @example\n   * ```typescript\n   * const contactForm = SignalFormBuilder.createForm({\n   *   model: { name: '', email: '', phone: '' },\n   *   fields: [\n   *     { name: 'name', type: FormFieldType.TEXT, label: 'Full Name' },\n   *     { name: 'email', type: FormFieldType.TEXT, label: 'Email' },\n   *     { name: 'phone', type: FormFieldType.TEXT, label: 'Phone' }\n   *   ],\n   *   config: { layout: 'flex', view: 'stacked' },\n   *   onSave: (data) => saveContact(data)\n   * });\n   * ```\n   */\n  static createForm<TModel>(\n    args: FormBuilderArgs<TModel>,\n  ): SignalFormContainer<TModel> {\n    const form: Partial<SignalFormContainer<TModel>> = {};\n    const status = signal<FormStatus>(FormStatus.Idle);\n\n    // Create all field instances using the factory\n    const fields: SignalFormField<TModel>[] = args.fields.map((field) =>\n      FieldFactory.build(\n        field,\n        args.model,\n        form as SignalFormContainer<TModel>,\n        args.parentPath,\n      ),\n    );\n\n    // Assemble the complete form container with all methods and reactive properties\n    Object.assign(form, {\n      title: args.title,\n      status,\n      fields,\n      getField: FormEngine.getField(fields),\n      anyTouched: FieldUtils.anyTouched(fields),\n      anyDirty: FieldUtils.anyDirty(fields),\n      value: computed(() =>\n        FormEngine.getValueFromFields(\n          fields,\n          form as SignalFormContainer<TModel>,\n        ),\n      ),\n      rawValue: FormEngine.getRawValue(fields),\n      getValue: () => (form as SignalFormContainer<TModel>).value(),\n      getRawValue: () => (form as SignalFormContainer<TModel>).rawValue(),\n      hasSaved: () => FieldUtils.hasSaved(form as SignalFormContainer<TModel>),\n      validateForm: FormEngine.validateForm(\n        fields,\n        form as SignalFormContainer<TModel>,\n      ),\n      reset: FormEngine.resetForm(fields, { ...args.model }),\n      getErrors: FormEngine.getErrors(fields),\n      config: FieldUtils.createDefaultConfig(args.config),\n      patchValue: FormEngine.patchForm(fields),\n      setValue: FormEngine.setFormValue(fields),\n      save: FormEngine.runSaveHandler(\n        fields,\n        status,\n        form as SignalFormContainer<TModel>,\n        args.onSave,\n      ),\n      getParent: () => args.parentForm,\n      parentForm: computed(() => args.parentForm),\n      saveButtonDisabled: computed(() => {\n        const errors = FormEngine.getErrors(fields)();\n        const hasErrors = errors.length > 0;\n\n        if (!hasErrors) {\n          return false; // No errors, button should be enabled\n        }\n\n        // If all errors are submit-triggered, allow the save button to be enabled\n        // so users can re-submit to correct submit-only validation errors\n        const allErrorsAreSubmitOnly = errors.every(\n          (error: ErrorMessage<TModel>) => error.trigger === 'submit',\n        );\n\n        return !allErrorsAreSubmitOnly; // Disable only if there are non-submit errors\n      }),\n    });\n\n    return form as SignalFormContainer<TModel>;\n  }\n\n  /**\n   * Creates a multi-step form (wizard) with separate pages/steps\n   *\n   * Builds a stepped form container that manages multiple form pages,\n   * allowing users to navigate between steps while maintaining state.\n   * Each step is a complete form with its own fields and validation.\n   *\n   * @template TModel - The TypeScript type of the form data model\n   * @param args - Configuration object for the stepped form\n   * @param args.model - Initial data model shared across all steps\n   * @param args.steps - Array of step configurations, each with fields\n   * @param args.onSave - Callback function when entire form is saved\n   * @param args.config - Global configuration for the stepped form\n   * @param args.config.canSkipIncompleteSteps - Allow navigation to incomplete steps\n   * @returns Stepped form container with navigation and validation methods\n   *\n   * @example\n   * ```typescript\n   * const wizardForm = SignalFormBuilder.createSteppedForm({\n   *   model: { personal: {}, contact: {}, preferences: {} },\n   *   steps: [\n   *     {\n   *       title: 'Personal Info',\n   *       fields: [\n   *         { name: 'firstName', type: FormFieldType.TEXT, label: 'First Name' }\n   *       ]\n   *     },\n   *     {\n   *       title: 'Contact Info',\n   *       fields: [\n   *         { name: 'email', type: FormFieldType.TEXT, label: 'Email' }\n   *       ]\n   *     }\n   *   ],\n   *   config: { canSkipIncompleteSteps: false }\n   * });\n   * ```\n   */\n  static createSteppedForm<TModel>(\n    args: SteppedFormBuilderArgs<TModel>,\n  ): SignalSteppedFormContainer<TModel> {\n    const currentStep = signal(0);\n    const status = signal<FormStatus>(FormStatus.Idle);\n\n    // Create individual form containers for each step\n    const steps: SignalFormContainer<TModel>[] = args.steps.map((step) =>\n      SignalFormBuilder.createForm({\n        model: args.model,\n        fields: step.fields,\n        config: step.config,\n      }),\n    );\n\n    // Computed value that merges data from all steps\n    const value = computed(() =>\n      steps.reduce(\n        (acc, step) => ({ ...acc, ...step.getValue() }),\n        {} as TModel,\n      ),\n    );\n\n    /** Validates only the current step */\n    const validateStep = () => steps[currentStep()].validateForm();\n\n    /** Checks if current step has no validation errors */\n    const isValidStep = () =>\n      steps[currentStep()].fields.every((f) => !f.error());\n\n    /** Validates all steps in the form */\n    const validateAll = () => steps.every((step) => step.validateForm());\n\n    /** Gets all validation errors from all steps */\n    const getErrors = (): ErrorMessage<TModel>[] =>\n      steps.flatMap((step) => step.getErrors());\n\n    /**\n     * Retrieves a specific field by name from any step\n     * @param key - The field name to search for\n     * @returns The field instance\n     * @throws Error if field is not found in any step\n     */\n    const getField = <K extends keyof TModel>(\n      key: K,\n    ): SignalFormField<TModel, K> => {\n      const allFields = steps.flatMap((step) => step.fields);\n      const field = allFields.find(\n        (f: SignalFormField<TModel>) => f.name === key,\n      );\n      if (!field) {\n        throw new Error(`Field ${String(key)} not found in form`);\n      }\n      return field as SignalFormField<TModel, K>;\n    };\n\n    /** Resets all steps to their initial state */\n    const reset = () => steps.forEach((step) => step.reset());\n\n    // Computed reactive properties for form state\n    const anyTouched = computed(() => steps.some((step) => step.anyTouched()));\n    const anyDirty = computed(() => steps.some((step) => step.anyDirty()));\n    const hasSaved = computed(\n      () => !anyDirty() && !anyTouched() && status() === FormStatus.Success,\n    );\n\n    // Create virtual form for save handler with all fields\n    const allFields = steps.flatMap((s) => s.fields);\n    const virtualForm: SignalFormContainer<TModel> = {\n      ...steps[0],\n      fields: allFields,\n      getValue: () => value(),\n      anyDirty: computed(() => steps.some((s) => s.anyDirty())),\n      anyTouched: computed(() => steps.some((s) => s.anyTouched())),\n      config: FieldUtils.createDefaultConfig(args.config?.form),\n    };\n\n    const saveButtonDisabled = computed(() => {\n      const errors = getErrors();\n      const hasErrors = errors.length > 0;\n\n      if (!hasErrors) {\n        return false; // No errors, button should be enabled\n      }\n\n      // If all errors are submit-triggered, allow the save button to be enabled\n      // so users can re-submit to correct submit-only validation errors\n      const allErrorsAreSubmitOnly = errors.every(\n        (error: ErrorMessage<TModel>) => error.trigger === 'submit',\n      );\n\n      return !allErrorsAreSubmitOnly; // Disable only if there are non-submit errors\n    });\n\n    return {\n      anyTouched,\n      anyDirty,\n      steps,\n      currentStep,\n      value,\n      getValue: () => value(),\n      validateStep,\n      validateAll,\n      isValidStep,\n      getErrors,\n      getField,\n      hasSaved,\n      reset,\n      save: FormEngine.runSaveHandler(\n        allFields,\n        status,\n        virtualForm,\n        args.onSave,\n      ),\n      status,\n      config: {\n        ...args.config,\n        canSkipIncompleteSteps: args.config?.canSkipIncompleteSteps ?? false,\n      },\n      saveButtonDisabled,\n    };\n  }\n\n  /**\n   * Creates a form for managing an array/collection of items\n   *\n   * Builds a dynamic form container that manages multiple instances\n   * of the same form structure. Useful for managing lists of items\n   * where users can add, remove, and edit multiple entries.\n   *\n   * @template TModel - The TypeScript type of individual items in the array\n   * @param args - Configuration object for the array form\n   * @param args.model - Initial array of items\n   * @param args.fields - Field configuration shared by all items\n   * @param args.title - Optional form title\n   * @param args.config - Layout and behavior configuration\n   * @param args.onSave - Callback when entire array is saved\n   * @param args.onItemAdd - Callback when new item is added\n   * @param args.onItemRemove - Callback when item is removed\n   * @param args.defaultItem - Default values for new items\n   * @param args.parentForm - Parent form if this is nested\n   * @param args.parentPath - Path prefix for nested forms\n   * @returns Array form container with add/remove/manage functionality\n   *\n   * @example\n   * ```typescript\n   * const contactsForm = SignalFormBuilder.createFormFromArray({\n   *   model: [{ name: '', email: '' }],\n   *   fields: [\n   *     { name: 'name', type: FormFieldType.TEXT, label: 'Name' },\n   *     { name: 'email', type: FormFieldType.TEXT, label: 'Email' }\n   *   ],\n   *   defaultItem: { name: '', email: '' },\n   *   onItemAdd: (item) => console.log('Added:', item),\n   *   onItemRemove: (index) => console.log('Removed index:', index)\n   * });\n   * ```\n   */\n  static createFormFromArray<TModel>(\n    args: ArrayFormBuilderArgs<TModel>,\n  ): ArrayFormContainer<TModel> {\n    const formsSignal = signal<SignalFormContainer<TModel>[]>([]);\n    const status = signal<FormStatus>(FormStatus.Idle);\n\n    // Create initial forms from the model array\n    const initialForms = args.model.map((item, index) =>\n      SignalFormBuilder.createForm<TModel>({\n        model: item,\n        fields: args.fields,\n        config: args.config,\n        parentForm: args.parentForm,\n        parentPath: args.parentPath\n          ? `${args.parentPath}[${index}]`\n          : `[${index}]`,\n      }),\n    );\n\n    formsSignal.set(initialForms);\n\n    /**\n     * Adds a new item form to the array\n     * @param item - Optional partial data for the new item\n     */\n    const addItem = (item?: Partial<TModel>) => {\n      const currentForms = formsSignal();\n      const defaultItemMerged = { ...args.defaultItem, ...item } as TModel;\n      const newIndex = currentForms.length;\n\n      const newForm = SignalFormBuilder.createForm<TModel>({\n        model: defaultItemMerged,\n        fields: args.fields,\n        config: args.config,\n        parentForm: args.parentForm,\n        parentPath: args.parentPath\n          ? `${args.parentPath}[${newIndex}]`\n          : `[${newIndex}]`,\n      });\n\n      formsSignal.update((forms) => [...forms, newForm]);\n      args.onItemAdd?.(defaultItemMerged);\n    };\n\n    /**\n     * Removes an item form from the array at the specified index\n     * @param index - The index of the item to remove\n     */\n    const removeItem = (index: number) => {\n      formsSignal.update((forms) => forms.filter((_, i) => i !== index));\n      args.onItemRemove?.(index);\n    };\n\n    /**\n     * Gets the current values from all item forms in the array\n     * @returns Array of all current form values\n     */\n    const getValue = (): TModel[] => {\n      return formsSignal().map((form) => form.getValue());\n    };\n\n    /**\n     * Validates all item forms in the array\n     * @returns True if all forms are valid, false otherwise\n     */\n    const validateAll = (): boolean => {\n      return formsSignal().every((form) => form.validateForm());\n    };\n\n    /**\n     * Gets all validation errors from all item forms\n     * Prefixes each error path with the array index\n     * @returns Array of all validation errors with indexed paths\n     */\n    const getErrors = (): ErrorMessage<TModel>[] => {\n      return formsSignal().flatMap((form, index) =>\n        form.getErrors().map((error) => ({\n          ...error,\n          path: `[${index}].${error.path}`,\n        })),\n      );\n    };\n\n    /**\n     * Saves all item forms if validation passes\n     * Updates status to Success or Error based on validation\n     */\n    const save = () => {\n      if (validateAll()) {\n        status.set(FormStatus.Success);\n        args.onSave?.(getValue());\n      } else {\n        status.set(FormStatus.Error);\n      }\n    };\n\n    /**\n     * Resets all item forms to their original model values\n     * Recreates all forms from the initial model array\n     */\n    const reset = () => {\n      const resetForms = args.model.map((item, index) =>\n        SignalFormBuilder.createForm<TModel>({\n          model: item,\n          fields: args.fields,\n          config: args.config,\n          parentForm: args.parentForm,\n          parentPath: args.parentPath\n            ? `${args.parentPath}[${index}]`\n            : `[${index}]`,\n        }),\n      );\n      formsSignal.set(resetForms);\n      status.set(FormStatus.Idle);\n    };\n\n    /**\n     * Checks if any item form in the array has been touched\n     * @returns True if any form has been touched by user interaction\n     */\n    const anyTouched = (): boolean => {\n      return formsSignal().some((form) => form.anyTouched());\n    };\n\n    /**\n     * Checks if any item form in the array has been modified\n     * @returns True if any form has dirty (changed) values\n     */\n    const anyDirty = (): boolean => {\n      return formsSignal().some((form) => form.anyDirty());\n    };\n\n    /**\n     * Determines if the save button should be disabled based on validation errors\n     * @returns True if save button should be disabled\n     */\n    const saveButtonDisabled = (): boolean => {\n      const errors = getErrors();\n      const hasErrors = errors.length > 0;\n\n      if (!hasErrors) {\n        return false; // No errors, button should be enabled\n      }\n\n      // If all errors are submit-triggered, allow the save button to be enabled\n      // so users can re-submit to correct submit-only validation errors\n      const allErrorsAreSubmitOnly = errors.every(\n        (error: ErrorMessage<TModel>) => error.trigger === 'submit',\n      );\n\n      return !allErrorsAreSubmitOnly; // Disable only if there are non-submit errors\n    };\n\n    return {\n      title: args.title,\n      forms: formsSignal,\n      value: getValue,\n      addItem,\n      removeItem,\n      validateAll,\n      getErrors,\n      save,\n      reset,\n      anyTouched,\n      anyDirty,\n      status: () => status(),\n      saveButtonDisabled,\n    };\n  }\n}\n","import {\n  MetaValidatorFn,\n  type SignalValidator,\n} from '../models/signal-form.model';\n\nexport function isRequired<TVal, TModel>(field: {\n  validators?: SignalValidator<TModel, keyof TModel>[];\n}): boolean {\n  return (\n    field.validators?.some(\n      (v) =>\n        (v as MetaValidatorFn<TModel[keyof TModel], TModel>).__meta?.required,\n    ) ?? false\n  );\n}\n","import {\n  type MetaValidatorFn,\n  type SignalValidatorFn,\n  type ValidatorMeta,\n} from '../models/signal-form.model';\n\nexport function withMeta<T extends keyof TModel, TModel>(\n  fn: SignalValidatorFn<TModel[T], TModel>,\n  meta: ValidatorMeta,\n): MetaValidatorFn<TModel[T], TModel> {\n  (\n    fn as unknown as Omit<MetaValidatorFn<TModel[T], TModel>, '__meta'> & {\n      __meta: ValidatorMeta;\n    }\n  ).__meta = meta;\n  return fn as MetaValidatorFn<TModel[T], TModel>;\n}\n","/**\n * Unit conversion function type - converts value from one unit to target unit\n */\nexport type UnitConverter = (value: number, fromUnit: string) => number;\n\n/**\n * Unit parsing function type - formats the value for display\n */\nexport type UnitParser = (value: number) => string;\n\n/**\n * Configuration for a single unit in the conversion system\n */\nexport interface UnitConfig {\n  /** Display label for the unit */\n  label: string;\n\n  /** Function to convert from any unit to this unit */\n  convert: UnitConverter;\n\n  /** Optional unit-specific parser that overrides field-level parser */\n  parser?: UnitParser;\n}\n\n/**\n * Position of the unit dropdown relative to the input\n */\nexport type UnitPosition = 'prefix' | 'suffix';\n\n/**\n * Complete unit conversion configuration for a number field\n */\nexport interface UnitConversionConfig {\n  /** Map of unit keys to their configurations */\n  unitConversions: Record<string, UnitConfig>;\n\n  /** Default unit to use when field is first rendered */\n  defaultUnit: string;\n\n  /** Position of unit dropdown (prefix/suffix) */\n  unitPosition: UnitPosition;\n\n  /** Optional field-level parser - can be overridden by unit-specific parsers */\n  parser?: UnitParser;\n\n  /** Number of decimal places to round converted values to (default: 2) */\n  precision?: number;\n}\n\n// Common conversion utilities\nexport class ConversionUtils {\n  /**\n   * Weight conversions (base unit: kg)\n   */\n  static weight = {\n    kg: {\n      label: 'Kilograms',\n      convert: (value: number, fromUnit: string) => {\n        switch (fromUnit) {\n          case 'lbs':\n            return value * 0.453592;\n          case 'oz':\n            return value * 0.0283495;\n          case 'g':\n            return value / 1000;\n          case 'kg':\n            return value;\n          default:\n            return value;\n        }\n      },\n    },\n    lbs: {\n      label: 'Pounds',\n      convert: (value: number, fromUnit: string) => {\n        switch (fromUnit) {\n          case 'kg':\n            return value * 2.20462;\n          case 'oz':\n            return value / 16;\n          case 'g':\n            return value * 0.00220462;\n          case 'lbs':\n            return value;\n          default:\n            return value;\n        }\n      },\n    },\n    oz: {\n      label: 'Ounces',\n      convert: (value: number, fromUnit: string) => {\n        switch (fromUnit) {\n          case 'kg':\n            return value * 35.274;\n          case 'lbs':\n            return value * 16;\n          case 'g':\n            return value * 0.035274;\n          case 'oz':\n            return value;\n          default:\n            return value;\n        }\n      },\n    },\n    g: {\n      label: 'Grams',\n      convert: (value: number, fromUnit: string) => {\n        switch (fromUnit) {\n          case 'kg':\n            return value * 1000;\n          case 'lbs':\n            return value * 453.592;\n          case 'oz':\n            return value * 28.3495;\n          case 'g':\n            return value;\n          default:\n            return value;\n        }\n      },\n    },\n  };\n\n  /**\n   * Length conversions (base unit: m)\n   */\n  static length = {\n    m: {\n      label: 'Meters',\n      convert: (value: number, fromUnit: string) => {\n        switch (fromUnit) {\n          case 'ft':\n            return value * 0.3048;\n          case 'in':\n            return value * 0.0254;\n          case 'cm':\n            return value / 100;\n          case 'mm':\n            return value / 1000;\n          case 'm':\n            return value;\n          default:\n            return value;\n        }\n      },\n    },\n    ft: {\n      label: 'Feet',\n      convert: (value: number, fromUnit: string) => {\n        switch (fromUnit) {\n          case 'm':\n            return value * 3.28084;\n          case 'in':\n            return value / 12;\n          case 'cm':\n            return value * 0.0328084;\n          case 'mm':\n            return value * 0.00328084;\n          case 'ft':\n            return value;\n          default:\n            return value;\n        }\n      },\n    },\n    in: {\n      label: 'Inches',\n      convert: (value: number, fromUnit: string) => {\n        switch (fromUnit) {\n          case 'm':\n            return value * 39.3701;\n          case 'ft':\n            return value * 12;\n          case 'cm':\n            return value * 0.393701;\n          case 'mm':\n            return value * 0.0393701;\n          case 'in':\n            return value;\n          default:\n            return value;\n        }\n      },\n    },\n    cm: {\n      label: 'Centimeters',\n      convert: (value: number, fromUnit: string) => {\n        switch (fromUnit) {\n          case 'm':\n            return value * 100;\n          case 'ft':\n            return value * 30.48;\n          case 'in':\n            return value * 2.54;\n          case 'mm':\n            return value / 10;\n          case 'cm':\n            return value;\n          default:\n            return value;\n        }\n      },\n    },\n    mm: {\n      label: 'Millimeters',\n      convert: (value: number, fromUnit: string) => {\n        switch (fromUnit) {\n          case 'm':\n            return value * 1000;\n          case 'ft':\n            return value * 304.8;\n          case 'in':\n            return value * 25.4;\n          case 'cm':\n            return value * 10;\n          case 'mm':\n            return value;\n          default:\n            return value;\n        }\n      },\n    },\n  };\n\n  /**\n   * Temperature conversions (base unit: celsius)\n   */\n  static temperature = {\n    celsius: {\n      label: 'Celsius',\n      convert: (value: number, fromUnit: string) => {\n        switch (fromUnit) {\n          case 'fahrenheit':\n            return ((value - 32) * 5) / 9;\n          case 'kelvin':\n            return value - 273.15;\n          case 'celsius':\n            return value;\n          default:\n            return value;\n        }\n      },\n    },\n    fahrenheit: {\n      label: 'Fahrenheit',\n      convert: (value: number, fromUnit: string) => {\n        switch (fromUnit) {\n          case 'celsius':\n            return (value * 9) / 5 + 32;\n          case 'kelvin':\n            return ((value - 273.15) * 9) / 5 + 32;\n          case 'fahrenheit':\n            return value;\n          default:\n            return value;\n        }\n      },\n    },\n    kelvin: {\n      label: 'Kelvin',\n      convert: (value: number, fromUnit: string) => {\n        switch (fromUnit) {\n          case 'celsius':\n            return value + 273.15;\n          case 'fahrenheit':\n            return ((value - 32) * 5) / 9 + 273.15;\n          case 'kelvin':\n            return value;\n          default:\n            return value;\n        }\n      },\n    },\n  };\n\n  /**\n   * Common parsers for different number formats\n   */\n  static parsers = {\n    currency: (value: number, locale = 'en-US', currency = 'USD') =>\n      new Intl.NumberFormat(locale, { style: 'currency', currency }).format(\n        value,\n      ),\n\n    percentage: (value: number, locale = 'en-US') =>\n      new Intl.NumberFormat(locale, {\n        style: 'percent',\n        minimumFractionDigits: 1,\n      }).format(value / 100),\n\n    decimal: (value: number, locale = 'en-US', fractionDigits = 2) =>\n      new Intl.NumberFormat(locale, {\n        minimumFractionDigits: fractionDigits,\n        maximumFractionDigits: fractionDigits,\n      }).format(value),\n\n    integer: (value: number, locale = 'en-US') =>\n      new Intl.NumberFormat(locale, { maximumFractionDigits: 0 }).format(value),\n  };\n}\n","// Export all types from signal-form.model.ts\nexport type {\n  ArrayFormBuilderArgs,\n  ArrayFormContainer,\n  AutocompleteSignalField,\n  BaseFieldConfig,\n  BaseFieldState,\n  BaseSignalFormConfig,\n  CheckboxGroupField,\n  CheckboxGroupSignalField,\n  CheckboxSignalField,\n  ChipListSignalField,\n  ColorSignalField,\n  ComputedOptions,\n  DateTimeSignalField,\n  DeepPartial,\n  ElementTypeForField,\n  ErrorMessage,\n  ExpandedAnimationEvent,\n  FieldStylingConfig,\n  FieldWithForm,\n  FieldWithFormTraversal,\n  FieldWithOptions,\n  FieldWithRepeatableForms,\n  FileSignalField,\n  FlexSignalFormConfig,\n  FormBuilderArgs,\n  FormOption,\n  GridSignalFormConfig,\n  InferFieldType,\n  ItemOf,\n  LoadOptionsFn,\n  MetaValidatorFn,\n  MultiSelectSignalField,\n  NestedGroupBuilderField,\n  NumberSignalField,\n  PasswordSignalField,\n  RadioSignalField,\n  RatingSignalField,\n  RepeatableField,\n  RepeatableGroupBuilderField,\n  RepeatableGroupSignalFormField,\n  RoleAttributes,\n  SelectSignalField,\n  SignalAsyncValidator,\n  SignalAsyncValidatorFn,\n  SignalField,\n  SignalFormConfig,\n  SignalFormContainer,\n  SignalFormField,\n  SignalFormFieldBuilderInput,\n  SignalSteppedFormConfig,\n  SignalSteppedFormContainer,\n  SignalValidator,\n  SignalValidatorFn,\n  SliderSignalField,\n  SteppedFormBuilderArgs,\n  SwitchSignalField,\n  TextareaSignalField,\n  TextSignalField,\n  ValidationConfig,\n  ValidationTrigger,\n  ValidatorMeta,\n} from './signal-form.model';\n\n// Export all from unit-conversion.model.ts\nexport * from './unit-conversion.model';\n\n// Export all from dropdown.model.ts\nexport * from './dropdown.model';\n\n// Export all types from signal-field-configs.model.ts (avoiding conflicts)\nexport type {\n  AutocompleteFieldConfig,\n  BaseFieldConfig as BaseFieldConfigType,\n  CheckboxFieldConfig,\n  CheckboxGroupFieldConfig,\n  DateTimeFieldConfig,\n  FileFieldConfig,\n  NumberFieldConfig,\n  RatingFieldConfig,\n  SelectFieldConfig,\n  SliderFieldConfig,\n  TextFieldConfig,\n} from './signal-field-configs.model';\n\n// Export all from signal-field-types.model.ts\nexport * from './signal-field-types.model';\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  effect,\n  ElementRef,\n  Injector,\n  input,\n  OnInit,\n  output,\n  Renderer2,\n  signal,\n  viewChildren,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CircleCheck, CircleX, LucideAngularModule } from 'lucide-angular';\nimport { fromEvent, tap } from 'rxjs';\nimport { type FormOption } from '../../../models/signal-form.model';\n\n@Component({\n  selector: 'form-dropdown-overlay',\n  standalone: true,\n  imports: [LucideAngularModule],\n  templateUrl: './form-dropdown-overlay.component.html',\n  styleUrl: './form-dropdown-overlay.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FormDropdownOverlayComponent implements OnInit {\n  public options = input.required<FormOption[]>();\n  public multiselect = input<boolean>(false);\n  public triggerElement = input<HTMLElement>();\n  public initialSelection = input<FormOption[] | FormOption>();\n  public ariaListboxId = input.required<string>();\n\n  public select = output<FormOption | FormOption[] | null>();\n  public close = output<void>();\n\n  public optionElements = viewChildren('optionElement', { read: ElementRef });\n\n  protected focusedIndex = signal<number>(-1);\n  protected selectedOptions = signal<FormOption[]>([]);\n\n  protected readonly checkIcon = CircleCheck;\n  protected readonly clearIcon = CircleX;\n\n  constructor(\n    private readonly renderer: Renderer2,\n    private readonly elementRef: ElementRef,\n    private readonly destroyRef: DestroyRef,\n    private readonly injector: Injector,\n  ) {}\n\n  public ngOnInit(): void {\n    this.handleSingleOrMultiSelect();\n    this.listenToDocumentMouseClicks();\n    this.listenToTriggerElementKeyDown();\n    this.listenToOptionElementForView();\n  }\n\n  private handleSingleOrMultiSelect(): void {\n    const selection = this.initialSelection();\n\n    if (!selection) {\n      return;\n    }\n\n    if (this.multiselect() && Array.isArray(selection)) {\n      this.selectedOptions.set(selection);\n      return;\n    }\n\n    this.selectedOptions.set([selection as FormOption]);\n  }\n\n  public selectOption(option: FormOption): void {\n    if (this.multiselect()) {\n      const current = (this.selectedOptions() as FormOption[]) ?? [];\n      const exists = current.some((o) => o.value === option.value);\n      const updated = exists\n        ? current.filter((o) => o.value !== option.value)\n        : [...current, option];\n\n      this.selectedOptions.set(updated);\n      this.select.emit(updated);\n    } else {\n      this.selectedOptions.set([option]);\n      this.emitSelection();\n    }\n  }\n\n  private emitSelection(): void {\n    const result = this.multiselect()\n      ? this.selectedOptions()\n      : (this.selectedOptions()[0] ?? null);\n\n    this.select.emit(result);\n  }\n\n  public toggleOption(option: FormOption): void {\n    if (this.multiselect()) {\n      this.selectedOptions.update((current) => {\n        const exists = current.some((o) => o.value === option.value);\n        return exists\n          ? current.filter((o) => o.value !== option.value)\n          : [...current, option];\n      });\n    } else {\n      this.selectedOptions.set([option]);\n      this.emitSelection();\n    }\n  }\n\n  public setPosition({\n    top,\n    left,\n    width,\n  }: {\n    top: number;\n    left: number;\n    width: number | string;\n  }): void {\n    const el = this.elementRef.nativeElement;\n    const widthPx = typeof width === 'string' ? width : `${width}px`;\n\n    Object.entries({\n      position: 'absolute',\n      top: `${top}px`,\n      left: `${left}px`,\n      width: widthPx,\n      zIndex: 1000,\n    }).forEach(([key, val]) => this.renderer.setStyle(el, key, val));\n  }\n\n  protected isSelected(formOption: FormOption): boolean {\n    const selectedOptions = this.selectedOptions();\n\n    if (!this.selectedOptions()) {\n      return false;\n    }\n    return selectedOptions.some((option) => option.value === formOption.value);\n  }\n\n  private listenToDocumentMouseClicks(): void {\n    fromEvent<MouseEvent>(document, 'click')\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((event) => {\n        const target = event.target as Node;\n\n        const clickedInsideOverlay =\n          this.elementRef.nativeElement.contains(target);\n        const clickedOnTrigger = this.triggerElement()?.contains(target);\n\n        if (!clickedInsideOverlay && !clickedOnTrigger) {\n          this.close.emit();\n        }\n      });\n  }\n\n  private listenToTriggerElementKeyDown(): void {\n    if (!this.triggerElement()) {\n      return;\n    }\n\n    fromEvent<KeyboardEvent>(this.triggerElement()!, 'keydown')\n      .pipe(\n        tap((event) => this.handleKeydown(event)),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe();\n  }\n\n  private handleKeydown(event: KeyboardEvent): void {\n    const options = this.options();\n    const max = options.length - 1;\n\n    switch (event.key) {\n      case 'ArrowDown':\n        event.preventDefault();\n        this.focusedIndex.update((i) => (i + 1 > max ? 0 : i + 1));\n        break;\n\n      case 'ArrowUp':\n        event.preventDefault();\n        this.focusedIndex.update((i) => (i - 1 < 0 ? max : i - 1));\n        break;\n\n      case 'Enter':\n        event.preventDefault();\n        const selected = options[this.focusedIndex()];\n        if (selected) this.selectOption(selected);\n        break;\n\n      case 'Escape':\n        this.close.emit();\n        break;\n    }\n  }\n\n  private listenToOptionElementForView(): void {\n    effect(\n      () => {\n        const index = this.focusedIndex();\n\n        if (index === -1) {\n          return;\n        }\n\n        const el = this.optionElements().at(index)?.nativeElement;\n\n        if (el) {\n          el.scrollIntoView({\n            behavior: 'smooth',\n            block: 'nearest',\n          });\n        }\n      },\n      {\n        injector: this.injector,\n      },\n    );\n  }\n}\n","<ul role=\"listbox\" [id]=\"ariaListboxId()\" class=\"dropdown-options\">\n  @for (option of options(); track option.value) {\n    <li\n      class=\"dropdown-option\"\n      [class.selected]=\"isSelected(option)\"\n      [class.focused]=\"focusedIndex() === $index\"\n      [attr.data-index]=\"$index\"\n      [attr.aria-selected]=\"focusedIndex() === $index\"\n      [id]=\"'option-' + i\"\n      (click)=\"selectOption(option)\"\n      #optionElement\n    >\n      {{ option.label }}\n      @if (isSelected(option) && multiselect()) {\n        @if (focusedIndex() === $index) {\n          <lucide-icon class=\"selected-icon\" [img]=\"clearIcon\" />\n        } @else {\n          <lucide-icon class=\"selected-icon\" [img]=\"checkIcon\" />\n        }\n      }\n    </li>\n  }\n</ul>\n","import {\n  ApplicationRef,\n  ComponentRef,\n  inject,\n  Injectable,\n  Injector,\n} from '@angular/core';\nimport { FormDropdownOverlayComponent } from '../components/ui/form-dropdown-overlay/form-dropdown-overlay.component';\nimport { type DropdownConfig } from '../models/dropdown.model';\nimport { type FormOption } from '../models/signal-form.model';\n\n@Injectable({ providedIn: 'root' })\nexport class FormDropdownService {\n  private dropdownRef?: ComponentRef<FormDropdownOverlayComponent>;\n\n  private readonly appRef = inject(ApplicationRef);\n  private readonly injector = inject(Injector);\n\n  public openDropdown<\n    TOption extends FormOption<TValue>,\n    TValue = TOption['value'],\n  >(config: DropdownConfig<TOption, TValue>): void {\n    this.destroyDropdown();\n\n    this.dropdownRef = config.viewContainerRef.createComponent(\n      FormDropdownOverlayComponent,\n      {\n        environmentInjector: this.appRef.injector,\n        injector: this.injector,\n      },\n    );\n\n    const instance = this.dropdownRef.instance;\n\n    this.dropdownRef.setInput('options', config.options);\n    this.dropdownRef.setInput('triggerElement', config.reference);\n    this.dropdownRef.setInput('multiselect', config.multiselect);\n    this.dropdownRef.setInput('ariaListboxId', config.ariaListboxId);\n    this.dropdownRef.setInput('initialSelection', config.initialSelection);\n\n    instance.select.subscribe((option) => {\n      config.onSelect(option as any);\n\n      if (!config.multiselect) {\n        this.destroyDropdown();\n      }\n    });\n\n    instance.close.subscribe(() => {\n      config.onClose?.();\n      this.destroyDropdown();\n    });\n\n    requestAnimationFrame(() => {\n      const rect = config.reference.getBoundingClientRect();\n\n      instance.setPosition({\n        top: rect.height,\n        left: 0,\n        width: '100%',\n      });\n    });\n  }\n\n  public destroyDropdown(): void {\n    this.dropdownRef?.destroy();\n    this.dropdownRef = undefined;\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n  effect,\n  Inject,\n  Injectable,\n  InjectionToken,\n  Optional,\n  Provider,\n  signal,\n} from '@angular/core';\nimport {\n  type SignalFormConfig,\n  type SignalFormContainer,\n} from '../models/signal-form.model';\n\nexport type ThemeMode = 'light' | 'dark' | 'auto';\n\nexport interface SignalFormsThemeConfig {\n  darkMode?: boolean;\n  defaultTheme?: ThemeMode;\n}\n\nexport const SIGNAL_FORMS_THEME_CONFIG =\n  new InjectionToken<SignalFormsThemeConfig>('SIGNAL_FORMS_THEME_CONFIG');\n\n/**\n * Provider function for Signal Forms theme configuration\n * @param config - Theme configuration options\n * @returns Provider array for Angular DI\n */\nexport function provideSignalFormsTheme(\n  config: SignalFormsThemeConfig = {},\n): Provider[] {\n  return [\n    {\n      provide: SIGNAL_FORMS_THEME_CONFIG,\n      useValue: config,\n    },\n    SignalFormThemeService,\n  ];\n}\n\n/**\n * Theme Service for Signal Forms\n *\n * Provides centralized theme management for the form system.\n * Manages global theme state and applies theme classes to the HTML element.\n *\n * This service is a singleton that coordinates theme across all forms in the app.\n * When any form requests a theme check, it determines the root form's theme\n * and applies the appropriate class to the HTML element.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class SignalFormThemeService {\n  private _theme = signal<ThemeMode>('auto');\n  private _isDarkMode = signal<boolean>(false);\n\n  /**\n   * Current theme mode setting for the service\n   */\n  public readonly theme = this._theme.asReadonly();\n\n  /**\n   * Whether dark mode is currently active based on system preference\n   */\n  public readonly isDarkMode = this._isDarkMode.asReadonly();\n\n  constructor(\n    @Inject(DOCUMENT) private document: Document,\n    @Optional()\n    @Inject(SIGNAL_FORMS_THEME_CONFIG)\n    private config: SignalFormsThemeConfig | null,\n  ) {\n    // Use default empty config if none provided\n    const themeConfig = this.config || {};\n\n    // Set initial theme from config\n    if (themeConfig.defaultTheme) {\n      this._theme.set(themeConfig.defaultTheme);\n    }\n\n    // Initialize dark mode based on system preference\n    if (typeof window !== 'undefined') {\n      this._isDarkMode.set(\n        window.matchMedia('(prefers-color-scheme: dark)').matches,\n      );\n\n      // Listen for system theme changes\n      const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n      mediaQuery.addEventListener('change', (e) => {\n        this._isDarkMode.set(e.matches);\n      });\n    }\n\n    // Auto-apply dark mode if configured\n    if (themeConfig.darkMode) {\n      effect(() => {\n        this.updateGlobalDarkMode();\n      });\n    }\n  }\n\n  /**\n   * Set the global theme mode\n   * @param theme - 'light', 'dark', or 'auto'\n   */\n  public setTheme(theme: ThemeMode): void {\n    this._theme.set(theme);\n  }\n\n  /**\n   * Toggle between light and dark theme\n   */\n  public toggleTheme(): void {\n    const current = this._theme();\n    if (current === 'auto') {\n      // If auto, switch to opposite of current system preference\n      this.setTheme(this._isDarkMode() ? 'light' : 'dark');\n    } else {\n      // Toggle between light and dark\n      this.setTheme(current === 'dark' ? 'light' : 'dark');\n    }\n  }\n\n  /**\n   * Check theme for any form configuration and trigger HTML class updates\n   * This method determines the effective theme but doesn't return it for binding\n   * Instead, it triggers side effects to update the global HTML classes\n   *\n   * @param formOrConfig - Form container or form config\n   */\n  public checkTheme<TModel>(\n    formOrConfig: SignalFormContainer<TModel> | SignalFormConfig<TModel>,\n  ): void {\n    const effectiveTheme = this.getEffectiveTheme(formOrConfig);\n    this.updateHtmlClasses(effectiveTheme);\n  }\n\n  /**\n   * Apply global dark mode based on service theme setting\n   * Used when darkMode is enabled in provider config\n   */\n  private updateGlobalDarkMode(): void {\n    const effectiveTheme = this.getServiceEffectiveTheme();\n    this.updateHtmlClasses(effectiveTheme);\n  }\n\n  /**\n   * Get the effective theme for any form configuration\n   * Recursively finds the root form and uses its theme setting\n   *\n   * @param formOrConfig - Form container or form config\n   * @returns 'light' or 'dark'\n   */\n  private getEffectiveTheme<TModel>(\n    formOrConfig: SignalFormContainer<TModel> | SignalFormConfig<TModel>,\n  ): 'light' | 'dark' {\n    let config: SignalFormConfig<TModel>;\n\n    // Handle both form containers and configs\n    if ('config' in formOrConfig) {\n      // It's a form container - check if it has a parent\n      const form = formOrConfig as SignalFormContainer<TModel>;\n      const parentForm = form.parentForm?.();\n\n      if (parentForm) {\n        // Not root, recurse to parent\n        return this.getEffectiveTheme(parentForm);\n      }\n\n      config = form.config;\n    } else {\n      // It's a config object\n      config = formOrConfig as SignalFormConfig<TModel>;\n    }\n\n    // We're at the root - determine theme\n    const themeMode = config.theme ?? 'light';\n\n    if (themeMode === 'dark') {\n      return 'dark';\n    }\n    if (themeMode === 'light') {\n      return 'light';\n    }\n\n    // Auto mode - use service theme or fall back to system preference\n    return this.getServiceEffectiveTheme();\n  }\n\n  /**\n   * Get the effective theme from the service (resolves 'auto' to 'light' or 'dark')\n   */\n  private getServiceEffectiveTheme(): 'light' | 'dark' {\n    const theme = this._theme();\n    if (theme === 'auto') {\n      return this._isDarkMode() ? 'dark' : 'light';\n    }\n    return theme;\n  }\n\n  /**\n   * Update HTML classes based on effective theme\n   * @param effectiveTheme - The theme to apply\n   */\n  private updateHtmlClasses(effectiveTheme: 'light' | 'dark'): void {\n    // Safe to use injected document - will be null in headless environments\n    if (!this.document?.documentElement) {\n      return;\n    }\n\n    const html = this.document.documentElement;\n\n    // Remove existing theme classes\n    html.classList.remove('dark-themed-forms', 'light-themed-forms');\n\n    // Add new theme class\n    if (effectiveTheme === 'dark') {\n      html.classList.add('dark-themed-forms');\n    } else {\n      html.classList.add('light-themed-forms');\n    }\n  }\n}\n","import { CanDeactivateFn } from '@angular/router';\n\nexport interface HasUnsavedChanges {\n  hasUnsavedChanges(): boolean;\n}\n\nexport const unsavedChangesGuard: CanDeactivateFn<HasUnsavedChanges> = (\n  component,\n) => {\n  if (component.hasUnsavedChanges()) {\n    return confirm(\n      'You have unsaved changes. Are you sure you want to leave this page?',\n    );\n  }\n  return true;\n};\n","import { Injectable } from '@angular/core';\n\nexport interface WordCountStats {\n  characters: number;\n  words: number;\n  charactersWithSpaces: number;\n  lines: number;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class WordCountService {\n  /**\n   * Counts words, characters, and lines in the given text\n   */\n  getWordCount(text: string | null | undefined): WordCountStats {\n    if (!text) {\n      return {\n        characters: 0,\n        words: 0,\n        charactersWithSpaces: 0,\n        lines: 0,\n      };\n    }\n\n    const charactersWithSpaces = text.length;\n    const characters = text.replace(/\\s/g, '').length;\n    const lines = text.split('\\n').length;\n\n    // Count words by splitting on whitespace and filtering empty strings\n    const words = text\n      .trim()\n      .split(/\\s+/)\n      .filter((word) => word.length > 0).length;\n\n    return {\n      characters,\n      words,\n      charactersWithSpaces,\n      lines,\n    };\n  }\n\n  /**\n   * Formats word count for display\n   */\n  formatWordCount(\n    stats: WordCountStats,\n    format: 'words' | 'characters' | 'both' | 'detailed' = 'words',\n  ): string {\n    switch (format) {\n      case 'words':\n        return `${stats.words} word${stats.words !== 1 ? 's' : ''}`;\n\n      case 'characters':\n        return `${stats.characters} character${stats.characters !== 1 ? 's' : ''}`;\n\n      case 'both':\n        return `${stats.words} word${stats.words !== 1 ? 's' : ''}, ${stats.characters} character${stats.characters !== 1 ? 's' : ''}`;\n\n      case 'detailed':\n        return `${stats.words} words | ${stats.characters} chars | ${stats.lines} lines`;\n\n      default:\n        return `${stats.words} word${stats.words !== 1 ? 's' : ''}`;\n    }\n  }\n}\n","import { withMeta } from '../helpers/with-meta';\nimport {\n  type MetaValidatorFn,\n  type SignalFormContainer,\n  type SignalValidatorFn,\n} from '../models/signal-form.model';\n\nexport class SignalValidators {\n  static required<TModel, K extends keyof TModel = any>(\n    message = 'This field is required',\n  ): MetaValidatorFn<TModel[K], TModel> {\n    return withMeta(\n      (val: TModel[K]) => (val == null || val === '' ? message : null),\n      {\n        required: true,\n      },\n    );\n  }\n\n  static min<T extends number | null, TModel>(\n    min: number,\n    msg?: string,\n  ): SignalValidatorFn<T, TModel> {\n    return (val) =>\n      !!val && val < min ? (msg ?? `Must be at least ${min}`) : null;\n  }\n\n  static max<T extends number, TModel>(\n    max: number,\n    msg?: string,\n  ): SignalValidatorFn<T, TModel> {\n    return (val) => (val > max ? (msg ?? `Must be no more than ${max}`) : null);\n  }\n\n  static minLength<T extends string, TModel>(\n    min: number,\n    msg?: string,\n  ): SignalValidatorFn<T, TModel> {\n    return (val) =>\n      val.length < min ? (msg ?? `Minimum ${min} characters`) : null;\n  }\n\n  static maxLength<T extends string, TModel>(\n    max: number,\n    msg?: string,\n  ): SignalValidatorFn<T, TModel> {\n    return (val) =>\n      val.length > max ? (msg ?? `Maximum ${max} characters`) : null;\n  }\n\n  static isPositive<T extends number, TModel>(\n    msg = 'Must be a positive number',\n  ): SignalValidatorFn<T, TModel> {\n    return (val) => (val <= 0 ? msg : null);\n  }\n\n  static hasValue<TModel, K extends keyof TModel>(\n    fieldName: K,\n  ): SignalValidatorFn<TModel[K], TModel> {\n    return (_: TModel[K], form: SignalFormContainer<TModel>) =>\n      form.getField(fieldName).value()\n        ? null\n        : `${String(fieldName)} is required`;\n  }\n\n  static matchField<TModel, TValue>(\n    otherKey: keyof TModel,\n    msg = 'Fields do not match',\n  ): SignalValidatorFn<TValue, TModel> {\n    return (val, form) =>\n      val !== form.getField(otherKey)?.value?.() ? msg : null;\n  }\n}\n","import { Signal } from '@angular/core';\nimport {\n  type SignalFormContainer,\n  type SignalValidatorFn,\n} from '../models/signal-form.model';\n\n/**\n * Variant for guaranteed signal access (same-step dependencies), with full access to the form context.\n */\nexport function withSignalValidation<TVal, TDep, TModel>(\n  getDepSignal: () => Signal<TDep>,\n  validate: (\n    val: TVal,\n    depValue: TDep | undefined,\n    form: SignalFormContainer<TModel>,\n  ) => string | null,\n): SignalValidatorFn<TVal, TModel> {\n  return (val, form) => {\n    const depValue = getDepSignal()();\n    return validate(val, depValue, form);\n  };\n}\n","// #region\nimport {\n  computed,\n  Directive,\n  effect,\n  inject,\n  Injector,\n  input,\n  WritableSignal,\n} from '@angular/core';\nimport { type RuntimeFields } from '../../../models/signal-field-types.model';\nimport {\n  MetaValidatorFn,\n  type SignalFormContainer,\n} from '../../../models/signal-form.model';\n// #endregion\n\n/**\n * Base directive for form input components that provides common functionality\n * such as validation, computed values, and options filtering.\n *\n * This directive should be extended by all form field components to provide\n * consistent behavior across the form system.\n *\n * @template TField - The specific field type extending RuntimeFields\n * @template TModel - The form model type\n * @template K - The field key type\n *\n * @example\n * ```typescript\n * export class FormTextFieldComponent extends BaseInputDirective<\n *   RuntimeTextSignalField<TModel, K>,\n *   TModel,\n *   K\n * > {\n *   // Component implementation\n * }\n * ```\n */\n@Directive()\nexport abstract class BaseInputDirective<\n  TField extends RuntimeFields<TModel, K>,\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n> {\n  /**\n   * The field configuration and state\n   */\n  public field = input.required<TField>();\n\n  /**\n   * Computed form reference obtained from the field\n   */\n  protected readonly form = computed<SignalFormContainer<TModel>>(() =>\n    this.field().getForm(),\n  );\n\n  /**\n   * Angular injector for effect management\n   */\n  protected readonly injector = inject(Injector);\n\n  /**\n   * Computed property indicating if the field is required based on validators\n   */\n  protected readonly isRequired = computed(() =>\n    (this.field().validators ?? []).some(\n      (validator) =>\n        (validator as MetaValidatorFn<TModel[K], unknown>).__meta?.required,\n    ),\n  );\n\n  /**\n   * Computed property indicating if the field should be hidden\n   */\n  protected readonly isHidden = computed(() => {\n    const { hidden } = this.field();\n    return typeof hidden === 'function' ? hidden(this.form()) : !!hidden;\n  });\n\n  /**\n   * Computed property indicating if the field should be disabled\n   */\n  protected readonly isDisabled = computed(() => {\n    const { disabled } = this.field();\n    return typeof disabled === 'function' ? disabled(this.form()) : !!disabled;\n  });\n\n  /**\n   * Computed property that returns filtered options for fields that support options.\n   * For fields without options, returns an empty array.\n   *\n   * Applies dynamic options filtering if a dynamicOptions function is provided.\n   */\n  protected readonly filteredOptions = computed(() => {\n    const field = this.field();\n    const form = this.form();\n\n    // Check if field has options property\n    if (!('options' in field) || typeof (field as any).options !== 'function') {\n      return [];\n    }\n\n    const options = (field as any).options();\n    const dynamicOptionsFn = (field as any).dynamicOptions;\n\n    if (typeof dynamicOptionsFn !== 'function') {\n      return options;\n    }\n\n    return dynamicOptionsFn(form, options, field.value());\n  });\n\n  /**\n   * Initializes the directive by setting up reactive effects for\n   * computed values and value watching\n   */\n  constructor() {\n    this.initializeComputedValueEffect();\n    this.watchComputedValueEffect();\n  }\n\n  /**\n   * Sets up an effect to initialize computed values when the field is first loaded.\n   * This only runs once to set the initial computed value.\n   *\n   * @private\n   */\n  private initializeComputedValueEffect(): void {\n    effect(\n      () => {\n        const field = this.field();\n        if (!field.computedValue) return;\n\n        const initialValue = field.computedValue(this.form());\n        this.setValue(initialValue, false);\n      },\n      { injector: this.injector },\n    );\n  }\n\n  /**\n   * Sets up an effect to watch for changes in computed values and update\n   * the field value accordingly. This runs whenever dependencies change.\n   *\n   * @private\n   */\n  private watchComputedValueEffect(): void {\n    effect(\n      () => {\n        const field = this.field();\n        if (!field.computedValue) return;\n\n        const newValue = field.computedValue(this.form());\n        this.setValue(newValue, false);\n      },\n      { injector: this.injector },\n    );\n  }\n\n  /**\n   * Updates the field value and optionally marks it as touched and dirty.\n   *\n   * @param value - The new value to set\n   * @param markTouched - Whether to mark the field as touched and dirty (default: true)\n   *\n   * @protected\n   */\n  protected setValue<T>(value: T, markTouched: boolean = true) {\n    const field = this.field();\n    if (markTouched) {\n      field.touched.set(true);\n      field.dirty.set(true);\n    }\n    (field.value as WritableSignal<T>).set(value);\n  }\n}\n","import { Directive, ViewContainerRef } from '@angular/core';\n\n@Directive({\n  selector: '[signalFormHost]',\n  standalone: true,\n})\nexport class SignalFormHostDirective {\n  constructor(public readonly viewContainerRef: ViewContainerRef) {}\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  effect,\n  ElementRef,\n  inject,\n  Optional,\n  signal,\n  viewChild,\n  ViewContainerRef,\n} from '@angular/core';\n\nimport { NgClass } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { from, isObservable } from 'rxjs';\nimport { BaseInputDirective } from '../../../components/base/base-input/base-input.directive';\nimport { SignalFormHostDirective } from '../../../components/base/host-directive/signal-form-host.directive';\nimport { SignalModelDirective } from '../../../directives/signal-model.directive';\nimport { type RuntimeAutocompleteSignalField } from '../../../models/signal-field-types.model';\nimport { type FormOption } from '../../../models/signal-form.model';\nimport { FormDropdownService } from '../../../services/form-dropdown.service';\n\n@Component({\n  selector: 'signal-form-autocomplete-field',\n  standalone: true,\n  imports: [NgClass, SignalModelDirective],\n  templateUrl: './signal-form-autocomplete-field.component.html',\n  styleUrl: './signal-form-autocomplete-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  hostDirectives: [SignalFormHostDirective],\n})\nexport class SignalFormAutocompleteFieldComponent<\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n> extends BaseInputDirective<\n  RuntimeAutocompleteSignalField<TModel, K>,\n  TModel,\n  K\n> {\n  public inputRef = viewChild<ElementRef<HTMLElement>>(\n    'autocompleteInputWrapper',\n  );\n\n  protected search = signal('');\n  protected loadedOptions = signal<FormOption[]>([]);\n  protected showDropdown = signal(false);\n\n  private lastQuery = signal('');\n  private cachedOptions = signal<FormOption[]>([]);\n\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly dropdownService = inject(FormDropdownService);\n\n  constructor(\n    @Optional()\n    private readonly signalFormHostDirective: SignalFormHostDirective,\n  ) {\n    super();\n    this.searchQueryChangeEffect();\n    this.optionsOverlayEffect();\n  }\n\n  private get hostViewContainerRef(): ViewContainerRef | null {\n    return this.signalFormHostDirective?.viewContainerRef ?? null;\n  }\n\n  private optionsOverlayEffect(): void {\n    effect(\n      () => {\n        if (\n          !this.showDropdown() ||\n          !this.loadedOptions().length ||\n          !this.inputRef()\n        ) {\n          return;\n        }\n\n        this.dropdownService.openDropdown<FormOption>({\n          options: this.loadedOptions(),\n          ariaListboxId: `${String(this.field().name)}-listbox`,\n          reference: this.inputRef()!.nativeElement,\n          viewContainerRef: this.hostViewContainerRef!,\n          onSelect: (option) => {\n            if (option) {\n              this.updateValue(option);\n            }\n            this.field().touched.set(true);\n            this.showDropdown.set(false);\n            this.dropdownService.destroyDropdown();\n          },\n          onClose: () => {\n            this.showDropdown.set(false);\n          },\n          multiselect: false,\n        });\n      },\n      { injector: this.injector },\n    );\n  }\n\n  private updateValue(val: FormOption | null): void {\n    super.setValue(val as TModel[K]);\n    this.field().dirty.set(true);\n  }\n\n  public onSelect(option: FormOption) {\n    this.updateValue(option);\n    this.showDropdown.set(false);\n  }\n\n  protected handleFocus(): void {\n    const query = this.lastQuery();\n    if (!!query && this.cachedOptions().length) {\n      this.showDropdown.set(true);\n      this.loadedOptions.set(this.cachedOptions());\n    }\n  }\n\n  private searchQueryChangeEffect(): void {\n    effect(\n      () => {\n        const query = this.search();\n        this.lastQuery.set(query);\n\n        if (\n          this.field().config?.minChars &&\n          query.length < (this.field().config?.minChars ?? 0)\n        ) {\n          this.loadedOptions.set([]);\n          return;\n        }\n\n        const loader = this.field().loadOptions;\n        if (!loader || !query) {\n          this.loadedOptions.set([]);\n          return;\n        }\n\n        const source = loader(query);\n        const obs$ = isObservable(source) ? source : from(source);\n\n        const debounced$ = obs$.pipe(takeUntilDestroyed(this.destroyRef));\n\n        const timeout = setTimeout(() => {\n          debounced$.subscribe((result) => {\n            this.cachedOptions.set(result); // ✅ cache\n            this.loadedOptions.set(result);\n            this.showDropdown.set(true);\n          });\n        }, this.field().config?.debounceMs ?? 300);\n\n        return () => clearTimeout(timeout);\n      },\n      { injector: this.injector },\n    );\n  }\n}\n","<div\n  class=\"form-input-wrapper\"\n  [ngClass]=\"showDropdown() ? 'dropdown-open' : ''\"\n  #autocompleteInputWrapper\n>\n  <input\n    class=\"form-input\"\n    type=\"text\"\n    role=\"combobox\"\n    aria-autocomplete=\"list\"\n    [signalModel]=\"field()\"\n    [value]=\"field().value()?.label ?? ''\"\n    (input)=\"search.set($event.target.value)\"\n    (focus)=\"handleFocus()\"\n  />\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { SignalModelDirective } from '../../../directives/signal-model.directive';\nimport { type RuntimeCheckboxSignalField } from '../../../models/signal-field-types.model';\nimport { BaseInputDirective } from '../../base/base-input/base-input.directive';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'signal-form-checkbox-field',\n  standalone: true,\n  imports: [SignalModelDirective],\n  styleUrl: './signal-form-checkbox-field.component.scss',\n  templateUrl: './signal-form-checkbox-field.component.html',\n})\nexport class SignalFormCheckboxFieldComponent<\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n> extends BaseInputDirective<RuntimeCheckboxSignalField<TModel, K>, TModel, K> {\n  public label = input<string>('');\n\n  protected extractValue(element: HTMLInputElement): boolean {\n    return element.checked;\n  }\n}\n","<label class=\"form-checkbox-wrapper\" [attr.for]=\"field().name\">\n  <input class=\"checkbox\" type=\"checkbox\" [signalModel]=\"field()\" />\n  <span class=\"form-checkbox-label\">{{ field().label }}</span>\n</label>\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { BaseInputDirective } from '../../../components/base/base-input/base-input.directive';\nimport { type RuntimeCheckboxGroupSignalField } from '../../../models/signal-field-types.model';\nimport { type FormOption } from '../../../models/signal-form.model';\n\n@Component({\n  selector: 'signal-form-checkbox-group-field',\n  standalone: true,\n  imports: [NgClass],\n  templateUrl: './signal-form-checkbox-group-field.component.html',\n  styleUrl: './signal-form-checkbox-group-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SignalFormCheckboxGroupFieldComponent<\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n> extends BaseInputDirective<\n  RuntimeCheckboxGroupSignalField<TModel, K>,\n  TModel,\n  K\n> {\n  protected layoutClass = computed(() =>\n    this.field().config?.layout === 'inline'\n      ? 'checkbox-group-inline'\n      : 'checkbox-group-stacked',\n  );\n\n  protected isChecked = (option: FormOption<TModel[K]>) => {\n    const val = this.field().value();\n    const key = option.value as string;\n\n    if (this.field().config?.valueType === 'map') {\n      const record = val as Record<string, boolean>;\n      return record ? record[key] : false;\n    }\n    return (val as string[])?.includes(key);\n  };\n\n  protected toggleOption(option: FormOption<TModel[K]>): void {\n    const key = option.value as string;\n    const valueType = this.field().config?.valueType ?? 'array';\n    let val = this.field().value();\n\n    // Normalize value\n    if (!val) {\n      val = valueType === 'map' ? {} : [];\n    }\n\n    if (valueType === 'map') {\n      const current = (\n        typeof val === 'object' && !Array.isArray(val) ? { ...val } : {}\n      ) as Record<string, boolean>;\n\n      // Flip the selected value\n      current[key] = !current[key];\n\n      // Normalize to include all options with explicit true/false\n      const fullRecord: Record<string, boolean> = {};\n      for (const opt of this.field().options()) {\n        const optKey = opt.value as string;\n        fullRecord[optKey] = !!current[optKey];\n      }\n\n      this.setValue(fullRecord);\n    } else {\n      const arr = Array.isArray(val) ? val : [];\n      this.setValue(\n        arr.includes(key) ? arr.filter((v) => v !== key) : [...arr, key],\n      );\n    }\n\n    this.field().touched.set(true);\n    this.field().dirty.set(true);\n  }\n}\n","<fieldset\n  class=\"form-checkbox-group\"\n  [ngClass]=\"layoutClass()\"\n  [attr.aria-invalid]=\"field().error() ? 'true' : 'false'\"\n  role=\"group\"\n>\n  <legend class=\"sr-only\">{{ field().label }}</legend>\n\n  @for (option of field().options(); track option.value) {\n    <label class=\"checkbox-group-option\">\n      <input\n        type=\"checkbox\"\n        class=\"checkbox\"\n        [value]=\"option.value\"\n        [checked]=\"isChecked(option)\"\n        (change)=\"toggleOption(option)\"\n      />\n      <span class=\"label-text\">{{ option.label }}</span>\n    </label>\n  }\n</fieldset>\n","import { Component, computed } from '@angular/core';\nimport { BaseInputDirective } from '../../../components/base/base-input/base-input.directive';\nimport { SignalModelDirective } from '../../../directives/signal-model.directive';\nimport { type RuntimeChipListSignalField } from '../../../models/signal-field-types.model';\nimport { type FormOption } from '../../../models/signal-form.model';\n\n@Component({\n  selector: 'signal-form-chip-list-field',\n  standalone: true,\n  imports: [SignalModelDirective],\n  templateUrl: './signal-form-chip-list-field.component.html',\n  styleUrl: './signal-form-chip-list-field.component.scss',\n})\nexport class SignalFormChipListFieldComponent<\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n> extends BaseInputDirective<RuntimeChipListSignalField<TModel, K>, TModel, K> {\n  public selectedValues = computed(() => this.field().value() ?? []);\n\n  public isSelected = (option: FormOption<TModel[K]>): boolean =>\n    !!this.selectedValues().find(\n      (val: FormOption<TModel[K]>) => val.value === option.value,\n    );\n\n  public toggleOption(option: FormOption<TModel[K]>): void {\n    const current = this.selectedValues();\n    const updated = this.isSelected(option)\n      ? current.filter(\n          (val: FormOption<TModel[K]>) => val.value !== option.value,\n        )\n      : [...current, option];\n\n    this.setValue(updated);\n    this.field().touched.set(true);\n    this.field().dirty.set(true);\n  }\n}\n","<div\n  class=\"chip-option-list\"\n  role=\"group\"\n  [signalModel]=\"field()\"\n  [attr.aria-labelledby]=\"field().name + '-label'\"\n>\n  @for (option of field().options(); track option.value) {\n    <div\n      class=\"chip-option\"\n      role=\"checkbox\"\n      tabindex=\"0\"\n      [class.selected]=\"isSelected(option)\"\n      [attr.aria-checked]=\"isSelected(option)\"\n      (click)=\"toggleOption(option)\"\n      (keydown.enter)=\"toggleOption(option)\"\n      (keydown.space)=\"toggleOption(option); $event.preventDefault()\"\n    >\n      {{ option.label }}\n    </div>\n  }\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n} from '@angular/core';\nimport { BaseInputDirective } from '../../../components/base/base-input/base-input.directive';\nimport { SignalModelDirective } from '../../../directives/signal-model.directive';\nimport { type RuntimeColorSignalField } from '../../../models/signal-field-types.model';\n\n@Component({\n  selector: 'signal-form-color-field',\n  standalone: true,\n  imports: [SignalModelDirective],\n  templateUrl: './signal-form-color-field.component.html',\n  styleUrl: './signal-form-color-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SignalFormColorFieldComponent<\n  TModel extends object,\n  K extends keyof TModel,\n> extends BaseInputDirective<RuntimeColorSignalField<TModel, K>, TModel, K> {\n  private fallbackColor = '#000000';\n\n  protected currentColor = computed(\n    () => this.field().value() ?? this.fallbackColor,\n  );\n  protected isSwatchOnly = computed(() => {\n    return this.field().config?.view === 'swatch';\n  });\n\n  protected inputValue = computed(\n    () => this.field().value() ?? this.fallbackColor,\n  );\n\n  constructor() {\n    super();\n\n    effect(() => {\n      if (!CSS.supports('color', this.inputValue())) {\n        this.field().error.set('unsupported Color value!');\n      }\n    });\n  }\n\n  protected onTextInputChange(val: string): void {\n    this.setValue<string>(val);\n  }\n\n  protected onColorInputChange(event: Event): void {\n    const value = (event.target as HTMLInputElement).value;\n    this.setValue<string>(value);\n  }\n}\n","<div class=\"color-field-wrapper\">\n  @if (isSwatchOnly()) {\n    <label class=\"color-swatch\">\n      <input type=\"color\" class=\"sr-only\" [signalModel]=\"field()\" />\n      <span\n        class=\"swatch-display\"\n        [style.background]=\"currentColor()\"\n        aria-hidden=\"true\"\n      ></span>\n    </label>\n  } @else {\n    <div class=\"color-picker-full\">\n      <input type=\"color\" class=\"color-input\" [signalModel]=\"field()\" />\n\n      <input\n        type=\"text\"\n        class=\"hex-input\"\n        [value]=\"inputValue()\"\n        [attr.aria-label]=\"'Hex color code for ' + field().name\"\n        (input)=\"onTextInputChange($event.target.value)\"\n      />\n    </div>\n  }\n</div>\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { BaseInputDirective } from '../../../components/base/base-input/base-input.directive';\nimport { SignalModelDirective } from '../../../directives/signal-model.directive';\nimport { type RuntimeDateTimeSignalField } from '../../../models/signal-field-types.model';\n\n@Component({\n  selector: 'signal-form-datetime-field',\n  standalone: true,\n  imports: [SignalModelDirective],\n  templateUrl: './signal-form-datetime-field.component.html',\n  styleUrl: './signal-form-datetime-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SignalFormDatetimeFieldComponent<\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n> extends BaseInputDirective<RuntimeDateTimeSignalField<TModel, K>, TModel, K> {\n  protected formattedValue = computed(() => {\n    const date = this.field().value();\n    const format = this.field().config?.format;\n    const formatter = this.field().config?.formatterFn;\n\n    if (!date || !(date instanceof Date)) {\n      return '';\n    }\n\n    return formatter ? formatter(date) : this.defaultFormat(date, format);\n  });\n\n  private defaultFormat(date: Date, format?: string): string {\n    // fallback formatting – keep it native or simple\n    return date.toISOString().slice(0, 16); // e.g., '2025-06-19T12:34'\n  }\n\n  protected extractValue(el: HTMLInputElement): Date {\n    return new Date(el.value);\n  }\n}\n","<input class=\"form-input\" type=\"datetime-local\" [signalModel]=\"field()\" />\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  signal,\n} from '@angular/core';\nimport { BaseInputDirective } from '../../../components/base/base-input/base-input.directive';\nimport { SignalFormHostDirective } from '../../../components/base/host-directive/signal-form-host.directive';\nimport { SignalModelDirective } from '../../../directives/signal-model.directive';\nimport { type RuntimeFileSignalField } from '../../../models/signal-field-types.model';\n\n@Component({\n  selector: 'signal-form-file-field',\n  standalone: true,\n  imports: [SignalModelDirective],\n  templateUrl: './signal-form-file-field.component.html',\n  styleUrl: './signal-form-file-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  hostDirectives: [SignalFormHostDirective],\n})\nexport class SignalFormFileFieldComponent<\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n> extends BaseInputDirective<RuntimeFileSignalField<TModel, K>, TModel, K> {\n  protected isDragging = signal(false);\n  protected uploadProgress = signal<number | null>(null);\n  protected imagePreview = signal<string | null>(null);\n\n  private maxSizeBytes = computed(\n    () => (this.field().config?.maxSizeMb ?? 5) * 1024 * 1024,\n  );\n\n  protected isImageFile = computed(() => {\n    const file = this.field().value() as File;\n    return file && file.type.startsWith('image/');\n  });\n\n  protected fileName = computed(() => {\n    const file = this.field().value() as File;\n    return file?.name || '';\n  });\n\n  public onFileChange(event: Event): void {\n    const input = event.target as HTMLInputElement;\n    const file = input.files?.[0];\n    if (!file) {\n      return;\n    }\n\n    const maxSize = this.maxSizeBytes();\n    if (file.size > maxSize) {\n      this.field().error.set(\n        `File exceeds max size of ${this.field().config?.maxSizeMb ?? 5}MB`,\n      );\n      return;\n    }\n\n    this.field().error.set('');\n    this.setValue(file as TModel[K]);\n    this.uploadProgress.set(0);\n    this.simulateUpload(file);\n    this.field().touched.set(true);\n\n    if (file.type.startsWith('image/')) {\n      this.createImagePreview(file);\n    } else {\n      this.imagePreview.set(null);\n    }\n  }\n\n  private createImagePreview(file: File): void {\n    const reader = new FileReader();\n    reader.onload = (e) => {\n      this.imagePreview.set(e.target?.result as string);\n    };\n    reader.readAsDataURL(file);\n  }\n\n  private simulateUpload(file: File) {\n    let progress = 0;\n    const interval = setInterval(() => {\n      progress += 10;\n      this.uploadProgress.set(progress);\n\n      if (progress >= 100) {\n        clearInterval(interval);\n        this.uploadProgress.set(null);\n      }\n    }, 100);\n  }\n\n  public onDrop(event: DragEvent): void {\n    event.preventDefault();\n    this.isDragging.set(false);\n\n    const file = event.dataTransfer?.files?.[0];\n    if (file) {\n      const fakeEvent = {\n        target: { files: [file] },\n      } as any;\n      this.onFileChange(fakeEvent);\n    }\n  }\n\n  public onDragOver(event: DragEvent): void {\n    event.preventDefault();\n    this.isDragging.set(true);\n  }\n\n  public onDragLeave(): void {\n    this.isDragging.set(false);\n  }\n\n  public openFileDialog(input: HTMLInputElement): void {\n    input.click();\n  }\n\n  public removeFile(): void {\n    this.setValue(null as TModel[K]);\n    this.imagePreview.set(null);\n    this.field().touched.set(true);\n  }\n}\n","<div\n  class=\"file-upload-dropzone\"\n  role=\"button\"\n  [signalModel]=\"field()\"\n  [class.dragging]=\"isDragging()\"\n  [class.has-file]=\"!!field().value()\"\n  (drop)=\"onDrop($event)\"\n  (dragover)=\"onDragOver($event)\"\n  (dragleave)=\"onDragLeave()\"\n  (click)=\"openFileDialog(fileInput)\"\n  (keydown.enter)=\"openFileDialog(fileInput)\"\n  (keydown.space)=\"openFileDialog(fileInput); $event.preventDefault()\"\n>\n  @if (imagePreview()) {\n    <div class=\"image-preview-container\">\n      <img [src]=\"imagePreview()\" alt=\"Preview\" class=\"image-preview\" />\n      <button\n        type=\"button\"\n        class=\"remove-file-btn\"\n        (click)=\"removeFile(); $event.stopPropagation()\"\n        aria-label=\"Remove file\"\n      >\n        ✕\n      </button>\n    </div>\n  } @else if (field().value()) {\n    <div class=\"uploaded-file\">\n      <span class=\"file-name\">{{ fileName() }}</span>\n      <button\n        type=\"button\"\n        class=\"remove-file-btn\"\n        (click)=\"removeFile(); $event.stopPropagation()\"\n        aria-label=\"Remove file\"\n      >\n        ✕\n      </button>\n    </div>\n  } @else {\n    <div class=\"upload-icon\" aria-hidden=\"true\">☁️</div>\n    <div class=\"upload-text\">\n      {{ field().config?.uploadText || \"Click or drag a file to upload\" }}\n    </div>\n  }\n\n  <input\n    #fileInput\n    class=\"sr-only\"\n    type=\"file\"\n    [accept]=\"field().config?.accept || '*/*'\"\n    (change)=\"onFileChange($event)\"\n  />\n\n  @if (uploadProgress() !== null) {\n    <div\n      class=\"progress-bar\"\n      role=\"progressbar\"\n      [attr.aria-valuenow]=\"uploadProgress()\"\n      aria-valuemin=\"0\"\n      aria-valuemax=\"100\"\n    >\n      <div class=\"progress\" [style.width.%]=\"uploadProgress()\"></div>\n    </div>\n  }\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  effect,\n  inject,\n  signal,\n} from '@angular/core';\nimport { SignalModelDirective } from '../../../directives';\nimport {\n  type FormOption,\n  type RuntimeMultiSelectSignalField,\n} from '../../../models';\nimport { FormDropdownService } from '../../../services';\nimport { BaseInputDirective } from '../../base';\nimport { SignalFormHostDirective } from '../../base/host-directive/signal-form-host.directive';\n\n@Component({\n  selector: 'signal-form-multiselect-field',\n  standalone: true,\n  imports: [SignalModelDirective],\n  templateUrl: './signal-form-multiselect-field.component.html',\n  styleUrl: './signal-form-multiselect-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  hostDirectives: [SignalFormHostDirective],\n})\nexport class SignalFormMultiselectFieldComponent<\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n> extends BaseInputDirective<\n  RuntimeMultiSelectSignalField<TModel, K>,\n  TModel,\n  K\n> {\n  protected showDropdown = signal(false);\n\n  private readonly dropdownService = inject(FormDropdownService);\n  private readonly host = inject(SignalFormHostDirective);\n\n  constructor() {\n    super();\n    this.dropdownOverlayEffect();\n  }\n\n  private dropdownOverlayEffect(): void {\n    effect(\n      () => {\n        if (!this.showDropdown()) {\n          return;\n        }\n\n        const reference = this.host.viewContainerRef.element.nativeElement;\n\n        this.dropdownService.openDropdown<any>({\n          options: this.field().options(),\n          reference,\n          viewContainerRef: this.host.viewContainerRef,\n          multiselect: true,\n          ariaListboxId: `${String(this.field().name)}-listbox`,\n          initialSelection: this.field().value(),\n          onSelect: (selected: FormOption<TModel[K]>[]) => {\n            this.setValue(selected);\n            this.field().touched.set(true);\n          },\n          onClose: () => {\n            this.showDropdown.set(false);\n          },\n        });\n      },\n      {\n        injector: this.injector,\n      },\n    );\n  }\n\n  public removeChip(option: FormOption<TModel[K]>): void {\n    this.field().value.update((vals) =>\n      (vals ?? []).filter((o) => o.value !== option.value),\n    );\n    this.field().touched.set(true);\n  }\n\n  public toggleDropdown(): void {\n    this.showDropdown.update((show) => !show);\n  }\n}\n","<div\n  class=\"multi-select-wrapper\"\n  #multiselectWrapper\n  role=\"combobox\"\n  [signalModel]=\"field()\"\n  [attr.aria-expanded]=\"showDropdown()\"\n  [attr.aria-multiselectable]=\"true\"\n  [attr.aria-haspopup]=\"'listbox'\"\n  (keydown.enter)=\"toggleDropdown()\"\n>\n  <div\n    class=\"chip-list\"\n    role=\"list\"\n    [attr.aria-label]=\"'Selected ' + field().label + ' items'\"\n    (click)=\"toggleDropdown()\"\n  >\n    @for (item of field().value() ?? []; track item.value) {\n      <div class=\"chip\" role=\"listitem\">\n        {{ item.label }}\n        <button\n          type=\"button\"\n          class=\"remove-btn\"\n          (click)=\"removeChip(item); $event.stopPropagation()\"\n          (keydown.enter)=\"removeChip(item)\"\n          [attr.aria-label]=\"'Remove ' + item.label\"\n        >\n          ×\n        </button>\n      </div>\n    }\n  </div>\n\n  @if (!field().value()?.length) {\n    <div class=\"placeholder\">\n      {{ field().config?.placeholder }}\n    </div>\n  }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  OnInit,\n  signal,\n} from '@angular/core';\nimport { BaseInputDirective } from '../../../components/base/base-input/base-input.directive';\nimport { SignalModelDirective } from '../../../directives/signal-model.directive';\nimport { NumberInputType } from '../../../enums/number-input-type.enum';\nimport { type RuntimeNumberSignalField } from '../../../models/signal-field-types.model';\nimport { type UnitConversionConfig } from '../../../models/unit-conversion.model';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'signal-form-number-field',\n  standalone: true,\n  imports: [SignalModelDirective, CommonModule],\n  templateUrl: './signal-form-number-field.component.html',\n  styleUrl: './signal-form-number-field.component.scss',\n})\nexport class SignalFormNumberFieldComponent<\n    TModel extends object,\n    K extends keyof TModel = keyof TModel,\n  >\n  extends BaseInputDirective<RuntimeNumberSignalField<TModel, K>, TModel, K>\n  implements OnInit\n{\n  protected readonly NumberInputType = NumberInputType;\n  protected readonly currentUnit = signal<string>('');\n  protected readonly isEditing = signal<boolean>(false);\n\n  protected readonly inputType = computed(\n    () => this.field().config?.inputType ?? NumberInputType.STANDARD,\n  );\n\n  protected readonly hasUnitConversion = computed(\n    () =>\n      this.inputType() === NumberInputType.UNIT_CONVERSION &&\n      !!this.field().config?.unitConversions,\n  );\n\n  protected readonly unitConfig = computed(\n    (): UnitConversionConfig | null =>\n      this.field().config?.unitConversions ?? null,\n  );\n\n  protected readonly availableUnits = computed(() => {\n    const config = this.unitConfig();\n    return config\n      ? Object.keys(config.unitConversions).map((key) => ({\n          key,\n          ...config.unitConversions[key],\n        }))\n      : [];\n  });\n\n  protected readonly unitPosition = computed(\n    () => this.unitConfig()?.unitPosition ?? 'suffix',\n  );\n\n  protected readonly inputStep = computed(() => {\n    const config = this.field().config;\n    if (config?.step !== undefined) {\n      return config.step;\n    }\n\n    switch (this.inputType()) {\n      case NumberInputType.CURRENCY:\n        return 0.01;\n      case NumberInputType.PERCENTAGE:\n        return 0.1;\n      case NumberInputType.INTEGER:\n        return 1;\n      default:\n        return 'any';\n    }\n  });\n\n  protected readonly inputMin = computed(() => this.field().config?.min);\n  protected readonly inputMax = computed(() => this.field().config?.max);\n\n  protected readonly formattedValue = computed(() => {\n    const value = this.field().value();\n    if (value === null || value === undefined || isNaN(value)) {\n      return '';\n    }\n\n    const config = this.field().config;\n    const inputType = this.inputType();\n    const locale = config?.locale ?? 'en-US';\n\n    // Check for unit-specific parser first\n    if (this.hasUnitConversion()) {\n      const unitConfig = this.unitConfig();\n      const currentUnitKey = this.currentUnit();\n      const unitData = unitConfig?.unitConversions[currentUnitKey];\n      if (unitData?.parser) {\n        return unitData.parser(value);\n      }\n    }\n\n    // Check for field-level custom parser\n    if (config?.parser) {\n      return config.parser(value);\n    }\n\n    // Apply built-in formatting based on inputType\n    switch (inputType) {\n      case NumberInputType.CURRENCY:\n        const currencyCode = config?.currencyCode ?? 'USD';\n        return new Intl.NumberFormat(locale, {\n          style: 'currency',\n          currency: currencyCode,\n        }).format(value);\n\n      case NumberInputType.PERCENTAGE:\n        return new Intl.NumberFormat(locale, {\n          style: 'percent',\n          minimumFractionDigits: 1,\n        }).format(value / 100);\n\n      case NumberInputType.DECIMAL:\n        const fractionDigits = config?.decimalPlaces ?? 2;\n        return new Intl.NumberFormat(locale, {\n          minimumFractionDigits: fractionDigits,\n          maximumFractionDigits: fractionDigits,\n        }).format(value);\n\n      case NumberInputType.INTEGER:\n        return new Intl.NumberFormat(locale, {\n          maximumFractionDigits: 0,\n        }).format(value);\n\n      default:\n        return value.toString();\n    }\n  });\n\n  protected readonly showFormattedValue = computed(() => {\n    return (\n      this.inputType() !== NumberInputType.STANDARD &&\n      !this.isEditing() &&\n      !!this.field().value() &&\n      this.field().value() !== 0\n    );\n  });\n\n  protected readonly rawValue = computed(() => {\n    const value = this.field().value();\n    return value?.toString() ?? '';\n  });\n\n  protected onFocusFormattedDisplay(): void {\n    // Switch to raw input mode\n    this.isEditing.set(true);\n\n    // Use setTimeout to ensure the input is rendered before focusing\n    setTimeout(() => {\n      const input = document.querySelector(\n        '.form-input[type=\"number\"]',\n      ) as HTMLInputElement;\n      if (input) {\n        input.focus();\n        input.select(); // Select all text for easy editing\n      }\n    }, 0);\n  }\n\n  protected onBlurRawInput(): void {\n    // Switch back to formatted display mode with a small delay\n    // to prevent immediate blur when switching elements\n    setTimeout(() => {\n      this.isEditing.set(false);\n    }, 100);\n  }\n\n  public ngOnInit() {\n    // Initialize unit for unit conversion fields\n    if (this.hasUnitConversion()) {\n      const defaultUnit = this.unitConfig()?.defaultUnit;\n      if (defaultUnit) {\n        this.currentUnit.set(defaultUnit);\n      }\n    }\n  }\n\n  protected onUnitChange(newUnit: string): void {\n    if (!this.hasUnitConversion()) return;\n\n    const currentValue = this.field().value();\n    if (\n      currentValue === null ||\n      currentValue === undefined ||\n      isNaN(currentValue)\n    ) {\n      this.currentUnit.set(newUnit);\n      return;\n    }\n\n    const unitConfig = this.unitConfig();\n    if (!unitConfig) return;\n\n    const oldUnit = this.currentUnit();\n    const newUnitConverter = unitConfig.unitConversions[newUnit]?.convert;\n\n    if (newUnitConverter && oldUnit !== newUnit) {\n      const convertedValue = newUnitConverter(currentValue, oldUnit);\n\n      // Apply precision rounding if specified\n      const precision = unitConfig.precision ?? 2;\n      const roundedValue =\n        Math.round(convertedValue * Math.pow(10, precision)) /\n        Math.pow(10, precision);\n\n      this.field().value.set(roundedValue);\n      this.currentUnit.set(newUnit);\n    }\n  }\n\n  protected extractValue(el: HTMLInputElement): number {\n    const raw = el.value;\n    const parsed = parseFloat(raw);\n    return isNaN(parsed) ? 0 : parsed;\n  }\n}\n","<div class=\"form-input-wrapper\">\n  <!-- Unit dropdown (prefix position) -->\n  @if (hasUnitConversion() && unitPosition() === \"prefix\") {\n    <select\n      class=\"form-select form-select-unit form-select-prefix\"\n      [value]=\"currentUnit()\"\n      (change)=\"onUnitChange($any($event.target).value)\"\n    >\n      @for (unit of availableUnits(); track unit.key) {\n        <option [value]=\"unit.key\">{{ unit.label }}</option>\n      }\n    </select>\n  }\n\n  <!-- Number input with conditional formatting -->\n  @if (showFormattedValue()) {\n    <!-- Show formatted value when not focused -->\n    <div\n      class=\"form-input form-input-formatted\"\n      tabindex=\"0\"\n      (focus)=\"onFocusFormattedDisplay()\"\n      (click)=\"onFocusFormattedDisplay()\"\n    >\n      {{ formattedValue() }}\n    </div>\n  } @else {\n    <!-- Show raw input when focused or no formatting needed -->\n    <input\n      type=\"number\"\n      class=\"form-input\"\n      [signalModel]=\"field()\"\n      [step]=\"inputStep()\"\n      [min]=\"inputMin()\"\n      [max]=\"inputMax()\"\n      (blur)=\"onBlurRawInput()\"\n    />\n  }\n\n  <!-- Unit dropdown (suffix position) -->\n  @if (hasUnitConversion() && unitPosition() === \"suffix\") {\n    <select\n      class=\"form-select form-select-unit form-select-suffix\"\n      [value]=\"currentUnit()\"\n      (change)=\"onUnitChange($any($event.target).value)\"\n    >\n      @for (unit of availableUnits(); track unit.key) {\n        <option [value]=\"unit.key\">{{ unit.label }}</option>\n      }\n    </select>\n  }\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { BaseInputDirective } from '../../../components/base/base-input/base-input.directive';\nimport { SignalModelDirective } from '../../../directives/signal-model.directive';\nimport { type RuntimePasswordSignalField } from '../../../models/signal-field-types.model';\n\n@Component({\n  selector: 'signal-form-password-field',\n  standalone: true,\n  imports: [SignalModelDirective],\n  templateUrl: './signal-form-password-field.component.html',\n  styleUrl: './signal-form-password-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SignalFormPasswordFieldComponent<\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n> extends BaseInputDirective<\n  RuntimePasswordSignalField<TModel, K>,\n  TModel,\n  K\n> {}\n","<div class=\"form-input-wrapper\">\n  <input class=\"form-input\" type=\"password\" [signalModel]=\"field()\" />\n</div>\n","import { NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Type } from '@angular/core';\nimport { type LucideIconData, LucideAngularModule } from 'lucide-angular';\nimport { BaseInputDirective } from '../../../components/base/base-input/base-input.directive';\nimport { SignalModelDirective } from '../../../directives/signal-model.directive';\nimport { type RuntimeRadioSignalField } from '../../../models/signal-field-types.model';\n\n@Component({\n  selector: 'signal-form-radio-field',\n  standalone: true,\n  imports: [SignalModelDirective, NgComponentOutlet, LucideAngularModule],\n  templateUrl: './signal-form-radio-field.component.html',\n  styleUrl: './signal-form-radio-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SignalFormRadioFieldComponent<\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n> extends BaseInputDirective<RuntimeRadioSignalField<TModel, K>, TModel, K> {\n  /**\n   * Convert option value to string for radio input value attribute\n   */\n  valueToString(value: TModel[K]): string {\n    return String(value);\n  }\n\n  /**\n   * Check if any options have icons to determine layout style\n   */\n  hasIcons(): boolean {\n    return this.field()\n      .options()\n      .some((option) => option.icon);\n  }\n\n  /**\n   * Check if an option is currently selected\n   */\n  isOptionSelected(optionValue: TModel[K]): boolean {\n    return this.field().value() === optionValue;\n  }\n\n  /**\n   * Check if icon is a Lucide icon data (prioritized check)\n   */\n  isLucideIcon(\n    icon: string | Type<unknown> | LucideIconData,\n  ): icon is LucideIconData {\n    return Array.isArray(icon) && icon.length > 0;\n  }\n\n  /**\n   * Check if icon is a string (emoji/unicode)\n   */\n  isStringIcon(icon: string | Type<unknown> | LucideIconData): icon is string {\n    return typeof icon === 'string';\n  }\n\n  /**\n   * Check if icon is a component type (fallback)\n   */\n  isComponentIcon(\n    icon: string | Type<unknown> | LucideIconData,\n  ): icon is Type<unknown> {\n    return typeof icon === 'function' && !this.isLucideIcon(icon);\n  }\n}\n","<fieldset\n  class=\"form-radio-group\"\n  role=\"radiogroup\"\n  [attr.name]=\"field().name\"\n  [attr.aria-invalid]=\"field().error() ? 'true' : 'false'\"\n  [class.card-style]=\"hasIcons()\"\n>\n  <legend class=\"sr-only\">{{ field().label }}</legend>\n\n  @for (option of field().options(); track option.value) {\n    <label class=\"form-radio-option\" [class.card-option]=\"hasIcons()\">\n      <input\n        type=\"radio\"\n        [signalModel]=\"field()\"\n        [value]=\"valueToString(option.value)\"\n        [checked]=\"isOptionSelected(option.value)\"\n        [attr.name]=\"field().name\"\n        class=\"radio-input\"\n      />\n\n      @if (hasIcons()) {\n        <div class=\"card-content\">\n          <div class=\"radio-indicator\"></div>\n          @if (option.icon) {\n            <div class=\"option-icon\">\n              @if (isLucideIcon(option.icon)) {\n                <lucide-icon [img]=\"option.icon\" size=\"32\" />\n              } @else if (isStringIcon(option.icon)) {\n                {{ option.icon }}\n              } @else if (isComponentIcon(option.icon)) {\n                <ng-container *ngComponentOutlet=\"option.icon\"></ng-container>\n              }\n            </div>\n          }\n          <span class=\"option-label\">{{ option.label }}</span>\n        </div>\n      } @else {\n        {{ option.label }}\n      }\n    </label>\n  }\n</fieldset>\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { BaseInputDirective } from '../../../components/base/base-input/base-input.directive';\nimport { SignalModelDirective } from '../../../directives/signal-model.directive';\nimport { type RuntimeRatingSignalField } from '../../../models/signal-field-types.model';\n\n@Component({\n  selector: 'signal-form-rating-field',\n  standalone: true,\n  imports: [SignalModelDirective],\n  templateUrl: './signal-form-rating-field.component.html',\n  styleUrl: './signal-form-rating-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SignalFormRatingFieldComponent<\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n> extends BaseInputDirective<RuntimeRatingSignalField<TModel, K>, TModel, K> {\n  protected minValue = computed(() => this.field().config?.min ?? 1);\n  protected maxValue = computed(() => this.field().config?.max ?? 5);\n\n  protected stars = computed(() => {\n    const min = this.minValue();\n    const max = this.maxValue();\n    return Array.from({ length: max - min + 1 }, (_, i) => min + i);\n  });\n\n  public setRating(star: number): void {\n    this.setValue(star as TModel[K]);\n    this.field().touched.set(true);\n  }\n}\n","<div class=\"form-rating\" role=\"radiogroup\" [signalModel]=\"field()\">\n  <div class=\"rating-stars\">\n    @for (star of stars(); track star) {\n      <button\n        class=\"star\"\n        type=\"button\"\n        role=\"radio\"\n        [class.filled]=\"field().value() >= star\"\n        [attr.aria-label]=\"'Rate ' + star + ' star'\"\n        [attr.aria-checked]=\"field().value() === star\"\n        (click)=\"setRating(star)\"\n      >\n        ★\n      </button>\n    }\n  </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/**\n * Base skeleton component for form fields\n */\n@Component({\n  selector: 'form-field-skeleton',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  templateUrl: './form-field-skeleton.component.html',\n  styleUrl: './form-field-skeleton.component.scss',\n})\nexport class FormFieldSkeletonComponent {\n  /**\n   * The field name for accessibility\n   */\n  public name = input<string>('field');\n\n  /**\n   * The type of skeleton to render\n   */\n  public skeletonType = input<\n    | 'input'\n    | 'textarea'\n    | 'select'\n    | 'checkbox'\n    | 'radio-group'\n    | 'multiselect'\n    | 'rating'\n    | 'slider'\n    | 'file'\n  >('input');\n\n  /**\n   * Whether this is a checkbox field (affects label positioning)\n   */\n  public isCheckbox = input<boolean>(false);\n}\n","<div class=\"form-control\" [attr.data-form-field]=\"name()\">\n  @if (!isCheckbox()) {\n    <div class=\"skeleton-label\"></div>\n  }\n\n  @switch (skeletonType()) {\n    @case (\"input\") {\n      <div class=\"skeleton-input\"></div>\n    }\n    @case (\"textarea\") {\n      <div class=\"skeleton-textarea\"></div>\n    }\n    @case (\"select\") {\n      <div class=\"skeleton-select\">\n        <div class=\"skeleton-select-arrow\"></div>\n      </div>\n    }\n    @case (\"checkbox\") {\n      <div class=\"skeleton-checkbox-wrapper\">\n        <div class=\"skeleton-checkbox\"></div>\n        <div class=\"skeleton-checkbox-label\"></div>\n      </div>\n    }\n    @case (\"radio-group\") {\n      <div class=\"skeleton-radio-group\">\n        @for (i of [1, 2, 3]; track i) {\n          <div class=\"skeleton-radio-option\">\n            <div class=\"skeleton-radio\"></div>\n            <div class=\"skeleton-radio-label\"></div>\n          </div>\n        }\n      </div>\n    }\n    @case (\"multiselect\") {\n      <div class=\"skeleton-multiselect\">\n        <div class=\"skeleton-chip-container\">\n          @for (i of [1, 2]; track i) {\n            <div class=\"skeleton-chip\"></div>\n          }\n        </div>\n      </div>\n    }\n    @case (\"rating\") {\n      <div class=\"skeleton-rating\">\n        @for (i of [1, 2, 3, 4, 5]; track i) {\n          <div class=\"skeleton-star\"></div>\n        }\n      </div>\n    }\n    @case (\"slider\") {\n      <div class=\"skeleton-slider\">\n        <div class=\"skeleton-slider-track\">\n          <div class=\"skeleton-slider-thumb\"></div>\n        </div>\n      </div>\n    }\n    @case (\"file\") {\n      <div class=\"skeleton-file-upload\">\n        <div class=\"skeleton-upload-icon\"></div>\n        <div class=\"skeleton-upload-text\"></div>\n      </div>\n    }\n    @default {\n      <div class=\"skeleton-input\"></div>\n    }\n  }\n\n  <div class=\"skeleton-hint\"></div>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n} from '@angular/core';\nimport { FormFieldType } from '../../../enums/form-field-type.enum';\nimport { FormFieldSkeletonComponent } from './form-field-skeleton.component';\n\n/**\n * Maps form field types to appropriate skeleton UI\n */\n@Component({\n  selector: 'form-field-skeleton-mapper',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [FormFieldSkeletonComponent],\n  template: `\n    <form-field-skeleton\n      [name]=\"fieldName()\"\n      [skeletonType]=\"skeletonType()\"\n      [isCheckbox]=\"isCheckboxType()\"\n    />\n  `,\n})\nexport class FormFieldSkeletonMapperComponent {\n  /**\n   * The form field type to create skeleton for\n   */\n  public fieldType = input.required<FormFieldType>();\n\n  /**\n   * The field name for accessibility\n   */\n  public fieldName = input<string>('field');\n\n  /**\n   * Computed skeleton type based on field type\n   */\n  protected skeletonType = computed(() => {\n    const type = this.fieldType();\n\n    switch (type) {\n      case FormFieldType.TEXT:\n      case FormFieldType.PASSWORD:\n      case FormFieldType.NUMBER:\n      case FormFieldType.COLOR:\n      case FormFieldType.DATETIME:\n        return 'input';\n\n      case FormFieldType.TEXTAREA:\n        return 'textarea';\n\n      case FormFieldType.SELECT:\n      case FormFieldType.AUTOCOMPLETE:\n        return 'select';\n\n      case FormFieldType.CHECKBOX:\n        return 'checkbox';\n\n      case FormFieldType.CHECKBOX_GROUP:\n      case FormFieldType.RADIO:\n        return 'radio-group';\n\n      case FormFieldType.MULTISELECT:\n      case FormFieldType.CHIPLIST:\n        return 'multiselect';\n\n      case FormFieldType.RATING:\n        return 'rating';\n\n      case FormFieldType.SLIDER:\n        return 'slider';\n\n      case FormFieldType.FILE:\n        return 'file';\n\n      case FormFieldType.SWITCH:\n        return 'checkbox';\n\n      default:\n        return 'input';\n    }\n  });\n\n  /**\n   * Whether this is a checkbox-style field\n   */\n  protected isCheckboxType = computed(() => {\n    const type = this.fieldType();\n    return type === FormFieldType.CHECKBOX || type === FormFieldType.SWITCH;\n  });\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  HostBinding,\n  inject,\n  Injector,\n  input,\n  Renderer2,\n  signal,\n  ViewEncapsulation,\n  WritableSignal,\n} from '@angular/core';\nimport { SignalFormHostDirective } from '../../../components/base/host-directive/signal-form-host.directive';\nimport { FormFieldSkeletonMapperComponent } from '../../../components/ui/skeletons/form-field-skeleton-mapper.component';\nimport { FormFieldType } from '../../../enums/form-field-type.enum';\nimport { isRequired } from '../../../helpers/is-required';\nimport {\n  type SignalFormContainer,\n  type SignalFormField,\n} from '../../../models/signal-form.model';\nimport { ValidationService } from '../../../services/validation.service';\nimport {\n  SignalFormAutocompleteFieldComponent,\n  SignalFormCheckboxFieldComponent,\n  SignalFormCheckboxGroupFieldComponent,\n  SignalFormChipListFieldComponent,\n  SignalFormColorFieldComponent,\n  SignalFormDatetimeFieldComponent,\n  SignalFormFileFieldComponent,\n  SignalFormMultiselectFieldComponent,\n  SignalFormNumberFieldComponent,\n  SignalFormPasswordFieldComponent,\n  SignalFormRadioFieldComponent,\n  SignalFormRatingFieldComponent,\n  SignalFormSelectFieldComponent,\n  SignalFormSliderFieldComponent,\n  SignalFormSwitchFieldComponent,\n  SignalFormTextareaFieldComponent,\n  SignalFormTextFieldComponent,\n} from '../../fields';\n\n/**\n * Signal Form Input Item Component\n *\n * Renders individual form fields with support for custom styling, validation,\n * and various field types. This component handles the wrapper, label, input,\n * error messages, and hint text for each field.\n *\n * Features:\n * - Custom styling via modifierClass, stylesFn, and inlineStylesFn\n * - Dynamic validation state styling\n * - Part-specific styling (wrapper, label, input, error, hint)\n * - Reactive computed values\n * - Focus management and error highlighting\n * - ViewEncapsulation.None for external styling support\n *\n * @template TModel - The type of the form model this field belongs to\n */\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  selector: 'signal-form-input-item',\n  imports: [\n    CommonModule,\n    SignalFormAutocompleteFieldComponent,\n    SignalFormTextFieldComponent,\n    SignalFormPasswordFieldComponent,\n    SignalFormTextareaFieldComponent,\n    SignalFormNumberFieldComponent,\n    SignalFormSelectFieldComponent,\n    SignalFormRadioFieldComponent,\n    SignalFormCheckboxFieldComponent,\n    SignalFormCheckboxGroupFieldComponent,\n    SignalFormDatetimeFieldComponent,\n    SignalFormColorFieldComponent,\n    SignalFormSwitchFieldComponent,\n    SignalFormSliderFieldComponent,\n    SignalFormFileFieldComponent,\n    SignalFormRatingFieldComponent,\n    SignalFormMultiselectFieldComponent,\n    SignalFormChipListFieldComponent,\n    FormFieldSkeletonMapperComponent,\n  ],\n  hostDirectives: [SignalFormHostDirective],\n  templateUrl: './signal-form-input-item.component.html',\n  styleUrl: './signal-form-input-item.component.scss',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class SignalFormInputItemComponent<TModel> {\n  /** The field configuration and state for this input item */\n  public field = input.required<SignalFormField<TModel>>();\n\n  /** The parent form container that this field belongs to */\n  public form = input.required<SignalFormContainer<TModel>>();\n\n  /** Optional index for repeatable fields (used in field naming) */\n  public index = input<number | null>();\n\n  /** Form field type constants for template use */\n  protected readonly FormFieldType = FormFieldType;\n\n  /** Tracks whether the component has been initialized with computed values */\n  private initialized = signal(false);\n\n  /** Service for handling field validation */\n  private validationService = inject(ValidationService);\n\n  /**\n   * Computed name for the field, including index if applicable\n   * Used for HTML id, for attributes, and accessibility\n   */\n  protected name = computed(() => {\n    if (typeof this.index() === 'number') {\n      return `${String(this.field().name)}-${this.index()}`;\n    }\n    return `${String(this.field().name)}`;\n  });\n\n  /**\n   * Grid area binding for CSS Grid layouts\n   * Uses the field name as the grid area identifier\n   */\n  @HostBinding('style.gridArea')\n  get gridArea(): string | null {\n    return this.field()?.name?.toString() ?? null;\n  }\n\n  /**\n   * Host class binding that applies wrapper-level styling\n   * Combines static modifier classes and dynamic styling functions\n   * as well as theme based classes too\n   */\n  @HostBinding('class')\n  get hostClasses(): string {\n    return this.computeWrapperClasses();\n  }\n\n  /**\n   * Host style binding that applies wrapper-level inline styles\n   * Uses the inlineStylesFn to generate dynamic styles\n   */\n  @HostBinding('style')\n  get hostStyles(): { [key: string]: string } {\n    return this.computeWrapperStyles();\n  }\n\n  /**\n   * Computes CSS classes for the field wrapper element\n   * Handles static modifierClass and dynamic stylesFn results\n   *\n   * @returns Space-separated string of CSS classes\n   * @private\n   */\n  private computeWrapperClasses(): string {\n    const classes: string[] = [];\n    const field = this.field();\n    const styling = field.styling;\n\n    if (!styling) {\n      return '';\n    }\n\n    if (styling.modifierClass) {\n      classes.push(...styling.modifierClass);\n    }\n\n    if (!styling.stylesFn) {\n      return classes.join(' ');\n    }\n\n    const result = styling.stylesFn(field, this.form());\n\n    if (typeof result === 'string') {\n      classes.push(result);\n      return classes.join(' ');\n    }\n\n    if (Array.isArray(result)) {\n      classes.push(...result);\n      return classes.join(' ');\n    }\n\n    if (result && typeof result === 'object') {\n      const wrapperClasses = result.wrapper;\n      if (typeof wrapperClasses === 'string') {\n        classes.push(wrapperClasses);\n      } else if (Array.isArray(wrapperClasses)) {\n        classes.push(...wrapperClasses);\n      }\n    }\n\n    return classes.join(' ');\n  }\n\n  /**\n   * Computes inline styles for the field wrapper element\n   *\n   * @returns Object containing CSS property-value pairs\n   * @private\n   */\n  private computeWrapperStyles(): { [key: string]: string } {\n    const field = this.field();\n    const styling = field.styling;\n\n    if (!styling?.inlineStylesFn) {\n      return {};\n    }\n\n    const result = styling.inlineStylesFn(field, this.form());\n    return result.wrapper || {};\n  }\n\n  /**\n   * Extracts CSS classes for specific field parts (label, input, error, hint)\n   *\n   * @param part - The field part to get classes for\n   * @returns Space-separated string of CSS classes for the specified part\n   * @private\n   */\n  private getPartClasses(part: 'label' | 'input' | 'error' | 'hint'): string {\n    const styling = this.field().styling;\n\n    if (!styling?.stylesFn) {\n      return '';\n    }\n\n    const result = styling.stylesFn(this.field(), this.form());\n\n    if (!result || typeof result !== 'object' || Array.isArray(result)) {\n      return '';\n    }\n\n    const partClasses = result[part];\n\n    if (typeof partClasses === 'string') {\n      return partClasses;\n    }\n\n    if (Array.isArray(partClasses)) {\n      return partClasses.join(' ');\n    }\n\n    return '';\n  }\n\n  /**\n   * Extracts inline styles for specific field parts (label, input, error, hint)\n   *\n   * @param part - The field part to get styles for\n   * @returns Object containing CSS property-value pairs for the specified part\n   * @private\n   */\n  private getPartStyles(part: 'label' | 'input' | 'error' | 'hint'): {\n    [key: string]: string;\n  } {\n    const styling = this.field().styling;\n\n    if (!styling?.inlineStylesFn) {\n      return {};\n    }\n\n    const result = styling.inlineStylesFn(this.field(), this.form());\n    return result[part] || {};\n  }\n\n  /** Computed CSS classes for the field label */\n  protected labelClasses = computed(() => this.getPartClasses('label'));\n\n  /** Computed CSS classes for the field input wrapper */\n  protected inputClasses = computed(() => this.getPartClasses('input'));\n\n  /** Computed CSS classes for the field error message */\n  protected errorClasses = computed(() => this.getPartClasses('error'));\n\n  /** Computed CSS classes for the field hint text */\n  protected hintClasses = computed(() => this.getPartClasses('hint'));\n\n  /** Computed inline styles for the field label */\n  protected labelStyles = computed(() => this.getPartStyles('label'));\n\n  /** Computed inline styles for the field input wrapper */\n  protected inputStyles = computed(() => this.getPartStyles('input'));\n\n  /** Computed inline styles for the field error message */\n  protected errorStyles = computed(() => this.getPartStyles('error'));\n\n  /** Computed inline styles for the field hint text */\n  protected hintStyles = computed(() => this.getPartStyles('hint'));\n\n  /**\n   * Component constructor\n   * Initializes all reactive effects for computed values, validation, and focus management\n   *\n   * @param renderer - Angular Renderer2 for DOM manipulation\n   * @param host - Reference to the component's host element\n   * @param injector - Angular injector for effect contexts\n   */\n  constructor(\n    private readonly renderer: Renderer2,\n    private readonly host: ElementRef,\n    private readonly injector: Injector,\n  ) {\n    this.initializeComputedValueEffect();\n    this.initializeFormOptionsEffect();\n    this.watchComputedValueEffect();\n    this.setupValidation();\n    this.focusEffect();\n  }\n\n  /**\n   * Determines if the field is required based on its validators\n   *\n   * @returns True if the field has required validators\n   * @protected\n   */\n  protected isRequired(): boolean {\n    return isRequired({ validators: this.field().validators });\n  }\n\n  /**\n   * Computed property that returns the combined error message for the field\n   * Combines synchronous and asynchronous validation errors\n   */\n  protected hasError = computed(() => {\n    const field = this.field();\n    return this.validationService.getCombinedError(field);\n  });\n\n  /**\n   * Computed property that determines if the field is currently validating\n   * Checks for async validation in progress\n   */\n  protected isValidating = computed(() => {\n    const field = this.field();\n\n    // Check if field has validating property (not all field types have async validation)\n    if (\n      'validating' in field &&\n      typeof (field as any).validating === 'function'\n    ) {\n      return (field as any).validating();\n    }\n\n    // For fields without async validation, they're never validating\n    return false;\n  });\n\n  /**\n   * Placeholder for form options initialization\n   * Reserved for future functionality\n   *\n   * @private\n   */\n  private initializeFormOptionsEffect(): void {}\n\n  /**\n   * Effect that initializes computed field values on component setup\n   * Runs once when the component first loads if the field has a computedValue function\n   *\n   * @private\n   */\n  private initializeComputedValueEffect(): void {\n    effect(\n      () => {\n        const field = this.field();\n        if (!field.computedValue || this.initialized()) return;\n\n        const initialValue = field.computedValue(this.form());\n        this.setValue(initialValue, false);\n        this.initialized.set(true);\n      },\n      { injector: this.injector },\n    );\n  }\n\n  /**\n   * Effect that watches for changes to computed field values\n   * Updates the field value when the computed value function result changes\n   *\n   * @private\n   */\n  private watchComputedValueEffect(): void {\n    effect(\n      () => {\n        const field = this.field();\n        if (!field.computedValue || !this.initialized()) return;\n\n        const newValue = field.computedValue(this.form());\n        this.setValue(newValue, false);\n      },\n      { injector: this.injector },\n    );\n  }\n\n  /**\n   * Effect that sets up validation for the field\n   * Configures validation triggers, debouncing, and async validation\n   *\n   * @private\n   */\n  private setupValidation(): void {\n    effect(\n      () => {\n        const field = this.field();\n        const form = this.form();\n\n        // Set up validation for this field\n        this.validationService.setupFieldValidation(field, form);\n      },\n      { injector: this.injector },\n    );\n  }\n\n  /**\n   * Effect that handles field focus behavior\n   * Scrolls to and highlights fields when focus is requested,\n   * typically when navigating to validation errors\n   *\n   * @private\n   */\n  private focusEffect(): void {\n    effect(\n      () => {\n        const field = this.field();\n\n        if (!field.focus()) {\n          return;\n        }\n\n        const el = this.host.nativeElement;\n        el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n        const input = el.querySelector('input');\n        input?.focus?.();\n\n        this.renderer.addClass(el, 'form-error-highlight');\n\n        setTimeout(() => {\n          this.renderer.removeClass(el, 'form-error-highlight');\n          this.field().focus.set(false);\n        }, 1000);\n      },\n      { injector: this.injector },\n    );\n  }\n\n  /**\n   * Computed property that determines if the field should be hidden\n   * Supports both boolean and function-based hidden conditions\n   */\n  protected isHidden = computed<boolean>(() => {\n    const { hidden } = this.field();\n    return typeof hidden === 'function' ? hidden(this.form()) : !!hidden;\n  });\n\n  /**\n   * Computed property that determines if the field should be disabled\n   * Supports both boolean and function-based disabled conditions\n   */\n  protected isDisabled = computed<boolean>(() => {\n    const { disabled } = this.field();\n    return typeof disabled === 'function' ? disabled(this.form()) : !!disabled;\n  });\n\n  /**\n   * Sets the field value with proper type handling\n   * Handles different value types (string, number, boolean, Date, object)\n   * and updates the field's touched and dirty states\n   *\n   * @param value - The value to set on the field\n   * @param markTouched - Whether to mark the field as touched and dirty (default: true)\n   * @private\n   */\n  private setValue(value: TModel[keyof TModel], markTouched: boolean = true) {\n    if (markTouched) {\n      this.field().touched.set(true);\n      this.field().dirty.set(true);\n    }\n\n    if (typeof value === 'number') {\n      (this.field().value as unknown as WritableSignal<number>).set(value);\n      return;\n    }\n    if (typeof value === 'boolean') {\n      (this.field().value as unknown as WritableSignal<boolean>).set(value);\n      return;\n    }\n    if (value instanceof Date) {\n      (this.field().value as unknown as WritableSignal<Date>).set(value);\n      return;\n    }\n    if (typeof value === 'object' && !!value) {\n      (this.field().value as unknown as WritableSignal<object>).set(value);\n      return;\n    }\n\n    const val = value as string;\n    (this.field().value as unknown as WritableSignal<string>).set(val);\n  }\n}\n","@if (!isHidden()) {\n  <div\n    class=\"form-control\"\n    [class.has-error]=\"hasError()\"\n    [class.is-validating]=\"isValidating()\"\n    [class.is-success]=\"!hasError() && !isValidating() && field().value()\"\n    [attr.data-form-field]=\"name()\"\n    #formControl\n  >\n    @defer (on viewport(formControl)) {\n      @if (field().type !== FormFieldType.CHECKBOX) {\n        <label\n          class=\"form-label\"\n          [class]=\"labelClasses()\"\n          [ngStyle]=\"labelStyles()\"\n          [for]=\"name()\"\n        >\n          {{ field().label }}\n          @if (isRequired()) {\n            <span class=\"required-asterisk\">*</span>\n          }\n          @if (isValidating()) {\n            <span class=\"validation-spinner\">⟳</span>\n          }\n        </label>\n      }\n\n      <div\n        class=\"form-field-wrapper\"\n        [class]=\"inputClasses()\"\n        [ngStyle]=\"inputStyles()\"\n      >\n        @switch (field().type) {\n          @case (FormFieldType.TEXT) {\n            <signal-form-text-field [field]=\"field()\" />\n          }\n          @case (FormFieldType.PASSWORD) {\n            <signal-form-password-field [field]=\"field()\" />\n          }\n          @case (FormFieldType.CHECKBOX) {\n            <signal-form-checkbox-field [field]=\"field()\" />\n          }\n          @case (FormFieldType.CHECKBOX_GROUP) {\n            <signal-form-checkbox-group-field [field]=\"field()\" />\n          }\n          @case (FormFieldType.NUMBER) {\n            <signal-form-number-field [field]=\"field()\" />\n          }\n          @case (FormFieldType.AUTOCOMPLETE) {\n            <signal-form-autocomplete-field [field]=\"field()\" />\n          }\n          @case (FormFieldType.TEXTAREA) {\n            <signal-form-textarea-field [field]=\"field()\" />\n          }\n          @case (FormFieldType.SELECT) {\n            <signal-form-select-field [field]=\"field()\" />\n          }\n          @case (FormFieldType.RADIO) {\n            <signal-form-radio-field [field]=\"field()\" />\n          }\n          @case (FormFieldType.DATETIME) {\n            <signal-form-datetime-field [field]=\"field()\" />\n          }\n          @case (FormFieldType.MULTISELECT) {\n            <signal-form-multiselect-field [field]=\"field()\" />\n          }\n          @case (FormFieldType.CHIPLIST) {\n            <signal-form-chip-list-field [field]=\"field()\" />\n          }\n          @case (FormFieldType.FILE) {\n            <signal-form-file-field [field]=\"field()\" />\n          }\n          @case (FormFieldType.COLOR) {\n            <signal-form-color-field [field]=\"field()\" />\n          }\n          @case (FormFieldType.RATING) {\n            <signal-form-rating-field [field]=\"field()\" />\n          }\n          @case (FormFieldType.SLIDER) {\n            <signal-form-slider-field [field]=\"field()\" />\n          }\n          @case (FormFieldType.SWITCH) {\n            <signal-form-switch-field [field]=\"field()\" />\n          }\n        }\n      </div>\n\n      <div class=\"form-caption\">\n        @if (hasError()) {\n          <span\n            class=\"form-error\"\n            [class]=\"errorClasses()\"\n            [ngStyle]=\"errorStyles()\"\n            role=\"alert\"\n            [id]=\"'error-' + name()\"\n          >\n            {{ hasError() }}\n          </span>\n        } @else if (isValidating()) {\n          <span\n            class=\"form-validating\"\n            role=\"status\"\n            [id]=\"'validating-' + name()\"\n          >\n            Validating...\n          </span>\n        } @else if (field().config?.hint) {\n          <span\n            class=\"form-hint\"\n            [class]=\"hintClasses()\"\n            [ngStyle]=\"hintStyles()\"\n            role=\"alert\"\n            [id]=\"'hint-' + name()\"\n          >\n            {{ field().config.hint }}\n          </span>\n        }\n      </div>\n    } @loading (minimum 100ms) {\n      <form-field-skeleton-mapper\n        [fieldType]=\"field().type\"\n        [fieldName]=\"name()\"\n      />\n    } @placeholder {\n      <form-field-skeleton-mapper\n        [fieldType]=\"field().type\"\n        [fieldName]=\"name()\"\n      />\n    }\n  </div>\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  output,\n} from '@angular/core';\nimport {\n  LucideAngularModule,\n  MinusCircleIcon,\n  PlusCircleIcon,\n} from 'lucide-angular';\nimport {\n  type SignalFormContainer,\n  type SignalFormField,\n} from '../../../models/signal-form.model';\nimport { SignalFormInputItemComponent } from '../../renderers/signal-form-input-item/signal-form-input-item.component';\n\n@Component({\n  selector: 'signal-form-repeatable-field',\n  standalone: true,\n  imports: [SignalFormInputItemComponent, LucideAngularModule],\n  templateUrl: './signal-form-repeatable-field.component.html',\n  styleUrl: './signal-form-repeatable-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SignalFormRepeatableFieldComponent<TModel> {\n  public repeatableForms = input.required<SignalFormContainer<unknown>[]>();\n  public heading = input<string>('');\n  public fields = input.required<SignalFormField<TModel>[]>();\n\n  public addItem = output<void>();\n  public removeItem = output<number>();\n\n  protected formsList = computed(() => this.repeatableForms());\n  protected readonly plus = PlusCircleIcon;\n  protected readonly minus = MinusCircleIcon;\n}\n","<section class=\"repeatable-form-group\">\n  <h3 class=\"form-group-heading\">{{ heading() }}</h3>\n\n  @for (groupForm of repeatableForms(); track $index; let i = $index) {\n    <section class=\"repeatable-forms-row-container\">\n      <section class=\"repeatable-forms-row\">\n        @for (field of groupForm.fields; track $index; let j = $index) {\n          <signal-form-input-item\n            [field]=\"field\"\n            [form]=\"groupForm\"\n            [index]=\"i\"\n          />\n        }\n      </section>\n      <aside class=\"repeatable-forms-actions-container\">\n        <lucide-icon\n          class=\"row-action\"\n          [img]=\"minus\"\n          [size]=\"16\"\n          (click)=\"removeItem.emit(i)\"\n          (keydown.enter)=\"removeItem.emit(i)\"\n          tabindex=\"0\"\n        />\n        <lucide-icon\n          class=\"row-action\"\n          [img]=\"plus\"\n          [size]=\"16\"\n          (click)=\"addItem.emit()\"\n          (keydown.enter)=\"addItem.emit()\"\n          tabindex=\"0\"\n        />\n      </aside>\n    </section>\n  } @empty {\n    <lucide-icon\n      class=\"row-action\"\n      [img]=\"plus\"\n      [size]=\"16\"\n      (click)=\"addItem.emit()\"\n      (keydown.enter)=\"addItem.emit()\"\n      tabindex=\"0\"\n    />\n  }\n</section>\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  signal,\n} from '@angular/core';\nimport { SignalModelDirective } from '../../../directives/signal-model.directive';\nimport { type RuntimeSelectSignalField } from '../../../models/signal-field-types.model';\nimport { type FormOption } from '../../../models/signal-form.model';\nimport { FormDropdownService } from '../../../services/form-dropdown.service';\nimport { BaseInputDirective } from '../../base/base-input/base-input.directive';\nimport { SignalFormHostDirective } from '../../base/host-directive/signal-form-host.directive';\n\n@Component({\n  selector: 'signal-form-select-field',\n  standalone: true,\n  imports: [CommonModule, SignalModelDirective],\n  templateUrl: './signal-form-select-field.component.html',\n  styleUrl: './signal-form-select-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  hostDirectives: [SignalFormHostDirective],\n})\nexport class SignalFormSelectFieldComponent<\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n> extends BaseInputDirective<RuntimeSelectSignalField<TModel, K>, TModel, K> {\n  public showDropdown = signal(false);\n  protected displayText = computed(() => this.displayValue());\n\n  private readonly dropdownService = inject(FormDropdownService);\n  private readonly host = inject(SignalFormHostDirective);\n\n  constructor() {\n    super();\n    this.dropdownOverlayEffect();\n  }\n\n  private dropdownOverlayEffect(): void {\n    effect(\n      () => {\n        if (!this.showDropdown()) {\n          return;\n        }\n\n        const reference = this.host.viewContainerRef.element.nativeElement;\n        const currentValue = this.field().value();\n        const currentOption = this.findOptionByValue(currentValue);\n\n        this.dropdownService.openDropdown<any>({\n          options: this.field().options(),\n          reference,\n          viewContainerRef: this.host.viewContainerRef,\n          ariaListboxId: `${String(this.field().name)}-listbox`,\n          multiselect: false,\n          initialSelection: currentOption,\n          onSelect: (selected: FormOption<NonNullable<TModel[K]>>) => {\n            this.setValue(selected);\n            this.field().touched.set(true);\n            this.showDropdown.set(false);\n          },\n          onClose: () => {\n            this.showDropdown.set(false);\n          },\n        });\n      },\n      {\n        injector: this.injector,\n      },\n    );\n  }\n\n  public toggleDropdown(): void {\n    this.showDropdown.update((show) => !show);\n  }\n\n  private findOptionByValue(\n    value: TModel[K] | FormOption<TModel[K]>,\n  ): FormOption<TModel[K]> | undefined {\n    if (!value) {\n      return undefined;\n    }\n\n    const options = this.field().options();\n    if (typeof value === 'object' && 'value' in value) {\n      // If value is already a FormOption, find by value property\n      return options.find((opt) => opt.value === value.value);\n    }\n    // Otherwise find by raw value\n    return options.find((opt) => opt.value === value);\n  }\n\n  public displayValue(): string {\n    const value = this.field().value();\n    if (!value) {\n      return this.field().config?.placeholder ?? '';\n    }\n\n    if (typeof value === 'object' && 'label' in value) {\n      return value.label;\n    }\n\n    const option = this.findOptionByValue(value);\n    return option?.label ?? this.field().config?.placeholder ?? '';\n  }\n}\n","<div\n  class=\"form-select-wrapper\"\n  role=\"combobox\"\n  [signalModel]=\"field()\"\n  [attr.aria-expanded]=\"showDropdown()\"\n  (click)=\"toggleDropdown()\"\n  (keydown.enter)=\"toggleDropdown()\"\n>\n  <div class=\"form-select-display\">\n    {{ displayValue() || field().config?.placeholder }}\n  </div>\n  <div class=\"form-select-arrow\">▾</div>\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { BaseInputDirective } from '../../../components/base/base-input/base-input.directive';\nimport { SignalModelDirective } from '../../../directives/signal-model.directive';\nimport { type RuntimeSliderSignalField } from '../../../models/signal-field-types.model';\n\n@Component({\n  selector: 'signal-form-slider-field',\n  standalone: true,\n  imports: [SignalModelDirective],\n  templateUrl: './signal-form-slider-field.component.html',\n  styleUrl: './signal-form-slider-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SignalFormSliderFieldComponent<\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n> extends BaseInputDirective<RuntimeSliderSignalField<TModel, K>, TModel, K> {}\n","<div class=\"slider-wrapper\">\n  <input type=\"range\" class=\"slider\" [signalModel]=\"field()\" />\n  {{ field().value() }}\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { BaseInputDirective } from '../../../components/base/base-input/base-input.directive';\nimport { SignalModelDirective } from '../../../directives/signal-model.directive';\nimport { type RuntimeSwitchSignalField } from '../../../models/signal-field-types.model';\n\n@Component({\n  selector: 'signal-form-switch-field',\n  standalone: true,\n  imports: [SignalModelDirective],\n  templateUrl: './signal-form-switch-field.component.html',\n  styleUrl: './signal-form-switch-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SignalFormSwitchFieldComponent<\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n> extends BaseInputDirective<RuntimeSwitchSignalField<TModel, K>, TModel, K> {}\n","<label class=\"switch-wrapper\">\n  <input\n    type=\"checkbox\"\n    role=\"switch\"\n    class=\"switch-input\"\n    [signalModel]=\"field()\"\n  />\n  <span class=\"switch-slider\" aria-hidden=\"true\"></span>\n</label>\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  inject,\n  input,\n} from '@angular/core';\nimport {\n  WordCountService,\n  type WordCountStats,\n} from '../../../services/word-count.service';\n\n@Component({\n  selector: 'signal-form-word-count',\n  standalone: true,\n  imports: [CommonModule],\n  template: `\n    <div class=\"word-count\" [class.word-count-compact]=\"compact()\">\n      <span class=\"word-count-text\">{{ formattedCount() }}</span>\n    </div>\n  `,\n  styleUrl: './word-count.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WordCountComponent {\n  /** The text to count words for */\n  public text = input<string | null | undefined>('');\n\n  /** Display format for the word count */\n  public format = input<'words' | 'characters' | 'both' | 'detailed'>('words');\n\n  /** Whether to show compact styling */\n  public compact = input<boolean>(false);\n\n  protected readonly stats = computed(\n    (): WordCountStats => this.wordCountService.getWordCount(this.text()),\n  );\n\n  protected readonly formattedCount = computed((): string =>\n    this.wordCountService.formatWordCount(this.stats(), this.format()),\n  );\n\n  private readonly wordCountService = inject(WordCountService);\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { SignalModelDirective } from '../../../directives/signal-model.directive';\nimport { type RuntimeTextSignalField } from '../../../models/signal-field-types.model';\nimport { BaseInputDirective } from '../../base/base-input/base-input.directive';\nimport { WordCountComponent } from '../../ui/word-count/word-count.component';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'signal-form-text-field',\n  standalone: true,\n  imports: [SignalModelDirective, WordCountComponent],\n  templateUrl: 'signal-form-text-field.component.html',\n})\nexport class SignalFormTextFieldComponent<\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n> extends BaseInputDirective<RuntimeTextSignalField<TModel, K>, TModel, K> {}\n","<div class=\"form-input-wrapper\">\n  <input type=\"text\" class=\"form-input\" [signalModel]=\"field()\" />\n</div>\n\n@if (field().config?.wordCount) {\n  <signal-form-word-count\n    [text]=\"field().value()\"\n    format=\"characters\"\n    [compact]=\"true\"\n  />\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { SignalModelDirective } from '../../../directives/signal-model.directive';\nimport { RuntimeTextAreaSignalField } from '../../../models/signal-field-types.model';\nimport { BaseInputDirective } from '../../base/base-input/base-input.directive';\nimport { WordCountComponent } from '../../ui/word-count/word-count.component';\n\n@Component({\n  selector: 'signal-form-textarea-field',\n  standalone: true,\n  imports: [SignalModelDirective, WordCountComponent],\n  templateUrl: './signal-form-textarea-field.component.html',\n  styleUrl: './signal-form-textarea-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SignalFormTextareaFieldComponent<\n  TModel extends object,\n  K extends keyof TModel = keyof TModel,\n> extends BaseInputDirective<\n  RuntimeTextAreaSignalField<TModel, K>,\n  TModel,\n  K\n> {}\n","<div class=\"form-input-wrapper\">\n  <textarea class=\"form-input\" [signalModel]=\"field()\">{{\n    field().value()\n  }}</textarea>\n</div>\n\n@if (field().config?.wordCount) {\n  <signal-form-word-count\n    [text]=\"field().value()\"\n    format=\"both\"\n    [compact]=\"false\"\n  />\n}\n","import {\n  type FieldWithFormTraversal,\n  type FieldWithRepeatableForms,\n  type SignalFormContainer,\n  type SignalFormField,\n} from '../../models/signal-form.model';\n\nexport class FieldTraversalUtils {\n  static findFieldByPath<TModel>(\n    form: SignalFormContainer<TModel>,\n    path: string,\n  ): SignalFormField<TModel> | undefined {\n    const segments = this.parsePath(path);\n    let currentField: SignalFormField<TModel> | undefined;\n    let currentForm: SignalFormContainer<TModel> = form;\n\n    for (let i = 0; i < segments.length; i++) {\n      const segment = segments[i];\n\n      if (segment.type === 'field') {\n        currentField = currentForm.fields.find(\n          (f) => f.name === segment.name,\n        ) as SignalFormField<TModel> | undefined;\n\n        if (!currentField) {\n          return undefined;\n        }\n\n        if (i < segments.length - 1) {\n          if (this.isFieldWithForm(currentField)) {\n            currentForm = currentField.form;\n          } else if (this.isRepeatableField(currentField)) {\n            continue;\n          } else {\n            return undefined;\n          }\n        }\n      } else if (segment.type === 'index') {\n        if (currentField && this.isRepeatableField(currentField)) {\n          const forms = currentField.repeatableForms();\n\n          if (Array.isArray(forms) && forms[segment.index]) {\n            currentForm = forms[segment.index];\n          } else {\n            return undefined;\n          }\n        } else {\n          return undefined;\n        }\n      }\n    }\n\n    return currentField;\n  }\n\n  private static parsePath(\n    path: string,\n  ): Array<{ type: 'field'; name: string } | { type: 'index'; index: number }> {\n    const segments: Array<\n      { type: 'field'; name: string } | { type: 'index'; index: number }\n    > = [];\n    const parts = path.split(/[\\.\\[\\]]+/).filter(Boolean);\n\n    let i = 0;\n    while (i < parts.length) {\n      const part = parts[i];\n\n      if (!isNaN(Number(part))) {\n        segments.push({ type: 'index', index: Number(part) });\n      } else {\n        segments.push({ type: 'field', name: part });\n      }\n      i++;\n    }\n\n    return segments;\n  }\n\n  private static isFieldWithForm<T>(\n    field: SignalFormField<T>,\n  ): field is SignalFormField<T> & FieldWithFormTraversal<T> {\n    return 'form' in field && this.isSignalFormContainer(field.form);\n  }\n\n  private static isRepeatableField<T>(\n    field: SignalFormField<T>,\n  ): field is SignalFormField<T> & FieldWithRepeatableForms<T> {\n    return (\n      'repeatableForms' in field &&\n      typeof (field as any).repeatableForms === 'function'\n    );\n  }\n\n  private static isSignalFormContainer<T>(\n    value: unknown,\n  ): value is SignalFormContainer<T> {\n    return (\n      value !== null &&\n      typeof value === 'object' &&\n      'fields' in (value as object) &&\n      Array.isArray((value as SignalFormContainer<T>).fields) &&\n      'getField' in (value as object) &&\n      typeof (value as SignalFormContainer<T>).getField === 'function'\n    );\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  Injector,\n  input,\n  signal,\n  viewChildren,\n} from '@angular/core';\nimport { FieldTraversalUtils } from '../../../form-builder/utils/field-traversal.utils';\nimport {\n  type ErrorMessage,\n  type SignalFormContainer,\n  type SignalSteppedFormContainer,\n} from '../../../models/signal-form.model';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'signal-form-error-summary',\n  standalone: true,\n  templateUrl: './signal-form-error-summary.component.html',\n  styleUrls: ['./signal-form-error-summary.component.scss'],\n})\nexport class SignalFormErrorSummaryComponent<TModel> {\n  public form = input.required<\n    SignalFormContainer<TModel> | SignalSteppedFormContainer<TModel>\n  >();\n  readonly fieldsEls = viewChildren<ElementRef>('formFields');\n\n  private currentIndex = signal(0);\n  private readonly injector = inject(Injector);\n\n  public errors = computed(() => {\n    if ('steps' in this.form()) {\n      return (this.form() as SignalSteppedFormContainer<TModel>).steps.flatMap(\n        (step) => step.getErrors(),\n      );\n    }\n    return this.form().getErrors();\n  });\n\n  public currentError = computed(() => {\n    const all = this.errors();\n    return all.length ? all[this.currentIndex() % all.length] : null;\n  });\n\n  protected focusNext(): void {\n    if (!this.errors().length) {\n      return;\n    }\n\n    this.currentIndex.update((i) => (i + 1) % this.errors().length);\n    this.focusCurrent();\n  }\n\n  protected focusPrevious(): void {\n    const errs = this.errors();\n\n    if (!errs.length) {\n      return;\n    }\n\n    this.currentIndex.update((i) => (i - 1 + errs.length) % errs.length);\n    this.focusCurrent();\n  }\n\n  protected focusCurrent(): void {\n    const err = this.currentError();\n\n    if (!err) {\n      return;\n    }\n\n    const isStepped = 'steps' in this.form();\n\n    if (isStepped) {\n      this.focusSteppedError(err);\n    } else {\n      this.focusNestedError(err);\n    }\n  }\n\n  private focusSteppedError(err: ErrorMessage<TModel>): void {\n    const steppedForm = this.form() as SignalSteppedFormContainer<TModel>;\n    // Find the step that contains a field matching the full path\n    const stepIndex = steppedForm.steps.findIndex((step) =>\n      FieldTraversalUtils.findFieldByPath(step, err.path),\n    );\n\n    if (stepIndex !== -1) {\n      steppedForm.currentStep.set(stepIndex);\n      effect(\n        () => {\n          this.focusNestedError(err, steppedForm.steps[stepIndex]);\n        },\n        { injector: this.injector },\n      );\n    }\n  }\n\n  private focusNestedError(\n    err: ErrorMessage<TModel>,\n    form: SignalFormContainer<TModel> = this.form() as SignalFormContainer<TModel>,\n  ): void {\n    if (err.focusField) {\n      err.focusField();\n      return;\n    }\n\n    const field = FieldTraversalUtils.findFieldByPath(form, err.path);\n    if (field?.focus) {\n      field.focus.set(true);\n    }\n  }\n}\n","@if (currentError()) {\n  <div class=\"form-error-summary\">\n    <button type=\"button\" (click)=\"focusPrevious()\">&#x25C0;</button>\n    <span\n      tabindex=\"0\"\n      class=\"form-error-summary-message\"\n      (click)=\"focusCurrent()\"\n      (keydown.enter)=\"focusCurrent()\"\n      >{{ currentError()?.message ?? currentError() }}</span\n    >\n    <button type=\"button\" (click)=\"focusNext()\">&#x25B6;</button>\n  </div>\n}\n","import {\n  animate,\n  state,\n  style,\n  transition,\n  trigger,\n} from '@angular/animations';\n\nexport const expandCollapse = trigger('expandCollapse', [\n  state(\n    'open',\n    style({\n      height: '*',\n      opacity: 1,\n      overflow: 'hidden',\n    }),\n  ),\n  state(\n    'closed',\n    style({\n      height: '0px',\n      opacity: 0,\n      overflow: 'hidden',\n    }),\n  ),\n  transition('open <=> closed', animate('600ms ease-in')),\n  transition('closed <=> open', animate('600ms ease-out')),\n]);\n\nexport const growFadeIn = trigger('growFadeIn', [\n  transition(':enter', [\n    style({ opacity: 0, transform: 'scaleY(0.95)', height: 0 }),\n    animate(\n      '350ms ease-out',\n      style({ opacity: 1, transform: 'scaleY(1)', height: '*' }),\n    ),\n  ]),\n]);\n\nexport const fadeInOut = trigger('fadeInOut', [\n  transition(':enter', [\n    style({ opacity: 0 }),\n    animate('150ms ease-out', style({ opacity: 1 })),\n  ]),\n  transition(':leave', [animate('150ms ease-in', style({ opacity: 0 }))]),\n]);\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  input,\n  signal,\n  TemplateRef,\n} from '@angular/core';\nimport {\n  ChevronDownCircleIcon,\n  ChevronUpCircleIcon,\n  LucideAngularModule,\n} from 'lucide-angular';\nimport { expandCollapse, growFadeIn } from '../../../animations/animations';\nimport { type ExpandedAnimationEvent } from '../../../models/signal-form.model';\n\n@Component({\n  selector: 'collapsable-section',\n  standalone: true,\n  imports: [NgTemplateOutlet, LucideAngularModule],\n  animations: [expandCollapse, growFadeIn],\n  templateUrl: './collapsable-section.component.html',\n  styleUrls: ['./collapsable-section.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CollapsableSectionComponent {\n  public collapsedInitially = input<boolean>(false);\n\n  public bodyTemplate? = input<TemplateRef<unknown>>();\n  public summaryTemplate? = input<TemplateRef<unknown>>();\n\n  public bodyTemplateContext? = input<unknown>();\n  public summaryTemplateContext? = input<unknown>();\n\n  protected collapsing = signal(false);\n  protected collapsed = signal(false);\n\n  protected readonly chevronDown = ChevronDownCircleIcon;\n  protected readonly chevronUp = ChevronUpCircleIcon;\n\n  constructor() {\n    // Initialize collapsed state from input\n    effect(() => {\n      this.collapsed.set(this.collapsedInitially());\n    });\n  }\n\n  protected toggle(): void {\n    if (!this.collapsed()) {\n      this.collapsing.set(true);\n      return;\n    }\n\n    this.collapsed.set(false);\n    this.collapsing.set(false);\n  }\n\n  protected shouldShow = computed(() => !this.collapsed() || this.collapsing());\n\n  protected onDone(event: ExpandedAnimationEvent): void {\n    if (event.toState === 'closed') {\n      this.collapsed.set(true);\n      this.collapsing.set(false);\n    }\n  }\n}\n","<section class=\"collapsable-header\">\n  <div class=\"collapsable-header-content\">\n    @if (summaryTemplate?.(); as summaryTemplate) {\n      <ng-container\n        *ngTemplateOutlet=\"summaryTemplate; context: summaryTemplateContext?.()\"\n      />\n    } @else {\n      <ng-content select=\"[summary]\" />\n    }\n  </div>\n  <aside class=\"collapsable-button-container\">\n    <lucide-icon\n      class=\"collapsable-button\"\n      [img]=\"shouldShow() ? chevronDown : chevronUp\"\n      (click)=\"toggle()\"\n    />\n  </aside>\n</section>\n@if (shouldShow()) {\n  <div\n    [@expandCollapse]=\"collapsing() ? 'closed' : 'open'\"\n    (@expandCollapse.done)=\"onDone($event)\"\n  >\n    <div @growFadeIn>\n      @if (bodyTemplate?.(); as bodyTemplate) {\n        <ng-container\n          *ngTemplateOutlet=\"bodyTemplate; context: bodyTemplateContext?.()\"\n        />\n      } @else {\n        <ng-content select=\"[body]\" />\n      }\n    </div>\n  </div>\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  HostBinding,\n  inject,\n  input,\n} from '@angular/core';\nimport { SignalFormHostDirective } from '../../../components/base/host-directive/signal-form-host.directive';\nimport { FormFieldType } from '../../../enums/form-field-type.enum';\nimport {\n  type GridSignalFormConfig,\n  type SignalFormConfig,\n  type SignalFormContainer,\n  type SignalFormField,\n} from '../../../models/signal-form.model';\nimport { SignalFormThemeService } from '../../../services/theme.service';\nimport { SignalFormRepeatableFieldComponent } from '../../fields/signal-form-repeatable-field/signal-form-repeatable-field.component';\nimport { CollapsableSectionComponent } from '../../ui/collapsable-section/collapsable-section.component';\nimport { SignalFormInputItemComponent } from '../signal-form-input-item/signal-form-input-item.component';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'signal-form-fields',\n  imports: [\n    SignalFormInputItemComponent,\n    NgTemplateOutlet,\n    CollapsableSectionComponent,\n    SignalFormRepeatableFieldComponent,\n  ],\n  standalone: true,\n  templateUrl: './signal-form-fields.component.html',\n  styleUrl: './signal-form-fields.component.scss',\n  hostDirectives: [SignalFormHostDirective],\n  host: {\n    '[style.grid-template-areas]': 'gridTemplateAreas()',\n    '[class.grid]': 'isGridLayout()',\n  },\n})\nexport class SignalFormFieldsComponent<TModel> {\n  public fields = input.required<SignalFormField<TModel>[]>();\n  public form = input.required<SignalFormContainer<TModel>>();\n  public index = input<number | null>(null);\n  public isRoot = input<boolean>(true);\n  public signalFormParent = input<boolean>(false);\n\n  // Required theme service injection\n  private signalFormThemeService = inject(SignalFormThemeService);\n\n  protected readonly formFieldType = FormFieldType;\n\n  protected visibleFields = computed<SignalFormField<TModel>[] | undefined>(\n    () => this.fields().filter((f) => !f.isHidden?.()),\n  );\n\n  private isGridAreaConfig(\n    config: SignalFormConfig<TModel>,\n  ): config is GridSignalFormConfig<TModel> {\n    if (!config) {\n      return false;\n    }\n\n    return config?.layout === 'grid-area' || 'gridArea' in config;\n  }\n\n  protected gridTemplateAreas = computed(() => {\n    const config = this.form().config;\n\n    if (!this.isGridAreaConfig(config)) {\n      return null;\n    }\n\n    return config?.gridArea.map((row) => `\"${row.join(' ')}\"`).join(' ');\n  });\n\n  protected isGridLayout(): boolean {\n    return this.isGridAreaConfig(this.form().config);\n  }\n\n  protected formLayoutClass = computed(() => {\n    switch (this.form()?.config?.view) {\n      case 'collapsable':\n        return 'form-group-collapsable';\n      case 'row':\n        return 'form-group-row';\n      default:\n        return 'form-group-stacked';\n    }\n  });\n\n  @HostBinding('class')\n  public get hostClass(): string {\n    return this.formLayoutClass();\n  }\n}\n","@if (isRoot() && !signalFormParent() && form().config?.view === \"collapsable\") {\n  <collapsable-section class=\"collapsable-fields\">\n    <ng-container summary>\n      {{ form().title }}\n    </ng-container>\n    <ng-container body *ngTemplateOutlet=\"fieldBlockTemplate\" />\n  </collapsable-section>\n} @else {\n  <ng-container *ngTemplateOutlet=\"fieldBlockTemplate\" />\n}\n\n<ng-template #fieldBlockTemplate>\n  @for (field of visibleFields?.(); track field.name) {\n    @if (field.type === formFieldType.REPEATABLE_GROUP) {\n      <signal-form-repeatable-field\n        [repeatableForms]=\"field.repeatableForms()\"\n        [fields]=\"field.fields\"\n        [heading]=\"field.heading\"\n        [style.gridArea]=\"field.name\"\n        (addItem)=\"field.addItem()\"\n        (removeItem)=\"field.removeItem($event)\"\n      />\n    } @else {\n      @if (field.fields?.length) {\n        <section\n          class=\"nested-form-section\"\n          [class]=\"'form-group-' + (field.config?.view ?? 'stacked')\"\n          [style.gridArea]=\"field.name\"\n        >\n          @if (field.config?.view === \"collapsable\") {\n            <collapsable-section\n              [summaryTemplate]=\"titleTemplate\"\n              [bodyTemplate]=\"fieldsTemplate\"\n              [summaryTemplateContext]=\"{ $implicit: field, i: index() }\"\n              [bodyTemplateContext]=\"{ $implicit: field, i: index() }\"\n            />\n          } @else {\n            <ng-container\n              *ngTemplateOutlet=\"\n                titleTemplate;\n                context: { $implicit: field, i: index() }\n              \"\n            />\n            <ng-container\n              *ngTemplateOutlet=\"\n                fieldsTemplate;\n                context: { $implicit: field, i: index() }\n              \"\n            />\n          }\n        </section>\n      } @else {\n        <signal-form-input-item\n          [field]=\"field\"\n          [form]=\"form()\"\n          [index]=\"index()\"\n        />\n      }\n    }\n  }\n</ng-template>\n\n<ng-template #titleTemplate let-field>\n  <div class=\"nested-form-title\">\n    <h2 class=\"nested-form-heading\">{{ field.heading }}</h2>\n    <h4 class=\"nested-form-subheading\">{{ field.subheading }}</h4>\n  </div>\n</ng-template>\n\n<ng-template #fieldsTemplate let-field let-i=\"i\">\n  <div class=\"nested-form-fields\">\n    <signal-form-fields\n      [form]=\"field.form\"\n      [fields]=\"field.fields\"\n      [index]=\"i\"\n      [isRoot]=\"false\"\n    />\n  </div>\n</ng-template>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  output,\n} from '@angular/core';\nimport { FormStatus } from '../../../enums/form-status.enum';\nimport { type SignalFormContainer } from '../../../models/signal-form.model';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'signal-form-save-button',\n  standalone: true,\n  templateUrl: './signal-form-save-button.component.html',\n  styleUrl: './signal-form-save-button.component.scss',\n})\nexport class SignalFormSaveButtonComponent<TModel> {\n  public form = input.required<SignalFormContainer<TModel>>();\n  public submitButtonText = input<string>('Save');\n  public showReset = input<boolean>(false);\n\n  public onSave = output<TModel>();\n\n  protected buttonText = computed(() => {\n    const status = this.form().status();\n    switch (status) {\n      case FormStatus.Submitting:\n        return 'Saving...';\n      case FormStatus.Success:\n        return 'Saved successfully';\n      default:\n        return this.submitButtonText();\n    }\n  });\n\n  protected isDisabled = computed(() => {\n    const status = this.form().status();\n    return !this.form().anyTouched() || status === FormStatus.Submitting;\n  });\n\n  protected buttonClass = computed(() => {\n    const status = this.form().status();\n    const classes = ['form-button'];\n\n    if (status === FormStatus.Submitting) {\n      classes.push('saving');\n    } else if (status === FormStatus.Success) {\n      classes.push('success');\n    } else if (this.form().hasSaved()) {\n      classes.push('saved');\n    }\n\n    return classes.join(' ');\n  });\n\n  public save(): void {\n    if (!this.form().validateForm()) {\n      return;\n    }\n\n    this.form().save();\n    this.onSave.emit(this.form().getValue());\n  }\n}\n","<section class=\"form-button-row\">\n  @if (showReset()) {\n    <button class=\"form-button\" type=\"button\" (click)=\"form().reset()\">\n      Reset\n    </button>\n  }\n\n  <button\n    type=\"submit\"\n    [disabled]=\"isDisabled()\"\n    [class]=\"buttonClass()\"\n    (click)=\"save()\"\n  >\n    {{ buttonText() }}\n  </button>\n</section>\n","import { NgClass } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  inject,\n  Injector,\n  input,\n  model,\n  Signal,\n  signal,\n} from '@angular/core';\nimport { LucideAngularModule, SquareCheck } from 'lucide-angular';\nimport {\n  type MetaValidatorFn,\n  type SignalFormContainer,\n} from '../../../../models/signal-form.model';\n\nexport enum StepStatus {\n  Complete = 'complete',\n  Error = 'error',\n  InComplete = 'incomplete',\n}\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgClass, LucideAngularModule],\n  selector: 'signal-form-stepper-nav',\n  standalone: true,\n  styleUrl: './signal-form-stepper-nav.component.scss',\n  templateUrl: './signal-form-stepper-nav.component.html',\n})\nexport class SignalFormStepperNavComponent<TModel> {\n  public hasSaved = input<boolean>();\n  public steps = input.required<SignalFormContainer<TModel>[]>();\n  public currentStep = model.required<number>();\n\n  public doesStepHaveErrors = signal<boolean[]>([]);\n  public isStepComplete = signal<boolean[]>([]);\n\n  protected requiredPerStepMap = signal<{ [val: number]: Signal<StepStatus> }>(\n    {},\n  );\n\n  protected readonly stepStatus = StepStatus;\n  protected readonly squareCheckIcon = SquareCheck;\n\n  private readonly injector = inject(Injector);\n\n  constructor() {\n    this.isStepCompleteOrErrorEffect();\n    this.requiredPerStepMapEffect();\n  }\n\n  public goToStep(index: number): void {\n    const steps = this.steps();\n    const canSkip = true;\n\n    if (\n      index <= this.currentStep() ||\n      canSkip ||\n      steps[this.currentStep()].validateForm()\n    ) {\n      this.currentStep.set(index);\n    }\n  }\n\n  private isStepCompleteOrErrorEffect(): void {\n    effect(\n      () => {\n        const validatedMap = this.steps().map((step) => step.validateForm());\n        this.isStepComplete.set(validatedMap);\n\n        const errorsMap = this.steps().map(\n          (step) => step.getErrors().length > 0,\n        );\n        this.doesStepHaveErrors.set(errorsMap);\n      },\n      { injector: this.injector },\n    );\n  }\n\n  private requiredPerStepMapEffect(): void {\n    effect(\n      () => {\n        if (this.steps()) {\n          this.initRequiredPerStepMap();\n        }\n      },\n      { injector: this.injector },\n    );\n  }\n\n  private initRequiredPerStepMap(): void {\n    const requiredPerStepMap = this.steps().reduce((prev, step, i) => {\n      const requiredPerStep = step.fields.filter((field) =>\n        field.validators?.some(\n          (validator) =>\n            (validator as MetaValidatorFn<TModel[keyof TModel], TModel>).__meta\n              ?.required,\n        ),\n      );\n\n      const stepStatus = requiredPerStep.map((step) => {\n        if (!!step.error()) {\n          return StepStatus.Error;\n        }\n\n        if (!!step.value()) {\n          return StepStatus.Complete;\n        }\n\n        return StepStatus.InComplete;\n      });\n\n      return {\n        ...prev,\n        [i]: computed(() => stepStatus),\n      };\n    }, {});\n\n    this.requiredPerStepMap.set(requiredPerStepMap);\n  }\n}\n","<div class=\"stepper-nav-ui\">\n  <div class=\"stepper-track\">\n    @for (step of steps(); track $index) {\n      <div class=\"stepper-node\">\n        <button\n          class=\"step-circle\"\n          [class.completed]=\"isStepComplete()[$index]\"\n          [class.error]=\"doesStepHaveErrors()[$index]\"\n          [class.active]=\"$index === currentStep()\"\n          (click)=\"currentStep.set($index)\"\n        >\n          @if (isStepComplete()[$index]) {\n            ✓\n          } @else {\n            {{ $index + 1 }}\n          }\n        </button>\n\n        <aside class=\"step-line-container\">\n          @for (stepsStatus of requiredPerStepMap?.()[$index](); track $index) {\n            <div\n              class=\"step-line\"\n              [class.filled]=\"isStepComplete()[$index]\"\n              [ngClass]=\"stepsStatus\"\n            ></div>\n          }\n        </aside>\n\n        @if ($last) {\n          <lucide-icon\n            [class.completed-form]=\"hasSaved()\"\n            class=\"finish-form\"\n            [img]=\"squareCheckIcon\"\n            [size]=\"28\"\n          />\n        }\n      </div>\n    }\n  </div>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  input,\n  output,\n} from '@angular/core';\nimport { FormStatus } from '../../../enums/form-status.enum';\nimport { type SignalSteppedFormContainer } from '../../../models/signal-form.model';\nimport { SignalFormErrorSummaryComponent } from '../form-field-error-summary/signal-form-error-summary.component';\nimport { SignalFormFieldsComponent } from '../signal-form-fields/signal-form-fields.component';\nimport { SignalFormStepperNavComponent } from './signal-form-stepper-nav/signal-form-stepper-nav.component';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'signal-form-stepper',\n  imports: [\n    SignalFormFieldsComponent,\n    SignalFormStepperNavComponent,\n    SignalFormErrorSummaryComponent,\n  ],\n  templateUrl: './signal-form-stepper.component.html',\n  styleUrl: './signal-form-stepper.component.scss',\n  host: {\n    '[class.signal-form-container]': 'true',\n  },\n})\nexport class SignalFormStepperComponent<TModel> {\n  public form = input.required<SignalSteppedFormContainer<TModel>>();\n  public onSave = output<TModel>();\n  public afterSaveCompletes = output<void>();\n\n  protected readonly saveDisabled = computed(\n    () => !(this.form().anyDirty() && this.form().anyTouched()),\n  );\n\n  protected submitButtonText = computed(() => {\n    const status = this.form().status();\n    switch (status) {\n      case FormStatus.Submitting:\n        return 'Saving...';\n      case FormStatus.Success:\n        return 'Saved successfully';\n      default:\n        return 'Submit';\n    }\n  });\n\n  protected submitButtonClass = computed(() => {\n    const status = this.form().status();\n    const classes = ['form-button'];\n\n    if (status === FormStatus.Submitting) {\n      classes.push('saving');\n    } else if (status === FormStatus.Success) {\n      classes.push('success');\n    } else if (this.form().hasSaved()) {\n      classes.push('saved');\n    }\n\n    return classes.join(' ');\n  });\n\n  constructor() {\n    effect(() => {\n      if (this.form().hasSaved()) {\n        this.afterSaveCompletes.emit();\n      }\n    });\n  }\n\n  protected next() {\n    if (\n      this.form().validateStep() &&\n      this.form().currentStep() < this.form().steps.length - 1\n    ) {\n      this.form().currentStep.set(this.form().currentStep() + 1);\n    }\n  }\n\n  protected previous() {\n    this.form().currentStep.set(this.form().currentStep() - 1);\n  }\n\n  protected save() {\n    this.form().save();\n\n    this.onSave.emit(this.form().value());\n  }\n}\n","@if (form(); as form) {\n  <form onsubmit=\"event.preventDefault();\">\n    <signal-form-stepper-nav\n      [steps]=\"form.steps\"\n      [hasSaved]=\"form.hasSaved()\"\n      [(currentStep)]=\"form.currentStep\"\n    />\n\n    <div class=\"stepper-body\">\n      @for (step of form.steps; track $index) {\n        <div [hidden]=\"$index !== form.currentStep()\">\n          @defer (on viewport; prefetch on idle) {\n            <signal-form-fields\n              [form]=\"step\"\n              [fields]=\"step.fields\"\n              #formFields\n            />\n          } @placeholder {\n            <div></div>\n          }\n        </div>\n      }\n    </div>\n\n    <signal-form-error-summary [form]=\"form\" />\n\n    <div class=\"stepper-actions\">\n      <button\n        class=\"form-button\"\n        (click)=\"previous()\"\n        [disabled]=\"form.currentStep() === 0\"\n      >\n        Previous\n      </button>\n      @if (form.currentStep() < form.steps.length - 1) {\n        <button\n          class=\"form-button\"\n          (click)=\"next()\"\n          [disabled]=\"!form.isValidStep()\"\n        >\n          Next\n        </button>\n      }\n      @if (form.currentStep() === form.steps.length - 1) {\n        <button\n          [class]=\"submitButtonClass()\"\n          [disabled]=\"!!form.getErrors().length\"\n          (click)=\"save()\"\n        >\n          {{ submitButtonText() }}\n        </button>\n      }\n    </div>\n  </form>\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  HostListener,\n  input,\n  output,\n} from '@angular/core';\nimport { FormStatus } from '../../../enums/form-status.enum';\nimport { type SignalFormContainer } from '../../../models/signal-form.model';\nimport { HasUnsavedChanges } from '../../../services/unsaved-changes.guard';\nimport { SignalFormErrorSummaryComponent } from '../form-field-error-summary/signal-form-error-summary.component';\nimport { SignalFormFieldsComponent } from '../signal-form-fields/signal-form-fields.component';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'signal-form',\n  imports: [SignalFormFieldsComponent, SignalFormErrorSummaryComponent],\n  standalone: true,\n  templateUrl: './signal-form.component.html',\n  styleUrl: './signal-form.component.scss',\n})\nexport class SignalFormComponent<TModel> implements HasUnsavedChanges {\n  public form = input.required<SignalFormContainer<TModel>>();\n  public submitButtonText = input<string>('Save');\n\n  public formSubmit = output<SignalFormContainer<TModel>>();\n\n  protected disabled = computed(() => this.form().saveButtonDisabled());\n\n  protected buttonText = computed(() => {\n    const status = this.form().status();\n    switch (status) {\n      case FormStatus.Submitting:\n        return 'Saving...';\n      case FormStatus.Success:\n        return 'Saved successfully';\n      default:\n        return this.submitButtonText();\n    }\n  });\n\n  protected buttonClass = computed(() => {\n    const status = this.form().status();\n    const classes = ['form-button'];\n\n    if (status === FormStatus.Submitting) {\n      classes.push('saving');\n    } else if (status === FormStatus.Success) {\n      classes.push('success');\n    } else if (this.form().hasSaved()) {\n      classes.push('saved');\n    }\n\n    return classes.join(' ');\n  });\n\n  public hasUnsavedChanges(): boolean {\n    return this.form().anyDirty();\n  }\n\n  @HostListener('window:beforeunload', ['$event'])\n  public onBeforeUnload(event: BeforeUnloadEvent): void {\n    if (this.hasUnsavedChanges()) {\n      event.preventDefault();\n    }\n  }\n\n  public submitForm(): void {\n    const isValid = this.form().validateForm();\n\n    if (isValid) {\n      this.form().save();\n      this.formSubmit.emit(this.form());\n    }\n  }\n}\n","<div class=\"signal-form-wrapper\">\n  <h2 class=\"signal-form-title\">{{ form().title }}</h2>\n  <form\n    (submit)=\"submitForm(); $event.preventDefault()\"\n    class=\"signal-form-content\"\n  >\n    <div class=\"form-fields-container\">\n      <signal-form-fields\n        [fields]=\"form().fields\"\n        [form]=\"form()\"\n        [signalFormParent]=\"true\"\n      />\n    </div>\n\n    <div class=\"form-bottom-sticky\">\n      <signal-form-error-summary [form]=\"form()\" />\n      <button type=\"submit\" [disabled]=\"disabled()\" [class]=\"buttonClass()\">\n        {{ buttonText() }}\n      </button>\n    </div>\n  </form>\n</div>\n","/*\n * Public API Surface of signal-template-forms\n */\n\n// Core functionality\nexport * from './lib/directives';\nexport * from './lib/enums';\nexport * from './lib/form-builder';\nexport * from './lib/helpers';\nexport * from './lib/models';\nexport * from './lib/services';\nexport * from './lib/validators';\n\n// Components\nexport * from './lib/components/base';\nexport * from './lib/components/fields';\nexport * from './lib/components/renderers';\nexport * from './lib/components/ui';\n\nexport * from './lib/services/theme.service';\nexport {\n  provideSignalFormsTheme,\n  type SignalFormsThemeConfig,\n} from './lib/services/theme.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["tap","i1.SignalFormHostDirective","i2.SignalFormHostDirective"],"mappings":"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"}