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
Source Map (JSON)
{"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()\">◀</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()\">▶</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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"}