@ngx-formly/core 11.0.0 → 11.1.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-formly-core.mjs","names":[],"sources":["../../../../src/core/src/lib/utils.ts","../../../../src/core/src/lib/extensions/field-expression-legacy/utils.ts","../../../../src/core/src/lib/extensions/field-form/utils.ts","../../../../src/core/src/lib/extensions/field-expression-legacy/field-expression.ts","../../../../src/core/src/lib/extensions/field-expression/utils.ts","../../../../src/core/src/lib/extensions/field-expression/field-expression.ts","../../../../src/core/src/lib/extensions/core/core.ts","../../../../src/core/src/lib/extensions/field-form/field-form.ts","../../../../src/core/src/lib/extensions/field-validation/field-validation.ts","../../../../src/core/src/lib/templates/field.type.ts","../../../../src/core/src/lib/templates/field-template.type.ts","../../../../src/core/src/lib/services/formly.config.ts","../../../../src/core/src/lib/components/formly.template.ts","../../../../src/core/src/lib/components/formly.field.ts","../../../../src/core/src/lib/templates/formly.group.ts","../../../../src/core/src/lib/core.config.ts","../../../../src/core/src/lib/services/formly.builder.ts","../../../../src/core/src/lib/components/formly.form.ts","../../../../src/core/src/lib/templates/formly.attributes.ts","../../../../src/core/src/lib/templates/validation-message.ts","../../../../src/core/src/lib/templates/formly.validation-message.ts","../../../../src/core/src/lib/templates/formly-validation-messages.pipe.ts","../../../../src/core/src/lib/templates/field-array.type.ts","../../../../src/core/src/lib/templates/field.wrapper.ts","../../../../src/core/src/lib/core.module.ts"],"sourcesContent":["import { FormlyFieldConfig } from './models';\nimport { isObservable } from 'rxjs';\nimport { AbstractControl } from '@angular/forms';\nimport { FormlyFieldConfigCache } from './models';\nimport { ChangeDetectorRef, ComponentRef, NgZone, TemplateRef, Type, VERSION, ɵNoopNgZone } from '@angular/core';\n\nexport function disableTreeValidityCall(form: any, callback: () => void) {\n const _updateTreeValidity = form._updateTreeValidity.bind(form);\n form._updateTreeValidity = () => {};\n try {\n callback();\n } finally {\n form._updateTreeValidity = _updateTreeValidity;\n }\n}\n\nexport function getFieldId(formId: string, field: FormlyFieldConfig, index: string | number) {\n if (field.id) {\n return field.id;\n }\n let type = field.type;\n if (!type && field.template) {\n type = 'template';\n }\n\n if (type instanceof Type) {\n type = type.prototype.constructor.name;\n }\n\n return [formId, type, field.key, index].join('_');\n}\n\nexport function hasKey(field: FormlyFieldConfig) {\n return !isNil(field.key) && field.key !== '' && (!Array.isArray(field.key) || field.key.length > 0);\n}\n\nexport function getKeyPath(field: FormlyFieldConfigCache): string[] {\n if (!hasKey(field)) {\n return [];\n }\n\n /* We store the keyPath in the field for performance reasons. This function will be called frequently. */\n if (field._keyPath?.key !== field.key) {\n let path: (string | number)[] = [];\n if (typeof field.key === 'string') {\n const key = field.key.indexOf('[') === -1 ? field.key : field.key.replace(/\\[(\\w+)\\]/g, '.$1');\n path = key.indexOf('.') !== -1 ? key.split('.') : [key];\n } else if (Array.isArray(field.key)) {\n path = field.key.slice(0);\n } else {\n path = [`${field.key}`];\n }\n\n defineHiddenProp(field, '_keyPath', { key: field.key, path });\n }\n\n return field._keyPath.path.slice(0);\n}\n\nexport const FORMLY_VALIDATORS = ['required', 'pattern', 'minLength', 'maxLength', 'min', 'max', 'step'];\n\nexport function assignFieldValue(field: FormlyFieldConfigCache, value: any) {\n let paths = getKeyPath(field);\n if (paths.length === 0) {\n return;\n }\n\n let root = field;\n while (root.parent) {\n root = root.parent;\n paths = [...getKeyPath(root), ...paths];\n }\n\n if (value === undefined && field.resetOnHide) {\n const k = paths.pop();\n const m = paths.reduce((model, path) => model[path] || {}, root.model);\n delete m[k];\n return;\n }\n\n assignModelValue(root.model, paths, value);\n}\n\nexport function assignModelValue(model: any, paths: string[], value: any) {\n for (let i = 0; i < paths.length - 1; i++) {\n const path = paths[i];\n if (!model[path] || !isObject(model[path])) {\n model[path] = /^\\d+$/.test(paths[i + 1]) ? [] : {};\n }\n\n model = model[path];\n }\n\n model[paths[paths.length - 1]] = clone(value);\n}\n\nexport function getFieldValue(field: FormlyFieldConfig): any {\n let model = field.parent ? field.parent.model : field.model;\n for (const path of getKeyPath(field)) {\n if (!model) {\n return model;\n }\n model = model[path];\n }\n\n return model;\n}\n\nexport function reverseDeepMerge(dest: any, ...args: any[]) {\n args.forEach((src) => {\n for (const srcArg in src) {\n if (isNil(dest[srcArg]) || isBlankString(dest[srcArg])) {\n dest[srcArg] = clone(src[srcArg]);\n } else if (objAndSameType(dest[srcArg], src[srcArg])) {\n reverseDeepMerge(dest[srcArg], src[srcArg]);\n }\n }\n });\n return dest;\n}\n\n// check a value is null or undefined\nexport function isNil(value: any) {\n return value == null;\n}\n\nexport function isUndefined(value: any) {\n return value === undefined;\n}\n\nexport function isBlankString(value: any) {\n return value === '';\n}\n\nexport function isFunction(value: any) {\n return typeof value === 'function';\n}\n\nexport function objAndSameType(obj1: any, obj2: any) {\n return (\n isObject(obj1) &&\n isObject(obj2) &&\n Object.getPrototypeOf(obj1) === Object.getPrototypeOf(obj2) &&\n !(Array.isArray(obj1) || Array.isArray(obj2))\n );\n}\n\nexport function isObject(x: any) {\n return x != null && typeof x === 'object';\n}\n\nexport function isPromise(obj: any): obj is Promise<any> {\n return !!obj && typeof obj.then === 'function';\n}\n\nexport function clone(value: any): any {\n if (\n !isObject(value) ||\n isObservable(value) ||\n isPromise(value) ||\n value instanceof TemplateRef ||\n /* instanceof SafeHtmlImpl */ value.changingThisBreaksApplicationSecurity ||\n ['RegExp', 'FileList', 'File', 'Blob'].indexOf(value.constructor?.name) !== -1\n ) {\n return value;\n }\n\n if (value instanceof Set) {\n return new Set(value);\n }\n\n if (value instanceof Map) {\n return new Map(value);\n }\n\n if (value instanceof Uint8Array) {\n return new Uint8Array(value);\n }\n\n if (value instanceof Uint16Array) {\n return new Uint16Array(value);\n }\n\n if (value instanceof Uint32Array) {\n return new Uint32Array(value);\n }\n\n // https://github.com/moment/moment/blob/master/moment.js#L252\n if (value._isAMomentObject && isFunction(value.clone)) {\n return value.clone();\n }\n\n if (value instanceof AbstractControl) {\n return null;\n }\n\n if (value instanceof Date) {\n return new Date(value.getTime());\n }\n\n if (Array.isArray(value)) {\n return value.slice(0).map((v) => clone(v));\n }\n\n // best way to clone a js object maybe\n // https://stackoverflow.com/questions/41474986/how-to-clone-a-javascript-es6-class-instance\n const proto = Object.getPrototypeOf(value);\n let c = Object.create(proto);\n c = Object.setPrototypeOf(c, proto);\n // need to make a deep copy so we dont use Object.assign\n // also Object.assign wont copy property descriptor exactly\n return Object.keys(value).reduce((newVal, prop) => {\n const propDesc = Object.getOwnPropertyDescriptor(value, prop);\n if (propDesc.get) {\n Object.defineProperty(newVal, prop, propDesc);\n } else {\n newVal[prop] = clone(value[prop]);\n }\n\n return newVal;\n }, c);\n}\n\nexport function defineHiddenProp(field: any, prop: string, defaultValue: any) {\n Object.defineProperty(field, prop, { enumerable: false, writable: true, configurable: true });\n field[prop] = defaultValue;\n}\n\ntype IObserveFn<T> = (change: { currentValue: T; previousValue?: T; firstChange: boolean }) => void;\nexport interface IObserver<T> {\n setValue: (value: T, emitEvent?: boolean) => void;\n unsubscribe: () => void;\n}\ninterface IObserveTarget<T> {\n [prop: string]: any;\n _observers?: {\n [prop: string]: {\n value: T;\n onChange: IObserveFn<T>[];\n };\n };\n}\n\nexport function observeDeep<T = any>(source: IObserveTarget<T>, paths: string[], setFn: () => void): () => void {\n let observers: (() => void)[] = [];\n\n const unsubscribe = () => {\n observers.forEach((observer) => observer());\n observers = [];\n };\n const observer = observe(source, paths, ({ firstChange, currentValue }) => {\n !firstChange && setFn();\n\n unsubscribe();\n if (isObject(currentValue) && currentValue.constructor.name === 'Object') {\n Object.keys(currentValue).forEach((prop) => {\n observers.push(observeDeep(source, [...paths, prop], setFn));\n });\n }\n });\n\n return () => {\n observer.unsubscribe();\n unsubscribe();\n };\n}\n\nexport function observe<T = any>(o: IObserveTarget<T>, paths: string[], setFn?: IObserveFn<T>): IObserver<T> {\n if (!o._observers) {\n defineHiddenProp(o, '_observers', {});\n }\n\n let target = o;\n for (let i = 0; i < paths.length - 1; i++) {\n if (!target[paths[i]] || !isObject(target[paths[i]])) {\n target[paths[i]] = /^\\d+$/.test(paths[i + 1]) ? [] : {};\n }\n target = target[paths[i]];\n }\n\n const key = paths[paths.length - 1];\n const prop = paths.join('.');\n if (!o._observers[prop]) {\n o._observers[prop] = { value: target[key], onChange: [] };\n }\n\n const state = o._observers[prop];\n if (target[key] !== state.value) {\n state.value = target[key];\n }\n\n if (setFn && state.onChange.indexOf(setFn) === -1) {\n state.onChange.push(setFn);\n setFn({ currentValue: state.value, firstChange: true });\n if (state.onChange.length >= 1 && isObject(target)) {\n const { enumerable } = Object.getOwnPropertyDescriptor(target, key) || { enumerable: true };\n Object.defineProperty(target, key, {\n enumerable,\n configurable: true,\n get: () => state.value,\n set: (currentValue) => {\n if (currentValue !== state.value) {\n const previousValue = state.value;\n state.value = currentValue;\n state.onChange.forEach((changeFn) => changeFn({ previousValue, currentValue, firstChange: false }));\n }\n },\n });\n }\n }\n\n return {\n setValue(currentValue: T, emitEvent = true) {\n if (currentValue === state.value) {\n return;\n }\n\n const previousValue = state.value;\n state.value = currentValue;\n state.onChange.forEach((changeFn) => {\n if (changeFn !== setFn && emitEvent) {\n changeFn({ previousValue, currentValue, firstChange: false });\n }\n });\n },\n unsubscribe() {\n state.onChange = state.onChange.filter((changeFn) => changeFn !== setFn);\n if (state.onChange.length === 0) {\n delete o._observers[prop];\n }\n },\n };\n}\n\nexport function getField(f: FormlyFieldConfig, key: FormlyFieldConfig['key']): FormlyFieldConfig {\n key = (Array.isArray(key) ? key.join('.') : key) as string;\n if (!f.fieldGroup) {\n return undefined;\n }\n\n for (let i = 0, len = f.fieldGroup.length; i < len; i++) {\n const c = f.fieldGroup[i];\n const k = (Array.isArray(c.key) ? c.key.join('.') : c.key) as string;\n if (k === key) {\n return c;\n }\n\n if (c.fieldGroup && (isNil(k) || key.indexOf(`${k}.`) === 0)) {\n const field = getField(c, isNil(k) ? key : key.slice(k.length + 1));\n if (field) {\n return field;\n }\n }\n }\n\n return undefined;\n}\n\nexport function markFieldForCheck(field: FormlyFieldConfigCache) {\n field._componentRefs?.forEach((ref) => {\n // NOTE: we cannot use ref.changeDetectorRef, see https://github.com/ngx-formly/ngx-formly/issues/2191\n if (ref instanceof ComponentRef) {\n const changeDetectorRef = ref.injector.get(ChangeDetectorRef);\n changeDetectorRef.markForCheck();\n } else {\n ref.markForCheck();\n }\n });\n}\n\nexport function isNoopNgZone(ngZone: NgZone) {\n return ngZone instanceof ɵNoopNgZone;\n}\n\nexport function isHiddenField(field: FormlyFieldConfig) {\n const isHidden = (f: FormlyFieldConfig) => f.hide || f.expressions?.hide || f.hideExpression;\n let setDefaultValue = !field.resetOnHide || !isHidden(field);\n if (!isHidden(field) && field.resetOnHide) {\n let parent = field.parent;\n while (parent && !isHidden(parent)) {\n parent = parent.parent;\n }\n setDefaultValue = !parent || !isHidden(parent);\n }\n\n return !setDefaultValue;\n}\n\nexport function isSignalRequired() {\n return +VERSION.major > 18 || (+VERSION.major >= 18 && +VERSION.minor >= 1);\n}\n","/**\n * Legacy implementation\n */\nexport function evalStringExpressionLegacy(expression: string, argNames: string[]): any {\n try {\n return Function(...argNames, `return ${expression};`) as any;\n } catch (error) {\n console.error(error);\n }\n}\n\nexport function evalExpression(\n expression: string | ((...value: any[]) => any) | boolean,\n thisArg: any,\n argVal: any[],\n): any {\n if (typeof expression === 'function') {\n return expression.apply(thisArg, argVal);\n } else {\n return expression ? true : false;\n }\n}\n","import { EventEmitter } from '@angular/core';\nimport { UntypedFormArray, UntypedFormGroup, AbstractControl, FormControl } from '@angular/forms';\nimport { getKeyPath, getField, getFieldValue, isNil, defineHiddenProp, observe, hasKey } from '../../utils';\nimport { FormlyFieldConfigCache } from '../../models';\n\nexport function unregisterControl(field: FormlyFieldConfigCache, emitEvent = false) {\n if (!hasKey(field) && field.fieldGroup) {\n field.fieldGroup.forEach((f) => unregisterControl(f, emitEvent));\n return;\n }\n if (field.shareFormControl === false) {\n field._controlActive = false;\n }\n const control = field.formControl;\n const fieldIndex = control._fields ? control._fields.indexOf(field) : -1;\n if (fieldIndex !== -1) {\n control._fields.splice(fieldIndex, 1);\n }\n\n const form = control.parent as FormlyFieldConfigCache['formControl'];\n if (!form) {\n return;\n }\n\n const opts = { emitEvent };\n if (form instanceof UntypedFormArray) {\n const key = form.controls.findIndex((c) => c === control);\n if (key !== -1) {\n form.removeAt(key, opts);\n }\n } else if (form instanceof UntypedFormGroup) {\n const paths = getKeyPath(field);\n const key = paths[paths.length - 1];\n if (form.get([key]) === control) {\n form.removeControl(key, opts);\n }\n }\n\n control.setParent(null);\n // A hidden row may have been attached only to hold a visible fixed-path editor.\n if (\n form instanceof UntypedFormGroup &&\n !Object.keys(form.controls).length &&\n !(form as FormlyFieldConfigCache['formControl'])._fields?.some((f) => !f._hide) &&\n form.parent\n ) {\n const key = Object.keys((form.parent as UntypedFormGroup).controls).find((key) => form.parent.get([key]) === form);\n unregisterControl({ key, formControl: form }, emitEvent);\n }\n}\n\nexport function findControl(field: FormlyFieldConfigCache): AbstractControl {\n if (field.formControl) {\n return field.formControl;\n }\n\n if (field.shareFormControl === false) {\n return null;\n }\n\n // Hidden fields retain controls even when they are absent from the registered form tree.\n return findArrayControl(field.form, getKeyPath(field)) || field.form?.get(getKeyPath(field));\n}\n\nfunction findArrayControl(form: FormlyFieldConfigCache['formControl'], path: string[]) {\n for (const owner of form?._fields || []) {\n const target = owner.fieldArray && getField(owner, path);\n if (target?.formControl && target.shareFormControl !== false) {\n return target.formControl;\n }\n }\n return null;\n}\n\nfunction setControl(\n form: FormlyFieldConfigCache['formControl'],\n key: string,\n control: FormlyFieldConfigCache['formControl'],\n emitEvent: boolean,\n) {\n const array = form._fields?.find((f) => f.fieldArray);\n if (form instanceof UntypedFormArray && array && control._fields?.every((f) => f.shareFormControl !== false)) {\n // Hidden rows compact the FormArray: insert relative to retained rows, without empty slots.\n const registered = new Set(form.controls);\n if (!registered.has(control)) {\n const index = array.fieldGroup.slice(0, Number(key)).filter((row, index) => {\n return registered.has((hasKey(row) ? row : getField(row, `${index}`))?.formControl);\n }).length;\n form.insert(index, control, { emitEvent });\n }\n } else if (form.get([key]) !== control) {\n (form as UntypedFormGroup).setControl(key, control, { emitEvent });\n }\n}\n\nexport function registerControl(\n field: FormlyFieldConfigCache,\n control?: FormlyFieldConfigCache['formControl'],\n emitEvent = false,\n) {\n control = control || field.formControl;\n\n if (field.shareFormControl === false && hasKey(field)) {\n if (!field.hasOwnProperty('_controlActive')) {\n defineHiddenProp(field, '_controlActive', false);\n } else {\n field._controlActive = false;\n }\n }\n\n if (!control._fields) {\n defineHiddenProp(control, '_fields', []);\n }\n if (control._fields.indexOf(field) === -1) {\n control._fields.push(field);\n }\n\n if (!field.formControl && control) {\n if (!Object.getOwnPropertyDescriptor(field, 'formControl')?.set) {\n defineHiddenProp(field, 'formControl', undefined);\n field.props.disabled = !!field.props.disabled;\n const disabledObserver = observe(field, ['props', 'disabled'], ({ firstChange, currentValue }) => {\n if (!firstChange && field.formControl) {\n currentValue ? field.formControl.disable() : field.formControl.enable();\n }\n });\n observe<AbstractControl>(field, ['formControl'], ({ previousValue, currentValue }) => {\n if (previousValue instanceof FormControl) {\n (previousValue as any)._unregisterOnDisabledChange(disabledObserver.setValue);\n }\n if (currentValue instanceof FormControl) {\n currentValue.registerOnDisabledChange(disabledObserver.setValue);\n }\n });\n }\n field.formControl = control;\n control.setValidators(null);\n control.setAsyncValidators(null);\n }\n\n if (!field.form || !hasKey(field)) {\n return;\n }\n\n let form: FormlyFieldConfigCache['formControl'] = field.form;\n const paths = getKeyPath(field);\n const value = getFieldValue(field);\n if (!(isNil(control.value) && isNil(value)) && control.value !== value && control instanceof FormControl) {\n control.patchValue(value, { emitEvent: field.shareFormControl !== false });\n }\n if (field._hide) {\n return;\n }\n\n for (let i = 0; i < paths.length - 1; i++) {\n const path = paths[i];\n const child = findArrayControl(form, [path]) || form.get([path]) || new UntypedFormGroup({});\n setControl(form, path, child, emitEvent);\n form = child;\n }\n\n const key = paths[paths.length - 1];\n if (!field._hide && form.get([key]) !== control) {\n if (field.shareFormControl === false) {\n const previous = form.get([key]) as FormlyFieldConfigCache['formControl'];\n previous?._fields?.forEach((f) => {\n if (f.shareFormControl === false) {\n f._controlActive = false;\n }\n });\n previous?.setParent(null);\n }\n setControl(form, key, control, emitEvent);\n }\n\n if (field.shareFormControl === false) {\n if (field.options?._formControlsForCheck) {\n field.options._formControlsForCheck.add(field);\n } else {\n field._controlActive = !field._hide && form.get([key]) === control;\n }\n }\n}\n\nexport function updateValidity(c: AbstractControl, onlySelf = false) {\n const status = c.status;\n const value = c.value;\n c.updateValueAndValidity({ emitEvent: false, onlySelf });\n if (status !== c.status) {\n (c.statusChanges as EventEmitter<string>).emit(c.status);\n }\n\n if (value !== c.value) {\n (c.valueChanges as EventEmitter<any>).emit(c.value);\n }\n}\n\nexport function clearControl(form: FormlyFieldConfigCache['formControl']) {\n delete form?._fields;\n form.setValidators(null);\n form.setAsyncValidators(null);\n if (form instanceof UntypedFormGroup || form instanceof UntypedFormArray) {\n Object.values(form.controls).forEach((c) => clearControl(c));\n }\n}\n","import { FormlyValueChangeEvent, FormlyFieldConfigCache } from '../../models';\nimport {\n isObject,\n isNil,\n isUndefined,\n isFunction,\n defineHiddenProp,\n observe,\n getFieldValue,\n assignFieldValue,\n hasKey,\n} from '../../utils';\nimport { evalExpression, evalStringExpressionLegacy } from './utils';\nimport { isObservable, Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { FormlyExtension } from '../../models';\nimport { unregisterControl, registerControl, updateValidity } from '../field-form/utils';\nimport { AbstractControl, UntypedFormArray } from '@angular/forms';\n\nexport class FieldExpressionExtension implements FormlyExtension {\n onPopulate(field: FormlyFieldConfigCache) {\n if (field._expressions) {\n return;\n }\n\n // cache built expression\n defineHiddenProp(field, '_expressions', {});\n\n observe(field, ['hide'], ({ currentValue, firstChange }) => {\n defineHiddenProp(field, '_hide', !!currentValue);\n if (!firstChange || (firstChange && currentValue === true)) {\n field.props.hidden = currentValue;\n field.options._hiddenFieldsForCheck.push({ field });\n }\n });\n\n if (field.hideExpression) {\n observe(field, ['hideExpression'], ({ currentValue: expr }) => {\n field._expressions.hide = this.parseExpressions(field, 'hide', typeof expr === 'boolean' ? () => expr : expr);\n });\n }\n\n const evalExpr = (key: string, expr: any) => {\n if (typeof expr === 'string' || isFunction(expr)) {\n field._expressions[key] = this.parseExpressions(field, key, expr);\n } else if (expr instanceof Observable) {\n field._expressions[key] = {\n value$: (expr as Observable<any>).pipe(\n tap((v) => {\n if (['props.disabled', 'templateOptions.disabled'].includes(key)) {\n field._expressions[key].callback = this.parseExpressions(field, key, () => v).callback;\n field._expressions[key].callback(true);\n } else {\n this.evalExpr(field, key, v);\n }\n field.options._detectChanges(field);\n }),\n ),\n };\n }\n };\n\n field.expressions = field.expressions || {};\n for (const key of Object.keys(field.expressions)) {\n observe(field, ['expressions', key], ({ currentValue: expr }) => {\n evalExpr(key, isFunction(expr) ? (...args: any) => expr(field, args[3]) : expr);\n });\n }\n\n field.expressionProperties = field.expressionProperties || {};\n for (const key of Object.keys(field.expressionProperties)) {\n observe(field, ['expressionProperties', key], ({ currentValue }) => evalExpr(key, currentValue));\n }\n }\n\n postPopulate(field: FormlyFieldConfigCache) {\n if (field.parent) {\n return;\n }\n\n if (!field.options.checkExpressions) {\n let checkLocked = false;\n field.options.checkExpressions = (f, ignoreCache) => {\n if (checkLocked) {\n return;\n }\n\n checkLocked = true;\n try {\n // ponytail: initial-tree budget; add an override if valid dynamic forms need more passes.\n const maxPasses = Math.max(100, 2 * this.countFields(field));\n const options = field.options;\n // Rebuilds preserve supplied values, but defaults may need clearing after visibility changes.\n const restoredDefaults = ignoreCache ? new Set<AbstractControl>() : undefined;\n const fieldChanged = this.checkExpressions(f, ignoreCache) || options._hiddenFieldsForCheck.length > 0;\n let passes = 0;\n do {\n if (passes++ === maxPasses) {\n console.warn('[Formly] The form may be inconsistent. Check for circular hide expressions');\n throw new Error(`[Formly Error] Expressions did not settle after ${maxPasses} passes.`);\n }\n\n options._hiddenFieldsForCheck\n .sort((f) => (f.field.hide ? -1 : 1))\n .forEach((f) =>\n this.changeHideState(f.field, f.field.hide ?? f.default, !ignoreCache, f.emitEvent, restoredDefaults),\n );\n options._hiddenFieldsForCheck = [];\n if (fieldChanged) {\n this.checkExpressions(field);\n }\n } while (options._hiddenFieldsForCheck.length > 0);\n } finally {\n checkLocked = false;\n }\n };\n }\n }\n\n protected parseExpressions(field: FormlyFieldConfigCache, path: string, expr: any) {\n const isDisabledExpression = ['props.disabled', 'templateOptions.disabled'].includes(path);\n let parentExpression: any;\n if (field.parent && (path === 'hide' || isDisabledExpression)) {\n const rootValue = (f: FormlyFieldConfigCache) => {\n return path === 'hide' ? f.hide : f.props.disabled;\n };\n\n parentExpression = () => {\n let root = field.parent;\n while (root.parent && !rootValue(root)) {\n root = root.parent;\n }\n\n return rootValue(root);\n };\n }\n\n expr = expr || (() => false);\n if (typeof expr === 'string') {\n expr = this._evalStringExpression(expr, ['model', 'formState', 'field']);\n }\n\n let currentValue: any;\n\n return {\n callback: (ignoreCache?: boolean) => {\n try {\n const exprValue = evalExpression(\n parentExpression ? (...args: any) => parentExpression(field) || expr(...args) : expr,\n { field },\n [field.model, field.options.formState, field, ignoreCache],\n );\n\n if (\n ignoreCache ||\n (isDisabledExpression &&\n (field.props.disabled !== !!exprValue || (exprValue && hasKey(field) && field.formControl?.enabled))) ||\n (currentValue !== exprValue &&\n (!isObject(exprValue) ||\n isObservable(exprValue) ||\n JSON.stringify(exprValue) !== JSON.stringify(currentValue)))\n ) {\n currentValue = exprValue;\n this.evalExpr(field, path, exprValue);\n\n return true;\n }\n\n return false;\n } catch (error: any) {\n error.message = `[Formly Error] [Expression \"${path}\"] ${error.message}`;\n throw error;\n }\n },\n };\n }\n\n protected _evalStringExpression(expression: string, argNames: string[]) {\n return evalStringExpressionLegacy(expression, argNames);\n }\n\n private countFields(field: FormlyFieldConfigCache): number {\n return field ? 1 + (field.fieldGroup?.reduce((count, f) => count + this.countFields(f), 0) ?? 0) : 0;\n }\n\n private checkExpressions(field: FormlyFieldConfigCache, ignoreCache = false) {\n if (!field) {\n return false;\n }\n\n let fieldChanged = false;\n if (field._expressions) {\n const hide = field.hide;\n for (const key of Object.keys(field._expressions)) {\n field._expressions[key].callback?.(ignoreCache) && (fieldChanged = true);\n }\n\n if (ignoreCache && field._expressions.hide && hide === false && field.hide === false) {\n let parent = field.parent;\n while (parent && !parent.hide) {\n parent = parent.parent;\n }\n if (!parent) {\n // Restore defaults after rebuilding without reporting a visibility change.\n field.options._hiddenFieldsForCheck.push({ field, emitEvent: false });\n }\n }\n }\n field.fieldGroup?.forEach((f) => this.checkExpressions(f, ignoreCache) && (fieldChanged = true));\n\n return fieldChanged;\n }\n\n private changeDisabledState(field: FormlyFieldConfigCache, value: boolean) {\n if (field.fieldGroup) {\n field.fieldGroup\n .filter((f: FormlyFieldConfigCache) => !f._expressions.hasOwnProperty('props.disabled'))\n .forEach((f) => this.changeDisabledState(f, value));\n }\n\n if (hasKey(field) && field.props.disabled !== value) {\n field.props.disabled = value;\n }\n }\n\n private changeHideState(\n field: FormlyFieldConfigCache,\n hide: boolean,\n resetOnHide: boolean,\n emitEvent = true,\n restoredDefaults?: Set<AbstractControl>,\n ) {\n hide = field.hide || hide;\n if (field.fieldGroup) {\n field.fieldGroup\n .filter((f: FormlyFieldConfigCache) => f && !f._expressions.hide)\n .forEach((f) => this.changeHideState(f, hide, resetOnHide, emitEvent, restoredDefaults));\n }\n\n if (field.formControl && hasKey(field)) {\n defineHiddenProp(field, '_hide', !!(hide || field.hide));\n const c = field.formControl;\n if (c._fields?.length > 1) {\n updateValidity(c);\n }\n\n if (hide === true && (!c._fields || c._fields.every((f) => !!f._hide))) {\n unregisterControl(field, true);\n if ((resetOnHide || restoredDefaults?.has(c)) && field.resetOnHide) {\n assignFieldValue(field, undefined);\n restoredDefaults?.delete(c);\n field.formControl.reset({ value: undefined, disabled: field.formControl.disabled });\n field.options.fieldChanges.next({ value: undefined, field, type: 'valueChanges' });\n if (field.fieldGroup && field.formControl instanceof UntypedFormArray) {\n field.fieldGroup.length = 0;\n }\n }\n } else if (hide === false) {\n if (field.resetOnHide && !isUndefined(field.defaultValue) && isUndefined(getFieldValue(field))) {\n assignFieldValue(field, field.defaultValue);\n restoredDefaults?.add(c);\n }\n registerControl(field, undefined, true);\n if (field.resetOnHide && field.fieldArray && field.fieldGroup?.length !== field.model?.length) {\n field.options.build(field);\n }\n }\n }\n\n if (emitEvent && field.options.fieldChanges) {\n field.options.fieldChanges.next(<FormlyValueChangeEvent>{ field, type: 'hidden', value: hide });\n }\n }\n\n private evalExpr(field: FormlyFieldConfigCache, prop: string, value: any) {\n if (prop.indexOf('model.') === 0) {\n const key = prop.replace(/^model\\./, ''),\n parent = field.fieldGroup ? field : field.parent;\n\n let control = field?.key === key ? field.formControl : field.form.get(key);\n if (!control && field.get(key)) {\n control = field.get(key).formControl;\n }\n assignFieldValue({ key, parent, model: field.model }, value);\n if (control && !(isNil(control.value) && isNil(value)) && control.value !== value) {\n control.patchValue(value);\n }\n } else {\n try {\n let target: any = field;\n const paths = this._evalExpressionPath(field, prop);\n const lastIndex = paths.length - 1;\n for (let i = 0; i < lastIndex; i++) {\n target = target[paths[i]];\n }\n\n target[paths[lastIndex]] = value;\n } catch (error: any) {\n error.message = `[Formly Error] [Expression \"${prop}\"] ${error.message}`;\n throw error;\n }\n\n if (['templateOptions.disabled', 'props.disabled'].includes(prop) && hasKey(field)) {\n // Angular enables descendants without updating a group's disabled property.\n if (value && field.formControl?.enabled) {\n field.formControl.disable();\n }\n this.changeDisabledState(field, value);\n }\n }\n\n this.emitExpressionChanges(field, prop, value);\n }\n\n private emitExpressionChanges(field: FormlyFieldConfigCache, property: string, value: any) {\n if (!field.options.fieldChanges) {\n return;\n }\n\n field.options.fieldChanges.next({\n field,\n type: 'expressionChanges',\n property,\n value,\n });\n }\n\n private _evalExpressionPath(field: FormlyFieldConfigCache, prop: string) {\n if (field._expressions[prop] && field._expressions[prop].paths) {\n return field._expressions[prop].paths;\n }\n\n let paths: string[] = [];\n if (prop.indexOf('[') === -1) {\n paths = prop.split('.');\n } else {\n prop\n .split(/[[\\]]{1,2}/) // https://stackoverflow.com/a/20198206\n .filter((p) => p)\n .forEach((path) => {\n const arrayPath = path.match(/['|\"](.*?)['|\"]/);\n if (arrayPath) {\n paths.push(arrayPath[1]);\n } else {\n paths.push(...path.split('.').filter((p) => p));\n }\n });\n }\n\n if (field._expressions[prop]) {\n field._expressions[prop].paths = paths;\n }\n\n return paths;\n }\n}\n","// CSP-compliant expression parser for Formly expressions\n// Supports: model.path, formState.path, field.path, comparisons, logical operators, and negation\n\ntype ExpressionContext = {\n model: any;\n formState: any;\n field: any;\n};\n\n// Tokenizer\nenum TokenType {\n IDENTIFIER = 'IDENTIFIER',\n DOT = 'DOT',\n OPTIONAL_DOT = 'OPTIONAL_DOT',\n BRACKET_OPEN = 'BRACKET_OPEN',\n BRACKET_CLOSE = 'BRACKET_CLOSE',\n STRING = 'STRING',\n NUMBER = 'NUMBER',\n BOOLEAN = 'BOOLEAN',\n NULL = 'NULL',\n UNDEFINED = 'UNDEFINED',\n OPERATOR = 'OPERATOR',\n LOGICAL = 'LOGICAL',\n NOT = 'NOT',\n ARITHMETIC = 'ARITHMETIC',\n PAREN_OPEN = 'PAREN_OPEN',\n PAREN_CLOSE = 'PAREN_CLOSE',\n TERNARY_QUESTION = 'TERNARY_QUESTION',\n TERNARY_COLON = 'TERNARY_COLON',\n EOF = 'EOF',\n}\n\ninterface Token {\n type: TokenType;\n value: any;\n}\n\nclass Tokenizer {\n private pos = 0;\n private input: string;\n\n constructor(input: string) {\n this.input = input.trim();\n }\n\n tokenize(): Token[] {\n const tokens: Token[] = [];\n\n while (this.pos < this.input.length) {\n this.skipWhitespace();\n\n if (this.pos >= this.input.length) break;\n\n const char = this.input[this.pos];\n\n // String literals\n if (char === '\"' || char === \"'\") {\n tokens.push(this.readString());\n }\n // Numbers\n else if (/\\d/.test(char)) {\n tokens.push(this.readNumber());\n }\n // Identifiers and keywords\n else if (/[a-zA-Z_$]/.test(char)) {\n tokens.push(this.readIdentifier());\n }\n // Operators and symbols\n else if (char === '.') {\n tokens.push({ type: TokenType.DOT, value: '.' });\n this.pos++;\n } else if (char === '[') {\n tokens.push({ type: TokenType.BRACKET_OPEN, value: '[' });\n this.pos++;\n } else if (char === ']') {\n tokens.push({ type: TokenType.BRACKET_CLOSE, value: ']' });\n this.pos++;\n } else if (char === '(') {\n tokens.push({ type: TokenType.PAREN_OPEN, value: '(' });\n this.pos++;\n } else if (char === ')') {\n tokens.push({ type: TokenType.PAREN_CLOSE, value: ')' });\n this.pos++;\n } else if (char === '?' && this.peek() === '.') {\n tokens.push({ type: TokenType.OPTIONAL_DOT, value: '?.' });\n this.pos += 2;\n } else if (char === '?') {\n tokens.push({ type: TokenType.TERNARY_QUESTION, value: '?' });\n this.pos++;\n } else if (char === ':') {\n tokens.push({ type: TokenType.TERNARY_COLON, value: ':' });\n this.pos++;\n } else if (char === '!') {\n if (this.peek() === '=') {\n if (this.input[this.pos + 2] === '=') {\n tokens.push({ type: TokenType.OPERATOR, value: '!==' });\n this.pos += 3;\n } else {\n tokens.push({ type: TokenType.OPERATOR, value: '!=' });\n this.pos += 2;\n }\n } else {\n tokens.push({ type: TokenType.NOT, value: '!' });\n this.pos++;\n }\n } else if (char === '=' || char === '<' || char === '>') {\n tokens.push(this.readOperator());\n } else if (char === '+' || char === '*' || char === '/' || char === '%') {\n tokens.push({ type: TokenType.ARITHMETIC, value: char });\n this.pos++;\n } else if (char === '-') {\n // Check if this is a negative number or subtraction\n // It's a negative number if preceded by an operator, opening paren, or at the start\n const lastToken = tokens[tokens.length - 1];\n const isNegativeNumber =\n tokens.length === 0 ||\n lastToken?.type === TokenType.OPERATOR ||\n lastToken?.type === TokenType.LOGICAL ||\n lastToken?.type === TokenType.ARITHMETIC ||\n lastToken?.type === TokenType.PAREN_OPEN ||\n lastToken?.type === TokenType.TERNARY_QUESTION ||\n lastToken?.type === TokenType.TERNARY_COLON;\n\n if (isNegativeNumber && this.peek() && /\\d/.test(this.peek())) {\n tokens.push(this.readNumber());\n } else {\n tokens.push({ type: TokenType.ARITHMETIC, value: '-' });\n this.pos++;\n }\n } else if (char === '&' && this.peek() === '&') {\n tokens.push({ type: TokenType.LOGICAL, value: '&&' });\n this.pos += 2;\n } else if (char === '|' && this.peek() === '|') {\n tokens.push({ type: TokenType.LOGICAL, value: '||' });\n this.pos += 2;\n } else {\n throw new Error(`Unexpected character: ${char} at position ${this.pos}`);\n }\n }\n\n tokens.push({ type: TokenType.EOF, value: null });\n return tokens;\n }\n\n private skipWhitespace(): void {\n while (this.pos < this.input.length && /\\s/.test(this.input[this.pos])) {\n this.pos++;\n }\n }\n\n private peek(offset = 1): string {\n return this.input[this.pos + offset] || '';\n }\n\n private readString(): Token {\n const quote = this.input[this.pos];\n this.pos++;\n let value = '';\n\n while (this.pos < this.input.length && this.input[this.pos] !== quote) {\n if (this.input[this.pos] === '\\\\') {\n this.pos++;\n if (this.pos < this.input.length) {\n const escaped = this.input[this.pos];\n switch (escaped) {\n case 'n':\n value += '\\n';\n break;\n case 't':\n value += '\\t';\n break;\n case 'r':\n value += '\\r';\n break;\n default:\n value += escaped;\n }\n }\n } else {\n value += this.input[this.pos];\n }\n this.pos++;\n }\n\n this.pos++; // skip closing quote\n return { type: TokenType.STRING, value };\n }\n\n private readNumber(): Token {\n let value = '';\n\n // Handle negatives\n if (this.input[this.pos] === '-') {\n value += '-';\n this.pos++;\n }\n\n let hasDecimal = false;\n while (this.pos < this.input.length && /[\\d.]/.test(this.input[this.pos])) {\n if (this.input[this.pos] === '.') {\n if (hasDecimal) {\n throw new Error(`Invalid number format: multiple decimal points at position ${this.pos}`);\n }\n hasDecimal = true;\n }\n value += this.input[this.pos];\n this.pos++;\n }\n\n const parsed = parseFloat(value);\n if (isNaN(parsed)) {\n throw new Error(`Invalid number format: ${value}`);\n }\n\n return { type: TokenType.NUMBER, value: parsed };\n }\n\n private readIdentifier(): Token {\n let value = '';\n\n while (this.pos < this.input.length && /[a-zA-Z0-9_$]/.test(this.input[this.pos])) {\n value += this.input[this.pos];\n this.pos++;\n }\n\n // Check for keywords\n if (value === 'true' || value === 'false') {\n return { type: TokenType.BOOLEAN, value: value === 'true' };\n }\n if (value === 'null') {\n return { type: TokenType.NULL, value: null };\n }\n if (value === 'undefined') {\n return { type: TokenType.UNDEFINED, value: undefined };\n }\n\n return { type: TokenType.IDENTIFIER, value };\n }\n\n private readOperator(): Token {\n let op = this.input[this.pos];\n this.pos++;\n\n if (this.pos < this.input.length) {\n const next = this.input[this.pos];\n if (\n (op === '=' && next === '=') ||\n (op === '!' && next === '=') ||\n (op === '<' && next === '=') ||\n (op === '>' && next === '=')\n ) {\n op += next;\n this.pos++;\n\n // Check for === or !==\n if (this.pos < this.input.length && this.input[this.pos] === '=') {\n op += '=';\n this.pos++;\n }\n }\n }\n\n return { type: TokenType.OPERATOR, value: op };\n }\n}\n\n// Parser and Evaluator\nclass ExpressionParser {\n private tokens: Token[];\n private pos = 0;\n\n constructor(tokens: Token[]) {\n this.tokens = tokens;\n }\n\n parse(): (context: ExpressionContext) => any {\n const expr = this.parseTernary();\n this.consume(TokenType.EOF);\n return (context: ExpressionContext) => expr(context);\n }\n\n private parseTernary(): (context: ExpressionContext) => any {\n const expr = this.parseLogicalOr();\n\n if (this.current().type === TokenType.TERNARY_QUESTION) {\n this.consume(TokenType.TERNARY_QUESTION);\n const trueExpr = this.parseLogicalOr();\n this.consume(TokenType.TERNARY_COLON);\n const falseExpr = this.parseTernary();\n\n return (context: ExpressionContext) => {\n return expr(context) ? trueExpr(context) : falseExpr(context);\n };\n }\n\n return expr;\n }\n\n private parseLogicalOr(): (context: ExpressionContext) => any {\n let left = this.parseLogicalAnd();\n\n while (this.current().type === TokenType.LOGICAL && this.current().value === '||') {\n this.consume(TokenType.LOGICAL);\n const right = this.parseLogicalAnd();\n const prevLeft = left;\n left = (context: ExpressionContext) => prevLeft(context) || right(context);\n }\n\n return left;\n }\n\n private parseLogicalAnd(): (context: ExpressionContext) => any {\n let left = this.parseComparison();\n\n while (this.current().type === TokenType.LOGICAL && this.current().value === '&&') {\n this.consume(TokenType.LOGICAL);\n const right = this.parseComparison();\n const prevLeft = left;\n left = (context: ExpressionContext) => prevLeft(context) && right(context);\n }\n\n return left;\n }\n\n private parseComparison(): (context: ExpressionContext) => any {\n const left = this.parseAdditive();\n\n if (this.current().type === TokenType.OPERATOR) {\n const op = this.consume(TokenType.OPERATOR).value;\n const right = this.parseAdditive();\n\n return (context: ExpressionContext) => {\n const leftVal = left(context);\n const rightVal = right(context);\n\n switch (op) {\n case '===':\n return leftVal === rightVal;\n case '!==':\n return leftVal !== rightVal;\n case '==':\n return leftVal == rightVal;\n case '!=':\n return leftVal != rightVal;\n case '<':\n return leftVal < rightVal;\n case '<=':\n return leftVal <= rightVal;\n case '>':\n return leftVal > rightVal;\n case '>=':\n return leftVal >= rightVal;\n default:\n throw new Error(`Unknown operator: ${op}`);\n }\n };\n }\n\n return left;\n }\n\n private parseAdditive(): (context: ExpressionContext) => any {\n let left = this.parseMultiplicative();\n\n while (\n this.current().type === TokenType.ARITHMETIC &&\n (this.current().value === '+' || this.current().value === '-')\n ) {\n const op = this.consume(TokenType.ARITHMETIC).value;\n const right = this.parseMultiplicative();\n const prevLeft = left;\n\n if (op === '+') {\n left = (context: ExpressionContext) => prevLeft(context) + right(context);\n } else {\n left = (context: ExpressionContext) => prevLeft(context) - right(context);\n }\n }\n\n return left;\n }\n\n private parseMultiplicative(): (context: ExpressionContext) => any {\n let left = this.parseUnary();\n\n while (\n this.current().type === TokenType.ARITHMETIC &&\n (this.current().value === '*' || this.current().value === '/' || this.current().value === '%')\n ) {\n const op = this.consume(TokenType.ARITHMETIC).value;\n const right = this.parseUnary();\n const prevLeft = left;\n\n if (op === '*') {\n left = (context: ExpressionContext) => prevLeft(context) * right(context);\n } else if (op === '/') {\n left = (context: ExpressionContext) => prevLeft(context) / right(context);\n } else {\n left = (context: ExpressionContext) => prevLeft(context) % right(context);\n }\n }\n\n return left;\n }\n\n private parseUnary(): (context: ExpressionContext) => any {\n if (this.current().type === TokenType.NOT) {\n this.consume(TokenType.NOT);\n const expr = this.parseUnary();\n return (context: ExpressionContext) => !expr(context);\n }\n\n return this.parsePrimary();\n }\n\n private parsePrimary(): (context: ExpressionContext) => any {\n const token = this.current();\n\n // Parentheses\n if (token.type === TokenType.PAREN_OPEN) {\n this.consume(TokenType.PAREN_OPEN);\n const expr = this.parseTernary();\n this.consume(TokenType.PAREN_CLOSE);\n return expr;\n }\n\n // Literals\n if (\n token.type === TokenType.STRING ||\n token.type === TokenType.NUMBER ||\n token.type === TokenType.BOOLEAN ||\n token.type === TokenType.NULL ||\n token.type === TokenType.UNDEFINED\n ) {\n const value = token.value;\n this.pos++;\n return () => value;\n }\n\n // Property access (model.field, formState.prop, etc)\n if (token.type === TokenType.IDENTIFIER) {\n return this.parsePropertyAccess();\n }\n\n throw new Error(`Unexpected token: ${JSON.stringify(token)}`);\n }\n\n private parsePropertyAccess(): (context: ExpressionContext) => any {\n const path: Array<string | ((context: ExpressionContext) => any)> = [];\n\n // Read first identifier\n path.push(this.consume(TokenType.IDENTIFIER).value);\n\n // Read rest of path (dots and brackets)\n while (\n this.current().type === TokenType.DOT ||\n this.current().type === TokenType.OPTIONAL_DOT ||\n this.current().type === TokenType.BRACKET_OPEN\n ) {\n const optional = this.current().type === TokenType.OPTIONAL_DOT;\n if (optional) {\n this.consume(TokenType.OPTIONAL_DOT);\n }\n\n if (this.current().type === TokenType.DOT || (optional && this.current().type !== TokenType.BRACKET_OPEN)) {\n if (!optional) {\n this.consume(TokenType.DOT);\n }\n path.push(this.consume(TokenType.IDENTIFIER).value);\n } else {\n this.consume(TokenType.BRACKET_OPEN);\n\n // bracket notation can contain expressions\n if (this.current().type === TokenType.STRING) {\n path.push(this.consume(TokenType.STRING).value);\n } else if (this.current().type === TokenType.NUMBER) {\n path.push(String(this.consume(TokenType.NUMBER).value));\n } else {\n // dynamic property access\n const expr = this.parseTernary();\n path.push(expr);\n }\n\n this.consume(TokenType.BRACKET_CLOSE);\n }\n }\n\n return (context: ExpressionContext) => {\n let value: any = context;\n\n for (const segment of path) {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n if (typeof segment === 'function') {\n value = value[segment(context)];\n } else {\n value = value[segment];\n }\n }\n\n return value;\n };\n }\n\n private current(): Token {\n return this.tokens[this.pos];\n }\n\n private consume(expectedType: TokenType): Token {\n const token = this.current();\n\n if (token.type !== expectedType) {\n throw new Error(`Expected ${expectedType}, got ${token.type}`);\n }\n\n this.pos++;\n return token;\n }\n}\n\n/**\n * Uses CSP-safe implementation\n */\nexport function parseExpression(expression: string, argNames: string[]): any {\n try {\n const tokenizer = new Tokenizer(expression);\n const tokens = tokenizer.tokenize();\n const parser = new ExpressionParser(tokens);\n const evaluator = parser.parse();\n\n // Return a function that maps the args to the context\n return (...args: any[]) => {\n const context: any = {};\n argNames.forEach((name, i) => {\n context[name] = args[i];\n });\n return evaluator(context);\n };\n } catch (error) {\n console.error('Expression parse error:', error);\n return undefined;\n }\n}\n","import { FieldExpressionExtension as FieldExpressionLegacyExtension } from '../field-expression-legacy/field-expression';\nimport { parseExpression } from './utils';\n\nexport class FieldExpressionExtension extends FieldExpressionLegacyExtension {\n protected override _evalStringExpression(expression: string, argNames: string[]) {\n return parseExpression(expression, argNames);\n }\n}\n","import { ComponentRef } from '@angular/core';\nimport { FormlyConfig } from '../../services/formly.config';\nimport { FormlyFieldConfigCache, FormlyValueChangeEvent, FormlyExtension, FormlyFieldConfig } from '../../models';\nimport {\n getFieldId,\n assignFieldValue,\n isUndefined,\n getFieldValue,\n reverseDeepMerge,\n defineHiddenProp,\n clone,\n getField,\n markFieldForCheck,\n hasKey,\n observe,\n isHiddenField,\n isSignalRequired,\n} from '../../utils';\nimport { Subject } from 'rxjs';\n\nexport class CoreExtension implements FormlyExtension {\n private formId = 0;\n constructor(private config: FormlyConfig) {}\n\n prePopulate(field: FormlyFieldConfigCache) {\n const root = field.parent;\n this.initRootOptions(field);\n this.initFieldProps(field);\n if (root) {\n Object.defineProperty(field, 'options', { get: () => root.options, configurable: true });\n Object.defineProperty(field, 'model', {\n get: () => (hasKey(field) && field.fieldGroup ? getFieldValue(field) : root.model),\n configurable: true,\n });\n }\n\n Object.defineProperty(field, 'get', {\n value: (key: FormlyFieldConfig['key']) => getField(field, key),\n configurable: true,\n });\n\n this.getFieldComponentInstance(field).prePopulate?.(field);\n }\n\n onPopulate(field: FormlyFieldConfigCache) {\n this.initFieldOptions(field);\n this.getFieldComponentInstance(field).onPopulate?.(field);\n if (field.fieldGroup) {\n field.fieldGroup.forEach((f, index) => {\n if (f) {\n Object.defineProperty(f, 'parent', { get: () => field, configurable: true });\n Object.defineProperty(f, 'index', { get: () => index, configurable: true });\n }\n this.formId++;\n });\n }\n }\n\n postPopulate(field: FormlyFieldConfigCache) {\n this.getFieldComponentInstance(field).postPopulate?.(field);\n }\n\n private initFieldProps(field: FormlyFieldConfigCache) {\n field.props ??= field.templateOptions;\n Object.defineProperty(field, 'templateOptions', {\n get: () => field.props,\n set: (props) => (field.props = props),\n configurable: true,\n });\n }\n\n private initRootOptions(field: FormlyFieldConfigCache) {\n if (field.parent) {\n return;\n }\n\n const options = field.options;\n field.options.formState = field.options.formState || {};\n if (!options.showError) {\n options.showError = this.config.extras.showError;\n }\n\n if (!options.fieldChanges) {\n defineHiddenProp(options, 'fieldChanges', new Subject<FormlyValueChangeEvent>());\n }\n\n if (!options._hiddenFieldsForCheck) {\n options._hiddenFieldsForCheck = [];\n }\n\n options._detectChanges = (f: FormlyFieldConfigCache) => {\n if (f._componentRefs) {\n markFieldForCheck(f);\n }\n\n f.fieldGroup?.forEach((f) => f && options._detectChanges(f));\n };\n\n options.detectChanges = (f: FormlyFieldConfigCache) => {\n f.options.checkExpressions?.(f);\n options._detectChanges(f);\n };\n\n options.resetModel = (model?: any) => {\n model = clone(model ?? options._initialModel);\n if (field.model) {\n Object.keys(field.model).forEach((k) => delete field.model[k]);\n Object.assign(field.model, model || {});\n }\n\n if (!isSignalRequired()) {\n observe(options, ['parentForm', 'submitted']).setValue(false, false);\n }\n options.build(field);\n field.form.reset(field.model);\n };\n\n options.updateInitialValue = (model?: any) => (options._initialModel = clone(model ?? field.model));\n field.options.updateInitialValue();\n }\n\n private initFieldOptions(field: FormlyFieldConfigCache) {\n reverseDeepMerge(field, {\n id: getFieldId(`formly_${this.formId}`, field, field.index),\n hooks: {},\n modelOptions: {},\n validation: { messages: {} },\n props:\n !field.type || !hasKey(field)\n ? {}\n : {\n label: '',\n placeholder: '',\n disabled: false,\n },\n });\n\n if (this.config.extras.resetFieldOnHide && field.resetOnHide !== false) {\n field.resetOnHide = true;\n }\n\n if (\n field.type !== 'formly-template' &&\n (field.template || field.expressions?.template || field.expressionProperties?.template)\n ) {\n field.type = 'formly-template';\n }\n\n if (!field.type && field.fieldGroup) {\n field.type = 'formly-group';\n }\n\n if (field.type) {\n this.config.getMergedField(field);\n }\n\n if (\n hasKey(field) &&\n !isUndefined(field.defaultValue) &&\n isUndefined(getFieldValue(field)) &&\n !isHiddenField(field)\n ) {\n assignFieldValue(field, field.defaultValue);\n }\n\n field.wrappers = field.wrappers || [];\n }\n\n private getFieldComponentInstance(field: FormlyFieldConfigCache) {\n const componentRefInstance = () => {\n let componentRef = this.config.resolveFieldTypeRef(field);\n\n const fieldComponentRef = field._componentRefs?.slice(-1)[0];\n if (\n fieldComponentRef instanceof ComponentRef &&\n fieldComponentRef?.componentType === componentRef?.componentType\n ) {\n componentRef = fieldComponentRef as any;\n }\n\n return componentRef?.instance as any;\n };\n\n if (!field._proxyInstance) {\n defineHiddenProp(\n field,\n '_proxyInstance',\n new Proxy({} as FormlyExtension, {\n get: (_, prop) => componentRefInstance()?.[prop],\n set: (_, prop, value) => (componentRefInstance()[prop] = value),\n }),\n );\n }\n\n return field._proxyInstance;\n }\n}\n","import { FormlyExtension, FormlyFieldConfigCache } from '../../models';\nimport {\n UntypedFormGroup,\n UntypedFormControl,\n AbstractControlOptions,\n Validators,\n ValidatorFn,\n AsyncValidatorFn,\n FormControl,\n} from '@angular/forms';\nimport { getFieldValue, defineHiddenProp, hasKey, getKeyPath } from '../../utils';\nimport { registerControl, findControl, updateValidity } from './utils';\nimport { of } from 'rxjs';\n\nexport class FieldFormExtension implements FormlyExtension {\n private root: FormlyFieldConfigCache;\n prePopulate(field: FormlyFieldConfigCache) {\n if (!this.root) {\n this.root = field;\n }\n\n if (field.parent) {\n Object.defineProperty(field, 'form', {\n get: () => field.parent!.formControl,\n configurable: true,\n });\n }\n }\n\n onPopulate(field: FormlyFieldConfigCache) {\n if (field.hasOwnProperty('fieldGroup') && !hasKey(field)) {\n defineHiddenProp(field, 'formControl', field.form);\n } else {\n this.addFormControl(field);\n }\n }\n\n postPopulate(field: FormlyFieldConfigCache) {\n if (this.root !== field) {\n return;\n }\n\n this.root = null;\n const markForCheck = this.setValidators(field);\n if (markForCheck && field.parent) {\n let parent = field.parent;\n while (parent) {\n if (hasKey(parent) || !parent.parent) {\n updateValidity(parent.formControl, true);\n }\n parent = parent.parent;\n }\n }\n }\n\n private addFormControl(field: FormlyFieldConfigCache) {\n let control = findControl(field);\n if (field.fieldArray) {\n return;\n }\n\n if (!control) {\n const controlOptions: AbstractControlOptions = { updateOn: field.modelOptions.updateOn };\n\n if (field.fieldGroup) {\n control = new UntypedFormGroup({}, controlOptions);\n } else {\n const value = hasKey(field) ? getFieldValue(field) : field.defaultValue;\n control = new UntypedFormControl(\n { value, disabled: !!field.props.disabled },\n { ...controlOptions, initialValueIsDefault: true },\n );\n }\n } else {\n if (control instanceof FormControl) {\n const value = hasKey(field) ? getFieldValue(field) : field.defaultValue;\n (control as any).defaultValue = value;\n }\n }\n\n registerControl(field, control);\n }\n\n private setValidators(field: FormlyFieldConfigCache, disabled = false) {\n if (disabled === false && hasKey(field) && field.props?.disabled) {\n disabled = true;\n }\n\n let markForCheck = false;\n field.fieldGroup?.forEach((f) => f && this.setValidators(f, disabled) && (markForCheck = true));\n if (hasKey(field) || !field.parent || (!hasKey(field) && !field.fieldGroup)) {\n const { formControl: c } = field;\n if (c) {\n if (hasKey(field) && c instanceof FormControl) {\n if (disabled && c.enabled) {\n c.disable({ emitEvent: false, onlySelf: true });\n markForCheck = true;\n }\n\n if (!disabled && c.disabled) {\n c.enable({ emitEvent: false, onlySelf: true });\n markForCheck = true;\n }\n }\n\n if (null === c.validator && this.hasValidators(field, '_validators')) {\n c.setValidators(() => {\n const v = Validators.compose(this.mergeValidators<ValidatorFn>(field, '_validators'));\n\n return v ? v(c) : null;\n });\n markForCheck = true;\n }\n\n if (null === c.asyncValidator && this.hasValidators(field, '_asyncValidators')) {\n c.setAsyncValidators(() => {\n const v = Validators.composeAsync(this.mergeValidators<AsyncValidatorFn>(field, '_asyncValidators'));\n return v ? v(c) : of(null);\n });\n markForCheck = true;\n }\n\n if (markForCheck) {\n updateValidity(c, true);\n\n // update validity of `FormGroup` instance created by field with nested key.\n let parent = c.parent;\n for (let i = 1; i < getKeyPath(field).length; i++) {\n if (parent) {\n updateValidity(parent, true);\n parent = parent.parent;\n }\n }\n }\n }\n }\n\n return markForCheck;\n }\n\n private hasValidators(field: FormlyFieldConfigCache, type: '_validators' | '_asyncValidators'): boolean {\n const c = field.formControl;\n if (c?._fields?.length > 1 && c._fields.some((f) => f[type].length > 0)) {\n return true;\n } else if (field[type].length > 0) {\n return true;\n }\n\n return field.fieldGroup?.some((f) => f?.fieldGroup && !hasKey(f) && this.hasValidators(f, type));\n }\n\n private mergeValidators<T>(field: FormlyFieldConfigCache, type: '_validators' | '_asyncValidators'): T[] {\n const validators: any = [];\n const c = field.formControl;\n if (c?._fields?.length > 1) {\n c._fields\n .filter((f: FormlyFieldConfigCache) => !f._hide)\n .forEach((f: FormlyFieldConfigCache) => validators.push(...f[type]));\n } else if (!field._hide && field[type]) {\n validators.push(...field[type]);\n }\n\n if (field.fieldGroup) {\n field.fieldGroup\n .filter((f) => f?.fieldGroup && !hasKey(f))\n .forEach((f) => validators.push(...this.mergeValidators(f, type)));\n }\n\n return validators;\n }\n}\n","import { FormlyConfig } from '../../services/formly.config';\nimport { FormlyExtension, ValidatorOption, FormlyFieldConfigCache } from '../../models';\nimport { AbstractControl, Validators, ValidatorFn } from '@angular/forms';\nimport { FORMLY_VALIDATORS, defineHiddenProp, isPromise, observe, clone, isObject, hasKey } from '../../utils';\nimport { updateValidity } from '../field-form/utils';\nimport { parseExpression } from '../field-expression/utils';\nimport { isObservable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport class FieldValidationExtension implements FormlyExtension {\n constructor(private config: FormlyConfig) {}\n\n onPopulate(field: FormlyFieldConfigCache) {\n this.initFieldValidation(field, 'validators');\n this.initFieldValidation(field, 'asyncValidators');\n }\n\n private initFieldValidation(field: FormlyFieldConfigCache, type: 'validators' | 'asyncValidators') {\n const validators: ValidatorFn[] = [];\n if (type === 'validators' && !(field.hasOwnProperty('fieldGroup') && !hasKey(field))) {\n validators.push(this.getPredefinedFieldValidation(field));\n }\n\n if (field[type]) {\n for (const validatorName of Object.keys(field[type])) {\n validatorName === 'validation'\n ? validators.push(...field[type].validation.map((v: any) => this.wrapNgValidatorFn(field, v)))\n : validators.push(this.wrapNgValidatorFn(field, field[type][validatorName], validatorName));\n }\n }\n\n defineHiddenProp(field, '_' + type, validators);\n }\n\n private getPredefinedFieldValidation(field: FormlyFieldConfigCache): ValidatorFn {\n let VALIDATORS: string[] = [];\n FORMLY_VALIDATORS.forEach((opt) =>\n observe(field, ['props', opt], ({ currentValue, firstChange }) => {\n VALIDATORS = VALIDATORS.filter((o) => o !== opt);\n if (opt === 'required' && currentValue != null && typeof currentValue !== 'boolean') {\n console.warn(\n `Formly: Invalid prop 'required' of type '${typeof currentValue}', expected 'boolean' (Field:${\n field.key\n }).`,\n );\n }\n\n if (currentValue != null && currentValue !== false) {\n VALIDATORS.push(opt);\n }\n if (!firstChange && field.formControl) {\n updateValidity(field.formControl);\n }\n }),\n );\n\n return (control: AbstractControl) => {\n if (VALIDATORS.length === 0) {\n return null;\n }\n\n return Validators.compose(\n VALIDATORS.map((opt) => () => {\n const value = field.props[opt];\n switch (opt) {\n case 'required':\n return Validators.required(control);\n case 'pattern':\n return Validators.pattern(value)(control);\n case 'minLength':\n const minLengthResult = Validators.minLength(value)(control);\n const minLengthKey =\n this.config.getValidatorMessage('minlength') || field.validation?.messages?.minlength\n ? 'minlength'\n : 'minLength';\n\n return minLengthResult ? { [minLengthKey]: minLengthResult.minlength } : null;\n case 'maxLength':\n const maxLengthResult = Validators.maxLength(value)(control);\n const maxLengthKey =\n this.config.getValidatorMessage('maxlength') || field.validation?.messages?.maxlength\n ? 'maxlength'\n : 'maxLength';\n\n return maxLengthResult ? { [maxLengthKey]: maxLengthResult.maxlength } : null;\n case 'min':\n return Validators.min(value)(control);\n case 'max':\n return Validators.max(value)(control);\n case 'step': {\n // JSON Schema multipleOf validates against zero, independently of min.\n if (\n field.validators?.multipleOf ||\n typeof control.value !== 'number' ||\n !Number.isFinite(value) ||\n value <= 0\n ) {\n return null;\n }\n\n const base = Number.isFinite(field.props.min) ? field.props.min : 0;\n const error = { step: { step: value, base, actual: control.value } };\n if (!Number.isFinite(control.value)) {\n return error;\n }\n\n // Scale decimal representations to integers without rounding away extra digits.\n const decimals = [control.value, value, base].map((n) => {\n const [coefficient, exponent = '0'] = n.toString().split('e');\n const [integer, fraction = ''] = coefficient.split('.');\n return { digits: BigInt(integer + fraction), exponent: Number(exponent) - fraction.length };\n });\n const exponent = Math.min(...decimals.map((n) => n.exponent));\n const [actual, step, start] = decimals.map((n) => n.digits * 10n ** BigInt(n.exponent - exponent));\n\n return (actual - start) % step === 0n ? null : error;\n }\n default:\n return null;\n }\n }),\n )!(control);\n };\n }\n\n private wrapNgValidatorFn(field: FormlyFieldConfigCache, validator: any, validatorName?: string) {\n let validatorOption: ValidatorOption;\n if (typeof validator === 'string') {\n validatorOption = clone(this.config.getValidator(validator));\n }\n\n if (typeof validator === 'object' && validator.name) {\n validatorOption = clone(this.config.getValidator(validator.name));\n if (validator.options) {\n validatorOption.options = validator.options;\n }\n }\n\n if (typeof validator === 'object' && 'expression' in validator) {\n const { expression, ...options } = validator;\n let validation = expression;\n if (typeof expression === 'string') {\n const evaluate = parseExpression(expression, ['model', 'formState', 'field', 'control']);\n if (!evaluate) {\n throw new Error(`[Formly Error] Invalid validation expression for \"${validatorName}\": ${expression}`);\n }\n\n validation = (control: AbstractControl, field: FormlyFieldConfigCache) =>\n evaluate(field.model, field.options.formState, field, control);\n }\n\n validatorOption = {\n name: validatorName,\n validation,\n options: Object.keys(options).length > 0 ? options : null,\n };\n }\n\n if (typeof validator === 'function') {\n validatorOption = {\n name: validatorName,\n validation: validator,\n };\n }\n\n return (control: AbstractControl) => {\n const errors: any = validatorOption.validation(control, field, validatorOption.options);\n if (isPromise(errors)) {\n return errors.then((v) => this.handleResult(field, validatorName ? !!v : v, validatorOption));\n }\n\n if (isObservable(errors)) {\n return errors.pipe(map((v) => this.handleResult(field, validatorName ? !!v : v, validatorOption)));\n }\n\n return this.handleResult(field, validatorName ? !!errors : errors, validatorOption);\n };\n }\n\n private handleResult(field: FormlyFieldConfigCache, errors: any, { name, options }: ValidatorOption) {\n if (typeof errors === 'boolean') {\n errors = errors ? null : { [name]: options ? options : true };\n }\n\n const ctrl = field.formControl;\n ctrl?._childrenErrors?.[name]?.();\n\n if (isObject(errors)) {\n Object.keys(errors).forEach((name) => {\n const errorPath = errors[name].errorPath ? errors[name].errorPath : options?.errorPath;\n\n const childCtrl = errorPath ? field.formControl.get(errorPath) : null;\n if (childCtrl) {\n const { errorPath: _errorPath, ...opts } = errors[name];\n childCtrl.setErrors({ ...(childCtrl.errors || {}), [name]: opts });\n\n !ctrl._childrenErrors && defineHiddenProp(ctrl, '_childrenErrors', {});\n ctrl._childrenErrors[name] = () => {\n const { [name]: _toDelete, ...childErrors } = childCtrl.errors || {};\n childCtrl.setErrors(Object.keys(childErrors).length === 0 ? null : childErrors);\n };\n }\n });\n }\n\n return errors;\n }\n}\n","import { Input, Directive, QueryList, ViewChildren } from '@angular/core';\nimport { UntypedFormControl, NgControl, UntypedFormGroup } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyFieldConfigCache } from '../models';\n\nexport interface FieldTypeConfig<T = FormlyFieldConfig['props']> extends FormlyFieldConfig<T> {\n formControl: UntypedFormControl;\n props: NonNullable<T>;\n}\n\nexport interface FieldGroupTypeConfig<T = FormlyFieldConfig['props']> extends FormlyFieldConfig<T> {\n formControl: UntypedFormGroup;\n props: NonNullable<T>;\n}\n\n@Directive()\nexport abstract class FieldType<F extends FormlyFieldConfig = FormlyFieldConfig> {\n @ViewChildren(NgControl) set _formlyControls(controls: QueryList<NgControl>) {\n const f = this.field as FormlyFieldConfigCache;\n f._localFields = controls\n .map((c) => (c.control as FormlyFieldConfigCache['formControl'])._fields || [])\n .flat()\n .filter((f: FormlyFieldConfig) => f.formControl !== this.field.formControl);\n }\n\n @Input() field: F = {} as F;\n defaultOptions?: Partial<F>;\n\n get model() {\n return this.field.model;\n }\n\n get form() {\n return this.field.form;\n }\n\n get options() {\n return this.field.options;\n }\n\n get key() {\n return this.field.key;\n }\n\n get formControl() {\n return this.field.formControl as NonNullable<F['formControl']>;\n }\n\n get props() {\n return (this.field.props || {}) as NonNullable<F['props']>;\n }\n\n /** @deprecated Use `props` instead. */\n get to() {\n return this.props;\n }\n\n get showError(): boolean {\n return this.options.showError(this);\n }\n\n get id(): string {\n return this.field.id;\n }\n\n get formState() {\n return this.options?.formState || {};\n }\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { FieldType } from './field.type';\n\n/** @ignore */\n@Component({\n selector: 'formly-template',\n template: `<div [innerHtml]=\"template\"></div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class FormlyTemplateType extends FieldType {\n get template() {\n if (this.field && this.field.template !== this.innerHtml.template) {\n this.innerHtml = {\n template: this.field.template,\n content: this.props.safeHtml\n ? this.sanitizer.bypassSecurityTrustHtml(this.field.template)\n : this.field.template,\n };\n }\n\n return this.innerHtml.content;\n }\n\n private innerHtml: { content?: SafeHtml; template?: string } = {};\n constructor(private sanitizer: DomSanitizer) {\n super();\n }\n}\n","import { Injectable, ComponentRef, Type } from '@angular/core';\nimport { FieldType } from './../templates/field.type';\nimport { reverseDeepMerge } from './../utils';\nimport {\n FormlyFieldConfig,\n FormlyFieldConfigCache,\n ConfigOption,\n TypeOption,\n ValidatorOption,\n WrapperOption,\n FormlyExtension,\n ValidationMessageOption,\n ExtensionOption,\n FormlyFieldConfigPresetProvider,\n} from '../models';\nimport { FieldWrapper } from '../templates/field.wrapper';\n\ndeclare const ngDevMode: any;\n\n/**\n * Maintains list of formly config options. This can be used to register new field type.\n */\n@Injectable({ providedIn: 'root' })\nexport class FormlyConfig {\n types: { [name: string]: TypeOption } = {};\n validators: { [name: string]: ValidatorOption } = {};\n wrappers: { [name: string]: WrapperOption } = {};\n messages: { [name: string]: ValidationMessageOption['message'] } = {};\n\n extras: NonNullable<ConfigOption['extras']> = {\n checkExpressionOn: 'modelChange',\n lazyRender: true,\n resetFieldOnHide: true,\n renderFormlyFieldElement: true,\n showError(field: FieldType) {\n return (\n field.formControl?.invalid &&\n (field.formControl?.touched || field.options.parentForm?.submitted || !!field.field.validation?.show)\n );\n },\n };\n extensions: { [name: string]: FormlyExtension } = {};\n presets: { [name: string]: FormlyFieldConfig | FormlyFieldConfigPresetProvider } = {};\n private extensionsByPriority: Record<number, { [name: string]: FormlyExtension }> = {};\n private componentRefs: Record<string, ComponentRef<FieldType>> = {};\n\n addConfig(config: ConfigOption | ConfigOption[]) {\n if (Array.isArray(config)) {\n config.forEach((c) => this.addConfig(c));\n return;\n }\n\n if (config.types) {\n config.types.forEach((type) => this.setType(type));\n }\n if (config.validators) {\n config.validators.forEach((validator) => this.setValidator(validator));\n }\n if (config.wrappers) {\n config.wrappers.forEach((wrapper) => this.setWrapper(wrapper));\n }\n if (config.validationMessages) {\n config.validationMessages.forEach((validation) => this.addValidatorMessage(validation.name, validation.message));\n }\n if (config.extensions) {\n this.setSortedExtensions(config.extensions);\n }\n if (config.extras) {\n this.extras = { ...this.extras, ...config.extras };\n }\n if (config.presets) {\n this.presets = {\n ...this.presets,\n ...config.presets.reduce((acc, curr) => ({ ...acc, [curr.name]: curr.config }), {}),\n };\n }\n }\n\n /**\n * Allows you to specify a custom type which you can use in your field configuration.\n * You can pass an object of options, or an array of objects of options.\n */\n setType(options: TypeOption | TypeOption[]) {\n if (Array.isArray(options)) {\n options.forEach((option) => this.setType(option));\n } else {\n if (!this.types[options.name]) {\n this.types[options.name] = <TypeOption>{ name: options.name };\n }\n\n (['component', 'extends', 'defaultOptions', 'wrappers'] as (keyof TypeOption)[]).forEach((prop) => {\n if (options.hasOwnProperty(prop)) {\n this.types[options.name][prop] = options[prop] as any;\n }\n });\n }\n }\n\n getType(name: FormlyFieldConfig['type'], throwIfNotFound = false): TypeOption {\n if (name instanceof Type) {\n return { component: name, name: name.prototype.constructor.name };\n }\n\n if (!this.types[name]) {\n if (throwIfNotFound) {\n throw new Error(\n `[Formly Error] The type \"${name}\" could not be found. Please make sure that is registered through the FormlyModule declaration.`,\n );\n }\n\n return null;\n }\n\n this.mergeExtendedType(name);\n\n return this.types[name];\n }\n\n /** @ignore */\n getMergedField(field: FormlyFieldConfig = {}): any {\n const type = this.getType(field.type);\n if (!type) {\n return;\n }\n\n if (type.defaultOptions) {\n reverseDeepMerge(field, type.defaultOptions);\n }\n\n const extendDefaults = type.extends && this.getType(type.extends).defaultOptions;\n if (extendDefaults) {\n reverseDeepMerge(field, extendDefaults);\n }\n\n if (field?.optionsTypes) {\n field.optionsTypes.forEach((option) => {\n const defaultOptions = this.getType(option).defaultOptions;\n if (defaultOptions) {\n reverseDeepMerge(field, defaultOptions);\n }\n });\n }\n\n const componentRef = this.resolveFieldTypeRef(field);\n if (componentRef?.instance?.defaultOptions) {\n reverseDeepMerge(field, componentRef.instance.defaultOptions);\n }\n\n if (!field.wrappers && type.wrappers) {\n field.wrappers = [...type.wrappers];\n }\n }\n\n /** @ignore @internal */\n resolveFieldTypeRef(field: FormlyFieldConfigCache = {}): ComponentRef<FieldType> {\n const type: TypeOption = this.getType(field.type);\n if (!type) {\n return null;\n }\n\n if (!type.component) {\n return null;\n }\n\n if (!this.componentRefs[type.name]) {\n const { _viewContainerRef, _injector } = field.options;\n if (!_viewContainerRef || !_injector) {\n return null;\n }\n\n const componentRef = _viewContainerRef.createComponent<FieldType>(type.component, { injector: _injector });\n this.componentRefs[type.name] = componentRef;\n try {\n componentRef.destroy();\n } catch (e) {\n console.error(`An error occurred while destroying the Formly component type \"${field.type}\"`, e);\n }\n }\n\n return this.componentRefs[type.name];\n }\n /** @ignore @internal */\n clearRefs() {\n this.componentRefs = {};\n }\n\n setWrapper(options: WrapperOption) {\n this.wrappers[options.name] = options;\n if (options.types) {\n options.types.forEach((type) => {\n this.setTypeWrapper(type, options.name);\n });\n }\n }\n\n getWrapper(name: string | Type<FieldWrapper>): WrapperOption {\n if (name instanceof Type) {\n return { component: name, name: name.prototype.constructor.name };\n }\n\n if (!this.wrappers[name]) {\n throw new Error(\n `[Formly Error] The wrapper \"${name}\" could not be found. Please make sure that is registered through the FormlyModule declaration.`,\n );\n }\n\n return this.wrappers[name];\n }\n\n /** @ignore */\n setTypeWrapper(type: string, name: string) {\n if (!this.types[type]) {\n this.types[type] = <TypeOption>{};\n }\n if (!this.types[type].wrappers) {\n this.types[type].wrappers = [];\n }\n if (this.types[type].wrappers.indexOf(name) === -1) {\n this.types[type].wrappers.push(name);\n }\n }\n\n setValidator(options: ValidatorOption) {\n this.validators[options.name] = options;\n }\n\n getValidator(name: string): ValidatorOption {\n if (!this.validators[name]) {\n throw new Error(\n `[Formly Error] The validator \"${name}\" could not be found. Please make sure that is registered through the FormlyModule declaration.`,\n );\n }\n\n return this.validators[name];\n }\n\n addValidatorMessage(name: string, message: ValidationMessageOption['message']) {\n this.messages[name] = message;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const deprecated = { minlength: 'minLength', maxlength: 'maxLength' } as any;\n if (deprecated[name]) {\n console.warn(\n `Formly deprecation: passing validation messages key '${name}' is deprecated since v6.0, use '${deprecated[name]}' instead.`,\n );\n this.messages[deprecated[name]] = message;\n }\n }\n }\n\n getValidatorMessage(name: string) {\n return this.messages[name];\n }\n\n private setSortedExtensions(extensionOptions: ExtensionOption[]) {\n // insert new extensions, grouped by priority\n extensionOptions.forEach((extensionOption) => {\n const priority = extensionOption.priority ?? 1;\n this.extensionsByPriority[priority] = {\n ...this.extensionsByPriority[priority],\n [extensionOption.name]: extensionOption.extension,\n };\n });\n // flatten extensions object with sorted keys\n this.extensions = Object.keys(this.extensionsByPriority)\n .map(Number)\n .sort((a, b) => a - b)\n .reduce(\n (acc, prio) => ({\n ...acc,\n ...this.extensionsByPriority[prio],\n }),\n {},\n );\n }\n\n private mergeExtendedType(name: string) {\n if (!this.types[name].extends) {\n return;\n }\n\n const extendedType = this.getType(this.types[name].extends);\n if (!this.types[name].component) {\n this.types[name].component = extendedType.component;\n }\n\n if (!this.types[name].wrappers) {\n this.types[name].wrappers = extendedType.wrappers;\n }\n }\n}\n","import { Directive, Injectable, Input, OnChanges, QueryList, TemplateRef } from '@angular/core';\n\n@Directive({ selector: '[formlyTemplate]', standalone: true })\nexport class FormlyTemplate implements OnChanges {\n @Input('formlyTemplate') name: string;\n\n constructor(public ref: TemplateRef<any>) {}\n\n ngOnChanges() {\n this.name = this.name || 'formly-group';\n }\n}\n\n@Directive({ selector: '[formlyTemplate]', standalone: false })\nexport class LegacyFormlyTemplate extends FormlyTemplate {}\n\n// workarround for https://github.com/angular/angular/issues/43227#issuecomment-904173738\n@Injectable()\nexport class FormlyFieldTemplates {\n templates!: QueryList<FormlyTemplate>;\n}\n","import {\n Component,\n Input,\n ViewContainerRef,\n ViewChild,\n ComponentRef,\n SimpleChanges,\n DoCheck,\n OnInit,\n OnChanges,\n OnDestroy,\n AfterContentInit,\n AfterViewInit,\n Renderer2,\n ElementRef,\n EmbeddedViewRef,\n Optional,\n Injector,\n} from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { FormlyConfig } from '../services/formly.config';\nimport { FormlyFieldConfig, FormlyFieldConfigCache, FormlyHookConfig } from '../models';\nimport {\n defineHiddenProp,\n observe,\n observeDeep,\n getFieldValue,\n assignFieldValue,\n isObject,\n markFieldForCheck,\n hasKey,\n IObserver,\n isSignalRequired,\n} from '../utils';\nimport { FieldWrapper } from '../templates/field.wrapper';\nimport { FieldType } from '../templates/field.type';\nimport { Subscription, isObservable } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter, map, skip, startWith } from 'rxjs/operators';\nimport { FormlyFieldTemplates } from './formly.template';\n\n/**\n * The `<formly-field>` component is used to render the UI widget (layout + type) of a given `field`.\n */\n@Component({\n selector: 'formly-field',\n template: '<ng-template #container></ng-template>',\n styleUrls: ['./formly.field.scss'],\n standalone: true,\n})\nexport class FormlyField implements DoCheck, OnInit, OnChanges, AfterContentInit, AfterViewInit, OnDestroy {\n /** The field config. */\n @Input() field: FormlyFieldConfig;\n @ViewChild('container', { read: ViewContainerRef, static: true }) viewContainerRef!: ViewContainerRef;\n\n private hostObservers: (IObserver<any> | Subscription)[] = [];\n private componentRefs: (ComponentRef<FieldType> | EmbeddedViewRef<FieldType>)[] = [];\n private hooksObservers: (() => void)[] = [];\n private detectFieldBuild = false;\n\n private get containerRef() {\n return this.config.extras.renderFormlyFieldElement ? this.viewContainerRef : this.hostContainerRef;\n }\n\n private get elementRef() {\n if (this.config.extras.renderFormlyFieldElement) {\n return this._elementRef;\n }\n if (this.componentRefs?.[0] instanceof ComponentRef) {\n return this.componentRefs[0].location;\n }\n\n return null;\n }\n\n valueChangesUnsubscribe = () => {};\n\n constructor(\n private config: FormlyConfig,\n private renderer: Renderer2,\n private _elementRef: ElementRef,\n private hostContainerRef: ViewContainerRef,\n private injector: Injector,\n @Optional() private form: FormlyFieldTemplates,\n ) {}\n\n ngAfterContentInit() {\n this.triggerHook('afterContentInit');\n }\n\n ngAfterViewInit() {\n this.triggerHook('afterViewInit');\n }\n\n ngDoCheck() {\n if (this.detectFieldBuild && this.field && this.field.options) {\n this.render();\n }\n }\n\n ngOnInit() {\n this.triggerHook('onInit');\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this.triggerHook('onChanges', changes);\n }\n\n ngOnDestroy() {\n this.resetRefs(this.field);\n this.hostObservers.forEach((hostObserver) => hostObserver.unsubscribe());\n this.hooksObservers.forEach((unsubscribe) => unsubscribe());\n this.valueChangesUnsubscribe();\n this.triggerHook('onDestroy');\n }\n\n private renderField(\n containerRef: ViewContainerRef,\n f: FormlyFieldConfigCache,\n wrappers: FormlyFieldConfig['wrappers'] = [],\n ) {\n if (this.containerRef === containerRef) {\n this.resetRefs(this.field);\n this.containerRef.clear();\n wrappers = this.field?.wrappers;\n }\n\n if (wrappers?.length > 0) {\n const [wrapper, ...wps] = wrappers;\n const { component } = this.config.getWrapper(wrapper);\n\n const ref = containerRef.createComponent<FieldWrapper>(component);\n this.attachComponentRef(ref, f);\n observe<ViewContainerRef & { _lContainer: any }>(\n ref.instance,\n ['fieldComponent'],\n ({ currentValue, previousValue, firstChange }) => {\n if (currentValue) {\n if (previousValue && previousValue._lContainer === currentValue._lContainer) {\n return;\n }\n\n const viewRef = previousValue ? previousValue.detach() : null;\n if (viewRef && !viewRef.destroyed) {\n currentValue.insert(viewRef);\n } else {\n this.renderField(currentValue, f, wps);\n }\n\n !firstChange && ref.changeDetectorRef.detectChanges();\n }\n },\n );\n } else if (f?.type) {\n const inlineType = this.form?.templates?.find((ref) => ref.name === f.type);\n let ref: ComponentRef<any> | EmbeddedViewRef<any>;\n if (inlineType) {\n ref = containerRef.createEmbeddedView(\n inlineType.ref,\n { $implicit: f },\n { injector: this.createFieldInjector() },\n );\n } else {\n const { component } = this.config.getType(f.type, true);\n ref = containerRef.createComponent<FieldWrapper>(component as any);\n }\n this.attachComponentRef(ref, f);\n }\n }\n\n private triggerHook(name: keyof FormlyHookConfig, changes?: SimpleChanges) {\n if (name === 'onInit' || (name === 'onChanges' && changes.field && !changes.field.firstChange)) {\n this.valueChangesUnsubscribe();\n this.valueChangesUnsubscribe = this.fieldChanges(this.field);\n }\n\n if (this.field?.hooks?.[name]) {\n if (!changes || changes.field) {\n const r = this.field.hooks[name](this.field);\n if (isObservable(r) && ['onInit', 'afterContentInit', 'afterViewInit'].indexOf(name) !== -1) {\n const sub = r.subscribe();\n this.hooksObservers.push(() => sub.unsubscribe());\n }\n }\n }\n\n if (name === 'onChanges' && changes.field) {\n this.resetRefs(changes.field.previousValue);\n this.render();\n }\n }\n\n attachLocalField(field?: FormlyFieldConfigCache, previousField?: FormlyFieldConfigCache) {\n const currentField = this.field as FormlyFieldConfigCache;\n if (!currentField) {\n return;\n }\n\n const localFields = (currentField._localFields || []).filter((f) => f !== field && f !== previousField);\n\n if (field && field !== currentField) {\n localFields.push(field);\n }\n\n if (currentField._localFields) {\n currentField._localFields = localFields;\n } else if (localFields.length > 0) {\n defineHiddenProp(currentField, '_localFields', localFields);\n }\n }\n\n private createFieldInjector() {\n return Injector.create({\n providers: [{ provide: FormlyField, useValue: this }],\n parent: this.injector,\n });\n }\n\n private attachComponentRef<T extends FieldType>(\n ref: ComponentRef<T> | EmbeddedViewRef<T>,\n field: FormlyFieldConfigCache,\n ) {\n this.componentRefs.push(ref);\n field._componentRefs.push(ref);\n if (ref instanceof ComponentRef) {\n Object.assign(ref.instance, { field });\n }\n }\n\n private render() {\n if (!this.field) {\n return;\n }\n\n // require Formly build\n if (!this.field.options) {\n this.detectFieldBuild = true;\n\n return;\n }\n\n this.detectFieldBuild = false;\n this.hostObservers.forEach((hostObserver) => hostObserver.unsubscribe());\n this.hostObservers = [\n observe<boolean>(this.field, ['hide'], ({ firstChange, currentValue }) => {\n const containerRef = this.containerRef;\n if (this.config.extras.lazyRender === false) {\n firstChange && this.renderField(containerRef, this.field);\n if (!firstChange || (firstChange && currentValue)) {\n this.elementRef &&\n this.renderer.setStyle(this.elementRef.nativeElement, 'display', currentValue ? 'none' : '');\n }\n } else {\n if (currentValue) {\n containerRef.clear();\n if (this.field.className) {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'class');\n }\n } else {\n this.renderField(containerRef, this.field);\n if (this.field.className) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'class', this.field.className);\n }\n }\n }\n\n !firstChange && this.field.options.detectChanges(this.field);\n }),\n observe<string>(this.field, ['className'], ({ firstChange, currentValue }) => {\n if (\n (!firstChange || (firstChange && currentValue)) &&\n (!this.config.extras.lazyRender || this.field.hide !== true)\n ) {\n this.elementRef && this.renderer.setAttribute(this.elementRef.nativeElement, 'class', currentValue);\n }\n }),\n ];\n\n if (!isSignalRequired()) {\n ['touched', 'pristine', 'status'].forEach((prop) =>\n this.hostObservers.push(\n observe<string>(\n this.field,\n ['formControl', prop],\n ({ firstChange }) => !firstChange && markFieldForCheck(this.field),\n ),\n ),\n );\n } else {\n let events: Subscription;\n this.hostObservers.push(\n observe<FormlyFieldConfig['formControl']>(this.field, ['formControl'], ({ currentValue }) => {\n events?.unsubscribe();\n events = currentValue?.events.subscribe(() => markFieldForCheck(this.field));\n }),\n new Subscription(() => events?.unsubscribe()),\n );\n }\n }\n\n private resetRefs(field: FormlyFieldConfigCache) {\n if (field) {\n if (field._localFields) {\n field._localFields = [];\n } else {\n defineHiddenProp(this.field, '_localFields', []);\n }\n\n if (field._componentRefs) {\n field._componentRefs = field._componentRefs.filter((ref) => this.componentRefs.indexOf(ref) === -1);\n } else {\n defineHiddenProp(this.field, '_componentRefs', []);\n }\n }\n\n this.componentRefs = [];\n }\n\n private fieldChanges(field: FormlyFieldConfigCache | undefined) {\n if (!field) {\n return () => {};\n }\n\n const propsObserver = observeDeep(field, ['props'], () => field.options.detectChanges(field));\n const subscribes = [\n () => {\n propsObserver();\n },\n ];\n\n for (const key of Object.keys(field._expressions || {})) {\n const expressionObserver = observe<FormlyFieldConfigCache['_expressions']['key']>(\n field,\n ['_expressions', key],\n ({ currentValue, previousValue }) => {\n if (previousValue?.subscription) {\n previousValue.subscription.unsubscribe();\n previousValue.subscription = null;\n }\n if (isObservable(currentValue.value$)) {\n currentValue.subscription = currentValue.value$.subscribe();\n }\n },\n );\n subscribes.push(() => {\n if (field._expressions[key]?.subscription) {\n field._expressions[key].subscription.unsubscribe();\n }\n expressionObserver.unsubscribe();\n });\n }\n\n for (const path of [['focus'], ['template'], ['fieldGroupClassName'], ['validation', 'show']]) {\n const fieldObserver = observe(\n field,\n path,\n ({ firstChange }) => !firstChange && field.options.detectChanges(field),\n );\n subscribes.push(() => fieldObserver.unsubscribe());\n }\n\n if (!field.fieldGroup) {\n let unsubscribe = () => {};\n const controlObserver = observe<FormlyFieldConfigCache['formControl']>(\n field,\n ['formControl'],\n ({ currentValue: control }) => {\n unsubscribe();\n unsubscribe = () => {};\n if (!control || field.fieldGroup) {\n return;\n }\n const independent = field.shareFormControl === false && hasKey(field);\n const subscribe = () => {\n let valueChanges = control.valueChanges.pipe(\n startWith(control.value),\n filter(() => !independent || !field._hide),\n map((value) => {\n field.parsers?.map((parserFn) => (value = (parserFn as any)(value, field)));\n if (!Object.is(value, control.value)) {\n control.setValue(value, { emitEvent: !independent });\n }\n\n return value;\n }),\n distinctUntilChanged((x, y) => {\n if (x !== y || Array.isArray(x) || isObject(x)) {\n return false;\n }\n\n return true;\n }),\n skip(independent ? 0 : 1),\n );\n\n if (!independent && control.value !== getFieldValue(field)) {\n valueChanges = valueChanges.pipe(startWith(control.value));\n }\n\n const { updateOn, debounce } = field.modelOptions;\n if ((!updateOn || updateOn === 'change') && debounce?.default > 0) {\n valueChanges = valueChanges.pipe(debounceTime(debounce.default));\n }\n\n if (independent) {\n valueChanges = valueChanges.pipe(\n filter((value) => value !== getFieldValue(field) || Array.isArray(value) || isObject(value)),\n );\n }\n\n return valueChanges.subscribe((value) => {\n // workaround for https://github.com/angular/angular/issues/13792\n if (control._fields?.length > 1 && control instanceof FormControl) {\n control.patchValue(value, { emitEvent: false, onlySelf: true });\n }\n\n if (hasKey(field)) {\n assignFieldValue(field, value);\n }\n field.options.fieldChanges.next({ value, field, type: 'valueChanges' });\n });\n };\n\n if (independent) {\n let sub: Subscription;\n const observer = observe<boolean>(field, ['_controlActive'], ({ currentValue }) => {\n sub?.unsubscribe();\n sub = new Subscription();\n if (currentValue) {\n sub.add(subscribe());\n }\n });\n unsubscribe = () => {\n observer.unsubscribe();\n sub?.unsubscribe();\n };\n } else {\n const sub = subscribe();\n unsubscribe = () => sub.unsubscribe();\n }\n },\n );\n subscribes.push(() => {\n controlObserver.unsubscribe();\n unsubscribe();\n });\n }\n\n let templateFieldsSubs: (() => void)[] = [];\n observe(field, ['_localFields'], ({ currentValue }) => {\n templateFieldsSubs.forEach((unsubscribe) => unsubscribe());\n templateFieldsSubs = (currentValue || []).map((f: FormlyFieldConfigCache) => this.fieldChanges(f));\n });\n\n return () => {\n subscribes.forEach((unsubscribe) => unsubscribe());\n templateFieldsSubs.forEach((unsubscribe) => unsubscribe());\n };\n }\n}\n\n@Component({\n selector: 'formly-field',\n template: '<ng-template #container></ng-template>',\n styleUrls: ['./formly.field.scss'],\n standalone: false,\n})\nexport class LegacyFormlyField extends FormlyField {}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { FieldType, FieldGroupTypeConfig } from './field.type';\n\n/** @ignore */\n@Component({\n selector: 'formly-group',\n template: `\n @for (f of field.fieldGroup; track $index) {\n <formly-field [field]=\"f\"></formly-field>\n }\n <ng-content></ng-content>\n `,\n host: {\n '[class]': 'field.fieldGroupClassName || \"\"',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class FormlyGroup extends FieldType<FieldGroupTypeConfig> {}\n","import { inject, InjectionToken, Provider } from '@angular/core';\nimport { FieldExpressionExtension } from './extensions/field-expression/field-expression';\nimport { FieldExpressionExtension as FieldExpressionLegacyExtension } from './extensions/field-expression-legacy/field-expression';\nimport { CoreExtension } from './extensions/core/core';\nimport { FieldFormExtension } from './extensions/field-form/field-form';\nimport { FieldValidationExtension } from './extensions/field-validation/field-validation';\nimport { FormlyTemplateType } from './templates/field-template.type';\nimport { FormlyGroup } from './templates/formly.group';\nimport { ConfigOption } from './models';\nimport { FormlyConfig } from './services/formly.config';\n\n/**\n * An InjectionToken for registering additional formly config options (types, wrappers ...).\n */\nexport const FORMLY_CONFIG = new InjectionToken<ConfigOption[]>('FORMLY_CONFIG');\n\nexport function withDefaultConfig(config: FormlyConfig): ConfigOption {\n return {\n types: [\n { name: 'formly-group', component: FormlyGroup },\n { name: 'formly-template', component: FormlyTemplateType },\n ],\n extensions: [\n { name: 'core', extension: new CoreExtension(config), priority: -250 },\n { name: 'field-validation', extension: new FieldValidationExtension(config), priority: -200 },\n { name: 'field-form', extension: new FieldFormExtension(), priority: -150 },\n {\n name: 'field-expression',\n extension: new FieldExpressionLegacyExtension(),\n priority: -100,\n },\n ],\n };\n}\n\nexport function withFormlyFieldExpression(): ConfigOption {\n return {\n extensions: [\n {\n name: 'field-expression',\n extension: new FieldExpressionExtension(),\n priority: -100,\n },\n ],\n };\n}\n\nexport const provideFormlyCore = (configs: ConfigOption | ConfigOption[] = []): Provider => {\n return [\n FormlyConfig,\n { provide: FORMLY_CONFIG, multi: true, useFactory: withDefaultConfig, deps: [FormlyConfig] },\n provideFormlyConfig(configs),\n ];\n};\n\nexport const provideFormlyConfig = (configs: ConfigOption | ConfigOption[] = []): Provider => {\n return {\n provide: FORMLY_CONFIG,\n multi: true,\n useFactory: () => {\n const currentConfig: Array<ConfigOption | ConfigOption[]> = inject(FORMLY_CONFIG, {\n skipSelf: true,\n optional: true,\n });\n if (currentConfig && inject(FormlyConfig) === inject(FormlyConfig, { skipSelf: true, optional: true })) {\n configs = Array.isArray(configs) ? configs : [configs];\n currentConfig.push(...configs);\n return currentConfig;\n }\n return configs;\n },\n };\n};\n","import { EventEmitter, Inject, Injectable, Injector, Optional, ViewContainerRef } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormArray, FormGroupDirective } from '@angular/forms';\nimport { FormlyConfig } from './formly.config';\nimport { FormlyFieldConfig, FormlyFormOptions, FormlyFieldConfigCache, ConfigOption } from '../models';\nimport {\n defineHiddenProp,\n observe,\n disableTreeValidityCall,\n getKeyPath,\n isHiddenField,\n isSignalRequired,\n} from '../utils';\nimport { FORMLY_CONFIG } from '../core.config';\n\n@Injectable({ providedIn: 'root' })\nexport class FormlyFormBuilder {\n private readonly initializedForms = new WeakSet<UntypedFormGroup | UntypedFormArray>();\n\n constructor(\n private config: FormlyConfig,\n private injector: Injector,\n @Optional() private viewContainerRef: ViewContainerRef,\n @Optional() private parentForm: FormGroupDirective,\n @Optional() @Inject(FORMLY_CONFIG) configs: ConfigOption[] = [],\n ) {\n if (configs) {\n configs.forEach((c) => config.addConfig(c));\n }\n }\n\n buildForm(\n form: UntypedFormGroup | UntypedFormArray,\n fieldGroup: FormlyFieldConfig[] = [],\n model: any,\n options: FormlyFormOptions,\n ) {\n this.build({ fieldGroup, model, form, options });\n }\n\n build(field: FormlyFieldConfig) {\n if (!this.config.extensions.core) {\n throw new Error('NgxFormly: missing `forRoot()` call. use `forRoot()` when registering the `FormlyModule`.');\n }\n\n if (!field.parent) {\n this._setOptions(field);\n }\n\n const firstBuild = !field.parent && !this.initializedForms.has(field.form);\n let lastEmittedStatus: string | undefined;\n const subscription = firstBuild\n ? field.form.statusChanges.subscribe((status) => (lastEmittedStatus = status))\n : undefined;\n if (firstBuild) {\n this.initializedForms.add(field.form);\n }\n\n const options = (field as FormlyFieldConfigCache).options;\n const controlsForCheck = options._formControlsForCheck;\n options._formControlsForCheck = controlsForCheck || new Set();\n\n try {\n disableTreeValidityCall(field.form, () => {\n this._build(field);\n // TODO: add test for https://github.com/ngx-formly/ngx-formly/issues/3910\n if (!field.parent || (field as FormlyFieldConfigCache).fieldArray) {\n // detect changes early to avoid reset value by hidden fields\n if (field.parent && isHiddenField(field)) {\n // when hide is used in expression set defaul value will not be set until detect hide changes\n // which causes default value not set on new item is added\n options._hiddenFieldsForCheck?.push({ field, default: false });\n }\n\n options.checkExpressions?.(field, true);\n options._detectChanges?.(field);\n }\n });\n\n if (!controlsForCheck) {\n const controls = options._formControlsForCheck;\n delete options._formControlsForCheck;\n // Resume independent editors only after rebuilding and resolving their visibility.\n controls.forEach((f) => (f._controlActive = !f._hide && f.form.get(getKeyPath(f)) === f.formControl));\n }\n } catch (error) {\n if (firstBuild) {\n this.initializedForms.delete(field.form);\n }\n throw error;\n } finally {\n if (controlsForCheck) {\n options._formControlsForCheck = controlsForCheck;\n } else {\n delete options._formControlsForCheck;\n }\n subscription?.unsubscribe();\n }\n\n if (firstBuild && lastEmittedStatus !== field.form.status) {\n (field.form.statusChanges as EventEmitter<string>).emit(field.form.status);\n }\n }\n\n private _build(field: FormlyFieldConfigCache) {\n if (!field) {\n return;\n }\n\n const extensions = Object.values(this.config.extensions);\n extensions.forEach((extension) => extension.prePopulate?.(field));\n extensions.forEach((extension) => extension.onPopulate?.(field));\n field.fieldGroup?.forEach((f) => this._build(f));\n extensions.forEach((extension) => extension.postPopulate?.(field));\n }\n\n private _setOptions(field: FormlyFieldConfigCache) {\n field.form = field.form || new UntypedFormGroup({});\n field.model = field.model || {};\n field.options = field.options || {};\n const options = field.options;\n\n if (!options._viewContainerRef) {\n defineHiddenProp(options, '_viewContainerRef', this.viewContainerRef);\n }\n\n if (!options._injector) {\n defineHiddenProp(options, '_injector', this.injector);\n }\n\n if (!options.build) {\n options.build = (f: FormlyFieldConfig = field) => {\n this.build(f);\n\n return f;\n };\n }\n\n if (!options.parentForm && this.parentForm) {\n defineHiddenProp(options, 'parentForm', this.parentForm);\n\n if (!isSignalRequired()) {\n observe(options, ['parentForm', 'submitted'], ({ firstChange }) => {\n if (!firstChange) {\n options.detectChanges(field);\n }\n });\n }\n }\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n DoCheck,\n OnChanges,\n Input,\n SimpleChanges,\n EventEmitter,\n Output,\n OnDestroy,\n NgZone,\n ContentChildren,\n QueryList,\n DestroyRef,\n PendingTasks,\n inject,\n} from '@angular/core';\nimport { UntypedFormGroup, UntypedFormArray } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyFormOptions, FormlyFieldConfigCache, FormlyValueChangeEvent } from '../models';\nimport { FormlyFormBuilder } from '../services/formly.builder';\nimport { FormlyConfig } from '../services/formly.config';\nimport { clone, hasKey, isNoopNgZone, isSignalRequired, observeDeep } from '../utils';\nimport { switchMap, filter, take } from 'rxjs/operators';\nimport { clearControl } from '../extensions/field-form/utils';\nimport { FormlyFieldTemplates, FormlyTemplate, LegacyFormlyTemplate } from './formly.template';\nimport { of, Subscription } from 'rxjs';\nimport { FormlyField } from './formly.field';\n\n/**\n * The `<form-form>` component is the main container of the form,\n * which takes care of managing the form state\n * and delegates the rendering of each field to `<formly-field>` component.\n */\n@Component({\n selector: 'formly-form',\n template: '<formly-field [field]=\"field\"></formly-field>',\n providers: [FormlyFormBuilder, FormlyFieldTemplates],\n standalone: true,\n imports: [FormlyField],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FormlyForm implements DoCheck, OnChanges, OnDestroy {\n /** The form instance which allow to track model value and validation status. */\n @Input()\n set form(form: UntypedFormGroup | UntypedFormArray) {\n this.field.form = form;\n }\n get form(): UntypedFormGroup | UntypedFormArray {\n return this.field.form;\n }\n\n /** The model to be represented by the form. */\n @Input()\n set model(model: any) {\n if (this.config.extras.immutable && this._modelChangeValue === model) {\n return;\n }\n\n this.setField({ model });\n }\n get model(): any {\n return this.field.model;\n }\n\n /** The field configurations for building the form. */\n @Input()\n set fields(fieldGroup: FormlyFieldConfig[]) {\n this.setField({ fieldGroup });\n }\n get fields(): FormlyFieldConfig[] {\n return this.field.fieldGroup;\n }\n\n /** Options for the form. */\n @Input()\n set options(options: FormlyFormOptions) {\n this.setField({ options });\n }\n get options(): FormlyFormOptions {\n return this.field.options;\n }\n\n /** Event that is emitted when the model value is changed */\n @Output() modelChange = new EventEmitter<any>();\n /** Emits a build event asynchronously when the fields or form input changes. */\n @Output() fieldChange = new EventEmitter<FormlyValueChangeEvent>();\n @ContentChildren(FormlyTemplate) set templates(templates: QueryList<FormlyTemplate>) {\n this.fieldTemplates.templates = templates;\n }\n\n field: FormlyFieldConfigCache = { type: 'formly-group' };\n private readonly destroyRef = inject(DestroyRef);\n private readonly pendingTasks = inject(PendingTasks);\n private _modelChangeValue: any = {};\n private valueChangesUnsubscribe = () => {};\n\n constructor(\n private builder: FormlyFormBuilder,\n private config: FormlyConfig,\n private ngZone: NgZone,\n protected fieldTemplates: FormlyFieldTemplates,\n ) {}\n\n ngDoCheck() {\n if (this.config.extras.checkExpressionOn === 'changeDetectionCheck') {\n this.checkExpressionChange();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.fields && this.form) {\n clearControl(this.form);\n }\n\n if (changes.fields || changes.form || (changes.model && this._modelChangeValue !== changes.model.currentValue)) {\n this.valueChangesUnsubscribe();\n this.builder.build(this.field);\n this.valueChangesUnsubscribe = this.valueChanges();\n }\n\n if (changes.fields || changes.form) {\n this.pendingTasks.run(async () => {\n await Promise.resolve();\n if (!this.destroyRef.destroyed) {\n this.fieldChange.emit({ field: this.field, type: 'build', value: this.form });\n }\n });\n }\n }\n\n ngOnDestroy() {\n this.valueChangesUnsubscribe();\n this.config.clearRefs();\n }\n\n private checkExpressionChange() {\n this.field.options.checkExpressions?.(this.field);\n }\n\n private valueChanges() {\n this.valueChangesUnsubscribe();\n\n let formEvents: Subscription | null = null;\n if (isSignalRequired()) {\n let submitted = this.options?.parentForm?.submitted;\n formEvents = (this.form as any).events.subscribe(() => {\n if (submitted !== this.options?.parentForm?.submitted) {\n this.options.detectChanges(this.field);\n submitted = this.options?.parentForm?.submitted;\n }\n });\n }\n\n const fieldChangesDetection: any[] = [\n observeDeep(this.field.options, ['formState'], () => this.field.options.detectChanges(this.field)),\n ];\n const valueChanges = this.field.options.fieldChanges\n .pipe(\n filter(({ field, type }) => hasKey(field) && type === 'valueChanges'),\n switchMap(() => (isNoopNgZone(this.ngZone) ? of(null) : this.ngZone.onStable.asObservable().pipe(take(1)))),\n )\n .subscribe(() =>\n this.ngZone.runGuarded(() => {\n // runGuarded is used to keep in sync the expression changes\n // https://github.com/ngx-formly/ngx-formly/issues/2095\n this.checkExpressionChange();\n this.modelChange.emit((this._modelChangeValue = clone(this.model)));\n }),\n );\n\n return () => {\n fieldChangesDetection.forEach((fnc) => fnc());\n formEvents?.unsubscribe();\n valueChanges.unsubscribe();\n };\n }\n\n private setField(field: FormlyFieldConfigCache) {\n if (this.config.extras.immutable) {\n this.field = { ...this.field, ...clone(field) };\n } else {\n Object.keys(field).forEach((p) => ((this.field as any)[p] = (field as any)[p]));\n }\n }\n}\n\n@Component({\n selector: 'formly-form',\n template: '<formly-field [field]=\"field\"></formly-field>',\n providers: [FormlyFormBuilder, FormlyFieldTemplates],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class LegacyFormlyForm extends FormlyForm {\n @ContentChildren(LegacyFormlyTemplate) override set templates(templates: QueryList<FormlyTemplate>) {\n this.fieldTemplates.templates = templates;\n }\n}\n","import {\n Directive,\n ElementRef,\n Input,\n OnChanges,\n SimpleChanges,\n Renderer2,\n DoCheck,\n Inject,\n OnDestroy,\n Optional,\n DOCUMENT,\n} from '@angular/core';\nimport { FormlyFieldConfig, FormlyFieldConfigCache } from '../models';\nimport { defineHiddenProp, FORMLY_VALIDATORS, observe, IObserver } from '../utils';\nimport { FormlyField } from '../components/formly.field';\n\n/**\n * Allow to link the `field` HTML attributes (`id`, `name` ...) and Event attributes (`focus`, `blur` ...) to an element in the DOM.\n */\n@Directive({\n selector: '[formlyAttributes]',\n standalone: true,\n host: {\n '(change)': 'onHostChange($event)',\n },\n})\nexport class FormlyAttributes implements OnChanges, DoCheck, OnDestroy {\n /** The field config. */\n @Input('formlyAttributes') field: FormlyFieldConfig;\n @Input() id: string;\n\n private document: Document;\n private uiAttributesCache: any = {};\n private uiAttributes: string[];\n private focusObserver: IObserver<boolean>;\n\n /**\n * HostBinding doesn't register listeners conditionally which may produce some perf issues.\n *\n * Formly issue: https://github.com/ngx-formly/ngx-formly/issues/1991\n */\n private uiEvents = {\n listeners: [] as (() => void)[],\n events: ['click', 'keyup', 'keydown', 'keypress', 'focus', 'blur', 'change', 'wheel'],\n callback: (eventName: string, $event: any) => {\n switch (eventName) {\n case 'focus':\n return this.onFocus($event);\n case 'blur':\n return this.onBlur($event);\n case 'change':\n return this.onChange($event);\n default:\n return this.props[eventName](this.field, $event);\n }\n },\n };\n\n private get props() {\n return this.field.props || ({} as FormlyFieldConfigCache['props']);\n }\n\n private get fieldAttrElements(): ElementRef[] {\n return (this.field as FormlyFieldConfigCache)?.['_elementRefs'] || [];\n }\n\n constructor(\n private renderer: Renderer2,\n private elementRef: ElementRef,\n @Inject(DOCUMENT) _document: any,\n @Optional() private formlyField?: FormlyField,\n ) {\n this.document = _document;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.field) {\n this.field.name && this.setAttribute('name', this.field.name);\n this.uiEvents.listeners.forEach((listener) => listener());\n this.uiEvents.events.forEach((eventName) => {\n if (this.props?.[eventName] || ['focus', 'blur', 'change'].indexOf(eventName) !== -1) {\n this.uiEvents.listeners.push(\n this.renderer.listen(this.elementRef.nativeElement, eventName, (e) => this.uiEvents.callback(eventName, e)),\n );\n }\n });\n\n if (this.props?.attributes) {\n observe(this.field, ['props', 'attributes'], ({ currentValue, previousValue }) => {\n if (previousValue) {\n Object.keys(previousValue).forEach((attr) => this.removeAttribute(attr));\n }\n\n if (currentValue) {\n Object.keys(currentValue).forEach((attr) => {\n if (currentValue[attr] != null) {\n this.setAttribute(attr, currentValue[attr]);\n }\n });\n }\n });\n }\n\n const previousField = changes.field.previousValue as FormlyFieldConfigCache;\n this.detachElementRef(previousField);\n this.attachElementRef(changes.field.currentValue);\n this.formlyField?.attachLocalField(\n changes.field.currentValue as FormlyFieldConfigCache,\n previousField?._elementRefs?.length ? undefined : previousField,\n );\n if (this.fieldAttrElements.length === 1) {\n !this.id && this.field.id && this.setAttribute('id', this.field.id);\n this.focusObserver = observe<boolean>(this.field, ['focus'], ({ currentValue }) => {\n this.toggleFocus(currentValue);\n });\n }\n }\n\n if (changes.id) {\n this.setAttribute('id', this.id);\n }\n }\n\n /**\n * We need to re-evaluate all the attributes on every change detection cycle, because\n * by using a HostBinding we run into certain edge cases. This means that whatever logic\n * is in here has to be super lean or we risk seriously damaging or destroying the performance.\n *\n * Formly issue: https://github.com/ngx-formly/ngx-formly/issues/1317\n * Material issue: https://github.com/angular/components/issues/14024\n */\n ngDoCheck() {\n if (!this.uiAttributes) {\n const element = this.elementRef.nativeElement as HTMLElement;\n this.uiAttributes = [...FORMLY_VALIDATORS, 'tabindex', 'placeholder', 'readonly', 'disabled'].filter(\n (attr) => !element.hasAttribute || !element.hasAttribute(attr),\n );\n }\n\n for (let i = 0; i < this.uiAttributes.length; i++) {\n const attr = this.uiAttributes[i];\n const value = this.props[attr];\n if (\n this.uiAttributesCache[attr] !== value &&\n (!this.props.attributes || !this.props.attributes.hasOwnProperty(attr.toLowerCase()))\n ) {\n this.uiAttributesCache[attr] = value;\n if (value || value === 0) {\n this.setAttribute(attr, this.getSafeAttributeValue(attr, value));\n } else {\n this.removeAttribute(attr);\n }\n }\n }\n }\n\n ngOnDestroy() {\n this.uiEvents.listeners.forEach((listener) => listener());\n this.detachElementRef(this.field);\n if (!(this.field as FormlyFieldConfigCache)?._elementRefs?.length) {\n this.formlyField?.attachLocalField(undefined, this.field as FormlyFieldConfigCache);\n }\n this.focusObserver?.unsubscribe();\n }\n\n toggleFocus(value: boolean) {\n const element = this.fieldAttrElements ? this.fieldAttrElements[0] : null;\n if (!element || !element.nativeElement.focus) {\n return;\n }\n\n const isFocused =\n !!this.document.activeElement &&\n this.fieldAttrElements.some(\n ({ nativeElement }) =>\n this.document.activeElement === nativeElement || nativeElement.contains(this.document.activeElement),\n );\n\n if (value && !isFocused) {\n Promise.resolve().then(() => element.nativeElement.focus());\n } else if (!value && isFocused) {\n Promise.resolve().then(() => element.nativeElement.blur());\n }\n }\n\n onFocus($event: any) {\n this.focusObserver?.setValue(true);\n this.props.focus?.(this.field, $event);\n }\n\n onBlur($event: any) {\n this.focusObserver?.setValue(false);\n this.props.blur?.(this.field, $event);\n }\n\n // handle custom `change` event, for regular ones rely on DOM listener\n onHostChange($event: any) {\n if ($event instanceof Event) {\n return;\n }\n\n this.onChange($event);\n }\n\n onChange($event: any) {\n this.props.change?.(this.field, $event);\n this.field.formControl?.markAsDirty();\n }\n\n private attachElementRef(f: FormlyFieldConfigCache) {\n if (!f) {\n return;\n }\n\n if (f['_elementRefs']?.indexOf(this.elementRef) === -1) {\n f['_elementRefs'].push(this.elementRef);\n } else {\n defineHiddenProp(f, '_elementRefs', [this.elementRef]);\n }\n }\n\n private detachElementRef(f: FormlyFieldConfigCache) {\n const elements = f?.['_elementRefs'] || [];\n const index = elements.indexOf(this.elementRef);\n if (index !== -1) {\n elements.splice(index, 1);\n }\n }\n\n private getSafeAttributeValue(attr: string, value: any): string {\n if (attr === 'pattern') {\n let pattern = value instanceof RegExp ? value.source : value;\n\n // 1. Safely escape unescaped hyphens inside character classes for 'v' flag compatibility\n pattern = pattern.replace(/(\\[[^\\]]*?)(?<!\\\\)-(.*?\\])/g, '$1\\\\-$2');\n\n // 2. Cleanly strip leading ^ and trailing $ so HTML5 handles the boundaries natively\n pattern = pattern.replace(/^^\\^/, '').replace(/\\$$/, '');\n\n return pattern;\n }\n return value === true ? attr : `${value}`;\n }\n\n private setAttribute(attr: string, value: string) {\n this.renderer.setAttribute(this.elementRef.nativeElement, attr, value);\n }\n\n private removeAttribute(attr: string) {\n this.renderer.removeAttribute(this.elementRef.nativeElement, attr);\n }\n}\n\n@Directive({\n selector: '[formlyAttributes]',\n host: {\n '(change)': 'onHostChange($event)',\n },\n standalone: false,\n})\nexport class LegacyFormlyAttributes extends FormlyAttributes {}\n","import { FormlyFieldConfig } from '../models';\nimport { FormlyConfig } from '../services/formly.config';\nimport { isObject } from '../utils';\n\nexport function getValidationMessage(field: FormlyFieldConfig, error: string, config: FormlyConfig) {\n const value = field.formControl.errors[error];\n let message = config.getValidatorMessage(error);\n\n if (isObject(value)) {\n if (value.errorPath) {\n return undefined;\n }\n\n if (value.message) {\n message = value.message;\n }\n }\n\n if (field.validation?.messages?.[error]) {\n message = field.validation.messages[error];\n }\n\n if (field.validators?.[error]?.message) {\n message = field.validators[error].message;\n }\n\n if (field.asyncValidators?.[error]?.message) {\n message = field.asyncValidators[error].message;\n }\n\n return typeof message === 'function' ? message(value, field) : message;\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, OnChanges } from '@angular/core';\nimport { Observable, combineLatest, isObservable, merge, of } from 'rxjs';\nimport { filter, map, startWith, switchMap } from 'rxjs/operators';\nimport { FormlyFieldConfig } from '../models';\nimport { FormlyConfig } from '../services/formly.config';\nimport { FORMLY_VALIDATORS, observe } from '../utils';\nimport { getValidationMessage } from './validation-message';\n\n/**\n * The `<formly-validation-message>` component renders the error message of a given `field`.\n * @deprecated Use the `validationMessages` pipe to render validation messages.\n */\n@Component({\n selector: 'formly-validation-message',\n template: '{{ errorMessage$ | async }}',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [AsyncPipe],\n host: { '[style.white-space]': \"field.validation?.showAllErrors ? 'pre-line' : null\" },\n})\nexport class FormlyValidationMessage implements OnChanges {\n /** The field config. */\n @Input() field: FormlyFieldConfig;\n errorMessage$: Observable<string>;\n\n constructor(private config: FormlyConfig) {}\n\n ngOnChanges() {\n const EXPR_VALIDATORS = FORMLY_VALIDATORS.map((v) => `templateOptions.${v}`);\n const controlChanges = new Observable<FormlyFieldConfig['formControl']>((subscriber) => {\n const observer = observe<FormlyFieldConfig['formControl']>(this.field, ['formControl'], ({ currentValue }) =>\n subscriber.next(currentValue),\n );\n return () => observer.unsubscribe();\n });\n this.errorMessage$ = merge(\n controlChanges.pipe(switchMap((control) => (control ? control.statusChanges.pipe(startWith(null)) : of(null)))),\n !this.field.options\n ? of(null)\n : this.field.options.fieldChanges.pipe(\n filter(({ field, type, property }) => {\n return (\n field === this.field &&\n type === 'expressionChanges' &&\n (property.indexOf('validation') !== -1 || EXPR_VALIDATORS.indexOf(property) !== -1)\n );\n }),\n ),\n ).pipe(\n switchMap(() => {\n const message = this.errorMessage;\n return isObservable(message) ? message : of(message);\n }),\n );\n }\n\n get errorMessage() {\n const errors = this.field.formControl?.errors || {};\n const messages: (string | Observable<string>)[] = [];\n for (const error in errors) {\n if (errors.hasOwnProperty(error)) {\n const message = getValidationMessage(this.field, error, this.config);\n if (!this.field.validation?.showAllErrors) {\n return message;\n }\n if (message) {\n messages.push(message);\n }\n }\n }\n\n if (this.field.validation?.showAllErrors) {\n return messages.some(isObservable)\n ? combineLatest(\n messages.map((message) => (isObservable(message) ? message.pipe(startWith('')) : of(message))),\n ).pipe(map((values) => values.filter(Boolean).join('\\n')))\n : messages.join('\\n');\n }\n\n return undefined;\n }\n}\n\n/** @deprecated Use the `validationMessages` pipe to render validation messages. */\n@Component({\n selector: 'formly-validation-message',\n template: '{{ errorMessage$ | async }}',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class LegacyFormlyValidationMessage extends FormlyValidationMessage {}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { isObservable, Observable, of, Subscription } from 'rxjs';\nimport { FormlyFieldConfig, FormlyValueChangeEvent } from '../models';\nimport { FormlyConfig } from '../services/formly.config';\nimport { getValidationMessage } from './validation-message';\n\nexport interface FormlyValidationMessageEntry {\n /** The visible field associated with the error. */\n field: FormlyFieldConfig;\n /** The key in the control's errors object. */\n error: string;\n /** The resolved, nonempty validation message. */\n message: string;\n}\n\n/** Collects configured messages from built fields, independently of touched or submitted state. */\n@Pipe({ name: 'validationMessages', standalone: true })\nexport class FormlyValidationMessagesPipe implements PipeTransform {\n constructor(private config: FormlyConfig) {}\n\n transform(\n fields: FormlyFieldConfig | readonly FormlyFieldConfig[] | null | undefined,\n ): Observable<FormlyValidationMessageEntry[]> {\n const roots: readonly FormlyFieldConfig[] = Array.isArray(fields) ? fields : [fields as FormlyFieldConfig];\n\n return new Observable<FormlyValidationMessageEntry[]>((subscriber) => {\n const subscriptions = new Map<Observable<string | FormlyValueChangeEvent>, Subscription>();\n const messages = new Map<\n FormlyFieldConfig,\n Map<\n string,\n {\n control: AbstractControl;\n message: string | Observable<string>;\n entry: FormlyValidationMessageEntry;\n subscription: Subscription;\n }\n >\n >();\n let currentFields: FormlyFieldConfig[] = [];\n let watchedFields: Set<FormlyFieldConfig>;\n let refreshing = false;\n\n const emit = () => {\n if (refreshing || subscriber.closed) {\n return;\n }\n\n const seen = new Map<AbstractControl, Set<string>>();\n const entries = currentFields.flatMap((field) =>\n Object.keys(field.formControl?.errors || {}).map((error) => messages.get(field)?.get(error)?.entry),\n );\n subscriber.next(\n entries.filter((entry) => {\n if (!entry?.message || seen.get(entry.field.formControl)?.has(entry.error)) {\n return false;\n }\n\n const { field, error } = entry;\n if (!seen.has(field.formControl)) {\n seen.set(field.formControl, new Set());\n }\n seen.get(field.formControl).add(error);\n return true;\n }),\n );\n };\n\n const refresh = () => {\n if (subscriber.closed) {\n return;\n }\n\n refreshing = true;\n currentFields = this.getFields(roots);\n watchedFields = new Set(currentFields);\n messages.forEach((fieldMessages, field) => {\n if (!watchedFields.has(field) || !this.isVisible(field)) {\n fieldMessages.forEach((state) => state.subscription.unsubscribe());\n messages.delete(field);\n }\n });\n currentFields.forEach((field) => {\n for (let parent = field.parent; parent && !watchedFields.has(parent); parent = parent.parent) {\n watchedFields.add(parent);\n }\n });\n\n const sources = new Set<Observable<string | FormlyValueChangeEvent>>();\n watchedFields.forEach((field) => {\n if (field.formControl) {\n sources.add(field.formControl.statusChanges);\n }\n if (field.options?.fieldChanges) {\n sources.add(field.options.fieldChanges);\n }\n });\n\n subscriptions.forEach((subscription, source) => {\n if (!sources.has(source)) {\n subscription.unsubscribe();\n subscriptions.delete(source);\n }\n });\n sources.forEach((source) => {\n if (!subscriber.closed && !subscriptions.has(source)) {\n subscriptions.set(\n source,\n source.subscribe({\n next: (event: string | FormlyValueChangeEvent) => {\n if (\n typeof event === 'string' ||\n event.type === 'valueChanges' ||\n (watchedFields.has(event.field) && ['expressionChanges', 'hidden'].includes(event.type))\n ) {\n refresh();\n }\n },\n error: (error) => subscriber.error(error),\n }),\n );\n }\n });\n\n currentFields.forEach((field) => {\n if (subscriber.closed || !this.isVisible(field)) {\n return;\n }\n\n if (!messages.has(field)) {\n messages.set(field, new Map());\n }\n const fieldMessages = messages.get(field);\n const errors = new Set(Object.keys(field.formControl.errors || {}));\n fieldMessages.forEach((state, error) => {\n if (state.control !== field.formControl || !errors.has(error)) {\n state.subscription.unsubscribe();\n fieldMessages.delete(error);\n }\n });\n errors.forEach((error) => {\n if (subscriber.closed) {\n return;\n }\n\n let message: string | Observable<string>;\n try {\n message = getValidationMessage(field, error, this.config);\n } catch (error) {\n subscriber.error(error);\n return;\n }\n\n const previous = fieldMessages.get(error);\n // Re-evaluate field context, but retain unchanged streams and their latest translations.\n if (previous?.message === message) {\n return;\n }\n previous?.subscription.unsubscribe();\n fieldMessages.delete(error);\n if (!message) {\n return;\n }\n\n const state = {\n control: field.formControl,\n message,\n entry: null as FormlyValidationMessageEntry,\n subscription: new Subscription(),\n };\n fieldMessages.set(error, state);\n state.subscription.add(\n (isObservable(message) ? message : of(message)).subscribe({\n next: (message) => {\n state.entry = { field, error, message };\n emit();\n },\n error: (error) => subscriber.error(error),\n }),\n );\n });\n });\n refreshing = false;\n emit();\n };\n\n subscriber.add(() => {\n subscriptions.forEach((subscription) => subscription.unsubscribe());\n messages.forEach((fieldMessages) => fieldMessages.forEach((state) => state.subscription.unsubscribe()));\n });\n refresh();\n });\n }\n\n private getFields(roots: readonly FormlyFieldConfig[]) {\n const fields = new Set<FormlyFieldConfig>();\n const visit = (field: FormlyFieldConfig) => {\n if (!field || fields.has(field)) {\n return;\n }\n\n fields.add(field);\n field.fieldGroup?.forEach(visit);\n };\n roots.forEach(visit);\n\n return Array.from(fields);\n }\n\n private isVisible(field: FormlyFieldConfig) {\n if (!field.formControl || field.formControl.disabled) {\n return false;\n }\n for (let parent = field; parent; parent = parent.parent) {\n if (parent.hide) {\n return false;\n }\n }\n\n return true;\n }\n}\n","import { Directive } from '@angular/core';\nimport { UntypedFormArray, UntypedFormGroup } from '@angular/forms';\nimport { FieldType } from './field.type';\nimport { clone, assignFieldValue, getFieldValue, getField, getKeyPath, hasKey } from '../utils';\nimport { FormlyFieldConfig, FormlyExtension, FormlyFieldConfigCache } from '../models';\nimport { registerControl, unregisterControl, findControl } from '../extensions/field-form/utils';\n\nexport interface FieldArrayTypeConfig<T = FormlyFieldConfig['props']> extends FormlyFieldConfig<T> {\n formControl: UntypedFormArray;\n props: NonNullable<T>;\n}\n\n@Directive()\nexport abstract class FieldArrayType<F extends FormlyFieldConfig = FieldArrayTypeConfig>\n extends FieldType<F>\n implements FormlyExtension<F>\n{\n onPopulate(field: F) {\n if (hasKey(field)) {\n const control = findControl(field);\n registerControl(field, control ? control : new UntypedFormArray([], { updateOn: field.modelOptions.updateOn }));\n }\n\n field.fieldGroup = field.fieldGroup || [];\n\n const length = Array.isArray(field.model) ? field.model.length : 0;\n if (field.fieldGroup.length > length) {\n for (let i = field.fieldGroup.length - 1; i >= length; --i) {\n unregisterControl(field.fieldGroup[i], true);\n field.fieldGroup.splice(i, 1);\n }\n }\n\n for (let i = field.fieldGroup.length; i < length; i++) {\n this.addArrayElement(field, i);\n }\n }\n\n add(i?: number, initialModel?: any, { markAsDirty } = { markAsDirty: true }) {\n markAsDirty && this.formControl.markAsDirty();\n i = i == null ? this.field.fieldGroup.length : i;\n if (!this.model) {\n assignFieldValue(this.field, []);\n }\n\n i = Math.trunc(i) || 0;\n i = i < 0 ? Math.max(this.model.length + i, 0) : Math.min(i, this.model.length);\n this.model.splice(i, 0, initialModel ? clone(initialModel) : undefined);\n // Connected arrays share a FormArray. A keyless array uses its parent's control, which it does not share.\n const fields = hasKey(this.field)\n ? (this.field as FormlyFieldConfigCache).formControl._fields.filter((f) => f === this.field || f.fieldArray)\n : [this.field];\n if (fields.some((field) => field.props.trackByIndex)) {\n this._build();\n return;\n }\n const fixedFields = this.detachFixedFields(fields);\n fields.forEach((field) => {\n this.addArrayElement(field, i);\n field.fieldGroup.forEach((f, key) => this.updateArrayElementKey(f, `${key}`));\n });\n\n // Existing fields retain their controls and register them at their new keys.\n // Clear the shifted positions so the new field cannot reuse an existing control.\n const formControl = this.formControl;\n if (formControl instanceof UntypedFormArray) {\n for (let key = formControl.length - 1; key >= i; key--) {\n formControl.removeAt(key, { emitEvent: false });\n }\n } else {\n for (let key = this.field.fieldGroup.length - 2; key >= i; key--) {\n (formControl as UntypedFormGroup).removeControl(`${key}`, { emitEvent: false });\n }\n }\n\n this._build(fixedFields);\n }\n\n remove(i: number, { markAsDirty } = { markAsDirty: true }) {\n markAsDirty && this.formControl.markAsDirty();\n this.model.splice(i, 1);\n\n const fields = hasKey(this.field)\n ? (this.field as FormlyFieldConfigCache).formControl._fields.filter((f) => f === this.field || f.fieldArray)\n : [this.field];\n const trackByIndex = fields.some((field) => field.props.trackByIndex);\n const fixedFields = trackByIndex ? [] : this.detachFixedFields(fields);\n fields.forEach((field) => {\n const index = trackByIndex ? field.fieldGroup.length - 1 : i;\n const [removed] = field.fieldGroup.splice(index, 1);\n field.fieldGroup.forEach((f, key) => this.updateArrayElementKey(f, `${key}`));\n unregisterControl(removed, true);\n });\n this._build(fixedFields);\n }\n\n private _build(fixedFields: FormlyFieldConfig[] = []) {\n const fields = (this.field as FormlyFieldConfigCache).formControl._fields ?? [this.field];\n fields.forEach((f) => (this.options as any).build(f));\n const getPath = (field: FormlyFieldConfig) => {\n const path: string[] = [];\n for (let parent = field; parent; parent = parent.parent) {\n path.unshift(...getKeyPath(parent));\n }\n return path;\n };\n fixedFields.forEach((field) => {\n const path = getPath(field).slice(getPath(this.field).length);\n const array = fields.find((f) => getField(f, path)) || this.field;\n const target = path.length ? getField(array, path) : array;\n if (target?.formControl) {\n registerControl(field, target.formControl);\n }\n });\n fixedFields.forEach((field) => {\n this.options.build(field);\n this.options.detectChanges(field);\n });\n this.options.fieldChanges.next({\n field: this.field,\n value: getFieldValue(this.field),\n type: 'valueChanges',\n });\n }\n\n private detachFixedFields(arrays: FormlyFieldConfig[]): FormlyFieldConfigCache[] {\n const fixedFields = new Set<FormlyFieldConfigCache>();\n const visited = new Set<FormlyFieldConfigCache['formControl']>();\n const visit = (control: FormlyFieldConfigCache['formControl']) => {\n if (!control || visited.has(control)) {\n return;\n }\n visited.add(control);\n if (control instanceof UntypedFormArray || control instanceof UntypedFormGroup) {\n Object.values(control.controls).forEach(visit);\n }\n };\n visit(this.formControl);\n const visitField = (field: FormlyFieldConfig) => {\n visit(field.formControl);\n field.fieldGroup?.forEach(visitField);\n };\n // Hidden rows retain controls that are no longer in the FormArray.\n arrays.forEach(visitField);\n const visitFixedFields = (field: FormlyFieldConfigCache) => {\n if (arrays.includes(field) || field.shareFormControl === false) {\n return;\n }\n if (hasKey(field) && visited.has(field.formControl)) {\n fixedFields.add(field);\n }\n field.fieldGroup?.forEach(visitFixedFields);\n };\n let root: FormlyFieldConfig = this.field;\n while (root.parent) {\n root = root.parent;\n }\n visitFixedFields(root);\n fixedFields.forEach((field) => {\n const control = field.formControl;\n const index = control._fields?.indexOf(field) ?? -1;\n if (index !== -1) {\n control._fields.splice(index, 1);\n }\n control.setValidators(null);\n control.setAsyncValidators(null);\n field.formControl = null;\n });\n\n return [...fixedFields];\n }\n\n private addArrayElement(field: FormlyFieldConfig, index: number) {\n // Factories use fieldGroup.length to select the schema for the new position.\n const tail = field.fieldGroup.splice(index);\n try {\n const f = { ...clone(typeof field.fieldArray === 'function' ? field.fieldArray(field) : field.fieldArray) };\n if (f.key !== null) {\n f.key = `${index}`;\n }\n\n field.fieldGroup.push(f);\n } finally {\n field.fieldGroup.push(...tail);\n }\n }\n\n private updateArrayElementKey(f: FormlyFieldConfig, newKey: string) {\n if (hasKey(f)) {\n f.key = newKey;\n return;\n }\n\n if (!f.fieldGroup?.length) {\n return;\n }\n\n for (let i = 0; i < f.fieldGroup.length; i++) {\n this.updateArrayElementKey(f.fieldGroup[i], newKey);\n }\n }\n}\n","import { ViewContainerRef, ViewChild, Directive, QueryList } from '@angular/core';\nimport { FieldType } from './field.type';\nimport { FormlyFieldConfig } from '../models';\nimport { NgControl } from '@angular/forms';\n\n@Directive()\nexport abstract class FieldWrapper<F extends FormlyFieldConfig = FormlyFieldConfig> extends FieldType<F> {\n override set _formlyControls(_: QueryList<NgControl>) {}\n @ViewChild('fieldComponent', { read: ViewContainerRef }) fieldComponent!: ViewContainerRef;\n @ViewChild('fieldComponent', { read: ViewContainerRef, static: true }) set _staticContent(content: ViewContainerRef) {\n this.fieldComponent = content;\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LegacyFormlyForm } from './components/formly.form';\nimport { LegacyFormlyField } from './components/formly.field';\nimport { LegacyFormlyAttributes } from './templates/formly.attributes';\nimport { FormlyConfig } from './services/formly.config';\nimport { FormlyFormBuilder } from './services/formly.builder';\nimport { FormlyGroup } from './templates/formly.group';\nimport { LegacyFormlyValidationMessage } from './templates/formly.validation-message';\nimport { FormlyValidationMessagesPipe } from './templates/formly-validation-messages.pipe';\nimport { FormlyTemplateType } from './templates/field-template.type';\nimport { ConfigOption } from './models';\nimport { LegacyFormlyTemplate } from './components/formly.template';\nimport { FORMLY_CONFIG, provideFormlyConfig, withDefaultConfig } from './core.config';\n\n/**\n * Registers Formly components and configuration for NgModule-based applications.\n *\n * `forRoot()` provides the shared `FormlyConfig` at the application root, while\n * `forChild()` adds feature configuration using the inherited service. This follows\n * Angular's [root/child module registration convention](https://frontendatlas.com/angular/trivia/angular-forroot-forchild).\n */\n@NgModule({\n declarations: [\n LegacyFormlyTemplate,\n LegacyFormlyForm,\n LegacyFormlyField,\n LegacyFormlyAttributes,\n LegacyFormlyValidationMessage,\n FormlyGroup,\n FormlyTemplateType,\n ],\n exports: [\n FormlyValidationMessagesPipe,\n LegacyFormlyTemplate,\n LegacyFormlyForm,\n LegacyFormlyField,\n LegacyFormlyAttributes,\n LegacyFormlyValidationMessage,\n FormlyGroup,\n ],\n imports: [CommonModule, FormlyValidationMessagesPipe],\n})\nexport class FormlyModule {\n static forRoot(config: ConfigOption = {}): ModuleWithProviders<FormlyModule> {\n return {\n ngModule: FormlyModule,\n providers: [\n { provide: FORMLY_CONFIG, multi: true, useFactory: withDefaultConfig, deps: [FormlyConfig] },\n provideFormlyConfig(config),\n FormlyConfig,\n FormlyFormBuilder,\n ],\n };\n }\n\n static forChild(config: ConfigOption = {}): ModuleWithProviders<FormlyModule> {\n return {\n ngModule: FormlyModule,\n providers: [\n { provide: FORMLY_CONFIG, multi: true, useFactory: withDefaultConfig, deps: [FormlyConfig] },\n provideFormlyConfig(config),\n FormlyFormBuilder,\n ],\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-formly-core.mjs","names":[],"sources":["../../../../src/core/src/lib/utils.ts","../../../../src/core/src/lib/extensions/field-expression-legacy/utils.ts","../../../../src/core/src/lib/extensions/field-form/utils.ts","../../../../src/core/src/lib/extensions/field-expression-legacy/field-expression.ts","../../../../src/core/src/lib/extensions/field-expression/utils.ts","../../../../src/core/src/lib/extensions/field-expression/field-expression.ts","../../../../src/core/src/lib/extensions/core/core.ts","../../../../src/core/src/lib/extensions/field-form/field-form.ts","../../../../src/core/src/lib/extensions/field-validation/field-validation.ts","../../../../src/core/src/lib/templates/field.type.ts","../../../../src/core/src/lib/templates/field-template.type.ts","../../../../src/core/src/lib/services/formly.config.ts","../../../../src/core/src/lib/components/formly.template.ts","../../../../src/core/src/lib/components/formly.field.ts","../../../../src/core/src/lib/templates/formly.group.ts","../../../../src/core/src/lib/core.config.ts","../../../../src/core/src/lib/services/formly.builder.ts","../../../../src/core/src/lib/components/formly.form.ts","../../../../src/core/src/lib/templates/formly.attributes.ts","../../../../src/core/src/lib/templates/validation-message.ts","../../../../src/core/src/lib/templates/formly.validation-message.ts","../../../../src/core/src/lib/templates/formly-validation-messages.pipe.ts","../../../../src/core/src/lib/templates/field-array.type.ts","../../../../src/core/src/lib/templates/field.wrapper.ts","../../../../src/core/src/lib/core.module.ts"],"sourcesContent":["import { FormlyFieldConfig } from './models';\nimport { isObservable } from 'rxjs';\nimport { AbstractControl } from '@angular/forms';\nimport { FormlyFieldConfigCache } from './models';\nimport { ChangeDetectorRef, ComponentRef, NgZone, TemplateRef, Type, VERSION, ɵNoopNgZone } from '@angular/core';\n\nexport function disableTreeValidityCall(form: any, callback: () => void) {\n const _updateTreeValidity = form._updateTreeValidity.bind(form);\n form._updateTreeValidity = () => {};\n try {\n callback();\n } finally {\n form._updateTreeValidity = _updateTreeValidity;\n }\n}\n\nexport function getFieldId(formId: string, field: FormlyFieldConfig, index: string | number) {\n if (field.id) {\n return field.id;\n }\n let type = field.type;\n if (!type && field.template) {\n type = 'template';\n }\n\n if (type instanceof Type) {\n type = type.prototype.constructor.name;\n }\n\n return [formId, type, field.key, index].join('_');\n}\n\nexport function hasKey(field: FormlyFieldConfig) {\n return !isNil(field.key) && field.key !== '' && (!Array.isArray(field.key) || field.key.length > 0);\n}\n\nexport function getKeyPath(field: FormlyFieldConfigCache): string[] {\n if (!hasKey(field)) {\n return [];\n }\n\n /* We store the keyPath in the field for performance reasons. This function will be called frequently. */\n if (field._keyPath?.key !== field.key) {\n let path: (string | number)[] = [];\n if (typeof field.key === 'string') {\n const key = field.key.indexOf('[') === -1 ? field.key : field.key.replace(/\\[(\\w+)\\]/g, '.$1');\n path = key.indexOf('.') !== -1 ? key.split('.') : [key];\n } else if (Array.isArray(field.key)) {\n path = field.key.slice(0);\n } else {\n path = [`${field.key}`];\n }\n\n defineHiddenProp(field, '_keyPath', { key: field.key, path });\n }\n\n return field._keyPath.path.slice(0);\n}\n\nexport const FORMLY_VALIDATORS = ['required', 'pattern', 'minLength', 'maxLength', 'min', 'max', 'step'];\n\nexport function assignFieldValue(field: FormlyFieldConfigCache, value: any) {\n let paths = getKeyPath(field);\n if (paths.length === 0) {\n return;\n }\n\n let root = field;\n while (root.parent) {\n root = root.parent;\n paths = [...getKeyPath(root), ...paths];\n }\n\n if (value === undefined && field.resetOnHide) {\n const k = paths.pop();\n const m = paths.reduce((model, path) => model[path] || {}, root.model);\n delete m[k];\n return;\n }\n\n assignModelValue(root.model, paths, value);\n}\n\nexport function assignModelValue(model: any, paths: string[], value: any) {\n for (let i = 0; i < paths.length - 1; i++) {\n const path = paths[i];\n if (!model[path] || !isObject(model[path])) {\n model[path] = /^\\d+$/.test(paths[i + 1]) ? [] : {};\n }\n\n model = model[path];\n }\n\n model[paths[paths.length - 1]] = clone(value);\n}\n\nexport function getFieldValue(field: FormlyFieldConfig): any {\n let model = field.parent ? field.parent.model : field.model;\n for (const path of getKeyPath(field)) {\n if (!model) {\n return model;\n }\n model = model[path];\n }\n\n return model;\n}\n\nexport function reverseDeepMerge(dest: any, ...args: any[]) {\n args.forEach((src) => {\n for (const srcArg in src) {\n if (isNil(dest[srcArg]) || isBlankString(dest[srcArg])) {\n dest[srcArg] = clone(src[srcArg]);\n } else if (objAndSameType(dest[srcArg], src[srcArg])) {\n reverseDeepMerge(dest[srcArg], src[srcArg]);\n }\n }\n });\n return dest;\n}\n\n// check a value is null or undefined\nexport function isNil(value: any) {\n return value == null;\n}\n\nexport function isUndefined(value: any) {\n return value === undefined;\n}\n\nexport function isBlankString(value: any) {\n return value === '';\n}\n\nexport function isFunction(value: any) {\n return typeof value === 'function';\n}\n\nexport function objAndSameType(obj1: any, obj2: any) {\n return (\n isObject(obj1) &&\n isObject(obj2) &&\n Object.getPrototypeOf(obj1) === Object.getPrototypeOf(obj2) &&\n !(Array.isArray(obj1) || Array.isArray(obj2))\n );\n}\n\nexport function isObject(x: any) {\n return x != null && typeof x === 'object';\n}\n\nexport function isPromise(obj: any): obj is Promise<any> {\n return !!obj && typeof obj.then === 'function';\n}\n\nfunction isKeptByReference(value: any) {\n return (\n !isObject(value) ||\n isObservable(value) ||\n isPromise(value) ||\n value instanceof TemplateRef ||\n /* instanceof SafeHtmlImpl */ value.changingThisBreaksApplicationSecurity ||\n ['RegExp', 'FileList', 'File', 'Blob'].indexOf(value.constructor?.name) !== -1\n );\n}\n\nexport function clone(value: any): any {\n if (isKeptByReference(value)) {\n return value;\n }\n\n if (value instanceof Set) {\n return new Set(value);\n }\n\n if (value instanceof Map) {\n return new Map(value);\n }\n\n if (value instanceof Uint8Array) {\n return new Uint8Array(value);\n }\n\n if (value instanceof Uint16Array) {\n return new Uint16Array(value);\n }\n\n if (value instanceof Uint32Array) {\n return new Uint32Array(value);\n }\n\n // https://github.com/moment/moment/blob/master/moment.js#L252\n if (value._isAMomentObject && isFunction(value.clone)) {\n return value.clone();\n }\n\n if (value instanceof AbstractControl) {\n return null;\n }\n\n if (value instanceof Date) {\n return new Date(value.getTime());\n }\n\n if (Array.isArray(value)) {\n return value.slice(0).map((v) => clone(v));\n }\n\n // best way to clone a js object maybe\n // https://stackoverflow.com/questions/41474986/how-to-clone-a-javascript-es6-class-instance\n const proto = Object.getPrototypeOf(value);\n let c = Object.create(proto);\n c = Object.setPrototypeOf(c, proto);\n // need to make a deep copy so we dont use Object.assign\n // also Object.assign wont copy property descriptor exactly\n return Object.keys(value).reduce((newVal, prop) => {\n const propDesc = Object.getOwnPropertyDescriptor(value, prop);\n if (propDesc.get) {\n Object.defineProperty(newVal, prop, propDesc);\n } else {\n newVal[prop] = clone(value[prop]);\n }\n\n return newVal;\n }, c);\n}\n\nexport function isEqualValue(a: any, b: any): boolean {\n if (Object.is(a, b)) {\n return true;\n }\n\n if (isKeptByReference(a) || isKeptByReference(b) || Object.getPrototypeOf(a) !== Object.getPrototypeOf(b)) {\n return false;\n }\n\n if (a instanceof Date) {\n return Object.is(a.getTime(), b.getTime());\n }\n\n if (a instanceof Map) {\n return a.size === b.size && [...a].every(([k, v]) => b.has(k) && isEqualValue(v, b.get(k)));\n }\n\n if (a instanceof Set) {\n return a.size === b.size && [...a].every((v) => b.has(v));\n }\n\n const keys = Object.keys(a);\n\n return (\n keys.length === Object.keys(b).length &&\n keys.every((k) => Object.prototype.hasOwnProperty.call(b, k) && isEqualValue(a[k], b[k]))\n );\n}\n\nexport function defineHiddenProp(field: any, prop: string, defaultValue: any) {\n Object.defineProperty(field, prop, { enumerable: false, writable: true, configurable: true });\n field[prop] = defaultValue;\n}\n\ntype IObserveFn<T> = (change: { currentValue: T; previousValue?: T; firstChange: boolean }) => void;\nexport interface IObserver<T> {\n setValue: (value: T, emitEvent?: boolean) => void;\n unsubscribe: () => void;\n}\ninterface IObserveTarget<T> {\n [prop: string]: any;\n _observers?: {\n [prop: string]: {\n value: T;\n onChange: IObserveFn<T>[];\n };\n };\n}\n\nexport function observeDeep<T = any>(source: IObserveTarget<T>, paths: string[], setFn: () => void): () => void {\n let observers: (() => void)[] = [];\n\n const unsubscribe = () => {\n observers.forEach((observer) => observer());\n observers = [];\n };\n const observer = observe(source, paths, ({ firstChange, currentValue }) => {\n !firstChange && setFn();\n\n unsubscribe();\n if (isObject(currentValue) && currentValue.constructor.name === 'Object') {\n Object.keys(currentValue).forEach((prop) => {\n observers.push(observeDeep(source, [...paths, prop], setFn));\n });\n }\n });\n\n return () => {\n observer.unsubscribe();\n unsubscribe();\n };\n}\n\nexport function observe<T = any>(o: IObserveTarget<T>, paths: string[], setFn?: IObserveFn<T>): IObserver<T> {\n if (!o._observers) {\n defineHiddenProp(o, '_observers', {});\n }\n\n let target = o;\n for (let i = 0; i < paths.length - 1; i++) {\n if (!target[paths[i]] || !isObject(target[paths[i]])) {\n target[paths[i]] = /^\\d+$/.test(paths[i + 1]) ? [] : {};\n }\n target = target[paths[i]];\n }\n\n const key = paths[paths.length - 1];\n const prop = paths.join('.');\n if (!o._observers[prop]) {\n o._observers[prop] = { value: target[key], onChange: [] };\n }\n\n const state = o._observers[prop];\n if (target[key] !== state.value) {\n state.value = target[key];\n }\n\n if (setFn && state.onChange.indexOf(setFn) === -1) {\n state.onChange.push(setFn);\n setFn({ currentValue: state.value, firstChange: true });\n if (state.onChange.length >= 1 && isObject(target)) {\n const { enumerable } = Object.getOwnPropertyDescriptor(target, key) || { enumerable: true };\n Object.defineProperty(target, key, {\n enumerable,\n configurable: true,\n get: () => state.value,\n set: (currentValue) => {\n if (currentValue !== state.value) {\n const previousValue = state.value;\n state.value = currentValue;\n state.onChange.forEach((changeFn) => changeFn({ previousValue, currentValue, firstChange: false }));\n }\n },\n });\n }\n }\n\n return {\n setValue(currentValue: T, emitEvent = true) {\n if (currentValue === state.value) {\n return;\n }\n\n const previousValue = state.value;\n state.value = currentValue;\n state.onChange.forEach((changeFn) => {\n if (changeFn !== setFn && emitEvent) {\n changeFn({ previousValue, currentValue, firstChange: false });\n }\n });\n },\n unsubscribe() {\n state.onChange = state.onChange.filter((changeFn) => changeFn !== setFn);\n if (state.onChange.length === 0) {\n delete o._observers[prop];\n }\n },\n };\n}\n\nexport function getField(f: FormlyFieldConfig, key: FormlyFieldConfig['key']): FormlyFieldConfig {\n key = (Array.isArray(key) ? key.join('.') : key) as string;\n if (!f.fieldGroup) {\n return undefined;\n }\n\n for (let i = 0, len = f.fieldGroup.length; i < len; i++) {\n const c = f.fieldGroup[i];\n const k = (Array.isArray(c.key) ? c.key.join('.') : c.key) as string;\n if (k === key) {\n return c;\n }\n\n if (c.fieldGroup && (isNil(k) || key.indexOf(`${k}.`) === 0)) {\n const field = getField(c, isNil(k) ? key : key.slice(k.length + 1));\n if (field) {\n return field;\n }\n }\n }\n\n return undefined;\n}\n\nexport function markFieldForCheck(field: FormlyFieldConfigCache) {\n field._componentRefs?.forEach((ref) => {\n // NOTE: we cannot use ref.changeDetectorRef, see https://github.com/ngx-formly/ngx-formly/issues/2191\n if (ref instanceof ComponentRef) {\n const changeDetectorRef = ref.injector.get(ChangeDetectorRef);\n changeDetectorRef.markForCheck();\n } else {\n ref.markForCheck();\n }\n });\n}\n\nexport function isNoopNgZone(ngZone: NgZone) {\n return ngZone instanceof ɵNoopNgZone;\n}\n\nexport function isHiddenField(field: FormlyFieldConfig) {\n const isHidden = (f: FormlyFieldConfig) => f.hide || f.expressions?.hide || f.hideExpression;\n let setDefaultValue = !field.resetOnHide || !isHidden(field);\n if (!isHidden(field) && field.resetOnHide) {\n let parent = field.parent;\n while (parent && !isHidden(parent)) {\n parent = parent.parent;\n }\n setDefaultValue = !parent || !isHidden(parent);\n }\n\n return !setDefaultValue;\n}\n\nexport function isSignalRequired() {\n return +VERSION.major > 18 || (+VERSION.major >= 18 && +VERSION.minor >= 1);\n}\n","/**\n * Legacy implementation\n */\nexport function evalStringExpressionLegacy(expression: string, argNames: string[]): any {\n try {\n return Function(...argNames, `return ${expression};`) as any;\n } catch (error) {\n console.error(error);\n }\n}\n\nexport function evalExpression(\n expression: string | ((...value: any[]) => any) | boolean,\n thisArg: any,\n argVal: any[],\n): any {\n if (typeof expression === 'function') {\n return expression.apply(thisArg, argVal);\n } else {\n return expression ? true : false;\n }\n}\n","import { EventEmitter } from '@angular/core';\nimport { UntypedFormArray, UntypedFormGroup, AbstractControl, FormControl } from '@angular/forms';\nimport { getKeyPath, getField, getFieldValue, isNil, defineHiddenProp, observe, hasKey } from '../../utils';\nimport { FormlyFieldConfigCache } from '../../models';\n\nexport function unregisterControl(field: FormlyFieldConfigCache, emitEvent = false) {\n if (!hasKey(field) && field.fieldGroup) {\n field.fieldGroup.forEach((f) => unregisterControl(f, emitEvent));\n return;\n }\n if (field.shareFormControl === false) {\n field._controlActive = false;\n }\n const control = field.formControl;\n const fieldIndex = control._fields ? control._fields.indexOf(field) : -1;\n if (fieldIndex !== -1) {\n control._fields.splice(fieldIndex, 1);\n }\n\n const form = control.parent as FormlyFieldConfigCache['formControl'];\n if (!form) {\n return;\n }\n\n const opts = { emitEvent };\n if (form instanceof UntypedFormArray) {\n const key = form.controls.findIndex((c) => c === control);\n if (key !== -1) {\n form.removeAt(key, opts);\n }\n } else if (form instanceof UntypedFormGroup) {\n const paths = getKeyPath(field);\n const key = paths[paths.length - 1];\n if (form.get([key]) === control) {\n form.removeControl(key, opts);\n }\n }\n\n control.setParent(null);\n // A hidden row may have been attached only to hold a visible fixed-path editor.\n if (\n form instanceof UntypedFormGroup &&\n !Object.keys(form.controls).length &&\n !(form as FormlyFieldConfigCache['formControl'])._fields?.some((f) => !f._hide) &&\n form.parent\n ) {\n const key = Object.keys((form.parent as UntypedFormGroup).controls).find((key) => form.parent.get([key]) === form);\n unregisterControl({ key, formControl: form }, emitEvent);\n }\n}\n\nexport function findControl(field: FormlyFieldConfigCache): AbstractControl {\n if (field.formControl) {\n return field.formControl;\n }\n\n if (field.shareFormControl === false) {\n return null;\n }\n\n // Hidden fields retain controls even when they are absent from the registered form tree.\n return findArrayControl(field.form, getKeyPath(field)) || field.form?.get(getKeyPath(field));\n}\n\nfunction findArrayControl(form: FormlyFieldConfigCache['formControl'], path: string[]) {\n for (const owner of form?._fields || []) {\n const target = owner.fieldArray && getField(owner, path);\n if (target?.formControl && target.shareFormControl !== false) {\n return target.formControl;\n }\n }\n return null;\n}\n\nfunction setControl(\n form: FormlyFieldConfigCache['formControl'],\n key: string,\n control: FormlyFieldConfigCache['formControl'],\n emitEvent: boolean,\n) {\n const array = form._fields?.find((f) => f.fieldArray);\n if (form instanceof UntypedFormArray && array && control._fields?.every((f) => f.shareFormControl !== false)) {\n // Hidden rows compact the FormArray: insert relative to retained rows, without empty slots.\n const registered = new Set(form.controls);\n if (!registered.has(control)) {\n const index = array.fieldGroup.slice(0, Number(key)).filter((row, index) => {\n return registered.has((hasKey(row) ? row : getField(row, `${index}`))?.formControl);\n }).length;\n form.insert(index, control, { emitEvent });\n }\n } else if (form.get([key]) !== control) {\n (form as UntypedFormGroup).setControl(key, control, { emitEvent });\n }\n}\n\nexport function registerControl(\n field: FormlyFieldConfigCache,\n control?: FormlyFieldConfigCache['formControl'],\n emitEvent = false,\n) {\n control = control || field.formControl;\n\n if (field.shareFormControl === false && hasKey(field)) {\n if (!field.hasOwnProperty('_controlActive')) {\n defineHiddenProp(field, '_controlActive', false);\n } else {\n field._controlActive = false;\n }\n }\n\n if (!control._fields) {\n defineHiddenProp(control, '_fields', []);\n }\n if (control._fields.indexOf(field) === -1) {\n control._fields.push(field);\n }\n\n if (!field.formControl && control) {\n if (!Object.getOwnPropertyDescriptor(field, 'formControl')?.set) {\n defineHiddenProp(field, 'formControl', undefined);\n field.props.disabled = !!field.props.disabled;\n const disabledObserver = observe(field, ['props', 'disabled'], ({ firstChange, currentValue }) => {\n if (!firstChange && field.formControl) {\n currentValue ? field.formControl.disable() : field.formControl.enable();\n }\n });\n observe<AbstractControl>(field, ['formControl'], ({ previousValue, currentValue }) => {\n if (previousValue instanceof FormControl) {\n (previousValue as any)._unregisterOnDisabledChange(disabledObserver.setValue);\n }\n if (currentValue instanceof FormControl) {\n currentValue.registerOnDisabledChange(disabledObserver.setValue);\n }\n });\n }\n field.formControl = control;\n control.setValidators(null);\n control.setAsyncValidators(null);\n }\n\n if (!field.form || !hasKey(field)) {\n return;\n }\n\n let form: FormlyFieldConfigCache['formControl'] = field.form;\n const paths = getKeyPath(field);\n const value = getFieldValue(field);\n if (!(isNil(control.value) && isNil(value)) && control.value !== value && control instanceof FormControl) {\n control.patchValue(value, { emitEvent: field.shareFormControl !== false });\n }\n if (field._hide) {\n return;\n }\n\n for (let i = 0; i < paths.length - 1; i++) {\n const path = paths[i];\n const child = findArrayControl(form, [path]) || form.get([path]) || new UntypedFormGroup({});\n setControl(form, path, child, emitEvent);\n form = child;\n }\n\n const key = paths[paths.length - 1];\n if (!field._hide && form.get([key]) !== control) {\n if (field.shareFormControl === false) {\n const previous = form.get([key]) as FormlyFieldConfigCache['formControl'];\n previous?._fields?.forEach((f) => {\n if (f.shareFormControl === false) {\n f._controlActive = false;\n }\n });\n previous?.setParent(null);\n }\n setControl(form, key, control, emitEvent);\n }\n\n if (field.shareFormControl === false) {\n if (field.options?._formControlsForCheck) {\n field.options._formControlsForCheck.add(field);\n } else {\n field._controlActive = !field._hide && form.get([key]) === control;\n }\n }\n}\n\nexport function updateValidity(c: AbstractControl, onlySelf = false) {\n const status = c.status;\n const value = c.value;\n c.updateValueAndValidity({ emitEvent: false, onlySelf });\n if (status !== c.status) {\n (c.statusChanges as EventEmitter<string>).emit(c.status);\n }\n\n if (value !== c.value) {\n (c.valueChanges as EventEmitter<any>).emit(c.value);\n }\n}\n\nexport function clearControl(form: FormlyFieldConfigCache['formControl']) {\n delete form?._fields;\n form.setValidators(null);\n form.setAsyncValidators(null);\n if (form instanceof UntypedFormGroup || form instanceof UntypedFormArray) {\n Object.values(form.controls).forEach((c) => clearControl(c));\n }\n}\n","import { FormlyValueChangeEvent, FormlyFieldConfigCache } from '../../models';\nimport {\n isObject,\n isNil,\n isUndefined,\n isFunction,\n defineHiddenProp,\n observe,\n getFieldValue,\n assignFieldValue,\n hasKey,\n} from '../../utils';\nimport { evalExpression, evalStringExpressionLegacy } from './utils';\nimport { isObservable, Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { FormlyExtension } from '../../models';\nimport { unregisterControl, registerControl, updateValidity } from '../field-form/utils';\nimport { AbstractControl, UntypedFormArray } from '@angular/forms';\n\nexport class FieldExpressionExtension implements FormlyExtension {\n onPopulate(field: FormlyFieldConfigCache) {\n if (field._expressions) {\n return;\n }\n\n // cache built expression\n defineHiddenProp(field, '_expressions', {});\n\n observe(field, ['hide'], ({ currentValue, firstChange }) => {\n defineHiddenProp(field, '_hide', !!currentValue);\n if (!firstChange || (firstChange && currentValue === true)) {\n field.props.hidden = currentValue;\n field.options._hiddenFieldsForCheck.push({ field });\n }\n });\n\n if (field.hideExpression) {\n observe(field, ['hideExpression'], ({ currentValue: expr }) => {\n field._expressions.hide = this.parseExpressions(field, 'hide', typeof expr === 'boolean' ? () => expr : expr);\n });\n }\n\n const evalExpr = (key: string, expr: any) => {\n if (typeof expr === 'string' || isFunction(expr)) {\n field._expressions[key] = this.parseExpressions(field, key, expr);\n } else if (expr instanceof Observable) {\n field._expressions[key] = {\n value$: (expr as Observable<any>).pipe(\n tap((v) => {\n if (['props.disabled', 'templateOptions.disabled'].includes(key)) {\n field._expressions[key].callback = this.parseExpressions(field, key, () => v).callback;\n field._expressions[key].callback(true);\n } else {\n this.evalExpr(field, key, v);\n }\n field.options._detectChanges(field);\n }),\n ),\n };\n }\n };\n\n field.expressions = field.expressions || {};\n for (const key of Object.keys(field.expressions)) {\n observe(field, ['expressions', key], ({ currentValue: expr }) => {\n evalExpr(key, isFunction(expr) ? (...args: any) => expr(field, args[3]) : expr);\n });\n }\n\n field.expressionProperties = field.expressionProperties || {};\n for (const key of Object.keys(field.expressionProperties)) {\n observe(field, ['expressionProperties', key], ({ currentValue }) => evalExpr(key, currentValue));\n }\n }\n\n postPopulate(field: FormlyFieldConfigCache) {\n if (field.parent) {\n return;\n }\n\n if (!field.options.checkExpressions) {\n let checkLocked = false;\n field.options.checkExpressions = (f, ignoreCache) => {\n if (checkLocked) {\n return;\n }\n\n checkLocked = true;\n try {\n // ponytail: initial-tree budget; add an override if valid dynamic forms need more passes.\n const maxPasses = Math.max(100, 2 * this.countFields(field));\n const options = field.options;\n // Rebuilds preserve supplied values, but defaults may need clearing after visibility changes.\n const restoredDefaults = ignoreCache ? new Set<AbstractControl>() : undefined;\n const fieldChanged = this.checkExpressions(f, ignoreCache) || options._hiddenFieldsForCheck.length > 0;\n let passes = 0;\n do {\n if (passes++ === maxPasses) {\n console.warn('[Formly] The form may be inconsistent. Check for circular hide expressions');\n throw new Error(`[Formly Error] Expressions did not settle after ${maxPasses} passes.`);\n }\n\n options._hiddenFieldsForCheck\n .sort((f) => (f.field.hide ? -1 : 1))\n .forEach((f) =>\n this.changeHideState(f.field, f.field.hide ?? f.default, !ignoreCache, f.emitEvent, restoredDefaults),\n );\n options._hiddenFieldsForCheck = [];\n if (fieldChanged) {\n this.checkExpressions(field);\n }\n } while (options._hiddenFieldsForCheck.length > 0);\n } finally {\n checkLocked = false;\n }\n };\n }\n }\n\n protected parseExpressions(field: FormlyFieldConfigCache, path: string, expr: any) {\n const isDisabledExpression = ['props.disabled', 'templateOptions.disabled'].includes(path);\n let parentExpression: any;\n if (field.parent && (path === 'hide' || isDisabledExpression)) {\n const rootValue = (f: FormlyFieldConfigCache) => {\n return path === 'hide' ? f.hide : f.props.disabled;\n };\n\n parentExpression = () => {\n let root = field.parent;\n while (root.parent && !rootValue(root)) {\n root = root.parent;\n }\n\n return rootValue(root);\n };\n }\n\n expr = expr || (() => false);\n if (typeof expr === 'string') {\n expr = this._evalStringExpression(expr, ['model', 'formState', 'field']);\n }\n\n let currentValue: any;\n\n return {\n callback: (ignoreCache?: boolean) => {\n try {\n const exprValue = evalExpression(\n parentExpression ? (...args: any) => parentExpression(field) || expr(...args) : expr,\n { field },\n [field.model, field.options.formState, field, ignoreCache],\n );\n\n if (\n ignoreCache ||\n (isDisabledExpression &&\n (field.props.disabled !== !!exprValue || (exprValue && hasKey(field) && field.formControl?.enabled))) ||\n (currentValue !== exprValue &&\n (!isObject(exprValue) ||\n isObservable(exprValue) ||\n JSON.stringify(exprValue) !== JSON.stringify(currentValue)))\n ) {\n currentValue = exprValue;\n this.evalExpr(field, path, exprValue);\n\n return true;\n }\n\n return false;\n } catch (error: any) {\n error.message = `[Formly Error] [Expression \"${path}\"] ${error.message}`;\n throw error;\n }\n },\n };\n }\n\n protected _evalStringExpression(expression: string, argNames: string[]) {\n return evalStringExpressionLegacy(expression, argNames);\n }\n\n private countFields(field: FormlyFieldConfigCache): number {\n return field ? 1 + (field.fieldGroup?.reduce((count, f) => count + this.countFields(f), 0) ?? 0) : 0;\n }\n\n private checkExpressions(field: FormlyFieldConfigCache, ignoreCache = false) {\n if (!field) {\n return false;\n }\n\n let fieldChanged = false;\n if (field._expressions) {\n const hide = field.hide;\n for (const key of Object.keys(field._expressions)) {\n field._expressions[key].callback?.(ignoreCache) && (fieldChanged = true);\n }\n\n if (ignoreCache && field._expressions.hide && hide === false && field.hide === false) {\n let parent = field.parent;\n while (parent && !parent.hide) {\n parent = parent.parent;\n }\n if (!parent) {\n // Restore defaults after rebuilding without reporting a visibility change.\n field.options._hiddenFieldsForCheck.push({ field, emitEvent: false });\n }\n }\n }\n field.fieldGroup?.forEach((f) => this.checkExpressions(f, ignoreCache) && (fieldChanged = true));\n\n return fieldChanged;\n }\n\n private changeDisabledState(field: FormlyFieldConfigCache, value: boolean) {\n if (field.fieldGroup) {\n field.fieldGroup\n .filter((f: FormlyFieldConfigCache) => !f._expressions.hasOwnProperty('props.disabled'))\n .forEach((f) => this.changeDisabledState(f, value));\n }\n\n if (hasKey(field) && field.props.disabled !== value) {\n field.props.disabled = value;\n }\n }\n\n private changeHideState(\n field: FormlyFieldConfigCache,\n hide: boolean,\n resetOnHide: boolean,\n emitEvent = true,\n restoredDefaults?: Set<AbstractControl>,\n ) {\n hide = field.hide || hide;\n if (field.fieldGroup) {\n field.fieldGroup\n .filter((f: FormlyFieldConfigCache) => f && !f._expressions.hide)\n .forEach((f) => this.changeHideState(f, hide, resetOnHide, emitEvent, restoredDefaults));\n }\n\n if (field.formControl && hasKey(field)) {\n defineHiddenProp(field, '_hide', !!(hide || field.hide));\n const c = field.formControl;\n if (c._fields?.length > 1) {\n updateValidity(c);\n }\n\n if (hide === true && (!c._fields || c._fields.every((f) => !!f._hide))) {\n unregisterControl(field, true);\n if ((resetOnHide || restoredDefaults?.has(c)) && field.resetOnHide) {\n assignFieldValue(field, undefined);\n restoredDefaults?.delete(c);\n field.formControl.reset({ value: undefined, disabled: field.formControl.disabled });\n field.options.fieldChanges.next({ value: undefined, field, type: 'valueChanges' });\n if (field.fieldGroup && field.formControl instanceof UntypedFormArray) {\n field.fieldGroup.length = 0;\n }\n }\n } else if (hide === false) {\n if (field.resetOnHide && !isUndefined(field.defaultValue) && isUndefined(getFieldValue(field))) {\n assignFieldValue(field, field.defaultValue);\n restoredDefaults?.add(c);\n }\n registerControl(field, undefined, true);\n if (field.resetOnHide && field.fieldArray && field.fieldGroup?.length !== field.model?.length) {\n field.options.build(field);\n }\n }\n }\n\n if (emitEvent && field.options.fieldChanges) {\n field.options.fieldChanges.next(<FormlyValueChangeEvent>{ field, type: 'hidden', value: hide });\n }\n }\n\n private evalExpr(field: FormlyFieldConfigCache, prop: string, value: any) {\n if (prop.indexOf('model.') === 0) {\n const key = prop.replace(/^model\\./, ''),\n parent = field.fieldGroup ? field : field.parent;\n\n let control = field?.key === key ? field.formControl : field.form.get(key);\n if (!control && field.get(key)) {\n control = field.get(key).formControl;\n }\n assignFieldValue({ key, parent, model: field.model }, value);\n if (control && !(isNil(control.value) && isNil(value)) && control.value !== value) {\n control.patchValue(value);\n }\n } else {\n try {\n let target: any = field;\n const paths = this._evalExpressionPath(field, prop);\n const lastIndex = paths.length - 1;\n for (let i = 0; i < lastIndex; i++) {\n target = target[paths[i]];\n }\n\n target[paths[lastIndex]] = value;\n } catch (error: any) {\n error.message = `[Formly Error] [Expression \"${prop}\"] ${error.message}`;\n throw error;\n }\n\n if (['templateOptions.disabled', 'props.disabled'].includes(prop) && hasKey(field)) {\n // Angular enables descendants without updating a group's disabled property.\n if (value && field.formControl?.enabled) {\n field.formControl.disable();\n }\n this.changeDisabledState(field, value);\n }\n }\n\n this.emitExpressionChanges(field, prop, value);\n }\n\n private emitExpressionChanges(field: FormlyFieldConfigCache, property: string, value: any) {\n if (!field.options.fieldChanges) {\n return;\n }\n\n field.options.fieldChanges.next({\n field,\n type: 'expressionChanges',\n property,\n value,\n });\n }\n\n private _evalExpressionPath(field: FormlyFieldConfigCache, prop: string) {\n if (field._expressions[prop] && field._expressions[prop].paths) {\n return field._expressions[prop].paths;\n }\n\n let paths: string[] = [];\n if (prop.indexOf('[') === -1) {\n paths = prop.split('.');\n } else {\n prop\n .split(/[[\\]]{1,2}/) // https://stackoverflow.com/a/20198206\n .filter((p) => p)\n .forEach((path) => {\n const arrayPath = path.match(/['|\"](.*?)['|\"]/);\n if (arrayPath) {\n paths.push(arrayPath[1]);\n } else {\n paths.push(...path.split('.').filter((p) => p));\n }\n });\n }\n\n if (field._expressions[prop]) {\n field._expressions[prop].paths = paths;\n }\n\n return paths;\n }\n}\n","// CSP-compliant expression parser for Formly expressions\n// Supports: model.path, formState.path, field.path, comparisons, logical operators, and negation\n\ntype ExpressionContext = {\n model: any;\n formState: any;\n field: any;\n};\n\n// Tokenizer\nenum TokenType {\n IDENTIFIER = 'IDENTIFIER',\n DOT = 'DOT',\n OPTIONAL_DOT = 'OPTIONAL_DOT',\n BRACKET_OPEN = 'BRACKET_OPEN',\n BRACKET_CLOSE = 'BRACKET_CLOSE',\n STRING = 'STRING',\n NUMBER = 'NUMBER',\n BOOLEAN = 'BOOLEAN',\n NULL = 'NULL',\n UNDEFINED = 'UNDEFINED',\n OPERATOR = 'OPERATOR',\n LOGICAL = 'LOGICAL',\n NOT = 'NOT',\n ARITHMETIC = 'ARITHMETIC',\n PAREN_OPEN = 'PAREN_OPEN',\n PAREN_CLOSE = 'PAREN_CLOSE',\n TERNARY_QUESTION = 'TERNARY_QUESTION',\n TERNARY_COLON = 'TERNARY_COLON',\n EOF = 'EOF',\n}\n\ninterface Token {\n type: TokenType;\n value: any;\n}\n\nclass Tokenizer {\n private pos = 0;\n private input: string;\n\n constructor(input: string) {\n this.input = input.trim();\n }\n\n tokenize(): Token[] {\n const tokens: Token[] = [];\n\n while (this.pos < this.input.length) {\n this.skipWhitespace();\n\n if (this.pos >= this.input.length) break;\n\n const char = this.input[this.pos];\n\n // String literals\n if (char === '\"' || char === \"'\") {\n tokens.push(this.readString());\n }\n // Numbers\n else if (/\\d/.test(char)) {\n tokens.push(this.readNumber());\n }\n // Identifiers and keywords\n else if (/[a-zA-Z_$]/.test(char)) {\n tokens.push(this.readIdentifier());\n }\n // Operators and symbols\n else if (char === '.') {\n tokens.push({ type: TokenType.DOT, value: '.' });\n this.pos++;\n } else if (char === '[') {\n tokens.push({ type: TokenType.BRACKET_OPEN, value: '[' });\n this.pos++;\n } else if (char === ']') {\n tokens.push({ type: TokenType.BRACKET_CLOSE, value: ']' });\n this.pos++;\n } else if (char === '(') {\n tokens.push({ type: TokenType.PAREN_OPEN, value: '(' });\n this.pos++;\n } else if (char === ')') {\n tokens.push({ type: TokenType.PAREN_CLOSE, value: ')' });\n this.pos++;\n } else if (char === '?' && this.peek() === '.') {\n tokens.push({ type: TokenType.OPTIONAL_DOT, value: '?.' });\n this.pos += 2;\n } else if (char === '?') {\n tokens.push({ type: TokenType.TERNARY_QUESTION, value: '?' });\n this.pos++;\n } else if (char === ':') {\n tokens.push({ type: TokenType.TERNARY_COLON, value: ':' });\n this.pos++;\n } else if (char === '!') {\n if (this.peek() === '=') {\n if (this.input[this.pos + 2] === '=') {\n tokens.push({ type: TokenType.OPERATOR, value: '!==' });\n this.pos += 3;\n } else {\n tokens.push({ type: TokenType.OPERATOR, value: '!=' });\n this.pos += 2;\n }\n } else {\n tokens.push({ type: TokenType.NOT, value: '!' });\n this.pos++;\n }\n } else if (char === '=' || char === '<' || char === '>') {\n tokens.push(this.readOperator());\n } else if (char === '+' || char === '*' || char === '/' || char === '%') {\n tokens.push({ type: TokenType.ARITHMETIC, value: char });\n this.pos++;\n } else if (char === '-') {\n // Check if this is a negative number or subtraction\n // It's a negative number if preceded by an operator, opening paren, or at the start\n const lastToken = tokens[tokens.length - 1];\n const isNegativeNumber =\n tokens.length === 0 ||\n lastToken?.type === TokenType.OPERATOR ||\n lastToken?.type === TokenType.LOGICAL ||\n lastToken?.type === TokenType.ARITHMETIC ||\n lastToken?.type === TokenType.PAREN_OPEN ||\n lastToken?.type === TokenType.TERNARY_QUESTION ||\n lastToken?.type === TokenType.TERNARY_COLON;\n\n if (isNegativeNumber && this.peek() && /\\d/.test(this.peek())) {\n tokens.push(this.readNumber());\n } else {\n tokens.push({ type: TokenType.ARITHMETIC, value: '-' });\n this.pos++;\n }\n } else if (char === '&' && this.peek() === '&') {\n tokens.push({ type: TokenType.LOGICAL, value: '&&' });\n this.pos += 2;\n } else if (char === '|' && this.peek() === '|') {\n tokens.push({ type: TokenType.LOGICAL, value: '||' });\n this.pos += 2;\n } else {\n throw new Error(`Unexpected character: ${char} at position ${this.pos}`);\n }\n }\n\n tokens.push({ type: TokenType.EOF, value: null });\n return tokens;\n }\n\n private skipWhitespace(): void {\n while (this.pos < this.input.length && /\\s/.test(this.input[this.pos])) {\n this.pos++;\n }\n }\n\n private peek(offset = 1): string {\n return this.input[this.pos + offset] || '';\n }\n\n private readString(): Token {\n const quote = this.input[this.pos];\n this.pos++;\n let value = '';\n\n while (this.pos < this.input.length && this.input[this.pos] !== quote) {\n if (this.input[this.pos] === '\\\\') {\n this.pos++;\n if (this.pos < this.input.length) {\n const escaped = this.input[this.pos];\n switch (escaped) {\n case 'n':\n value += '\\n';\n break;\n case 't':\n value += '\\t';\n break;\n case 'r':\n value += '\\r';\n break;\n default:\n value += escaped;\n }\n }\n } else {\n value += this.input[this.pos];\n }\n this.pos++;\n }\n\n this.pos++; // skip closing quote\n return { type: TokenType.STRING, value };\n }\n\n private readNumber(): Token {\n let value = '';\n\n // Handle negatives\n if (this.input[this.pos] === '-') {\n value += '-';\n this.pos++;\n }\n\n let hasDecimal = false;\n while (this.pos < this.input.length && /[\\d.]/.test(this.input[this.pos])) {\n if (this.input[this.pos] === '.') {\n if (hasDecimal) {\n throw new Error(`Invalid number format: multiple decimal points at position ${this.pos}`);\n }\n hasDecimal = true;\n }\n value += this.input[this.pos];\n this.pos++;\n }\n\n const parsed = parseFloat(value);\n if (isNaN(parsed)) {\n throw new Error(`Invalid number format: ${value}`);\n }\n\n return { type: TokenType.NUMBER, value: parsed };\n }\n\n private readIdentifier(): Token {\n let value = '';\n\n while (this.pos < this.input.length && /[a-zA-Z0-9_$]/.test(this.input[this.pos])) {\n value += this.input[this.pos];\n this.pos++;\n }\n\n // Check for keywords\n if (value === 'true' || value === 'false') {\n return { type: TokenType.BOOLEAN, value: value === 'true' };\n }\n if (value === 'null') {\n return { type: TokenType.NULL, value: null };\n }\n if (value === 'undefined') {\n return { type: TokenType.UNDEFINED, value: undefined };\n }\n\n return { type: TokenType.IDENTIFIER, value };\n }\n\n private readOperator(): Token {\n let op = this.input[this.pos];\n this.pos++;\n\n if (this.pos < this.input.length) {\n const next = this.input[this.pos];\n if (\n (op === '=' && next === '=') ||\n (op === '!' && next === '=') ||\n (op === '<' && next === '=') ||\n (op === '>' && next === '=')\n ) {\n op += next;\n this.pos++;\n\n // Check for === or !==\n if (this.pos < this.input.length && this.input[this.pos] === '=') {\n op += '=';\n this.pos++;\n }\n }\n }\n\n return { type: TokenType.OPERATOR, value: op };\n }\n}\n\n// Parser and Evaluator\nclass ExpressionParser {\n private tokens: Token[];\n private pos = 0;\n\n constructor(tokens: Token[]) {\n this.tokens = tokens;\n }\n\n parse(): (context: ExpressionContext) => any {\n const expr = this.parseTernary();\n this.consume(TokenType.EOF);\n return (context: ExpressionContext) => expr(context);\n }\n\n private parseTernary(): (context: ExpressionContext) => any {\n const expr = this.parseLogicalOr();\n\n if (this.current().type === TokenType.TERNARY_QUESTION) {\n this.consume(TokenType.TERNARY_QUESTION);\n const trueExpr = this.parseLogicalOr();\n this.consume(TokenType.TERNARY_COLON);\n const falseExpr = this.parseTernary();\n\n return (context: ExpressionContext) => {\n return expr(context) ? trueExpr(context) : falseExpr(context);\n };\n }\n\n return expr;\n }\n\n private parseLogicalOr(): (context: ExpressionContext) => any {\n let left = this.parseLogicalAnd();\n\n while (this.current().type === TokenType.LOGICAL && this.current().value === '||') {\n this.consume(TokenType.LOGICAL);\n const right = this.parseLogicalAnd();\n const prevLeft = left;\n left = (context: ExpressionContext) => prevLeft(context) || right(context);\n }\n\n return left;\n }\n\n private parseLogicalAnd(): (context: ExpressionContext) => any {\n let left = this.parseComparison();\n\n while (this.current().type === TokenType.LOGICAL && this.current().value === '&&') {\n this.consume(TokenType.LOGICAL);\n const right = this.parseComparison();\n const prevLeft = left;\n left = (context: ExpressionContext) => prevLeft(context) && right(context);\n }\n\n return left;\n }\n\n private parseComparison(): (context: ExpressionContext) => any {\n const left = this.parseAdditive();\n\n if (this.current().type === TokenType.OPERATOR) {\n const op = this.consume(TokenType.OPERATOR).value;\n const right = this.parseAdditive();\n\n return (context: ExpressionContext) => {\n const leftVal = left(context);\n const rightVal = right(context);\n\n switch (op) {\n case '===':\n return leftVal === rightVal;\n case '!==':\n return leftVal !== rightVal;\n case '==':\n return leftVal == rightVal;\n case '!=':\n return leftVal != rightVal;\n case '<':\n return leftVal < rightVal;\n case '<=':\n return leftVal <= rightVal;\n case '>':\n return leftVal > rightVal;\n case '>=':\n return leftVal >= rightVal;\n default:\n throw new Error(`Unknown operator: ${op}`);\n }\n };\n }\n\n return left;\n }\n\n private parseAdditive(): (context: ExpressionContext) => any {\n let left = this.parseMultiplicative();\n\n while (\n this.current().type === TokenType.ARITHMETIC &&\n (this.current().value === '+' || this.current().value === '-')\n ) {\n const op = this.consume(TokenType.ARITHMETIC).value;\n const right = this.parseMultiplicative();\n const prevLeft = left;\n\n if (op === '+') {\n left = (context: ExpressionContext) => prevLeft(context) + right(context);\n } else {\n left = (context: ExpressionContext) => prevLeft(context) - right(context);\n }\n }\n\n return left;\n }\n\n private parseMultiplicative(): (context: ExpressionContext) => any {\n let left = this.parseUnary();\n\n while (\n this.current().type === TokenType.ARITHMETIC &&\n (this.current().value === '*' || this.current().value === '/' || this.current().value === '%')\n ) {\n const op = this.consume(TokenType.ARITHMETIC).value;\n const right = this.parseUnary();\n const prevLeft = left;\n\n if (op === '*') {\n left = (context: ExpressionContext) => prevLeft(context) * right(context);\n } else if (op === '/') {\n left = (context: ExpressionContext) => prevLeft(context) / right(context);\n } else {\n left = (context: ExpressionContext) => prevLeft(context) % right(context);\n }\n }\n\n return left;\n }\n\n private parseUnary(): (context: ExpressionContext) => any {\n if (this.current().type === TokenType.NOT) {\n this.consume(TokenType.NOT);\n const expr = this.parseUnary();\n return (context: ExpressionContext) => !expr(context);\n }\n\n return this.parsePrimary();\n }\n\n private parsePrimary(): (context: ExpressionContext) => any {\n const token = this.current();\n\n // Parentheses\n if (token.type === TokenType.PAREN_OPEN) {\n this.consume(TokenType.PAREN_OPEN);\n const expr = this.parseTernary();\n this.consume(TokenType.PAREN_CLOSE);\n return expr;\n }\n\n // Literals\n if (\n token.type === TokenType.STRING ||\n token.type === TokenType.NUMBER ||\n token.type === TokenType.BOOLEAN ||\n token.type === TokenType.NULL ||\n token.type === TokenType.UNDEFINED\n ) {\n const value = token.value;\n this.pos++;\n return () => value;\n }\n\n // Property access (model.field, formState.prop, etc)\n if (token.type === TokenType.IDENTIFIER) {\n return this.parsePropertyAccess();\n }\n\n throw new Error(`Unexpected token: ${JSON.stringify(token)}`);\n }\n\n private parsePropertyAccess(): (context: ExpressionContext) => any {\n const path: Array<string | ((context: ExpressionContext) => any)> = [];\n\n // Read first identifier\n path.push(this.consume(TokenType.IDENTIFIER).value);\n\n // Read rest of path (dots and brackets)\n while (\n this.current().type === TokenType.DOT ||\n this.current().type === TokenType.OPTIONAL_DOT ||\n this.current().type === TokenType.BRACKET_OPEN\n ) {\n const optional = this.current().type === TokenType.OPTIONAL_DOT;\n if (optional) {\n this.consume(TokenType.OPTIONAL_DOT);\n }\n\n if (this.current().type === TokenType.DOT || (optional && this.current().type !== TokenType.BRACKET_OPEN)) {\n if (!optional) {\n this.consume(TokenType.DOT);\n }\n path.push(this.consume(TokenType.IDENTIFIER).value);\n } else {\n this.consume(TokenType.BRACKET_OPEN);\n\n // bracket notation can contain expressions\n if (this.current().type === TokenType.STRING) {\n path.push(this.consume(TokenType.STRING).value);\n } else if (this.current().type === TokenType.NUMBER) {\n path.push(String(this.consume(TokenType.NUMBER).value));\n } else {\n // dynamic property access\n const expr = this.parseTernary();\n path.push(expr);\n }\n\n this.consume(TokenType.BRACKET_CLOSE);\n }\n }\n\n return (context: ExpressionContext) => {\n let value: any = context;\n\n for (const segment of path) {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n if (typeof segment === 'function') {\n value = value[segment(context)];\n } else {\n value = value[segment];\n }\n }\n\n return value;\n };\n }\n\n private current(): Token {\n return this.tokens[this.pos];\n }\n\n private consume(expectedType: TokenType): Token {\n const token = this.current();\n\n if (token.type !== expectedType) {\n throw new Error(`Expected ${expectedType}, got ${token.type}`);\n }\n\n this.pos++;\n return token;\n }\n}\n\n/**\n * Uses CSP-safe implementation\n */\nexport function parseExpression(expression: string, argNames: string[]): any {\n try {\n const tokenizer = new Tokenizer(expression);\n const tokens = tokenizer.tokenize();\n const parser = new ExpressionParser(tokens);\n const evaluator = parser.parse();\n\n // Return a function that maps the args to the context\n return (...args: any[]) => {\n const context: any = {};\n argNames.forEach((name, i) => {\n context[name] = args[i];\n });\n return evaluator(context);\n };\n } catch (error) {\n console.error('Expression parse error:', error);\n return undefined;\n }\n}\n","import { FieldExpressionExtension as FieldExpressionLegacyExtension } from '../field-expression-legacy/field-expression';\nimport { parseExpression } from './utils';\n\nexport class FieldExpressionExtension extends FieldExpressionLegacyExtension {\n protected override _evalStringExpression(expression: string, argNames: string[]) {\n return parseExpression(expression, argNames);\n }\n}\n","import { ComponentRef } from '@angular/core';\nimport { FormlyConfig } from '../../services/formly.config';\nimport { FormlyFieldConfigCache, FormlyValueChangeEvent, FormlyExtension, FormlyFieldConfig } from '../../models';\nimport {\n getFieldId,\n assignFieldValue,\n isUndefined,\n getFieldValue,\n reverseDeepMerge,\n defineHiddenProp,\n clone,\n getField,\n markFieldForCheck,\n hasKey,\n observe,\n isHiddenField,\n isSignalRequired,\n} from '../../utils';\nimport { Subject } from 'rxjs';\n\nexport class CoreExtension implements FormlyExtension {\n private formId = 0;\n constructor(private config: FormlyConfig) {}\n\n prePopulate(field: FormlyFieldConfigCache) {\n const root = field.parent;\n this.initRootOptions(field);\n this.initFieldProps(field);\n if (root) {\n Object.defineProperty(field, 'options', { get: () => root.options, configurable: true });\n Object.defineProperty(field, 'model', {\n get: () => (hasKey(field) && field.fieldGroup ? getFieldValue(field) : root.model),\n configurable: true,\n });\n }\n\n Object.defineProperty(field, 'get', {\n value: (key: FormlyFieldConfig['key']) => getField(field, key),\n configurable: true,\n });\n\n this.getFieldComponentInstance(field).prePopulate?.(field);\n }\n\n onPopulate(field: FormlyFieldConfigCache) {\n this.initFieldOptions(field);\n this.getFieldComponentInstance(field).onPopulate?.(field);\n if (field.fieldGroup) {\n field.fieldGroup.forEach((f, index) => {\n if (f) {\n Object.defineProperty(f, 'parent', { get: () => field, configurable: true });\n Object.defineProperty(f, 'index', { get: () => index, configurable: true });\n }\n this.formId++;\n });\n }\n }\n\n postPopulate(field: FormlyFieldConfigCache) {\n this.getFieldComponentInstance(field).postPopulate?.(field);\n }\n\n private initFieldProps(field: FormlyFieldConfigCache) {\n field.props ??= field.templateOptions;\n Object.defineProperty(field, 'templateOptions', {\n get: () => field.props,\n set: (props) => (field.props = props),\n configurable: true,\n });\n }\n\n private initRootOptions(field: FormlyFieldConfigCache) {\n if (field.parent) {\n return;\n }\n\n const options = field.options;\n field.options.formState = field.options.formState || {};\n if (!options.showError) {\n options.showError = this.config.extras.showError;\n }\n\n if (!options.fieldChanges) {\n defineHiddenProp(options, 'fieldChanges', new Subject<FormlyValueChangeEvent>());\n }\n\n if (!options._hiddenFieldsForCheck) {\n options._hiddenFieldsForCheck = [];\n }\n\n options._detectChanges = (f: FormlyFieldConfigCache) => {\n if (f._componentRefs) {\n markFieldForCheck(f);\n }\n\n f.fieldGroup?.forEach((f) => f && options._detectChanges(f));\n };\n\n options.detectChanges = (f: FormlyFieldConfigCache) => {\n f.options.checkExpressions?.(f);\n options._detectChanges(f);\n };\n\n options.resetModel = (model?: any) => {\n model = clone(model ?? options._initialModel);\n if (field.model) {\n Object.keys(field.model).forEach((k) => delete field.model[k]);\n Object.assign(field.model, model || {});\n }\n\n if (!isSignalRequired()) {\n observe(options, ['parentForm', 'submitted']).setValue(false, false);\n }\n options.build(field);\n field.form.reset(field.model);\n };\n\n options.updateInitialValue = (model?: any) => (options._initialModel = clone(model ?? field.model));\n field.options.updateInitialValue();\n }\n\n private initFieldOptions(field: FormlyFieldConfigCache) {\n reverseDeepMerge(field, {\n id: getFieldId(`formly_${this.formId}`, field, field.index),\n hooks: {},\n modelOptions: {},\n validation: { messages: {} },\n props:\n !field.type || !hasKey(field)\n ? {}\n : {\n label: '',\n placeholder: '',\n disabled: false,\n },\n });\n\n if (this.config.extras.resetFieldOnHide && field.resetOnHide !== false) {\n field.resetOnHide = true;\n }\n\n if (\n field.type !== 'formly-template' &&\n (field.template || field.expressions?.template || field.expressionProperties?.template)\n ) {\n field.type = 'formly-template';\n }\n\n if (!field.type && field.fieldGroup) {\n field.type = 'formly-group';\n }\n\n if (field.type) {\n this.config.getMergedField(field);\n }\n\n if (\n hasKey(field) &&\n !isUndefined(field.defaultValue) &&\n isUndefined(getFieldValue(field)) &&\n !isHiddenField(field)\n ) {\n assignFieldValue(field, field.defaultValue);\n }\n\n field.wrappers = field.wrappers || [];\n }\n\n private getFieldComponentInstance(field: FormlyFieldConfigCache) {\n const componentRefInstance = () => {\n let componentRef = this.config.resolveFieldTypeRef(field);\n\n const fieldComponentRef = field._componentRefs?.slice(-1)[0];\n if (\n fieldComponentRef instanceof ComponentRef &&\n fieldComponentRef?.componentType === componentRef?.componentType\n ) {\n componentRef = fieldComponentRef as any;\n }\n\n return componentRef?.instance as any;\n };\n\n if (!field._proxyInstance) {\n defineHiddenProp(\n field,\n '_proxyInstance',\n new Proxy({} as FormlyExtension, {\n get: (_, prop) => componentRefInstance()?.[prop],\n set: (_, prop, value) => (componentRefInstance()[prop] = value),\n }),\n );\n }\n\n return field._proxyInstance;\n }\n}\n","import { FormlyExtension, FormlyFieldConfigCache } from '../../models';\nimport {\n UntypedFormGroup,\n UntypedFormControl,\n AbstractControlOptions,\n Validators,\n ValidatorFn,\n AsyncValidatorFn,\n FormControl,\n} from '@angular/forms';\nimport { getFieldValue, defineHiddenProp, hasKey, getKeyPath } from '../../utils';\nimport { registerControl, findControl, updateValidity } from './utils';\nimport { of } from 'rxjs';\n\nexport class FieldFormExtension implements FormlyExtension {\n private root: FormlyFieldConfigCache;\n prePopulate(field: FormlyFieldConfigCache) {\n if (!this.root) {\n this.root = field;\n }\n\n if (field.parent) {\n Object.defineProperty(field, 'form', {\n get: () => field.parent!.formControl,\n configurable: true,\n });\n }\n }\n\n onPopulate(field: FormlyFieldConfigCache) {\n if (field.hasOwnProperty('fieldGroup') && !hasKey(field)) {\n defineHiddenProp(field, 'formControl', field.form);\n } else {\n this.addFormControl(field);\n }\n }\n\n postPopulate(field: FormlyFieldConfigCache) {\n if (this.root !== field) {\n return;\n }\n\n this.root = null;\n const markForCheck = this.setValidators(field);\n if (markForCheck && field.parent) {\n let parent = field.parent;\n while (parent) {\n if (hasKey(parent) || !parent.parent) {\n updateValidity(parent.formControl, true);\n }\n parent = parent.parent;\n }\n }\n }\n\n private addFormControl(field: FormlyFieldConfigCache) {\n let control = findControl(field);\n if (field.fieldArray) {\n return;\n }\n\n if (!control) {\n const controlOptions: AbstractControlOptions = { updateOn: field.modelOptions.updateOn };\n\n if (field.fieldGroup) {\n control = new UntypedFormGroup({}, controlOptions);\n } else {\n const value = hasKey(field) ? getFieldValue(field) : field.defaultValue;\n control = new UntypedFormControl(\n { value, disabled: !!field.props.disabled },\n { ...controlOptions, initialValueIsDefault: true },\n );\n }\n } else {\n if (control instanceof FormControl) {\n const value = hasKey(field) ? getFieldValue(field) : field.defaultValue;\n (control as any).defaultValue = value;\n }\n }\n\n registerControl(field, control);\n }\n\n private setValidators(field: FormlyFieldConfigCache, disabled = false) {\n if (disabled === false && hasKey(field) && field.props?.disabled) {\n disabled = true;\n }\n\n let markForCheck = false;\n field.fieldGroup?.forEach((f) => f && this.setValidators(f, disabled) && (markForCheck = true));\n if (hasKey(field) || !field.parent || (!hasKey(field) && !field.fieldGroup)) {\n const { formControl: c } = field;\n if (c) {\n if (hasKey(field) && c instanceof FormControl) {\n if (disabled && c.enabled) {\n c.disable({ emitEvent: false, onlySelf: true });\n markForCheck = true;\n }\n\n if (!disabled && c.disabled) {\n c.enable({ emitEvent: false, onlySelf: true });\n markForCheck = true;\n }\n }\n\n if (null === c.validator && this.hasValidators(field, '_validators')) {\n c.setValidators(() => {\n const v = Validators.compose(this.mergeValidators<ValidatorFn>(field, '_validators'));\n\n return v ? v(c) : null;\n });\n markForCheck = true;\n }\n\n if (null === c.asyncValidator && this.hasValidators(field, '_asyncValidators')) {\n c.setAsyncValidators(() => {\n const v = Validators.composeAsync(this.mergeValidators<AsyncValidatorFn>(field, '_asyncValidators'));\n return v ? v(c) : of(null);\n });\n markForCheck = true;\n }\n\n if (markForCheck) {\n updateValidity(c, true);\n\n // update validity of `FormGroup` instance created by field with nested key.\n let parent = c.parent;\n for (let i = 1; i < getKeyPath(field).length; i++) {\n if (parent) {\n updateValidity(parent, true);\n parent = parent.parent;\n }\n }\n }\n }\n }\n\n return markForCheck;\n }\n\n private hasValidators(field: FormlyFieldConfigCache, type: '_validators' | '_asyncValidators'): boolean {\n const c = field.formControl;\n if (c?._fields?.length > 1 && c._fields.some((f) => f[type].length > 0)) {\n return true;\n } else if (field[type].length > 0) {\n return true;\n }\n\n return field.fieldGroup?.some((f) => f?.fieldGroup && !hasKey(f) && this.hasValidators(f, type));\n }\n\n private mergeValidators<T>(field: FormlyFieldConfigCache, type: '_validators' | '_asyncValidators'): T[] {\n const validators: any = [];\n const c = field.formControl;\n if (c?._fields?.length > 1) {\n c._fields\n .filter((f: FormlyFieldConfigCache) => !f._hide)\n .forEach((f: FormlyFieldConfigCache) => validators.push(...f[type]));\n } else if (!field._hide && field[type]) {\n validators.push(...field[type]);\n }\n\n if (field.fieldGroup) {\n field.fieldGroup\n .filter((f) => f?.fieldGroup && !hasKey(f))\n .forEach((f) => validators.push(...this.mergeValidators(f, type)));\n }\n\n return validators;\n }\n}\n","import { FormlyConfig } from '../../services/formly.config';\nimport { FormlyExtension, ValidatorOption, FormlyFieldConfigCache } from '../../models';\nimport { AbstractControl, Validators, ValidatorFn } from '@angular/forms';\nimport { FORMLY_VALIDATORS, defineHiddenProp, isPromise, observe, clone, isObject, hasKey } from '../../utils';\nimport { updateValidity } from '../field-form/utils';\nimport { parseExpression } from '../field-expression/utils';\nimport { isObservable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport class FieldValidationExtension implements FormlyExtension {\n constructor(private config: FormlyConfig) {}\n\n onPopulate(field: FormlyFieldConfigCache) {\n this.initFieldValidation(field, 'validators');\n this.initFieldValidation(field, 'asyncValidators');\n }\n\n private initFieldValidation(field: FormlyFieldConfigCache, type: 'validators' | 'asyncValidators') {\n const validators: ValidatorFn[] = [];\n if (type === 'validators' && !(field.hasOwnProperty('fieldGroup') && !hasKey(field))) {\n validators.push(this.getPredefinedFieldValidation(field));\n }\n\n if (field[type]) {\n for (const validatorName of Object.keys(field[type])) {\n validatorName === 'validation'\n ? validators.push(...field[type].validation.map((v: any) => this.wrapNgValidatorFn(field, v)))\n : validators.push(this.wrapNgValidatorFn(field, field[type][validatorName], validatorName));\n }\n }\n\n defineHiddenProp(field, '_' + type, validators);\n }\n\n private getPredefinedFieldValidation(field: FormlyFieldConfigCache): ValidatorFn {\n let VALIDATORS: string[] = [];\n FORMLY_VALIDATORS.forEach((opt) =>\n observe(field, ['props', opt], ({ currentValue, firstChange }) => {\n VALIDATORS = VALIDATORS.filter((o) => o !== opt);\n if (opt === 'required' && currentValue != null && typeof currentValue !== 'boolean') {\n console.warn(\n `Formly: Invalid prop 'required' of type '${typeof currentValue}', expected 'boolean' (Field:${\n field.key\n }).`,\n );\n }\n\n if (currentValue != null && currentValue !== false) {\n VALIDATORS.push(opt);\n }\n if (!firstChange && field.formControl) {\n updateValidity(field.formControl);\n }\n }),\n );\n\n return (control: AbstractControl) => {\n if (VALIDATORS.length === 0) {\n return null;\n }\n\n return Validators.compose(\n VALIDATORS.map((opt) => () => {\n const value = field.props[opt];\n switch (opt) {\n case 'required':\n return Validators.required(control);\n case 'pattern':\n return Validators.pattern(value)(control);\n case 'minLength':\n const minLengthResult = Validators.minLength(value)(control);\n const minLengthKey =\n this.config.getValidatorMessage('minlength') || field.validation?.messages?.minlength\n ? 'minlength'\n : 'minLength';\n\n return minLengthResult ? { [minLengthKey]: minLengthResult.minlength } : null;\n case 'maxLength':\n const maxLengthResult = Validators.maxLength(value)(control);\n const maxLengthKey =\n this.config.getValidatorMessage('maxlength') || field.validation?.messages?.maxlength\n ? 'maxlength'\n : 'maxLength';\n\n return maxLengthResult ? { [maxLengthKey]: maxLengthResult.maxlength } : null;\n case 'min':\n return Validators.min(value)(control);\n case 'max':\n return Validators.max(value)(control);\n case 'step': {\n // JSON Schema multipleOf validates against zero, independently of min.\n if (\n field.validators?.multipleOf ||\n typeof control.value !== 'number' ||\n !Number.isFinite(value) ||\n value <= 0\n ) {\n return null;\n }\n\n const base = Number.isFinite(field.props.min) ? field.props.min : 0;\n const error = { step: { step: value, base, actual: control.value } };\n if (!Number.isFinite(control.value)) {\n return error;\n }\n\n // Scale decimal representations to integers without rounding away extra digits.\n const decimals = [control.value, value, base].map((n) => {\n const [coefficient, exponent = '0'] = n.toString().split('e');\n const [integer, fraction = ''] = coefficient.split('.');\n return { digits: BigInt(integer + fraction), exponent: Number(exponent) - fraction.length };\n });\n const exponent = Math.min(...decimals.map((n) => n.exponent));\n const [actual, step, start] = decimals.map((n) => n.digits * 10n ** BigInt(n.exponent - exponent));\n\n return (actual - start) % step === 0n ? null : error;\n }\n default:\n return null;\n }\n }),\n )!(control);\n };\n }\n\n private wrapNgValidatorFn(field: FormlyFieldConfigCache, validator: any, validatorName?: string) {\n let validatorOption: ValidatorOption;\n if (typeof validator === 'string') {\n validatorOption = clone(this.config.getValidator(validator));\n }\n\n if (typeof validator === 'object' && validator.name) {\n validatorOption = clone(this.config.getValidator(validator.name));\n if (validator.options) {\n validatorOption.options = validator.options;\n }\n }\n\n if (typeof validator === 'object' && 'expression' in validator) {\n const { expression, ...options } = validator;\n let validation = expression;\n if (typeof expression === 'string') {\n const evaluate = parseExpression(expression, ['model', 'formState', 'field', 'control']);\n if (!evaluate) {\n throw new Error(`[Formly Error] Invalid validation expression for \"${validatorName}\": ${expression}`);\n }\n\n validation = (control: AbstractControl, field: FormlyFieldConfigCache) =>\n evaluate(field.model, field.options.formState, field, control);\n }\n\n validatorOption = {\n name: validatorName,\n validation,\n options: Object.keys(options).length > 0 ? options : null,\n };\n }\n\n if (typeof validator === 'function') {\n validatorOption = {\n name: validatorName,\n validation: validator,\n };\n }\n\n return (control: AbstractControl) => {\n const errors: any = validatorOption.validation(control, field, validatorOption.options);\n if (isPromise(errors)) {\n return errors.then((v) => this.handleResult(field, validatorName ? !!v : v, validatorOption));\n }\n\n if (isObservable(errors)) {\n return errors.pipe(map((v) => this.handleResult(field, validatorName ? !!v : v, validatorOption)));\n }\n\n return this.handleResult(field, validatorName ? !!errors : errors, validatorOption);\n };\n }\n\n private handleResult(field: FormlyFieldConfigCache, errors: any, { name, options }: ValidatorOption) {\n if (typeof errors === 'boolean') {\n errors = errors ? null : { [name]: options ? options : true };\n }\n\n const ctrl = field.formControl;\n ctrl?._childrenErrors?.[name]?.();\n\n if (isObject(errors)) {\n Object.keys(errors).forEach((name) => {\n const errorPath = errors[name].errorPath ? errors[name].errorPath : options?.errorPath;\n\n const childCtrl = errorPath ? field.formControl.get(errorPath) : null;\n if (childCtrl) {\n const { errorPath: _errorPath, ...opts } = errors[name];\n childCtrl.setErrors({ ...(childCtrl.errors || {}), [name]: opts });\n\n !ctrl._childrenErrors && defineHiddenProp(ctrl, '_childrenErrors', {});\n ctrl._childrenErrors[name] = () => {\n const { [name]: _toDelete, ...childErrors } = childCtrl.errors || {};\n childCtrl.setErrors(Object.keys(childErrors).length === 0 ? null : childErrors);\n };\n }\n });\n }\n\n return errors;\n }\n}\n","import { Input, Directive, QueryList, ViewChildren } from '@angular/core';\nimport { UntypedFormControl, NgControl, UntypedFormGroup } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyFieldConfigCache } from '../models';\n\nexport interface FieldTypeConfig<T = FormlyFieldConfig['props']> extends FormlyFieldConfig<T> {\n formControl: UntypedFormControl;\n props: NonNullable<T>;\n}\n\nexport interface FieldGroupTypeConfig<T = FormlyFieldConfig['props']> extends FormlyFieldConfig<T> {\n formControl: UntypedFormGroup;\n props: NonNullable<T>;\n}\n\n@Directive()\nexport abstract class FieldType<F extends FormlyFieldConfig = FormlyFieldConfig> {\n @ViewChildren(NgControl) set _formlyControls(controls: QueryList<NgControl>) {\n const f = this.field as FormlyFieldConfigCache;\n f._localFields = controls\n .map((c) => (c.control as FormlyFieldConfigCache['formControl'])._fields || [])\n .flat()\n .filter((f: FormlyFieldConfig) => f.formControl !== this.field.formControl);\n }\n\n @Input() field: F = {} as F;\n defaultOptions?: Partial<F>;\n\n get model() {\n return this.field.model;\n }\n\n get form() {\n return this.field.form;\n }\n\n get options() {\n return this.field.options;\n }\n\n get key() {\n return this.field.key;\n }\n\n get formControl() {\n return this.field.formControl as NonNullable<F['formControl']>;\n }\n\n get props() {\n return (this.field.props || {}) as NonNullable<F['props']>;\n }\n\n /** @deprecated Use `props` instead. */\n get to() {\n return this.props;\n }\n\n get showError(): boolean {\n return this.options.showError(this);\n }\n\n get id(): string {\n return this.field.id;\n }\n\n get formState() {\n return this.options?.formState || {};\n }\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { FieldType } from './field.type';\n\n/** @ignore */\n@Component({\n selector: 'formly-template',\n template: `<div [innerHtml]=\"template\"></div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class FormlyTemplateType extends FieldType {\n get template() {\n if (this.field && this.field.template !== this.innerHtml.template) {\n this.innerHtml = {\n template: this.field.template,\n content: this.props.safeHtml\n ? this.sanitizer.bypassSecurityTrustHtml(this.field.template)\n : this.field.template,\n };\n }\n\n return this.innerHtml.content;\n }\n\n private innerHtml: { content?: SafeHtml; template?: string } = {};\n constructor(private sanitizer: DomSanitizer) {\n super();\n }\n}\n","import { Injectable, ComponentRef, Type } from '@angular/core';\nimport { FieldType } from './../templates/field.type';\nimport { reverseDeepMerge } from './../utils';\nimport {\n FormlyFieldConfig,\n FormlyFieldConfigCache,\n ConfigOption,\n TypeOption,\n ValidatorOption,\n WrapperOption,\n FormlyExtension,\n ValidationMessageOption,\n ExtensionOption,\n FormlyFieldConfigPresetProvider,\n} from '../models';\nimport { FieldWrapper } from '../templates/field.wrapper';\n\ndeclare const ngDevMode: any;\n\n/**\n * Maintains list of formly config options. This can be used to register new field type.\n */\n@Injectable({ providedIn: 'root' })\nexport class FormlyConfig {\n types: { [name: string]: TypeOption } = {};\n validators: { [name: string]: ValidatorOption } = {};\n wrappers: { [name: string]: WrapperOption } = {};\n messages: { [name: string]: ValidationMessageOption['message'] } = {};\n\n extras: NonNullable<ConfigOption['extras']> = {\n checkExpressionOn: 'modelChange',\n lazyRender: true,\n resetFieldOnHide: true,\n renderFormlyFieldElement: true,\n showError(field: FieldType) {\n return (\n field.formControl?.invalid &&\n (field.formControl?.touched || field.options.parentForm?.submitted || !!field.field.validation?.show)\n );\n },\n };\n extensions: { [name: string]: FormlyExtension } = {};\n presets: { [name: string]: FormlyFieldConfig | FormlyFieldConfigPresetProvider } = {};\n private extensionsByPriority: Record<number, { [name: string]: FormlyExtension }> = {};\n private componentRefs: Record<string, ComponentRef<FieldType>> = {};\n\n addConfig(config: ConfigOption | ConfigOption[]) {\n if (Array.isArray(config)) {\n config.forEach((c) => this.addConfig(c));\n return;\n }\n\n if (config.types) {\n config.types.forEach((type) => this.setType(type));\n }\n if (config.validators) {\n config.validators.forEach((validator) => this.setValidator(validator));\n }\n if (config.wrappers) {\n config.wrappers.forEach((wrapper) => this.setWrapper(wrapper));\n }\n if (config.validationMessages) {\n config.validationMessages.forEach((validation) => this.addValidatorMessage(validation.name, validation.message));\n }\n if (config.extensions) {\n this.setSortedExtensions(config.extensions);\n }\n if (config.extras) {\n this.extras = { ...this.extras, ...config.extras };\n }\n if (config.presets) {\n this.presets = {\n ...this.presets,\n ...config.presets.reduce((acc, curr) => ({ ...acc, [curr.name]: curr.config }), {}),\n };\n }\n }\n\n /**\n * Allows you to specify a custom type which you can use in your field configuration.\n * You can pass an object of options, or an array of objects of options.\n */\n setType(options: TypeOption | TypeOption[]) {\n if (Array.isArray(options)) {\n options.forEach((option) => this.setType(option));\n } else {\n if (!this.types[options.name]) {\n this.types[options.name] = <TypeOption>{ name: options.name };\n }\n\n (['component', 'extends', 'defaultOptions', 'wrappers'] as (keyof TypeOption)[]).forEach((prop) => {\n if (options.hasOwnProperty(prop)) {\n this.types[options.name][prop] = options[prop] as any;\n }\n });\n }\n }\n\n getType(name: FormlyFieldConfig['type'], throwIfNotFound = false): TypeOption {\n if (name instanceof Type) {\n return { component: name, name: name.prototype.constructor.name };\n }\n\n if (!this.types[name]) {\n if (throwIfNotFound) {\n throw new Error(\n `[Formly Error] The type \"${name}\" could not be found. Please make sure that is registered through the FormlyModule declaration.`,\n );\n }\n\n return null;\n }\n\n this.mergeExtendedType(name);\n\n return this.types[name];\n }\n\n /** @ignore */\n getMergedField(field: FormlyFieldConfig = {}): any {\n const type = this.getType(field.type);\n if (!type) {\n return;\n }\n\n if (type.defaultOptions) {\n reverseDeepMerge(field, type.defaultOptions);\n }\n\n const extendDefaults = type.extends && this.getType(type.extends).defaultOptions;\n if (extendDefaults) {\n reverseDeepMerge(field, extendDefaults);\n }\n\n if (field?.optionsTypes) {\n field.optionsTypes.forEach((option) => {\n const defaultOptions = this.getType(option).defaultOptions;\n if (defaultOptions) {\n reverseDeepMerge(field, defaultOptions);\n }\n });\n }\n\n const componentRef = this.resolveFieldTypeRef(field);\n if (componentRef?.instance?.defaultOptions) {\n reverseDeepMerge(field, componentRef.instance.defaultOptions);\n }\n\n if (!field.wrappers && type.wrappers) {\n field.wrappers = [...type.wrappers];\n }\n }\n\n /** @ignore @internal */\n resolveFieldTypeRef(field: FormlyFieldConfigCache = {}): ComponentRef<FieldType> {\n const type: TypeOption = this.getType(field.type);\n if (!type) {\n return null;\n }\n\n if (!type.component) {\n return null;\n }\n\n if (!this.componentRefs[type.name]) {\n const { _viewContainerRef, _injector } = field.options;\n if (!_viewContainerRef || !_injector) {\n return null;\n }\n\n const componentRef = _viewContainerRef.createComponent<FieldType>(type.component, { injector: _injector });\n this.componentRefs[type.name] = componentRef;\n try {\n componentRef.destroy();\n } catch (e) {\n console.error(`An error occurred while destroying the Formly component type \"${field.type}\"`, e);\n }\n }\n\n return this.componentRefs[type.name];\n }\n /** @ignore @internal */\n clearRefs() {\n this.componentRefs = {};\n }\n\n setWrapper(options: WrapperOption) {\n this.wrappers[options.name] = options;\n if (options.types) {\n options.types.forEach((type) => {\n this.setTypeWrapper(type, options.name);\n });\n }\n }\n\n getWrapper(name: string | Type<FieldWrapper>): WrapperOption {\n if (name instanceof Type) {\n return { component: name, name: name.prototype.constructor.name };\n }\n\n if (!this.wrappers[name]) {\n throw new Error(\n `[Formly Error] The wrapper \"${name}\" could not be found. Please make sure that is registered through the FormlyModule declaration.`,\n );\n }\n\n return this.wrappers[name];\n }\n\n /** @ignore */\n setTypeWrapper(type: string, name: string) {\n if (!this.types[type]) {\n this.types[type] = <TypeOption>{};\n }\n if (!this.types[type].wrappers) {\n this.types[type].wrappers = [];\n }\n if (this.types[type].wrappers.indexOf(name) === -1) {\n this.types[type].wrappers.push(name);\n }\n }\n\n setValidator(options: ValidatorOption) {\n this.validators[options.name] = options;\n }\n\n getValidator(name: string): ValidatorOption {\n if (!this.validators[name]) {\n throw new Error(\n `[Formly Error] The validator \"${name}\" could not be found. Please make sure that is registered through the FormlyModule declaration.`,\n );\n }\n\n return this.validators[name];\n }\n\n addValidatorMessage(name: string, message: ValidationMessageOption['message']) {\n this.messages[name] = message;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const deprecated = { minlength: 'minLength', maxlength: 'maxLength' } as any;\n if (deprecated[name]) {\n console.warn(\n `Formly deprecation: passing validation messages key '${name}' is deprecated since v6.0, use '${deprecated[name]}' instead.`,\n );\n this.messages[deprecated[name]] = message;\n }\n }\n }\n\n getValidatorMessage(name: string) {\n return this.messages[name];\n }\n\n private setSortedExtensions(extensionOptions: ExtensionOption[]) {\n // insert new extensions, grouped by priority\n extensionOptions.forEach((extensionOption) => {\n const priority = extensionOption.priority ?? 1;\n this.extensionsByPriority[priority] = {\n ...this.extensionsByPriority[priority],\n [extensionOption.name]: extensionOption.extension,\n };\n });\n // flatten extensions object with sorted keys\n this.extensions = Object.keys(this.extensionsByPriority)\n .map(Number)\n .sort((a, b) => a - b)\n .reduce(\n (acc, prio) => ({\n ...acc,\n ...this.extensionsByPriority[prio],\n }),\n {},\n );\n }\n\n private mergeExtendedType(name: string) {\n if (!this.types[name].extends) {\n return;\n }\n\n const extendedType = this.getType(this.types[name].extends);\n if (!this.types[name].component) {\n this.types[name].component = extendedType.component;\n }\n\n if (!this.types[name].wrappers) {\n this.types[name].wrappers = extendedType.wrappers;\n }\n }\n}\n","import { Directive, Injectable, Input, OnChanges, QueryList, TemplateRef } from '@angular/core';\n\n@Directive({ selector: '[formlyTemplate]', standalone: true })\nexport class FormlyTemplate implements OnChanges {\n @Input('formlyTemplate') name: string;\n\n constructor(public ref: TemplateRef<any>) {}\n\n ngOnChanges() {\n this.name = this.name || 'formly-group';\n }\n}\n\n@Directive({ selector: '[formlyTemplate]', standalone: false })\nexport class LegacyFormlyTemplate extends FormlyTemplate {}\n\n// workarround for https://github.com/angular/angular/issues/43227#issuecomment-904173738\n@Injectable()\nexport class FormlyFieldTemplates {\n templates!: QueryList<FormlyTemplate>;\n}\n","import {\n Component,\n Input,\n ViewContainerRef,\n ViewChild,\n ComponentRef,\n SimpleChanges,\n DoCheck,\n OnInit,\n OnChanges,\n OnDestroy,\n AfterContentInit,\n AfterViewInit,\n Renderer2,\n ElementRef,\n EmbeddedViewRef,\n Optional,\n Injector,\n} from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { FormlyConfig } from '../services/formly.config';\nimport { FormlyFieldConfig, FormlyFieldConfigCache, FormlyHookConfig } from '../models';\nimport {\n defineHiddenProp,\n observe,\n observeDeep,\n getFieldValue,\n assignFieldValue,\n isObject,\n markFieldForCheck,\n hasKey,\n IObserver,\n isSignalRequired,\n} from '../utils';\nimport { FieldWrapper } from '../templates/field.wrapper';\nimport { FieldType } from '../templates/field.type';\nimport { Subscription, isObservable } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter, map, skip, startWith } from 'rxjs/operators';\nimport { FormlyFieldTemplates } from './formly.template';\n\n/**\n * The `<formly-field>` component is used to render the UI widget (layout + type) of a given `field`.\n */\n@Component({\n selector: 'formly-field',\n template: '<ng-template #container></ng-template>',\n styleUrls: ['./formly.field.scss'],\n standalone: true,\n})\nexport class FormlyField implements DoCheck, OnInit, OnChanges, AfterContentInit, AfterViewInit, OnDestroy {\n /** The field config. */\n @Input() field: FormlyFieldConfig;\n @ViewChild('container', { read: ViewContainerRef, static: true }) viewContainerRef!: ViewContainerRef;\n\n private hostObservers: (IObserver<any> | Subscription)[] = [];\n private componentRefs: (ComponentRef<FieldType> | EmbeddedViewRef<FieldType>)[] = [];\n private hooksObservers: (() => void)[] = [];\n private detectFieldBuild = false;\n\n private get containerRef() {\n return this.config.extras.renderFormlyFieldElement ? this.viewContainerRef : this.hostContainerRef;\n }\n\n private get elementRef() {\n if (this.config.extras.renderFormlyFieldElement) {\n return this._elementRef;\n }\n if (this.componentRefs?.[0] instanceof ComponentRef) {\n return this.componentRefs[0].location;\n }\n\n return null;\n }\n\n valueChangesUnsubscribe = () => {};\n\n constructor(\n private config: FormlyConfig,\n private renderer: Renderer2,\n private _elementRef: ElementRef,\n private hostContainerRef: ViewContainerRef,\n private injector: Injector,\n @Optional() private form: FormlyFieldTemplates,\n ) {}\n\n ngAfterContentInit() {\n this.triggerHook('afterContentInit');\n }\n\n ngAfterViewInit() {\n this.triggerHook('afterViewInit');\n }\n\n ngDoCheck() {\n if (this.detectFieldBuild && this.field && this.field.options) {\n this.render();\n }\n }\n\n ngOnInit() {\n this.triggerHook('onInit');\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this.triggerHook('onChanges', changes);\n }\n\n ngOnDestroy() {\n this.resetRefs(this.field);\n this.hostObservers.forEach((hostObserver) => hostObserver.unsubscribe());\n this.hooksObservers.forEach((unsubscribe) => unsubscribe());\n this.valueChangesUnsubscribe();\n this.triggerHook('onDestroy');\n }\n\n private renderField(\n containerRef: ViewContainerRef,\n f: FormlyFieldConfigCache,\n wrappers: FormlyFieldConfig['wrappers'] = [],\n ) {\n if (this.containerRef === containerRef) {\n this.resetRefs(this.field);\n this.containerRef.clear();\n wrappers = this.field?.wrappers;\n }\n\n if (wrappers?.length > 0) {\n const [wrapper, ...wps] = wrappers;\n const { component } = this.config.getWrapper(wrapper);\n\n const ref = containerRef.createComponent<FieldWrapper>(component);\n this.attachComponentRef(ref, f);\n observe<ViewContainerRef & { _lContainer: any }>(\n ref.instance,\n ['fieldComponent'],\n ({ currentValue, previousValue, firstChange }) => {\n if (currentValue) {\n if (previousValue && previousValue._lContainer === currentValue._lContainer) {\n return;\n }\n\n const viewRef = previousValue ? previousValue.detach() : null;\n if (viewRef && !viewRef.destroyed) {\n currentValue.insert(viewRef);\n } else {\n this.renderField(currentValue, f, wps);\n }\n\n !firstChange && ref.changeDetectorRef.detectChanges();\n }\n },\n );\n } else if (f?.type) {\n const inlineType = this.form?.templates?.find((ref) => ref.name === f.type);\n let ref: ComponentRef<any> | EmbeddedViewRef<any>;\n if (inlineType) {\n ref = containerRef.createEmbeddedView(\n inlineType.ref,\n { $implicit: f },\n { injector: this.createFieldInjector() },\n );\n } else {\n const { component } = this.config.getType(f.type, true);\n ref = containerRef.createComponent<FieldWrapper>(component as any);\n }\n this.attachComponentRef(ref, f);\n }\n }\n\n private triggerHook(name: keyof FormlyHookConfig, changes?: SimpleChanges) {\n if (name === 'onInit' || (name === 'onChanges' && changes.field && !changes.field.firstChange)) {\n this.valueChangesUnsubscribe();\n this.valueChangesUnsubscribe = this.fieldChanges(this.field);\n }\n\n if (this.field?.hooks?.[name]) {\n if (!changes || changes.field) {\n const r = this.field.hooks[name](this.field);\n if (isObservable(r) && ['onInit', 'afterContentInit', 'afterViewInit'].indexOf(name) !== -1) {\n const sub = r.subscribe();\n this.hooksObservers.push(() => sub.unsubscribe());\n }\n }\n }\n\n if (name === 'onChanges' && changes.field) {\n this.resetRefs(changes.field.previousValue);\n this.render();\n }\n }\n\n attachLocalField(field?: FormlyFieldConfigCache, previousField?: FormlyFieldConfigCache) {\n const currentField = this.field as FormlyFieldConfigCache;\n if (!currentField) {\n return;\n }\n\n const localFields = (currentField._localFields || []).filter((f) => f !== field && f !== previousField);\n\n if (field && field !== currentField) {\n localFields.push(field);\n }\n\n if (currentField._localFields) {\n currentField._localFields = localFields;\n } else if (localFields.length > 0) {\n defineHiddenProp(currentField, '_localFields', localFields);\n }\n }\n\n private createFieldInjector() {\n return Injector.create({\n providers: [{ provide: FormlyField, useValue: this }],\n parent: this.injector,\n });\n }\n\n private attachComponentRef<T extends FieldType>(\n ref: ComponentRef<T> | EmbeddedViewRef<T>,\n field: FormlyFieldConfigCache,\n ) {\n this.componentRefs.push(ref);\n field._componentRefs.push(ref);\n if (ref instanceof ComponentRef) {\n Object.assign(ref.instance, { field });\n }\n }\n\n private render() {\n if (!this.field) {\n return;\n }\n\n // require Formly build\n if (!this.field.options) {\n this.detectFieldBuild = true;\n\n return;\n }\n\n this.detectFieldBuild = false;\n this.hostObservers.forEach((hostObserver) => hostObserver.unsubscribe());\n this.hostObservers = [\n observe<boolean>(this.field, ['hide'], ({ firstChange, currentValue }) => {\n const containerRef = this.containerRef;\n if (this.config.extras.lazyRender === false) {\n firstChange && this.renderField(containerRef, this.field);\n if (!firstChange || (firstChange && currentValue)) {\n this.elementRef &&\n this.renderer.setStyle(this.elementRef.nativeElement, 'display', currentValue ? 'none' : '');\n }\n } else {\n if (currentValue) {\n containerRef.clear();\n if (this.field.className) {\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'class');\n }\n } else {\n this.renderField(containerRef, this.field);\n if (this.field.className) {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'class', this.field.className);\n }\n }\n }\n\n !firstChange && this.field.options.detectChanges(this.field);\n }),\n observe<string>(this.field, ['className'], ({ firstChange, currentValue }) => {\n if (\n (!firstChange || (firstChange && currentValue)) &&\n (!this.config.extras.lazyRender || this.field.hide !== true)\n ) {\n this.elementRef && this.renderer.setAttribute(this.elementRef.nativeElement, 'class', currentValue);\n }\n }),\n ];\n\n if (!isSignalRequired()) {\n ['touched', 'pristine', 'status'].forEach((prop) =>\n this.hostObservers.push(\n observe<string>(\n this.field,\n ['formControl', prop],\n ({ firstChange }) => !firstChange && markFieldForCheck(this.field),\n ),\n ),\n );\n } else {\n let events: Subscription;\n this.hostObservers.push(\n observe<FormlyFieldConfig['formControl']>(this.field, ['formControl'], ({ currentValue }) => {\n events?.unsubscribe();\n events = currentValue?.events.subscribe(() => markFieldForCheck(this.field));\n }),\n new Subscription(() => events?.unsubscribe()),\n );\n }\n }\n\n private resetRefs(field: FormlyFieldConfigCache) {\n if (field) {\n if (field._localFields) {\n field._localFields = [];\n } else {\n defineHiddenProp(this.field, '_localFields', []);\n }\n\n if (field._componentRefs) {\n field._componentRefs = field._componentRefs.filter((ref) => this.componentRefs.indexOf(ref) === -1);\n } else {\n defineHiddenProp(this.field, '_componentRefs', []);\n }\n }\n\n this.componentRefs = [];\n }\n\n private fieldChanges(field: FormlyFieldConfigCache | undefined) {\n if (!field) {\n return () => {};\n }\n\n const propsObserver = observeDeep(field, ['props'], () => field.options.detectChanges(field));\n const subscribes = [\n () => {\n propsObserver();\n },\n ];\n\n for (const key of Object.keys(field._expressions || {})) {\n const expressionObserver = observe<FormlyFieldConfigCache['_expressions']['key']>(\n field,\n ['_expressions', key],\n ({ currentValue, previousValue }) => {\n if (previousValue?.subscription) {\n previousValue.subscription.unsubscribe();\n previousValue.subscription = null;\n }\n if (isObservable(currentValue.value$)) {\n currentValue.subscription = currentValue.value$.subscribe();\n }\n },\n );\n subscribes.push(() => {\n if (field._expressions[key]?.subscription) {\n field._expressions[key].subscription.unsubscribe();\n }\n expressionObserver.unsubscribe();\n });\n }\n\n for (const path of [['focus'], ['template'], ['fieldGroupClassName'], ['validation', 'show']]) {\n const fieldObserver = observe(\n field,\n path,\n ({ firstChange }) => !firstChange && field.options.detectChanges(field),\n );\n subscribes.push(() => fieldObserver.unsubscribe());\n }\n\n if (!field.fieldGroup) {\n let unsubscribe = () => {};\n const controlObserver = observe<FormlyFieldConfigCache['formControl']>(\n field,\n ['formControl'],\n ({ currentValue: control }) => {\n unsubscribe();\n unsubscribe = () => {};\n if (!control || field.fieldGroup) {\n return;\n }\n const independent = field.shareFormControl === false && hasKey(field);\n const subscribe = () => {\n let valueChanges = control.valueChanges.pipe(\n startWith(control.value),\n filter(() => !independent || !field._hide),\n map((value) => {\n field.parsers?.map((parserFn) => (value = (parserFn as any)(value, field)));\n if (!Object.is(value, control.value)) {\n control.setValue(value, { emitEvent: !independent });\n }\n\n return value;\n }),\n distinctUntilChanged((x, y) => {\n if (x !== y || Array.isArray(x) || isObject(x)) {\n return false;\n }\n\n return true;\n }),\n skip(independent ? 0 : 1),\n );\n\n if (!independent && control.value !== getFieldValue(field)) {\n valueChanges = valueChanges.pipe(startWith(control.value));\n }\n\n const { updateOn, debounce } = field.modelOptions;\n if ((!updateOn || updateOn === 'change') && debounce?.default > 0) {\n valueChanges = valueChanges.pipe(debounceTime(debounce.default));\n }\n\n if (independent) {\n valueChanges = valueChanges.pipe(\n filter((value) => value !== getFieldValue(field) || Array.isArray(value) || isObject(value)),\n );\n }\n\n return valueChanges.subscribe((value) => {\n // workaround for https://github.com/angular/angular/issues/13792\n if (control._fields?.length > 1 && control instanceof FormControl) {\n control.patchValue(value, { emitEvent: false, onlySelf: true });\n }\n\n if (hasKey(field)) {\n assignFieldValue(field, value);\n }\n field.options.fieldChanges.next({ value, field, type: 'valueChanges' });\n });\n };\n\n if (independent) {\n let sub: Subscription;\n const observer = observe<boolean>(field, ['_controlActive'], ({ currentValue }) => {\n sub?.unsubscribe();\n sub = new Subscription();\n if (currentValue) {\n sub.add(subscribe());\n }\n });\n unsubscribe = () => {\n observer.unsubscribe();\n sub?.unsubscribe();\n };\n } else {\n const sub = subscribe();\n unsubscribe = () => sub.unsubscribe();\n }\n },\n );\n subscribes.push(() => {\n controlObserver.unsubscribe();\n unsubscribe();\n });\n }\n\n let templateFieldsSubs: (() => void)[] = [];\n observe(field, ['_localFields'], ({ currentValue }) => {\n templateFieldsSubs.forEach((unsubscribe) => unsubscribe());\n templateFieldsSubs = (currentValue || []).map((f: FormlyFieldConfigCache) => this.fieldChanges(f));\n });\n\n return () => {\n subscribes.forEach((unsubscribe) => unsubscribe());\n templateFieldsSubs.forEach((unsubscribe) => unsubscribe());\n };\n }\n}\n\n@Component({\n selector: 'formly-field',\n template: '<ng-template #container></ng-template>',\n styleUrls: ['./formly.field.scss'],\n standalone: false,\n})\nexport class LegacyFormlyField extends FormlyField {}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { FieldType, FieldGroupTypeConfig } from './field.type';\n\n/** @ignore */\n@Component({\n selector: 'formly-group',\n template: `\n @for (f of field.fieldGroup; track $index) {\n <formly-field [field]=\"f\"></formly-field>\n }\n <ng-content></ng-content>\n `,\n host: {\n '[class]': 'field.fieldGroupClassName || \"\"',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class FormlyGroup extends FieldType<FieldGroupTypeConfig> {}\n","import { inject, InjectionToken, Provider } from '@angular/core';\nimport { FieldExpressionExtension } from './extensions/field-expression/field-expression';\nimport { FieldExpressionExtension as FieldExpressionLegacyExtension } from './extensions/field-expression-legacy/field-expression';\nimport { CoreExtension } from './extensions/core/core';\nimport { FieldFormExtension } from './extensions/field-form/field-form';\nimport { FieldValidationExtension } from './extensions/field-validation/field-validation';\nimport { FormlyTemplateType } from './templates/field-template.type';\nimport { FormlyGroup } from './templates/formly.group';\nimport { ConfigOption } from './models';\nimport { FormlyConfig } from './services/formly.config';\n\n/**\n * An InjectionToken for registering additional formly config options (types, wrappers ...).\n */\nexport const FORMLY_CONFIG = new InjectionToken<ConfigOption[]>('FORMLY_CONFIG');\n\nexport function withDefaultConfig(config: FormlyConfig): ConfigOption {\n return {\n types: [\n { name: 'formly-group', component: FormlyGroup },\n { name: 'formly-template', component: FormlyTemplateType },\n ],\n extensions: [\n { name: 'core', extension: new CoreExtension(config), priority: -250 },\n { name: 'field-validation', extension: new FieldValidationExtension(config), priority: -200 },\n { name: 'field-form', extension: new FieldFormExtension(), priority: -150 },\n {\n name: 'field-expression',\n extension: new FieldExpressionLegacyExtension(),\n priority: -100,\n },\n ],\n };\n}\n\nexport function withFormlyFieldExpression(): ConfigOption {\n return {\n extensions: [\n {\n name: 'field-expression',\n extension: new FieldExpressionExtension(),\n priority: -100,\n },\n ],\n };\n}\n\nexport const provideFormlyCore = (configs: ConfigOption | ConfigOption[] = []): Provider => {\n return [\n FormlyConfig,\n { provide: FORMLY_CONFIG, multi: true, useFactory: withDefaultConfig, deps: [FormlyConfig] },\n provideFormlyConfig(configs),\n ];\n};\n\nexport const provideFormlyConfig = (configs: ConfigOption | ConfigOption[] = []): Provider => {\n return {\n provide: FORMLY_CONFIG,\n multi: true,\n useFactory: () => {\n const currentConfig: Array<ConfigOption | ConfigOption[]> = inject(FORMLY_CONFIG, {\n skipSelf: true,\n optional: true,\n });\n if (currentConfig && inject(FormlyConfig) === inject(FormlyConfig, { skipSelf: true, optional: true })) {\n configs = Array.isArray(configs) ? configs : [configs];\n currentConfig.push(...configs);\n return currentConfig;\n }\n return configs;\n },\n };\n};\n","import { EventEmitter, Inject, Injectable, Injector, Optional, ViewContainerRef } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormArray, FormGroupDirective } from '@angular/forms';\nimport { FormlyConfig } from './formly.config';\nimport { FormlyFieldConfig, FormlyFormOptions, FormlyFieldConfigCache, ConfigOption } from '../models';\nimport {\n defineHiddenProp,\n observe,\n disableTreeValidityCall,\n getKeyPath,\n isHiddenField,\n isSignalRequired,\n} from '../utils';\nimport { FORMLY_CONFIG } from '../core.config';\n\n@Injectable({ providedIn: 'root' })\nexport class FormlyFormBuilder {\n private readonly initializedForms = new WeakSet<UntypedFormGroup | UntypedFormArray>();\n\n constructor(\n private config: FormlyConfig,\n private injector: Injector,\n @Optional() private viewContainerRef: ViewContainerRef,\n @Optional() private parentForm: FormGroupDirective,\n @Optional() @Inject(FORMLY_CONFIG) configs: ConfigOption[] = [],\n ) {\n if (configs) {\n configs.forEach((c) => config.addConfig(c));\n }\n }\n\n buildForm(\n form: UntypedFormGroup | UntypedFormArray,\n fieldGroup: FormlyFieldConfig[] = [],\n model: any,\n options: FormlyFormOptions,\n ) {\n this.build({ fieldGroup, model, form, options });\n }\n\n build(field: FormlyFieldConfig) {\n if (!this.config.extensions.core) {\n throw new Error('NgxFormly: missing `forRoot()` call. use `forRoot()` when registering the `FormlyModule`.');\n }\n\n if (!field.parent) {\n this._setOptions(field);\n }\n\n const firstBuild = !field.parent && !this.initializedForms.has(field.form);\n let lastEmittedStatus: string | undefined;\n const subscription = firstBuild\n ? field.form.statusChanges.subscribe((status) => (lastEmittedStatus = status))\n : undefined;\n if (firstBuild) {\n this.initializedForms.add(field.form);\n }\n\n const options = (field as FormlyFieldConfigCache).options;\n const controlsForCheck = options._formControlsForCheck;\n options._formControlsForCheck = controlsForCheck || new Set();\n\n try {\n disableTreeValidityCall(field.form, () => {\n this._build(field);\n // TODO: add test for https://github.com/ngx-formly/ngx-formly/issues/3910\n if (!field.parent || (field as FormlyFieldConfigCache).fieldArray) {\n // detect changes early to avoid reset value by hidden fields\n if (field.parent && isHiddenField(field)) {\n // when hide is used in expression set defaul value will not be set until detect hide changes\n // which causes default value not set on new item is added\n options._hiddenFieldsForCheck?.push({ field, default: false });\n }\n\n options.checkExpressions?.(field, true);\n options._detectChanges?.(field);\n }\n });\n\n if (!controlsForCheck) {\n const controls = options._formControlsForCheck;\n delete options._formControlsForCheck;\n // Resume independent editors only after rebuilding and resolving their visibility.\n controls.forEach((f) => (f._controlActive = !f._hide && f.form.get(getKeyPath(f)) === f.formControl));\n }\n } catch (error) {\n if (firstBuild) {\n this.initializedForms.delete(field.form);\n }\n throw error;\n } finally {\n if (controlsForCheck) {\n options._formControlsForCheck = controlsForCheck;\n } else {\n delete options._formControlsForCheck;\n }\n subscription?.unsubscribe();\n }\n\n if (firstBuild && lastEmittedStatus !== field.form.status) {\n (field.form.statusChanges as EventEmitter<string>).emit(field.form.status);\n }\n\n if (!controlsForCheck) {\n options._afterBuild?.forEach((afterBuild) => afterBuild());\n }\n }\n\n private _build(field: FormlyFieldConfigCache) {\n if (!field) {\n return;\n }\n\n const extensions = Object.values(this.config.extensions);\n extensions.forEach((extension) => extension.prePopulate?.(field));\n extensions.forEach((extension) => extension.onPopulate?.(field));\n field.fieldGroup?.forEach((f) => this._build(f));\n extensions.forEach((extension) => extension.postPopulate?.(field));\n }\n\n private _setOptions(field: FormlyFieldConfigCache) {\n field.form = field.form || new UntypedFormGroup({});\n field.model = field.model || {};\n field.options = field.options || {};\n const options = field.options;\n\n if (!options._viewContainerRef) {\n defineHiddenProp(options, '_viewContainerRef', this.viewContainerRef);\n }\n\n if (!options._injector) {\n defineHiddenProp(options, '_injector', this.injector);\n }\n\n if (!options.build) {\n options.build = (f: FormlyFieldConfig = field) => {\n this.build(f);\n\n return f;\n };\n }\n\n if (!options.parentForm && this.parentForm) {\n defineHiddenProp(options, 'parentForm', this.parentForm);\n\n if (!isSignalRequired()) {\n observe(options, ['parentForm', 'submitted'], ({ firstChange }) => {\n if (!firstChange) {\n options.detectChanges(field);\n }\n });\n }\n }\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n DoCheck,\n OnChanges,\n Input,\n SimpleChanges,\n EventEmitter,\n Output,\n OnDestroy,\n NgZone,\n ContentChildren,\n QueryList,\n DestroyRef,\n PendingTasks,\n inject,\n Injector,\n WritableSignal,\n EffectRef,\n untracked,\n effect,\n isWritableSignal,\n} from '@angular/core';\nimport { UntypedFormGroup, UntypedFormArray } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyFormOptions, FormlyFieldConfigCache, FormlyValueChangeEvent } from '../models';\nimport { FormlyFormBuilder } from '../services/formly.builder';\nimport { FormlyConfig } from '../services/formly.config';\nimport { clone, defineHiddenProp, hasKey, isEqualValue, isNoopNgZone, isSignalRequired, observeDeep } from '../utils';\nimport { switchMap, filter, take, tap } from 'rxjs/operators';\nimport { clearControl } from '../extensions/field-form/utils';\nimport { FormlyFieldTemplates, FormlyTemplate, LegacyFormlyTemplate } from './formly.template';\nimport { of, Subscription } from 'rxjs';\nimport { FormlyField } from './formly.field';\n\n/**\n * The `<form-form>` component is the main container of the form,\n * which takes care of managing the form state\n * and delegates the rendering of each field to `<formly-field>` component.\n */\n@Component({\n selector: 'formly-form',\n template: '<formly-field [field]=\"field\"></formly-field>',\n providers: [FormlyFormBuilder, FormlyFieldTemplates],\n standalone: true,\n imports: [FormlyField],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FormlyForm implements DoCheck, OnChanges, OnDestroy {\n /** The form instance which allow to track model value and validation status. */\n @Input()\n set form(form: UntypedFormGroup | UntypedFormArray) {\n this.field.form = form;\n }\n get form(): UntypedFormGroup | UntypedFormArray {\n return this.field.form;\n }\n\n /**\n * The model to be represented by the form.\n * The form sets a `WritableSignal` to a copy of the model after each change.\n */\n @Input()\n set model(model: any) {\n this.modelSignalEffect?.destroy();\n this.modelSignal = undefined;\n if (isWritableSignal(model)) {\n this.bindModelSignal(model);\n return;\n }\n if (this.config.extras.immutable && this._modelChangeValue === model) {\n return;\n }\n\n this.setField({ model });\n }\n get model(): any {\n return this.field.model;\n }\n\n /** The field configurations for building the form. */\n @Input()\n set fields(fieldGroup: FormlyFieldConfig[]) {\n this.setField({ fieldGroup });\n }\n get fields(): FormlyFieldConfig[] {\n return this.field.fieldGroup;\n }\n\n /** Options for the form. */\n @Input()\n set options(options: FormlyFormOptions) {\n this.field.options?._afterBuild?.delete(this.afterBuild);\n this.setField({ options });\n }\n get options(): FormlyFormOptions {\n return this.field.options;\n }\n\n /** Event that is emitted when the model value is changed */\n @Output() modelChange = new EventEmitter<any>();\n /** Emits a build event asynchronously when the fields or form input changes. */\n @Output() fieldChange = new EventEmitter<FormlyValueChangeEvent>();\n @ContentChildren(FormlyTemplate) set templates(templates: QueryList<FormlyTemplate>) {\n this.fieldTemplates.templates = templates;\n }\n\n field: FormlyFieldConfigCache = { type: 'formly-group' };\n private readonly destroyRef = inject(DestroyRef);\n private readonly pendingTasks = inject(PendingTasks);\n private readonly injector = inject(Injector);\n private _modelChangeValue: any = {};\n private modelSignal?: WritableSignal<any>;\n private modelSignalValue: any;\n private modelSignalEffect?: EffectRef;\n private valueChangesUnsubscribe = () => {};\n private readonly afterBuild = () => {\n if (this.modelSignal) {\n this.syncModelSignal(this.modelSignal);\n }\n };\n\n constructor(\n private builder: FormlyFormBuilder,\n private config: FormlyConfig,\n private ngZone: NgZone,\n protected fieldTemplates: FormlyFieldTemplates,\n ) {}\n\n ngDoCheck() {\n if (this.config.extras.checkExpressionOn === 'changeDetectionCheck') {\n this.checkExpressionChange();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.fields && this.form) {\n clearControl(this.form);\n }\n\n if (changes.fields || changes.form || (changes.model && this._modelChangeValue !== changes.model.currentValue)) {\n this.build();\n }\n\n if (changes.fields || changes.form) {\n this.pendingTasks.run(async () => {\n await Promise.resolve();\n if (!this.destroyRef.destroyed) {\n this.fieldChange.emit({ field: this.field, type: 'build', value: this.form });\n }\n });\n }\n }\n\n ngOnDestroy() {\n this.valueChangesUnsubscribe();\n this.config.clearRefs();\n this.field.options?._afterBuild?.delete(this.afterBuild);\n }\n\n private checkExpressionChange() {\n this.field.options.checkExpressions?.(this.field);\n }\n\n private valueChanges() {\n this.valueChangesUnsubscribe();\n\n let formEvents: Subscription | null = null;\n if (isSignalRequired()) {\n let submitted = this.options?.parentForm?.submitted;\n formEvents = (this.form as any).events.subscribe(() => {\n if (submitted !== this.options?.parentForm?.submitted) {\n this.options.detectChanges(this.field);\n submitted = this.options?.parentForm?.submitted;\n }\n });\n }\n\n const fieldChangesDetection: any[] = [\n observeDeep(this.field.options, ['formState'], () => this.field.options.detectChanges(this.field)),\n ];\n const valueChanges = this.field.options.fieldChanges\n .pipe(\n filter(({ field, type }) => hasKey(field) && type === 'valueChanges'),\n // keep the signal current for expressions and host code that run before the zone is stable\n tap(() => {\n if (this.modelSignal) {\n this.syncModelSignal(this.modelSignal);\n }\n }),\n switchMap(() => (isNoopNgZone(this.ngZone) ? of(null) : this.ngZone.onStable.asObservable().pipe(take(1)))),\n )\n .subscribe(() =>\n this.ngZone.runGuarded(() => {\n // runGuarded is used to keep in sync the expression changes\n // https://github.com/ngx-formly/ngx-formly/issues/2095\n this.checkExpressionChange();\n this._modelChangeValue = clone(this.model);\n if (this.modelSignal) {\n this.syncModelSignal(this.modelSignal, this._modelChangeValue);\n }\n this.modelChange.emit(this._modelChangeValue);\n }),\n );\n\n return () => {\n fieldChangesDetection.forEach((fnc) => fnc());\n formEvents?.unsubscribe();\n valueChanges.unsubscribe();\n };\n }\n\n private setField(field: FormlyFieldConfigCache) {\n if (this.config.extras.immutable) {\n this.field = { ...this.field, ...clone(field) };\n } else {\n Object.keys(field).forEach((p) => ((this.field as any)[p] = (field as any)[p]));\n }\n }\n\n private build() {\n this.valueChangesUnsubscribe();\n if (this.modelSignal) {\n const options = (this.field.options ??= {});\n if (!options._afterBuild) {\n defineHiddenProp(options, '_afterBuild', new Set());\n }\n options._afterBuild.add(this.afterBuild);\n }\n this.builder.build(this.field);\n this.valueChangesUnsubscribe = this.valueChanges();\n }\n\n private bindModelSignal(model: WritableSignal<any>) {\n this.modelSignal = model;\n this.modelSignalValue = model();\n this.useSignalValue(this.modelSignalValue);\n this.modelSignalEffect = effect(\n () => {\n const value = model();\n if (value === this.modelSignalValue) {\n return;\n }\n this.modelSignalValue = value;\n untracked(() => {\n this.useSignalValue(value);\n this.build();\n });\n },\n { injector: this.injector },\n );\n }\n\n private syncModelSignal(modelSignal: WritableSignal<any>, copy?: any) {\n const current = untracked(modelSignal);\n\n if (current !== this.modelSignalValue || isEqualValue(this.model, current ?? {})) {\n return;\n }\n\n modelSignal.set(copy ?? clone(this.model));\n // a signal with a custom `equal` can keep its previous value\n this.modelSignalValue = untracked(modelSignal);\n }\n\n // Formly mutates the root model, so bind a copy and leave the host's object untouched.\n private useSignalValue(model: any) {\n this.setField({ model: this.config.extras.immutable ? model : clone(model) });\n }\n}\n\n@Component({\n selector: 'formly-form',\n template: '<formly-field [field]=\"field\"></formly-field>',\n providers: [FormlyFormBuilder, FormlyFieldTemplates],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class LegacyFormlyForm extends FormlyForm {\n @ContentChildren(LegacyFormlyTemplate) override set templates(templates: QueryList<FormlyTemplate>) {\n this.fieldTemplates.templates = templates;\n }\n}\n","import {\n Directive,\n ElementRef,\n Input,\n OnChanges,\n SimpleChanges,\n Renderer2,\n DoCheck,\n Inject,\n OnDestroy,\n Optional,\n DOCUMENT,\n} from '@angular/core';\nimport { FormlyFieldConfig, FormlyFieldConfigCache } from '../models';\nimport { defineHiddenProp, FORMLY_VALIDATORS, observe, IObserver } from '../utils';\nimport { FormlyField } from '../components/formly.field';\n\n/**\n * Allow to link the `field` HTML attributes (`id`, `name` ...) and Event attributes (`focus`, `blur` ...) to an element in the DOM.\n */\n@Directive({\n selector: '[formlyAttributes]',\n standalone: true,\n host: {\n '(change)': 'onHostChange($event)',\n },\n})\nexport class FormlyAttributes implements OnChanges, DoCheck, OnDestroy {\n /** The field config. */\n @Input('formlyAttributes') field: FormlyFieldConfig;\n @Input() id: string;\n\n private document: Document;\n private uiAttributesCache: any = {};\n private uiAttributes: string[];\n private focusObserver: IObserver<boolean>;\n\n /**\n * HostBinding doesn't register listeners conditionally which may produce some perf issues.\n *\n * Formly issue: https://github.com/ngx-formly/ngx-formly/issues/1991\n */\n private uiEvents = {\n listeners: [] as (() => void)[],\n events: ['click', 'keyup', 'keydown', 'keypress', 'focus', 'blur', 'change', 'wheel'],\n callback: (eventName: string, $event: any) => {\n switch (eventName) {\n case 'focus':\n return this.onFocus($event);\n case 'blur':\n return this.onBlur($event);\n case 'change':\n return this.onChange($event);\n default:\n return this.props[eventName](this.field, $event);\n }\n },\n };\n\n private get props() {\n return this.field.props || ({} as FormlyFieldConfigCache['props']);\n }\n\n private get fieldAttrElements(): ElementRef[] {\n return (this.field as FormlyFieldConfigCache)?.['_elementRefs'] || [];\n }\n\n constructor(\n private renderer: Renderer2,\n private elementRef: ElementRef,\n @Inject(DOCUMENT) _document: any,\n @Optional() private formlyField?: FormlyField,\n ) {\n this.document = _document;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.field) {\n this.field.name && this.setAttribute('name', this.field.name);\n this.uiEvents.listeners.forEach((listener) => listener());\n this.uiEvents.events.forEach((eventName) => {\n if (this.props?.[eventName] || ['focus', 'blur', 'change'].indexOf(eventName) !== -1) {\n this.uiEvents.listeners.push(\n this.renderer.listen(this.elementRef.nativeElement, eventName, (e) => this.uiEvents.callback(eventName, e)),\n );\n }\n });\n\n if (this.props?.attributes) {\n observe(this.field, ['props', 'attributes'], ({ currentValue, previousValue }) => {\n if (previousValue) {\n Object.keys(previousValue).forEach((attr) => this.removeAttribute(attr));\n }\n\n if (currentValue) {\n Object.keys(currentValue).forEach((attr) => {\n if (currentValue[attr] != null) {\n this.setAttribute(attr, currentValue[attr]);\n }\n });\n }\n });\n }\n\n const previousField = changes.field.previousValue as FormlyFieldConfigCache;\n this.detachElementRef(previousField);\n this.attachElementRef(changes.field.currentValue);\n this.formlyField?.attachLocalField(\n changes.field.currentValue as FormlyFieldConfigCache,\n previousField?._elementRefs?.length ? undefined : previousField,\n );\n if (this.fieldAttrElements.length === 1) {\n !this.id && this.field.id && this.setAttribute('id', this.field.id);\n this.focusObserver = observe<boolean>(this.field, ['focus'], ({ currentValue }) => {\n this.toggleFocus(currentValue);\n });\n }\n }\n\n if (changes.id) {\n this.setAttribute('id', this.id);\n }\n }\n\n /**\n * We need to re-evaluate all the attributes on every change detection cycle, because\n * by using a HostBinding we run into certain edge cases. This means that whatever logic\n * is in here has to be super lean or we risk seriously damaging or destroying the performance.\n *\n * Formly issue: https://github.com/ngx-formly/ngx-formly/issues/1317\n * Material issue: https://github.com/angular/components/issues/14024\n */\n ngDoCheck() {\n if (!this.uiAttributes) {\n const element = this.elementRef.nativeElement as HTMLElement;\n this.uiAttributes = [...FORMLY_VALIDATORS, 'tabindex', 'placeholder', 'readonly', 'disabled'].filter(\n (attr) => !element.hasAttribute || !element.hasAttribute(attr),\n );\n }\n\n for (let i = 0; i < this.uiAttributes.length; i++) {\n const attr = this.uiAttributes[i];\n const value = this.props[attr];\n if (\n this.uiAttributesCache[attr] !== value &&\n (!this.props.attributes || !this.props.attributes.hasOwnProperty(attr.toLowerCase()))\n ) {\n this.uiAttributesCache[attr] = value;\n if (value || value === 0) {\n this.setAttribute(attr, this.getSafeAttributeValue(attr, value));\n } else {\n this.removeAttribute(attr);\n }\n }\n }\n }\n\n ngOnDestroy() {\n this.uiEvents.listeners.forEach((listener) => listener());\n this.detachElementRef(this.field);\n if (!(this.field as FormlyFieldConfigCache)?._elementRefs?.length) {\n this.formlyField?.attachLocalField(undefined, this.field as FormlyFieldConfigCache);\n }\n this.focusObserver?.unsubscribe();\n }\n\n toggleFocus(value: boolean) {\n const element = this.fieldAttrElements ? this.fieldAttrElements[0] : null;\n if (!element || !element.nativeElement.focus) {\n return;\n }\n\n const isFocused =\n !!this.document.activeElement &&\n this.fieldAttrElements.some(\n ({ nativeElement }) =>\n this.document.activeElement === nativeElement || nativeElement.contains(this.document.activeElement),\n );\n\n if (value && !isFocused) {\n Promise.resolve().then(() => element.nativeElement.focus());\n } else if (!value && isFocused) {\n Promise.resolve().then(() => element.nativeElement.blur());\n }\n }\n\n onFocus($event: any) {\n this.focusObserver?.setValue(true);\n this.props.focus?.(this.field, $event);\n }\n\n onBlur($event: any) {\n this.focusObserver?.setValue(false);\n this.props.blur?.(this.field, $event);\n }\n\n // handle custom `change` event, for regular ones rely on DOM listener\n onHostChange($event: any) {\n if ($event instanceof Event) {\n return;\n }\n\n this.onChange($event);\n }\n\n onChange($event: any) {\n this.props.change?.(this.field, $event);\n this.field.formControl?.markAsDirty();\n }\n\n private attachElementRef(f: FormlyFieldConfigCache) {\n if (!f) {\n return;\n }\n\n if (f['_elementRefs']?.indexOf(this.elementRef) === -1) {\n f['_elementRefs'].push(this.elementRef);\n } else {\n defineHiddenProp(f, '_elementRefs', [this.elementRef]);\n }\n }\n\n private detachElementRef(f: FormlyFieldConfigCache) {\n const elements = f?.['_elementRefs'] || [];\n const index = elements.indexOf(this.elementRef);\n if (index !== -1) {\n elements.splice(index, 1);\n }\n }\n\n private getSafeAttributeValue(attr: string, value: any): string {\n if (attr === 'pattern') {\n let pattern = value instanceof RegExp ? value.source : value;\n\n // 1. Safely escape unescaped hyphens inside character classes for 'v' flag compatibility\n pattern = pattern.replace(/(\\[[^\\]]*?)(?<!\\\\)-(.*?\\])/g, '$1\\\\-$2');\n\n // 2. Cleanly strip leading ^ and trailing $ so HTML5 handles the boundaries natively\n pattern = pattern.replace(/^^\\^/, '').replace(/\\$$/, '');\n\n return pattern;\n }\n return value === true ? attr : `${value}`;\n }\n\n private setAttribute(attr: string, value: string) {\n this.renderer.setAttribute(this.elementRef.nativeElement, attr, value);\n }\n\n private removeAttribute(attr: string) {\n this.renderer.removeAttribute(this.elementRef.nativeElement, attr);\n }\n}\n\n@Directive({\n selector: '[formlyAttributes]',\n host: {\n '(change)': 'onHostChange($event)',\n },\n standalone: false,\n})\nexport class LegacyFormlyAttributes extends FormlyAttributes {}\n","import { FormlyFieldConfig } from '../models';\nimport { FormlyConfig } from '../services/formly.config';\nimport { isObject } from '../utils';\n\nexport function getValidationMessage(field: FormlyFieldConfig, error: string, config: FormlyConfig) {\n const value = field.formControl.errors[error];\n let message = config.getValidatorMessage(error);\n\n if (isObject(value)) {\n if (value.errorPath) {\n return undefined;\n }\n\n if (value.message) {\n message = value.message;\n }\n }\n\n if (field.validation?.messages?.[error]) {\n message = field.validation.messages[error];\n }\n\n if (field.validators?.[error]?.message) {\n message = field.validators[error].message;\n }\n\n if (field.asyncValidators?.[error]?.message) {\n message = field.asyncValidators[error].message;\n }\n\n return typeof message === 'function' ? message(value, field) : message;\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, OnChanges } from '@angular/core';\nimport { Observable, combineLatest, isObservable, merge, of } from 'rxjs';\nimport { filter, map, startWith, switchMap } from 'rxjs/operators';\nimport { FormlyFieldConfig } from '../models';\nimport { FormlyConfig } from '../services/formly.config';\nimport { FORMLY_VALIDATORS, observe } from '../utils';\nimport { getValidationMessage } from './validation-message';\n\n/**\n * The `<formly-validation-message>` component renders the error message of a given `field`.\n * @deprecated Use the `validationMessages` pipe to render validation messages.\n */\n@Component({\n selector: 'formly-validation-message',\n template: '{{ errorMessage$ | async }}',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [AsyncPipe],\n host: { '[style.white-space]': \"field.validation?.showAllErrors ? 'pre-line' : null\" },\n})\nexport class FormlyValidationMessage implements OnChanges {\n /** The field config. */\n @Input() field: FormlyFieldConfig;\n errorMessage$: Observable<string>;\n\n constructor(private config: FormlyConfig) {}\n\n ngOnChanges() {\n const EXPR_VALIDATORS = FORMLY_VALIDATORS.map((v) => `templateOptions.${v}`);\n const controlChanges = new Observable<FormlyFieldConfig['formControl']>((subscriber) => {\n const observer = observe<FormlyFieldConfig['formControl']>(this.field, ['formControl'], ({ currentValue }) =>\n subscriber.next(currentValue),\n );\n return () => observer.unsubscribe();\n });\n this.errorMessage$ = merge(\n controlChanges.pipe(switchMap((control) => (control ? control.statusChanges.pipe(startWith(null)) : of(null)))),\n !this.field.options\n ? of(null)\n : this.field.options.fieldChanges.pipe(\n filter(({ field, type, property }) => {\n return (\n field === this.field &&\n type === 'expressionChanges' &&\n (property.indexOf('validation') !== -1 || EXPR_VALIDATORS.indexOf(property) !== -1)\n );\n }),\n ),\n ).pipe(\n switchMap(() => {\n const message = this.errorMessage;\n return isObservable(message) ? message : of(message);\n }),\n );\n }\n\n get errorMessage() {\n const errors = this.field.formControl?.errors || {};\n const messages: (string | Observable<string>)[] = [];\n for (const error in errors) {\n if (errors.hasOwnProperty(error)) {\n const message = getValidationMessage(this.field, error, this.config);\n if (!this.field.validation?.showAllErrors) {\n return message;\n }\n if (message) {\n messages.push(message);\n }\n }\n }\n\n if (this.field.validation?.showAllErrors) {\n return messages.some(isObservable)\n ? combineLatest(\n messages.map((message) => (isObservable(message) ? message.pipe(startWith('')) : of(message))),\n ).pipe(map((values) => values.filter(Boolean).join('\\n')))\n : messages.join('\\n');\n }\n\n return undefined;\n }\n}\n\n/** @deprecated Use the `validationMessages` pipe to render validation messages. */\n@Component({\n selector: 'formly-validation-message',\n template: '{{ errorMessage$ | async }}',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class LegacyFormlyValidationMessage extends FormlyValidationMessage {}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { isObservable, Observable, of, Subscription } from 'rxjs';\nimport { FormlyFieldConfig, FormlyValueChangeEvent } from '../models';\nimport { FormlyConfig } from '../services/formly.config';\nimport { getValidationMessage } from './validation-message';\n\nexport interface FormlyValidationMessageEntry {\n /** The visible field associated with the error. */\n field: FormlyFieldConfig;\n /** The key in the control's errors object. */\n error: string;\n /** The resolved, nonempty validation message. */\n message: string;\n}\n\n/** Collects configured messages from built fields, independently of touched or submitted state. */\n@Pipe({ name: 'validationMessages', standalone: true })\nexport class FormlyValidationMessagesPipe implements PipeTransform {\n constructor(private config: FormlyConfig) {}\n\n transform(\n fields: FormlyFieldConfig | readonly FormlyFieldConfig[] | null | undefined,\n ): Observable<FormlyValidationMessageEntry[]> {\n const roots: readonly FormlyFieldConfig[] = Array.isArray(fields) ? fields : [fields as FormlyFieldConfig];\n\n return new Observable<FormlyValidationMessageEntry[]>((subscriber) => {\n const subscriptions = new Map<Observable<string | FormlyValueChangeEvent>, Subscription>();\n const messages = new Map<\n FormlyFieldConfig,\n Map<\n string,\n {\n control: AbstractControl;\n message: string | Observable<string>;\n entry: FormlyValidationMessageEntry;\n subscription: Subscription;\n }\n >\n >();\n let currentFields: FormlyFieldConfig[] = [];\n let watchedFields: Set<FormlyFieldConfig>;\n let refreshing = false;\n\n const emit = () => {\n if (refreshing || subscriber.closed) {\n return;\n }\n\n const seen = new Map<AbstractControl, Set<string>>();\n const entries = currentFields.flatMap((field) =>\n Object.keys(field.formControl?.errors || {}).map((error) => messages.get(field)?.get(error)?.entry),\n );\n subscriber.next(\n entries.filter((entry) => {\n if (!entry?.message || seen.get(entry.field.formControl)?.has(entry.error)) {\n return false;\n }\n\n const { field, error } = entry;\n if (!seen.has(field.formControl)) {\n seen.set(field.formControl, new Set());\n }\n seen.get(field.formControl).add(error);\n return true;\n }),\n );\n };\n\n const refresh = () => {\n if (subscriber.closed) {\n return;\n }\n\n refreshing = true;\n currentFields = this.getFields(roots);\n watchedFields = new Set(currentFields);\n messages.forEach((fieldMessages, field) => {\n if (!watchedFields.has(field) || !this.isVisible(field)) {\n fieldMessages.forEach((state) => state.subscription.unsubscribe());\n messages.delete(field);\n }\n });\n currentFields.forEach((field) => {\n for (let parent = field.parent; parent && !watchedFields.has(parent); parent = parent.parent) {\n watchedFields.add(parent);\n }\n });\n\n const sources = new Set<Observable<string | FormlyValueChangeEvent>>();\n watchedFields.forEach((field) => {\n if (field.formControl) {\n sources.add(field.formControl.statusChanges);\n }\n if (field.options?.fieldChanges) {\n sources.add(field.options.fieldChanges);\n }\n });\n\n subscriptions.forEach((subscription, source) => {\n if (!sources.has(source)) {\n subscription.unsubscribe();\n subscriptions.delete(source);\n }\n });\n sources.forEach((source) => {\n if (!subscriber.closed && !subscriptions.has(source)) {\n subscriptions.set(\n source,\n source.subscribe({\n next: (event: string | FormlyValueChangeEvent) => {\n if (\n typeof event === 'string' ||\n event.type === 'valueChanges' ||\n (watchedFields.has(event.field) && ['expressionChanges', 'hidden'].includes(event.type))\n ) {\n refresh();\n }\n },\n error: (error) => subscriber.error(error),\n }),\n );\n }\n });\n\n currentFields.forEach((field) => {\n if (subscriber.closed || !this.isVisible(field)) {\n return;\n }\n\n if (!messages.has(field)) {\n messages.set(field, new Map());\n }\n const fieldMessages = messages.get(field);\n const errors = new Set(Object.keys(field.formControl.errors || {}));\n fieldMessages.forEach((state, error) => {\n if (state.control !== field.formControl || !errors.has(error)) {\n state.subscription.unsubscribe();\n fieldMessages.delete(error);\n }\n });\n errors.forEach((error) => {\n if (subscriber.closed) {\n return;\n }\n\n let message: string | Observable<string>;\n try {\n message = getValidationMessage(field, error, this.config);\n } catch (error) {\n subscriber.error(error);\n return;\n }\n\n const previous = fieldMessages.get(error);\n // Re-evaluate field context, but retain unchanged streams and their latest translations.\n if (previous?.message === message) {\n return;\n }\n previous?.subscription.unsubscribe();\n fieldMessages.delete(error);\n if (!message) {\n return;\n }\n\n const state = {\n control: field.formControl,\n message,\n entry: null as FormlyValidationMessageEntry,\n subscription: new Subscription(),\n };\n fieldMessages.set(error, state);\n state.subscription.add(\n (isObservable(message) ? message : of(message)).subscribe({\n next: (message) => {\n state.entry = { field, error, message };\n emit();\n },\n error: (error) => subscriber.error(error),\n }),\n );\n });\n });\n refreshing = false;\n emit();\n };\n\n subscriber.add(() => {\n subscriptions.forEach((subscription) => subscription.unsubscribe());\n messages.forEach((fieldMessages) => fieldMessages.forEach((state) => state.subscription.unsubscribe()));\n });\n refresh();\n });\n }\n\n private getFields(roots: readonly FormlyFieldConfig[]) {\n const fields = new Set<FormlyFieldConfig>();\n const visit = (field: FormlyFieldConfig) => {\n if (!field || fields.has(field)) {\n return;\n }\n\n fields.add(field);\n field.fieldGroup?.forEach(visit);\n };\n roots.forEach(visit);\n\n return Array.from(fields);\n }\n\n private isVisible(field: FormlyFieldConfig) {\n if (!field.formControl || field.formControl.disabled) {\n return false;\n }\n for (let parent = field; parent; parent = parent.parent) {\n if (parent.hide) {\n return false;\n }\n }\n\n return true;\n }\n}\n","import { Directive } from '@angular/core';\nimport { UntypedFormArray, UntypedFormGroup } from '@angular/forms';\nimport { FieldType } from './field.type';\nimport { clone, assignFieldValue, getFieldValue, getField, getKeyPath, hasKey } from '../utils';\nimport { FormlyFieldConfig, FormlyExtension, FormlyFieldConfigCache } from '../models';\nimport { registerControl, unregisterControl, findControl } from '../extensions/field-form/utils';\n\nexport interface FieldArrayTypeConfig<T = FormlyFieldConfig['props']> extends FormlyFieldConfig<T> {\n formControl: UntypedFormArray;\n props: NonNullable<T>;\n}\n\n@Directive()\nexport abstract class FieldArrayType<F extends FormlyFieldConfig = FieldArrayTypeConfig>\n extends FieldType<F>\n implements FormlyExtension<F>\n{\n onPopulate(field: F) {\n if (hasKey(field)) {\n const control = findControl(field);\n registerControl(field, control ? control : new UntypedFormArray([], { updateOn: field.modelOptions.updateOn }));\n }\n\n field.fieldGroup = field.fieldGroup || [];\n\n const length = Array.isArray(field.model) ? field.model.length : 0;\n if (field.fieldGroup.length > length) {\n for (let i = field.fieldGroup.length - 1; i >= length; --i) {\n unregisterControl(field.fieldGroup[i], true);\n field.fieldGroup.splice(i, 1);\n }\n }\n\n for (let i = field.fieldGroup.length; i < length; i++) {\n this.addArrayElement(field, i);\n }\n }\n\n add(i?: number, initialModel?: any, { markAsDirty } = { markAsDirty: true }) {\n markAsDirty && this.formControl.markAsDirty();\n i = i == null ? this.field.fieldGroup.length : i;\n if (!this.model) {\n assignFieldValue(this.field, []);\n }\n\n i = Math.trunc(i) || 0;\n i = i < 0 ? Math.max(this.model.length + i, 0) : Math.min(i, this.model.length);\n this.model.splice(i, 0, initialModel ? clone(initialModel) : undefined);\n // Connected arrays share a FormArray. A keyless array uses its parent's control, which it does not share.\n const fields = hasKey(this.field)\n ? (this.field as FormlyFieldConfigCache).formControl._fields.filter((f) => f === this.field || f.fieldArray)\n : [this.field];\n if (fields.some((field) => field.props.trackByIndex)) {\n this._build();\n return;\n }\n const fixedFields = this.detachFixedFields(fields);\n fields.forEach((field) => {\n this.addArrayElement(field, i);\n field.fieldGroup.forEach((f, key) => this.updateArrayElementKey(f, `${key}`));\n });\n\n // Existing fields retain their controls and register them at their new keys.\n // Clear the shifted positions so the new field cannot reuse an existing control.\n const formControl = this.formControl;\n if (formControl instanceof UntypedFormArray) {\n for (let key = formControl.length - 1; key >= i; key--) {\n formControl.removeAt(key, { emitEvent: false });\n }\n } else {\n for (let key = this.field.fieldGroup.length - 2; key >= i; key--) {\n (formControl as UntypedFormGroup).removeControl(`${key}`, { emitEvent: false });\n }\n }\n\n this._build(fixedFields);\n }\n\n remove(i: number, { markAsDirty } = { markAsDirty: true }) {\n markAsDirty && this.formControl.markAsDirty();\n this.model.splice(i, 1);\n\n const fields = hasKey(this.field)\n ? (this.field as FormlyFieldConfigCache).formControl._fields.filter((f) => f === this.field || f.fieldArray)\n : [this.field];\n const trackByIndex = fields.some((field) => field.props.trackByIndex);\n const fixedFields = trackByIndex ? [] : this.detachFixedFields(fields);\n fields.forEach((field) => {\n const index = trackByIndex ? field.fieldGroup.length - 1 : i;\n const [removed] = field.fieldGroup.splice(index, 1);\n field.fieldGroup.forEach((f, key) => this.updateArrayElementKey(f, `${key}`));\n unregisterControl(removed, true);\n });\n this._build(fixedFields);\n }\n\n private _build(fixedFields: FormlyFieldConfig[] = []) {\n const fields = (this.field as FormlyFieldConfigCache).formControl._fields ?? [this.field];\n fields.forEach((f) => (this.options as any).build(f));\n const getPath = (field: FormlyFieldConfig) => {\n const path: string[] = [];\n for (let parent = field; parent; parent = parent.parent) {\n path.unshift(...getKeyPath(parent));\n }\n return path;\n };\n fixedFields.forEach((field) => {\n const path = getPath(field).slice(getPath(this.field).length);\n const array = fields.find((f) => getField(f, path)) || this.field;\n const target = path.length ? getField(array, path) : array;\n if (target?.formControl) {\n registerControl(field, target.formControl);\n }\n });\n fixedFields.forEach((field) => {\n this.options.build(field);\n this.options.detectChanges(field);\n });\n this.options.fieldChanges.next({\n field: this.field,\n value: getFieldValue(this.field),\n type: 'valueChanges',\n });\n }\n\n private detachFixedFields(arrays: FormlyFieldConfig[]): FormlyFieldConfigCache[] {\n const fixedFields = new Set<FormlyFieldConfigCache>();\n const visited = new Set<FormlyFieldConfigCache['formControl']>();\n const visit = (control: FormlyFieldConfigCache['formControl']) => {\n if (!control || visited.has(control)) {\n return;\n }\n visited.add(control);\n if (control instanceof UntypedFormArray || control instanceof UntypedFormGroup) {\n Object.values(control.controls).forEach(visit);\n }\n };\n visit(this.formControl);\n const visitField = (field: FormlyFieldConfig) => {\n visit(field.formControl);\n field.fieldGroup?.forEach(visitField);\n };\n // Hidden rows retain controls that are no longer in the FormArray.\n arrays.forEach(visitField);\n const visitFixedFields = (field: FormlyFieldConfigCache) => {\n if (arrays.includes(field) || field.shareFormControl === false) {\n return;\n }\n if (hasKey(field) && visited.has(field.formControl)) {\n fixedFields.add(field);\n }\n field.fieldGroup?.forEach(visitFixedFields);\n };\n let root: FormlyFieldConfig = this.field;\n while (root.parent) {\n root = root.parent;\n }\n visitFixedFields(root);\n fixedFields.forEach((field) => {\n const control = field.formControl;\n const index = control._fields?.indexOf(field) ?? -1;\n if (index !== -1) {\n control._fields.splice(index, 1);\n }\n control.setValidators(null);\n control.setAsyncValidators(null);\n field.formControl = null;\n });\n\n return [...fixedFields];\n }\n\n private addArrayElement(field: FormlyFieldConfig, index: number) {\n // Factories use fieldGroup.length to select the schema for the new position.\n const tail = field.fieldGroup.splice(index);\n try {\n const f = { ...clone(typeof field.fieldArray === 'function' ? field.fieldArray(field) : field.fieldArray) };\n if (f.key !== null) {\n f.key = `${index}`;\n }\n\n field.fieldGroup.push(f);\n } finally {\n field.fieldGroup.push(...tail);\n }\n }\n\n private updateArrayElementKey(f: FormlyFieldConfig, newKey: string) {\n if (hasKey(f)) {\n f.key = newKey;\n return;\n }\n\n if (!f.fieldGroup?.length) {\n return;\n }\n\n for (let i = 0; i < f.fieldGroup.length; i++) {\n this.updateArrayElementKey(f.fieldGroup[i], newKey);\n }\n }\n}\n","import { ViewContainerRef, ViewChild, Directive, QueryList } from '@angular/core';\nimport { FieldType } from './field.type';\nimport { FormlyFieldConfig } from '../models';\nimport { NgControl } from '@angular/forms';\n\n@Directive()\nexport abstract class FieldWrapper<F extends FormlyFieldConfig = FormlyFieldConfig> extends FieldType<F> {\n override set _formlyControls(_: QueryList<NgControl>) {}\n @ViewChild('fieldComponent', { read: ViewContainerRef }) fieldComponent!: ViewContainerRef;\n @ViewChild('fieldComponent', { read: ViewContainerRef, static: true }) set _staticContent(content: ViewContainerRef) {\n this.fieldComponent = content;\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LegacyFormlyForm } from './components/formly.form';\nimport { LegacyFormlyField } from './components/formly.field';\nimport { LegacyFormlyAttributes } from './templates/formly.attributes';\nimport { FormlyConfig } from './services/formly.config';\nimport { FormlyFormBuilder } from './services/formly.builder';\nimport { FormlyGroup } from './templates/formly.group';\nimport { LegacyFormlyValidationMessage } from './templates/formly.validation-message';\nimport { FormlyValidationMessagesPipe } from './templates/formly-validation-messages.pipe';\nimport { FormlyTemplateType } from './templates/field-template.type';\nimport { ConfigOption } from './models';\nimport { LegacyFormlyTemplate } from './components/formly.template';\nimport { FORMLY_CONFIG, provideFormlyConfig, withDefaultConfig } from './core.config';\n\n/**\n * Registers Formly components and configuration for NgModule-based applications.\n *\n * `forRoot()` provides the shared `FormlyConfig` at the application root, while\n * `forChild()` adds feature configuration using the inherited service. This follows\n * Angular's [root/child module registration convention](https://frontendatlas.com/angular/trivia/angular-forroot-forchild).\n */\n@NgModule({\n declarations: [\n LegacyFormlyTemplate,\n LegacyFormlyForm,\n LegacyFormlyField,\n LegacyFormlyAttributes,\n LegacyFormlyValidationMessage,\n FormlyGroup,\n FormlyTemplateType,\n ],\n exports: [\n FormlyValidationMessagesPipe,\n LegacyFormlyTemplate,\n LegacyFormlyForm,\n LegacyFormlyField,\n LegacyFormlyAttributes,\n LegacyFormlyValidationMessage,\n FormlyGroup,\n ],\n imports: [CommonModule, FormlyValidationMessagesPipe],\n})\nexport class FormlyModule {\n static forRoot(config: ConfigOption = {}): ModuleWithProviders<FormlyModule> {\n return {\n ngModule: FormlyModule,\n providers: [\n { provide: FORMLY_CONFIG, multi: true, useFactory: withDefaultConfig, deps: [FormlyConfig] },\n provideFormlyConfig(config),\n FormlyConfig,\n FormlyFormBuilder,\n ],\n };\n }\n\n static forChild(config: ConfigOption = {}): ModuleWithProviders<FormlyModule> {\n return {\n ngModule: FormlyModule,\n providers: [\n { provide: FORMLY_CONFIG, multi: true, useFactory: withDefaultConfig, deps: [FormlyConfig] },\n provideFormlyConfig(config),\n FormlyFormBuilder,\n ],\n };\n }\n}\n"],"mappings":"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"}