@mmstack/form-core
Version:
[](https://www.npmjs.com/package/@mmstack/form-core) [](https://github.com/mihajm/mmstack/blob/master/packages/form/core/LICEN
1 lines • 92.7 kB
Source Map (JSON)
{"version":3,"file":"mmstack-form-core.mjs","sources":["../tmp-esm2022/lib/form-control.js","../tmp-esm2022/lib/form-array.js","../tmp-esm2022/lib/form-group.js","../tmp-esm2022/mmstack-form-core.js"],"sourcesContent":["import { computed, isSignal, signal, untracked, } from '@angular/core';\nimport { v7 } from 'uuid';\n/**\n * Creates a `FormControlSignal`, a reactive form control that holds a value and tracks its\n * validity, dirty state, touched state, and other metadata.\n *\n * @typeParam T - The type of the form control's value.\n * @typeParam TParent - The type of the parent form control's value (if this control is part of a group or array).\n * @typeParam TControlType - The type of the control. Defaults to `'control'`.\n * @typeParam TPartialValue - The type of value when patching\n * @param initial - The initial value of the control, or a `DerivedSignal` if this control is part of a `formGroup` or `formArray`.\n * @param options - Optional configuration options for the control.\n * @returns A `FormControlSignal` instance.\n *\n * @example\n * // Create a simple form control:\n * const name = formControl('Initial Name');\n *\n * // Create a form control with validation:\n * const age = formControl(0, {\n * validator: () => (value) => value >= 18 ? '' : 'Must be at least 18',\n * });\n *\n * // Create a derived form control (equivalent to the above, but more explicit):\n * const user = signal({ name: 'John Doe', age: 30 });\n * const name = formControl(derived(user, {\n * from: (u) => u.name,\n * onChange: (newName) => user.update(u => ({...u, name: newName}))\n * }));\n *\n * // Create a form group with nested controls:\n * const user = signal({ name: 'John Doe', age: 30 });\n * const form = formGroup(user, {\n * name: formControl(derived(user, 'name')),\n * age: formControl(derived(user, 'age')),\n * })\n */\nexport function formControl(initial, opt) {\n const value = isSignal(initial) ? initial : signal(initial, opt);\n const initialValue = signal(untracked(value));\n const eq = opt?.equal ?? Object.is;\n const dirtyEq = opt?.dirtyEquality ?? eq;\n const disabled = computed(() => opt?.disable?.() ?? false);\n const readonly = computed(() => opt?.readonly?.() ?? false);\n const dirty = computed(() => !dirtyEq(value(), initialValue()));\n const touched = signal(false);\n const validator = computed(() => opt?.validator?.() ?? (() => ''));\n const error = computed(() => {\n if (opt?.overrideValidation)\n return opt.overrideValidation();\n if (disabled() || readonly())\n return '';\n return validator()(value());\n });\n const markAsTouched = () => {\n touched.set(true);\n opt?.onTouched?.();\n };\n const markAllAsTouched = markAsTouched;\n const markAsPristine = () => touched.set(false);\n const markAllAsPristine = markAsPristine;\n const label = computed(() => opt?.label?.() ?? '');\n const partialValue = computed(() => (dirty() ? value() : undefined));\n const internalReconcile = (newValue, force = false) => {\n const isDirty = untracked(dirty);\n if (!isDirty || force) {\n // very dangerous use of untracked here, don't do this everywhere :)\n // thanks to u/synalx for the idea to use untracked here\n untracked(() => {\n initialValue.set(newValue);\n value.set(newValue);\n });\n }\n };\n const pending = computed(() => opt?.pending?.() ?? false);\n return {\n id: opt?.id?.() ?? v7(),\n value,\n dirty,\n touched,\n error,\n label,\n required: computed(() => opt?.required?.() ?? false),\n disabled,\n readonly,\n pending,\n valid: computed(() => !pending() && !error()),\n hint: computed(() => opt?.hint?.() ?? ''),\n markAsTouched,\n markAllAsTouched,\n markAsPristine,\n markAllAsPristine,\n from: (isSignal(initial) ? initial.from : undefined),\n reconcile: (newValue) => internalReconcile(newValue),\n forceReconcile: (newValue) => internalReconcile(newValue, true),\n reset: () => {\n opt?.onReset?.();\n value.set(untracked(initialValue));\n },\n resetWithInitial: (initial) => {\n opt?.onReset?.();\n initialValue.set(initial);\n value.set(initial);\n },\n equal: eq,\n controlType: (opt?.controlType ?? 'control'),\n partialValue: partialValue,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZm9ybS9jb3JlL3NyYy9saWIvZm9ybS1jb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEdBS1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQTRHMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQ0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQU16QixPQUFzQyxFQUN0QyxHQUErQztJQUUvQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqRSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDO0lBRW5DLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxhQUFhLElBQUksRUFBRSxDQUFDO0lBRXpDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQztJQUMzRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLENBQUM7SUFFNUQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLFlBQVks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QUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUkxQztRQUNULFNBQVMsRUFBRSxDQUFDLFFBQVcsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDO1FBQ3ZELGNBQWMsRUFBRSxDQUFDLFFBQVcsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztRQUNsRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQ1YsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFVLEVBQUUsRUFBRTtZQUMvQixHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNqQixZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFCLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUNELEtBQUssRUFBRSxFQUFFO1FBQ1QsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLFdBQVcsSUFBSSxTQUFTLENBQWlCO1FBQzVELFlBQVksRUFBRSxZQUFxQztLQUNwRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgaXNTaWduYWwsXHJcbiAgc2lnbmFsLFxyXG4gIHVudHJhY2tlZCxcclxuICB0eXBlIENyZWF0ZVNpZ25hbE9wdGlvbnMsXHJcbiAgdHlwZSBTaWduYWwsXHJcbiAgdHlwZSBWYWx1ZUVxdWFsaXR5Rm4sXHJcbiAgdHlwZSBXcml0YWJsZVNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdHlwZSBEZXJpdmVkU2lnbmFsIH0gZnJvbSAnQG1tc3RhY2svcHJpbWl0aXZlcyc7XHJcbmltcG9ydCB7IHY3IH0gZnJvbSAndXVpZCc7XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyB0aGUgdHlwZSBvZiBhIGZvcm0gY29udHJvbC5cclxuICogLSBgY29udHJvbGA6IEEgc2luZ2xlIGZvcm0gY29udHJvbCAoZS5nLiwgYW4gaW5wdXQgZmllbGQpLlxyXG4gKiAtIGBhcnJheWA6IEFuIGFycmF5IG9mIGZvcm0gY29udHJvbHMgKGxpa2UgQW5ndWxhcidzIGBGb3JtQXJyYXlgKS5cclxuICogLSBgZ3JvdXBgOiBBIGdyb3VwIG9mIGZvcm0gY29udHJvbHMgKGxpa2UgQW5ndWxhcidzIGBGb3JtR3JvdXBgKS5cclxuICovXHJcbmV4cG9ydCB0eXBlIENvbnRyb2xUeXBlID0gJ2NvbnRyb2wnIHwgJ2FycmF5JyB8ICdncm91cCc7XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyBhIHJlYWN0aXZlIGZvcm0gY29udHJvbC4gIEl0IGhvbGRzIHRoZSB2YWx1ZSwgdmFsaWRhdGlvbiBzdGF0dXMsIGFuZCBvdGhlclxyXG4gKiBtZXRhZGF0YSBmb3IgYSBmb3JtIGZpZWxkLiAgVGhpcyBpcyB0aGUgY29yZSBidWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgcmVhY3RpdmUgZm9ybXNcclxuICogd2l0aCBzaWduYWxzLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgZm9ybSBjb250cm9sJ3MgdmFsdWUuXHJcbiAqIEB0eXBlUGFyYW0gVFBhcmVudCAtIFRoZSB0eXBlIG9mIHRoZSBwYXJlbnQgZm9ybSBjb250cm9sJ3MgdmFsdWUgKGlmIHRoaXMgY29udHJvbCBpcyBwYXJ0IG9mIGEgZ3JvdXAgb3IgYXJyYXkpLiBEZWZhdWx0cyB0byBgdW5kZWZpbmVkYC5cclxuICogQHR5cGVQYXJhbSBUQ29udHJvbFR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgY29udHJvbCAoJ2NvbnRyb2wnLCAnYXJyYXknLCBvciAnZ3JvdXAnKS4gRGVmYXVsdHMgdG8gJ2NvbnRyb2wnLlxyXG4gKiBAdHlwZVBhcmFtIFRQYXJ0aWFsVmFsdWUgLSAgVGhlIHR5cGUgb2YgdGhlIHBhcnRpYWwgdmFsdWUsIHVzZWQgZm9yIHBhdGNoaW5nLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgRm9ybUNvbnRyb2xTaWduYWw8XHJcbiAgVCxcclxuICBUUGFyZW50ID0gdW5kZWZpbmVkLFxyXG4gIFRDb250cm9sVHlwZSBleHRlbmRzIENvbnRyb2xUeXBlID0gJ2NvbnRyb2wnLFxyXG4gIFRQYXJ0aWFsVmFsdWUgPSBUIHwgdW5kZWZpbmVkLFxyXG4+ID0ge1xyXG4gIC8qKiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29udHJvbC4gVXNlZCBmb3IgdHJhY2tpbmcgaW4gYEBmb3JgIGxvb3BzLiAqL1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgLyoqIFRoZSBtYWluIHZhbHVlIHNpZ25hbCBmb3IgdGhlIGNvbnRyb2wuICovXHJcbiAgdmFsdWU6IFdyaXRhYmxlU2lnbmFsPFQ+O1xyXG4gIC8qKiBBIHNpZ25hbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRyb2wncyB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkLiAqL1xyXG4gIGRpcnR5OiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgLyoqIEEgc2lnbmFsIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29udHJvbCBoYXMgYmVlbiBpbnRlcmFjdGVkIHdpdGggKGUuZy4sIGJsdXJyZWQpLiAqL1xyXG4gIHRvdWNoZWQ6IFNpZ25hbDxib29sZWFuPjtcclxuICAvKiogQSBzaWduYWwgY29udGFpbmluZyB0aGUgY3VycmVudCB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2UgKGVtcHR5IHN0cmluZyBpZiB2YWxpZCkuICovXHJcbiAgZXJyb3I6IFNpZ25hbDxzdHJpbmc+O1xyXG4gIC8qKiBBIHNpZ25hbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgcGVuZGluZyAqL1xyXG4gIHBlbmRpbmc6IFNpZ25hbDxib29sZWFuPjtcclxuICAvKiogQSBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb250cm9sIGlzIGRpc2FibGVkLiAqL1xyXG4gIC8qKiBBIHNpZ25hbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgaW4gYSB2YWxpZCBzdGF0ZSAod2l0aG91dCBlcnJvcnMgJiBub3QgcGVuZGluZykgKi9cclxuICB2YWxpZDogU2lnbmFsPGJvb2xlYW4+O1xyXG4gIGRpc2FibGVkOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgLyoqIEEgc2lnbmFsIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29udHJvbCBpcyByZWFkLW9ubHkuICovXHJcbiAgcmVhZG9ubHk6IFNpZ25hbDxib29sZWFuPjtcclxuICAvKiogQSBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb250cm9sIGlzIHJlcXVpcmVkLiAqL1xyXG4gIHJlcXVpcmVkOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgLyoqIEEgc2lnbmFsIGNvbnRhaW5pbmcgdGhlIGxhYmVsIGZvciB0aGUgY29udHJvbC4gKi9cclxuICBsYWJlbDogU2lnbmFsPHN0cmluZz47XHJcbiAgLyoqIEEgc2lnbmFsIGNvbnRhaW5pbmcgdGhlIGhpbnQgdGV4dCBmb3IgdGhlIGNvbnRyb2wuICovXHJcbiAgaGludDogU2lnbmFsPHN0cmluZz47XHJcbiAgLyoqIE1hcmtzIHRoZSBjb250cm9sIGFzIHRvdWNoZWQuICovXHJcbiAgbWFya0FzVG91Y2hlZDogKCkgPT4gdm9pZDtcclxuICAvKiogTWFya3MgdGhlIGNvbnRyb2wgYW5kIGFsbCBpdHMgY2hpbGQgY29udHJvbHMgKGlmIGFueSkgYXMgdG91Y2hlZC4gKi9cclxuICBtYXJrQWxsQXNUb3VjaGVkOiAoKSA9PiB2b2lkO1xyXG4gIC8qKiBNYXJrcyB0aGUgY29udHJvbCBhcyBwcmlzdGluZSAobm90IHRvdWNoZWQpLiAqL1xyXG4gIG1hcmtBc1ByaXN0aW5lOiAoKSA9PiB2b2lkO1xyXG4gIC8qKiBNYXJrcyB0aGUgY29udHJvbCBhbmQgYWxsIGl0cyBjaGlsZCBjb250cm9scyAoaWYgYW55KSBhcyBwcmlzdGluZS4gKi9cclxuICBtYXJrQWxsQXNQcmlzdGluZTogKCkgPT4gdm9pZDtcclxuICAvKipcclxuICAgKiBSZXNldHMgdGhlIGNvbnRyb2wgdG8gYSBuZXcgdmFsdWUgYW5kIHNldHMgYSBuZXcgaW5pdGlhbCB2YWx1ZS4gVGhpcyBpcyBpbnRlbmRlZCBmb3JcclxuICAgKiBzY2VuYXJpb3Mgd2hlcmUgdGhlIHVuZGVybHlpbmcgZGF0YSBpcyB1cGRhdGVkIGV4dGVybmFsbHkgKGUuZy4sIGRhdGEgY29taW5nIGZyb21cclxuICAgKiB0aGUgc2VydmVyKS4gIElmIHRoZSBjb250cm9sIGlzIG5vdCBkaXJ0eSwgdGhlIHZhbHVlIGlzIHVwZGF0ZWQuIElmIHRoZSBjb250cm9sICppcypcclxuICAgKiBkaXJ0eSwgdGhlIHZhbHVlIGlzICpub3QqIHVwZGF0ZWQgKHByZXNlcnZpbmcgdXNlciBjaGFuZ2VzKS5cclxuICAgKi9cclxuICByZWNvbmNpbGU6IChuZXdWYWx1ZTogVCkgPT4gdm9pZDtcclxuICAvKipcclxuICAgKiBTaW1pbGFyIHRvIGByZWNvbmNpbGVgLCBidXQgZm9yY2VzIHRoZSB1cGRhdGUgZXZlbiBpZiB0aGUgY29udHJvbCBpcyBkaXJ0eS5cclxuICAgKi9cclxuICBmb3JjZVJlY29uY2lsZTogKG5ld1ZhbHVlOiBUKSA9PiB2b2lkO1xyXG4gIC8qKiBSZXNldHMgdGhlIGNvbnRyb2wncyB2YWx1ZSB0byBpdHMgaW5pdGlhbCB2YWx1ZS4gKi9cclxuICByZXNldDogKCkgPT4gdm9pZDtcclxuICAvKiogUmVzZXRzIHRoZSBjb250cm9sJ3MgdmFsdWUgYW5kIGluaXRpYWwgdmFsdWUuICovXHJcbiAgcmVzZXRXaXRoSW5pdGlhbDogKGluaXRpYWw6IFQpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogVGhlIGRlcml2YXRpb24gZnVuY3Rpb24gdXNlZCB0byBjcmVhdGUgdGhpcyBjb250cm9sIGlmIGl0J3MgcGFydCBvZiBhIGBmb3JtR3JvdXBgIG9yIGBmb3JtQXJyYXlgLlxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGZyb20/OiBEZXJpdmVkU2lnbmFsPFRQYXJlbnQsIFQ+Wydmcm9tJ107XHJcbiAgLyoqIFRoZSBlcXVhbGl0eSBmdW5jdGlvbiB1c2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBEZWZhdWx0cyB0byBgT2JqZWN0LmlzYC4gKi9cclxuICBlcXVhbDogKGE6IFQsIGI6IFQpID0+IGJvb2xlYW47XHJcbiAgLyoqIFRoZSB0eXBlIG9mIHRoZSBjb250cm9sICgnY29udHJvbCcsICdhcnJheScsIG9yICdncm91cCcpLiAqL1xyXG4gIGNvbnRyb2xUeXBlOiBUQ29udHJvbFR5cGU7XHJcbiAgLyoqXHJcbiAgICogQSBzaWduYWwgcmVwcmVzZW50aW5nIHRoZSBwYXJ0aWFsIHZhbHVlIG9mIHRoZSBjb250cm9sLCBzdWl0YWJsZSBmb3IgcGF0Y2hpbmcgZGF0YSBvbiBhIHNlcnZlci5cclxuICAgKiBJdCBjb250YWlucyB0aGUgY2hhbmdlZCB2YWx1ZSBpZiBgZGlydHlgIGlzIGB0cnVlYC5cclxuICAgKi9cclxuICBwYXJ0aWFsVmFsdWU6IFNpZ25hbDxUUGFydGlhbFZhbHVlPjtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIENyZWF0ZUZvcm1Db250cm9sT3B0aW9uczxcclxuICBULFxyXG4gIFRDb250cm9sVHlwZSBleHRlbmRzIENvbnRyb2xUeXBlID0gQ29udHJvbFR5cGUsXHJcbj4gPSBDcmVhdGVTaWduYWxPcHRpb25zPFQ+ICYge1xyXG4gIHZhbGlkYXRvcj86ICgpID0+ICh2YWx1ZTogVCkgPT4gc3RyaW5nO1xyXG4gIG9uVG91Y2hlZD86ICgpID0+IHZvaWQ7XHJcbiAgZGlzYWJsZT86ICgpID0+IGJvb2xlYW47XHJcbiAgcmVhZG9ubHk/OiAoKSA9PiBib29sZWFuO1xyXG4gIHJlcXVpcmVkPzogKCkgPT4gYm9vbGVhbjtcclxuICBsYWJlbD86ICgpID0+IHN0cmluZztcclxuICBpZD86ICgpID0+IHN0cmluZztcclxuICBoaW50PzogKCkgPT4gc3RyaW5nO1xyXG4gIGRpcnR5RXF1YWxpdHk/OiBWYWx1ZUVxdWFsaXR5Rm48VD47XHJcbiAgb25SZXNldD86ICgpID0+IHZvaWQ7XHJcbiAgY29udHJvbFR5cGU/OiBUQ29udHJvbFR5cGU7XHJcbiAgb3ZlcnJpZGVWYWxpZGF0aW9uPzogKCkgPT4gc3RyaW5nO1xyXG4gIHBlbmRpbmc/OiAoKSA9PiBib29sZWFuO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBgRm9ybUNvbnRyb2xTaWduYWxgLCBhIHJlYWN0aXZlIGZvcm0gY29udHJvbCB0aGF0IGhvbGRzIGEgdmFsdWUgYW5kIHRyYWNrcyBpdHNcclxuICogdmFsaWRpdHksIGRpcnR5IHN0YXRlLCB0b3VjaGVkIHN0YXRlLCBhbmQgb3RoZXIgbWV0YWRhdGEuXHJcbiAqXHJcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBmb3JtIGNvbnRyb2wncyB2YWx1ZS5cclxuICogQHR5cGVQYXJhbSBUUGFyZW50IC0gVGhlIHR5cGUgb2YgdGhlIHBhcmVudCBmb3JtIGNvbnRyb2wncyB2YWx1ZSAoaWYgdGhpcyBjb250cm9sIGlzIHBhcnQgb2YgYSBncm91cCBvciBhcnJheSkuXHJcbiAqIEB0eXBlUGFyYW0gVENvbnRyb2xUeXBlIC0gVGhlIHR5cGUgb2YgdGhlIGNvbnRyb2wuIERlZmF1bHRzIHRvIGAnY29udHJvbCdgLlxyXG4gKiBAdHlwZVBhcmFtIFRQYXJ0aWFsVmFsdWUgLSBUaGUgdHlwZSBvZiB2YWx1ZSB3aGVuIHBhdGNoaW5nXHJcbiAqIEBwYXJhbSBpbml0aWFsIC0gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGNvbnRyb2wsIG9yIGEgYERlcml2ZWRTaWduYWxgIGlmIHRoaXMgY29udHJvbCBpcyBwYXJ0IG9mIGEgYGZvcm1Hcm91cGAgb3IgYGZvcm1BcnJheWAuXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgY29udHJvbC5cclxuICogQHJldHVybnMgQSBgRm9ybUNvbnRyb2xTaWduYWxgIGluc3RhbmNlLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAvLyBDcmVhdGUgYSBzaW1wbGUgZm9ybSBjb250cm9sOlxyXG4gKiBjb25zdCBuYW1lID0gZm9ybUNvbnRyb2woJ0luaXRpYWwgTmFtZScpO1xyXG4gKlxyXG4gKiAvLyBDcmVhdGUgYSBmb3JtIGNvbnRyb2wgd2l0aCB2YWxpZGF0aW9uOlxyXG4gKiBjb25zdCBhZ2UgPSBmb3JtQ29udHJvbCgwLCB7XHJcbiAqICAgdmFsaWRhdG9yOiAoKSA9PiAodmFsdWUpID0+IHZhbHVlID49IDE4ID8gJycgOiAnTXVzdCBiZSBhdCBsZWFzdCAxOCcsXHJcbiAqIH0pO1xyXG4gKlxyXG4gKiAvLyBDcmVhdGUgYSBkZXJpdmVkIGZvcm0gY29udHJvbCAoZXF1aXZhbGVudCB0byB0aGUgYWJvdmUsIGJ1dCBtb3JlIGV4cGxpY2l0KTpcclxuICogIGNvbnN0IHVzZXIgPSBzaWduYWwoeyBuYW1lOiAnSm9obiBEb2UnLCBhZ2U6IDMwIH0pO1xyXG4gKiAgY29uc3QgbmFtZSA9IGZvcm1Db250cm9sKGRlcml2ZWQodXNlciwge1xyXG4gKiAgICBmcm9tOiAodSkgPT4gdS5uYW1lLFxyXG4gKiAgICBvbkNoYW5nZTogKG5ld05hbWUpID0+IHVzZXIudXBkYXRlKHUgPT4gKHsuLi51LCBuYW1lOiBuZXdOYW1lfSkpXHJcbiAqICB9KSk7XHJcbiAqXHJcbiAqIC8vIENyZWF0ZSBhIGZvcm0gZ3JvdXAgd2l0aCBuZXN0ZWQgY29udHJvbHM6XHJcbiAqIGNvbnN0IHVzZXIgPSBzaWduYWwoeyBuYW1lOiAnSm9obiBEb2UnLCBhZ2U6IDMwIH0pO1xyXG4gKiBjb25zdCBmb3JtID0gZm9ybUdyb3VwKHVzZXIsIHtcclxuICogIG5hbWU6IGZvcm1Db250cm9sKGRlcml2ZWQodXNlciwgJ25hbWUnKSksXHJcbiAqICBhZ2U6IGZvcm1Db250cm9sKGRlcml2ZWQodXNlciwgJ2FnZScpKSxcclxuICogfSlcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JtQ29udHJvbDxcclxuICBULFxyXG4gIFRQYXJlbnQgPSB1bmRlZmluZWQsXHJcbiAgVENvbnRyb2xUeXBlIGV4dGVuZHMgQ29udHJvbFR5cGUgPSAnY29udHJvbCcsXHJcbiAgVFBhcnRpYWxWYWx1ZSA9IFQgfCB1bmRlZmluZWQsXHJcbj4oXHJcbiAgaW5pdGlhbDogRGVyaXZlZFNpZ25hbDxUUGFyZW50LCBUPiB8IFQsXHJcbiAgb3B0PzogQ3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zPFQsIFRDb250cm9sVHlwZT4sXHJcbik6IEZvcm1Db250cm9sU2lnbmFsPFQsIFRQYXJlbnQsIFRDb250cm9sVHlwZSwgVFBhcnRpYWxWYWx1ZT4ge1xyXG4gIGNvbnN0IHZhbHVlID0gaXNTaWduYWwoaW5pdGlhbCkgPyBpbml0aWFsIDogc2lnbmFsKGluaXRpYWwsIG9wdCk7XHJcbiAgY29uc3QgaW5pdGlhbFZhbHVlID0gc2lnbmFsKHVudHJhY2tlZCh2YWx1ZSkpO1xyXG4gIGNvbnN0IGVxID0gb3B0Py5lcXVhbCA/PyBPYmplY3QuaXM7XHJcblxyXG4gIGNvbnN0IGRpcnR5RXEgPSBvcHQ/LmRpcnR5RXF1YWxpdHkgPz8gZXE7XHJcblxyXG4gIGNvbnN0IGRpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gb3B0Py5kaXNhYmxlPy4oKSA/PyBmYWxzZSk7XHJcbiAgY29uc3QgcmVhZG9ubHkgPSBjb21wdXRlZCgoKSA9PiBvcHQ/LnJlYWRvbmx5Py4oKSA/PyBmYWxzZSk7XHJcblxyXG4gIGNvbnN0IGRpcnR5ID0gY29tcHV0ZWQoKCkgPT4gIWRpcnR5RXEodmFsdWUoKSwgaW5pdGlhbFZhbHVlKCkpKTtcclxuXHJcbiAgY29uc3QgdG91Y2hlZCA9IHNpZ25hbChmYWxzZSk7XHJcblxyXG4gIGNvbnN0IHZhbGlkYXRvciA9IGNvbXB1dGVkKCgpID0+IG9wdD8udmFsaWRhdG9yPy4oKSA/PyAoKCkgPT4gJycpKTtcclxuXHJcbiAgY29uc3QgZXJyb3IgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAob3B0Py5vdmVycmlkZVZhbGlkYXRpb24pIHJldHVybiBvcHQub3ZlcnJpZGVWYWxpZGF0aW9uKCk7XHJcbiAgICBpZiAoZGlzYWJsZWQoKSB8fCByZWFkb25seSgpKSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gdmFsaWRhdG9yKCkodmFsdWUoKSk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IG1hcmtBc1RvdWNoZWQgPSAoKSA9PiB7XHJcbiAgICB0b3VjaGVkLnNldCh0cnVlKTtcclxuICAgIG9wdD8ub25Ub3VjaGVkPy4oKTtcclxuICB9O1xyXG4gIGNvbnN0IG1hcmtBbGxBc1RvdWNoZWQgPSBtYXJrQXNUb3VjaGVkO1xyXG5cclxuICBjb25zdCBtYXJrQXNQcmlzdGluZSA9ICgpID0+IHRvdWNoZWQuc2V0KGZhbHNlKTtcclxuICBjb25zdCBtYXJrQWxsQXNQcmlzdGluZSA9IG1hcmtBc1ByaXN0aW5lO1xyXG5cclxuICBjb25zdCBsYWJlbCA9IGNvbXB1dGVkKCgpID0+IG9wdD8ubGFiZWw/LigpID8/ICcnKTtcclxuXHJcbiAgY29uc3QgcGFydGlhbFZhbHVlID0gY29tcHV0ZWQoKCkgPT4gKGRpcnR5KCkgPyB2YWx1ZSgpIDogdW5kZWZpbmVkKSk7XHJcblxyXG4gIGNvbnN0IGludGVybmFsUmVjb25jaWxlID0gKG5ld1ZhbHVlOiBULCBmb3JjZSA9IGZhbHNlKSA9PiB7XHJcbiAgICBjb25zdCBpc0RpcnR5ID0gdW50cmFja2VkKGRpcnR5KTtcclxuXHJcbiAgICBpZiAoIWlzRGlydHkgfHwgZm9yY2UpIHtcclxuICAgICAgLy8gdmVyeSBkYW5nZXJvdXMgdXNlIG9mIHVudHJhY2tlZCBoZXJlLCBkb24ndCBkbyB0aGlzIGV2ZXJ5d2hlcmUgOilcclxuICAgICAgLy8gdGhhbmtzIHRvICB1L3N5bmFseCBmb3IgdGhlIGlkZWEgdG8gdXNlIHVudHJhY2tlZCBoZXJlXHJcblxyXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxWYWx1ZS5zZXQobmV3VmFsdWUpO1xyXG4gICAgICAgIHZhbHVlLnNldChuZXdWYWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IHBlbmRpbmcgPSBjb21wdXRlZCgoKSA9PiBvcHQ/LnBlbmRpbmc/LigpID8/IGZhbHNlKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGlkOiBvcHQ/LmlkPy4oKSA/PyB2NygpLFxyXG4gICAgdmFsdWUsXHJcbiAgICBkaXJ0eSxcclxuICAgIHRvdWNoZWQsXHJcbiAgICBlcnJvcixcclxuICAgIGxhYmVsLFxyXG4gICAgcmVxdWlyZWQ6IGNvbXB1dGVkKCgpID0+IG9wdD8ucmVxdWlyZWQ/LigpID8/IGZhbHNlKSxcclxuICAgIGRpc2FibGVkLFxyXG4gICAgcmVhZG9ubHksXHJcbiAgICBwZW5kaW5nLFxyXG4gICAgdmFsaWQ6IGNvbXB1dGVkKCgpID0+ICFwZW5kaW5nKCkgJiYgIWVycm9yKCkpLFxyXG4gICAgaGludDogY29tcHV0ZWQoKCkgPT4gb3B0Py5oaW50Py4oKSA/PyAnJyksXHJcbiAgICBtYXJrQXNUb3VjaGVkLFxyXG4gICAgbWFya0FsbEFzVG91Y2hlZCxcclxuICAgIG1hcmtBc1ByaXN0aW5lLFxyXG4gICAgbWFya0FsbEFzUHJpc3RpbmUsXHJcbiAgICBmcm9tOiAoaXNTaWduYWwoaW5pdGlhbCkgPyBpbml0aWFsLmZyb20gOiB1bmRlZmluZWQpIGFzIEZvcm1Db250cm9sU2lnbmFsPFxyXG4gICAgICBULFxyXG4gICAgICBUUGFyZW50LFxyXG4gICAgICBUQ29udHJvbFR5cGVcclxuICAgID5bJ2Zyb20nXSxcclxuICAgIHJlY29uY2lsZTogKG5ld1ZhbHVlOiBUKSA9PiBpbnRlcm5hbFJlY29uY2lsZShuZXdWYWx1ZSksXHJcbiAgICBmb3JjZVJlY29uY2lsZTogKG5ld1ZhbHVlOiBUKSA9PiBpbnRlcm5hbFJlY29uY2lsZShuZXdWYWx1ZSwgdHJ1ZSksXHJcbiAgICByZXNldDogKCkgPT4ge1xyXG4gICAgICBvcHQ/Lm9uUmVzZXQ/LigpO1xyXG4gICAgICB2YWx1ZS5zZXQodW50cmFja2VkKGluaXRpYWxWYWx1ZSkpO1xyXG4gICAgfSxcclxuICAgIHJlc2V0V2l0aEluaXRpYWw6IChpbml0aWFsOiBUKSA9PiB7XHJcbiAgICAgIG9wdD8ub25SZXNldD8uKCk7XHJcbiAgICAgIGluaXRpYWxWYWx1ZS5zZXQoaW5pdGlhbCk7XHJcbiAgICAgIHZhbHVlLnNldChpbml0aWFsKTtcclxuICAgIH0sXHJcbiAgICBlcXVhbDogZXEsXHJcbiAgICBjb250cm9sVHlwZTogKG9wdD8uY29udHJvbFR5cGUgPz8gJ2NvbnRyb2wnKSBhcyBUQ29udHJvbFR5cGUsXHJcbiAgICBwYXJ0aWFsVmFsdWU6IHBhcnRpYWxWYWx1ZSBhcyBTaWduYWw8VFBhcnRpYWxWYWx1ZT4sXHJcbiAgfTtcclxufVxyXG4iXX0=","import { computed, linkedSignal, untracked, } from '@angular/core';\nimport { mergeArray } from '@mmstack/object';\nimport { derived } from '@mmstack/primitives';\nimport { formControl, } from './form-control';\nfunction createReconcileChildren(factory, opt) {\n return (length, source, prev) => {\n if (!prev) {\n const nextControls = [];\n for (let i = 0; i < length; i++) {\n nextControls.push(factory(derived(source, i, { equal: opt?.equal }), i));\n }\n return nextControls;\n }\n if (length === prev.length)\n return prev;\n const next = [...prev];\n if (length < prev.length) {\n next.splice(length);\n }\n else if (length > prev.length) {\n for (let i = prev.length; i < length; i++) {\n next.push(factory(derived(source, i, { equal: opt?.equal }), i));\n }\n }\n return next;\n };\n}\nexport function formArray(initial, factory, opt) {\n const eq = opt?.equal ?? Object.is;\n const arrayEqual = (a, b) => {\n if (a.length !== b.length)\n return false;\n if (!a.length)\n return true;\n return a.every((v, i) => eq(v, b[i]));\n };\n const min = computed(() => opt?.min?.() ?? 0);\n const max = computed(() => opt?.max?.() ?? Number.MAX_SAFE_INTEGER);\n const arrayOptions = {\n ...opt,\n equal: arrayEqual,\n dirtyEquality: (a, b) => a.length === b.length,\n controlType: 'array',\n };\n const ctrl = formControl(initial, arrayOptions);\n const length = computed(() => ctrl.value().length);\n const reconcileChildren = createReconcileChildren(factory, { equal: eq });\n // linkedSignal used to re-use previous value so that only length changes are affected and existing controls are kept, but updated\n const children = linkedSignal({\n source: () => length(),\n computation: (len, prev) => reconcileChildren(len, ctrl.value, prev?.value),\n });\n const ownError = computed(() => ctrl.error());\n const error = computed(() => {\n const own = ownError();\n if (own)\n return own;\n if (!children().length)\n return '';\n return children()\n .map((c, idx) => (c.error() ? `${idx}: ${c.error()}` : ''))\n .filter(Boolean)\n .join('\\n');\n });\n const dirty = computed(() => {\n if (ctrl.dirty())\n return true;\n if (!children().length)\n return false;\n return children().some((c) => c.dirty());\n });\n const markAllAsTouched = () => {\n ctrl.markAllAsTouched();\n for (const c of untracked(children)) {\n c.markAllAsTouched();\n }\n };\n const markAllAsPristine = () => {\n ctrl.markAllAsPristine();\n for (const c of untracked(children)) {\n c.markAllAsPristine();\n }\n };\n const toPartialValue = opt?.toPartialValue ?? ((v) => v);\n const partialValue = computed(() => {\n if (!dirty())\n return undefined;\n return children().map((c) => {\n const pv = c.partialValue();\n if (pv)\n return pv;\n if (c.controlType === 'control')\n return undefined;\n // return full value for child objects/arrays as this cannot be partially patched without idx\n return toPartialValue(c.value());\n });\n });\n const touched = computed(() => ctrl.touched() ||\n !!(children().length && children().some((c) => c.touched())));\n const reconcile = (newValue) => {\n const ctrls = untracked(children);\n for (let i = 0; i < newValue.length; i++) {\n ctrls.at(i)?.reconcile(newValue[i]); // reconcile existing controls that are relevant addition/removal will be handled after ctrl.reconcile through linkedSignal\n }\n ctrl.reconcile(mergeArray(newValue, untracked(ctrl.value)));\n };\n const forceReconcile = (newValue) => {\n const ctrls = untracked(children);\n for (let i = 0; i < newValue.length; i++) {\n ctrls.at(i)?.forceReconcile(newValue[i]);\n }\n ctrl.forceReconcile(newValue);\n };\n const childrenValid = computed(() => {\n if (!children().length)\n return true;\n return children().every((d) => d.valid());\n });\n const childrenPending = computed(() => !!children().length && children().some((d) => d.pending()));\n return {\n ...ctrl,\n ownError,\n error,\n valid: computed(() => ctrl.valid() && childrenValid()),\n pending: computed(() => ctrl.pending() || childrenPending()),\n touched,\n children,\n dirty,\n markAllAsTouched,\n markAllAsPristine,\n min,\n max,\n partialValue,\n canAdd: computed(() => !ctrl.disabled() && !ctrl.readonly() && length() < max()),\n canRemove: computed(() => !ctrl.disabled() && !ctrl.readonly() && length() > min()),\n reconcile,\n forceReconcile,\n reset: () => {\n for (const c of untracked(children)) {\n c.reset();\n }\n ctrl.reset();\n },\n resetWithInitial: (initial) => {\n const ctrls = untracked(children);\n for (let i = 0; i < initial.length; i++) {\n ctrls.at(i)?.resetWithInitial(initial[i]);\n }\n ctrl.resetWithInitial(initial);\n },\n push: (next) => ctrl.value.update((cur) => [...cur, next]),\n remove: (idx) => ctrl.value.update((cur) => cur.filter((_, i) => i !== idx)),\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hcnJheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm0vY29yZS9zcmMvbGliL2Zvcm0tYXJyYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixZQUFZLEVBQ1osU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBQ2xFLE9BQU8sRUFDTCxXQUFXLEdBR1osTUFBTSxnQkFBZ0IsQ0FBQztBQXlDeEIsU0FBUyx1QkFBdUIsQ0FJOUIsT0FBc0UsRUFDdEUsR0FBdUM7SUFFdkMsT0FBTyxDQUNMLE1BQWMsRUFDZCxNQUEyQixFQUMzQixJQUF5QixFQUNMLEVBQUU7UUFDdEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBRXhCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDaEMsWUFBWSxDQUFDLElBQUksQ0FDZixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3RELENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFeEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBRXZCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6QixJ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RUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUQsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztLQUM5RCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgbGlua2VkU2lnbmFsLFxyXG4gIHVudHJhY2tlZCxcclxuICB0eXBlIFNpZ25hbCxcclxuICB0eXBlIFdyaXRhYmxlU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtZXJnZUFycmF5IH0gZnJvbSAnQG1tc3RhY2svb2JqZWN0JztcclxuaW1wb3J0IHsgZGVyaXZlZCwgdHlwZSBEZXJpdmVkU2lnbmFsIH0gZnJvbSAnQG1tc3RhY2svcHJpbWl0aXZlcyc7XHJcbmltcG9ydCB7XHJcbiAgZm9ybUNvbnRyb2wsXHJcbiAgdHlwZSBDcmVhdGVGb3JtQ29udHJvbE9wdGlvbnMsXHJcbiAgdHlwZSBGb3JtQ29udHJvbFNpZ25hbCxcclxufSBmcm9tICcuL2Zvcm0tY29udHJvbCc7XHJcbmltcG9ydCB7IHR5cGUgU2lnbmFsVmFsdWUgfSBmcm9tICcuL3NpZ25hbC12YWx1ZS50eXBlJztcclxuXHJcbmV4cG9ydCB0eXBlIEZvcm1BcnJheVNpZ25hbDxcclxuICBULFxyXG4gIFRJbmRpdmlkdWFsU3RhdGUgZXh0ZW5kcyBGb3JtQ29udHJvbFNpZ25hbDxcclxuICAgIFQsXHJcbiAgICBhbnksXHJcbiAgICBhbnksXHJcbiAgICBhbnlcclxuICA+ID0gRm9ybUNvbnRyb2xTaWduYWw8VCwgYW55LCBhbnksIGFueT4sXHJcbiAgVFBhcmVudCA9IHVuZGVmaW5lZCxcclxuPiA9IEZvcm1Db250cm9sU2lnbmFsPFxyXG4gIFRbXSxcclxuICBUUGFyZW50LFxyXG4gICdhcnJheScsXHJcbiAgfCBFeGNsdWRlPFNpZ25hbFZhbHVlPFRJbmRpdmlkdWFsU3RhdGVbJ3BhcnRpYWxWYWx1ZSddPiwgbnVsbCB8IHVuZGVmaW5lZD5bXVxyXG4gIHwgdW5kZWZpbmVkXHJcbj4gJiB7XHJcbiAgb3duRXJyb3I6IFNpZ25hbDxzdHJpbmc+O1xyXG4gIGNoaWxkcmVuOiBTaWduYWw8VEluZGl2aWR1YWxTdGF0ZVtdPjtcclxuICBwdXNoOiAodmFsdWU6IFQpID0+IHZvaWQ7IC8vIGFkZCBuZXcgY29udHJvbCB3aXRoIHZhbHVlXHJcbiAgcmVtb3ZlOiAoaW5kZXg6IG51bWJlcikgPT4gdm9pZDsgLy8gcmVtb3ZlIGF0IGluZGV4XHJcbiAgbWluOiBTaWduYWw8bnVtYmVyPjsgLy8gZm9yIGRpc3BsYXkgcHVycG9zZXNcclxuICBtYXg6IFNpZ25hbDxudW1iZXI+OyAvLyBmb3IgZGlzcGxheSBwdXJwb3Nlc1xyXG4gIGNhbkFkZDogU2lnbmFsPGJvb2xlYW4+OyAvLyBkaXNhYmxlIGFkZCBidXR0b24gaWYgZmFsc2VcclxuICBjYW5SZW1vdmU6IFNpZ25hbDxib29sZWFuPjsgLy8gZGlzYWJsZSByZW1vdmUgYnV0dG9ucyBpZiBmYWxzZVxyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgQ3JlYXRlRm9ybUFycmF5U2lnbmFsT3B0aW9uczxcclxuICBULFxyXG4gIFRJbmRpdmlkdWFsU3RhdGUgZXh0ZW5kcyBGb3JtQ29udHJvbFNpZ25hbDxULCBhbnksIGFueSwgYW55PixcclxuPiA9IE9taXQ8Q3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zPFRbXT4sICdlcXVhbCc+ICYge1xyXG4gIG1pbj86ICgpID0+IG51bWJlcjtcclxuICBtYXg/OiAoKSA9PiBudW1iZXI7XHJcbiAgZXF1YWw/OiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbjtcclxuICB0b1BhcnRpYWxWYWx1ZT86IChcclxuICAgIHY6IFQsXHJcbiAgKSA9PiBFeGNsdWRlPFNpZ25hbFZhbHVlPFRJbmRpdmlkdWFsU3RhdGVbJ3BhcnRpYWxWYWx1ZSddPiwgbnVsbCB8IHVuZGVmaW5lZD47XHJcbn07XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVSZWNvbmNpbGVDaGlsZHJlbjxcclxuICBULFxyXG4gIFRJbmRpdmlkdWFsU3RhdGUgZXh0ZW5kcyBGb3JtQ29udHJvbFNpZ25hbDxULCBhbnksIGFueSwgYW55PixcclxuPihcclxuICBmYWN0b3J5OiAodmFsOiBEZXJpdmVkU2lnbmFsPFRbXSwgVD4sIGlkeDogbnVtYmVyKSA9PiBUSW5kaXZpZHVhbFN0YXRlLFxyXG4gIG9wdDogeyBlcXVhbDogKGE6IFQsIGI6IFQpID0+IGJvb2xlYW4gfSxcclxuKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIGxlbmd0aDogbnVtYmVyLFxyXG4gICAgc291cmNlOiBXcml0YWJsZVNpZ25hbDxUW10+LFxyXG4gICAgcHJldj86IFRJbmRpdmlkdWFsU3RhdGVbXSxcclxuICApOiBUSW5kaXZpZHVhbFN0YXRlW10gPT4ge1xyXG4gICAgaWYgKCFwcmV2KSB7XHJcbiAgICAgIGNvbnN0IG5leHRDb250cm9scyA9IFtdO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG5leHRDb250cm9scy5wdXNoKFxyXG4gICAgICAgICAgZmFjdG9yeShkZXJpdmVkKHNvdXJjZSwgaSwgeyBlcXVhbDogb3B0Py5lcXVhbCB9KSwgaSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG5leHRDb250cm9scztcclxuICAgIH1cclxuXHJcbiAgICBpZiAobGVuZ3RoID09PSBwcmV2Lmxlbmd0aCkgcmV0dXJuIHByZXY7XHJcblxyXG4gICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2XTtcclxuXHJcbiAgICBpZiAobGVuZ3RoIDwgcHJldi5sZW5ndGgpIHtcclxuICAgICAgbmV4dC5zcGxpY2UobGVuZ3RoKTtcclxuICAgIH0gZWxzZSBpZiAobGVuZ3RoID4gcHJldi5sZW5ndGgpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IHByZXYubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBuZXh0LnB1c2goZmFjdG9yeShkZXJpdmVkKHNvdXJjZSwgaSwgeyBlcXVhbDogb3B0Py5lcXVhbCB9KSwgaSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5leHQ7XHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1BcnJheTxcclxuICBULFxyXG4gIFRJbmRpdmlkdWFsU3RhdGUgZXh0ZW5kcyBGb3JtQ29udHJvbFNpZ25hbDxcclxuICAgIFQsXHJcbiAgICBhbnksXHJcbiAgICBhbnksXHJcbiAgICBhbnlcclxuICA+ID0gRm9ybUNvbnRyb2xTaWduYWw8VCwgYW55LCBhbnksIGFueT4sXHJcbiAgVFBhcmVudCA9IHVuZGVmaW5lZCxcclxuPihcclxuICBpbml0aWFsOiBUW10gfCBEZXJpdmVkU2lnbmFsPFRQYXJlbnQsIFRbXT4sXHJcbiAgZmFjdG9yeTogKHZhbDogRGVyaXZlZFNpZ25hbDxUW10sIFQ+LCBpZHg6IG51bWJlcikgPT4gVEluZGl2aWR1YWxTdGF0ZSxcclxuICBvcHQ/OiBDcmVhdGVGb3JtQXJyYXlTaWduYWxPcHRpb25zPFQsIFRJbmRpdmlkdWFsU3RhdGU+LFxyXG4pOiBGb3JtQXJyYXlTaWduYWw8VCwgVEluZGl2aWR1YWxTdGF0ZSwgVFBhcmVudD4ge1xyXG4gIGNvbnN0IGVxID0gb3B0Py5lcXVhbCA/PyBPYmplY3QuaXM7XHJcblxyXG4gIGNvbnN0IGFycmF5RXF1YWwgPSAoYTogVFtdLCBiOiBUW10pID0+IHtcclxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICghYS5sZW5ndGgpIHJldHVybiB0cnVlO1xyXG5cclxuICAgIHJldHVybiBhLmV2ZXJ5KCh2LCBpKSA9PiBlcSh2LCBiW2ldKSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgbWluID0gY29tcHV0ZWQoKCkgPT4gb3B0Py5taW4/LigpID8/IDApO1xyXG4gIGNvbnN0IG1heCA9IGNvbXB1dGVkKCgpID0+IG9wdD8ubWF4Py4oKSA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XHJcblxyXG4gIGNvbnN0IGFycmF5T3B0aW9uczogQ3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zPFRbXSwgJ2FycmF5Jz4gPSB7XHJcbiAgICAuLi5vcHQsXHJcbiAgICBlcXVhbDogYXJyYXlFcXVhbCxcclxuICAgIGRpcnR5RXF1YWxpdHk6IChhLCBiKSA9PiBhLmxlbmd0aCA9PT0gYi5sZW5ndGgsXHJcbiAgICBjb250cm9sVHlwZTogJ2FycmF5JyxcclxuICB9O1xyXG5cclxuICBjb25zdCBjdHJsID0gZm9ybUNvbnRyb2w8VFtdLCBUUGFyZW50LCAnYXJyYXknPihcclxuICAgIGluaXRpYWwsXHJcbiAgICBhcnJheU9wdGlvbnMsXHJcbiAgKSBzYXRpc2ZpZXMgRm9ybUNvbnRyb2xTaWduYWw8VFtdLCBUUGFyZW50LCAnYXJyYXknPjtcclxuXHJcbiAgY29uc3QgbGVuZ3RoID0gY29tcHV0ZWQoKCkgPT4gY3RybC52YWx1ZSgpLmxlbmd0aCk7XHJcblxyXG4gIGNvbnN0IHJlY29uY2lsZUNoaWxkcmVuID0gY3JlYXRlUmVjb25jaWxlQ2hpbGRyZW48VCwgVEluZGl2aWR1YWxTdGF0ZT4oXHJcbiAgICBmYWN0b3J5LFxyXG4gICAgeyBlcXVhbDogZXEgfSxcclxuICApO1xyXG5cclxuICAvLyBsaW5rZWRTaWduYWwgdXNlZCB0byByZS11c2UgcHJldmlvdXMgdmFsdWUgc28gdGhhdCBvbmx5IGxlbmd0aCBjaGFuZ2VzIGFyZSBhZmZlY3RlZCBhbmQgZXhpc3RpbmcgY29udHJvbHMgYXJlIGtlcHQsIGJ1dCB1cGRhdGVkXHJcbiAgY29uc3QgY2hpbGRyZW4gPSBsaW5rZWRTaWduYWw8bnVtYmVyLCBUSW5kaXZpZHVhbFN0YXRlW10+KHtcclxuICAgIHNvdXJjZTogKCkgPT4gbGVuZ3RoKCksXHJcbiAgICBjb21wdXRhdGlvbjogKGxlbiwgcHJldikgPT4gcmVjb25jaWxlQ2hpbGRyZW4obGVuLCBjdHJsLnZhbHVlLCBwcmV2Py52YWx1ZSksXHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IG93bkVycm9yID0gY29tcHV0ZWQoKCkgPT4gY3RybC5lcnJvcigpKTtcclxuXHJcbiAgY29uc3QgZXJyb3IgPSBjb21wdXRlZCgoKTogc3RyaW5nID0+IHtcclxuICAgIGNvbnN0IG93biA9IG93bkVycm9yKCk7XHJcbiAgICBpZiAob3duKSByZXR1cm4gb3duO1xyXG4gICAgaWYgKCFjaGlsZHJlbigpLmxlbmd0aCkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIGNoaWxkcmVuKClcclxuICAgICAgLm1hcCgoYywgaWR4KSA9PiAoYy5lcnJvcigpID8gYCR7aWR4fTogJHtjLmVycm9yKCl9YCA6ICcnKSlcclxuICAgICAgLmZpbHRlcihCb29sZWFuKVxyXG4gICAgICAuam9pbignXFxuJyk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGRpcnR5ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKGN0cmwuZGlydHkoKSkgcmV0dXJuIHRydWU7XHJcbiAgICBpZiAoIWNoaWxkcmVuKCkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gY2hpbGRyZW4oKS5zb21lKChjKSA9PiBjLmRpcnR5KCkpO1xyXG4gIH0pO1xyXG5cclxuICBjb25zdCBtYXJrQWxsQXNUb3VjaGVkID0gKCkgPT4ge1xyXG4gICAgY3RybC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICBmb3IgKGNvbnN0IGMgb2YgdW50cmFja2VkKGNoaWxkcmVuKSkge1xyXG4gICAgICBjLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgIH1cclxuICB9O1xyXG4gIGNvbnN0IG1hcmtBbGxBc1ByaXN0aW5lID0gKCkgPT4ge1xyXG4gICAgY3RybC5tYXJrQWxsQXNQcmlzdGluZSgpO1xyXG4gICAgZm9yIChjb25zdCBjIG9mIHVudHJhY2tlZChjaGlsZHJlbikpIHtcclxuICAgICAgYy5tYXJrQWxsQXNQcmlzdGluZSgpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IHRvUGFydGlhbFZhbHVlID0gb3B0Py50b1BhcnRpYWxWYWx1ZSA/PyAoKHY6IFQpID0+IHYpO1xyXG4gIGNvbnN0IHBhcnRpYWxWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICghZGlydHkoKSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIHJldHVybiBjaGlsZHJlbigpLm1hcCgoYykgPT4ge1xyXG4gICAgICBjb25zdCBwdiA9IGMucGFydGlhbFZhbHVlKCk7XHJcbiAgICAgIGlmIChwdikgcmV0dXJuIHB2O1xyXG4gICAgICBpZiAoYy5jb250cm9sVHlwZSA9PT0gJ2NvbnRyb2wnKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgLy8gcmV0dXJuIGZ1bGwgdmFsdWUgZm9yICBjaGlsZCBvYmplY3RzL2FycmF5cyBhcyB0aGlzIGNhbm5vdCBiZSBwYXJ0aWFsbHkgcGF0Y2hlZCB3aXRob3V0IGlkeFxyXG4gICAgICByZXR1cm4gdG9QYXJ0aWFsVmFsdWUoYy52YWx1ZSgpKTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG5cclxuICBjb25zdCB0b3VjaGVkID0gY29tcHV0ZWQoXHJcbiAgICAoKSA9PlxyXG4gICAgICBjdHJsLnRvdWNoZWQoKSB8fFxyXG4gICAgICAhIShjaGlsZHJlbigpLmxlbmd0aCAmJiBjaGlsZHJlbigpLnNvbWUoKGMpID0+IGMudG91Y2hlZCgpKSksXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgcmVjb25jaWxlID0gKG5ld1ZhbHVlOiBUW10pID0+IHtcclxuICAgIGNvbnN0IGN0cmxzID0gdW50cmFja2VkKGNoaWxkcmVuKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1ZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGN0cmxzLmF0KGkpPy5yZWNvbmNpbGUobmV3VmFsdWVbaV0pOyAvLyByZWNvbmNpbGUgZXhpc3RpbmcgY29udHJvbHMgdGhhdCBhcmUgcmVsZXZhbnQgYWRkaXRpb24vcmVtb3ZhbCB3aWxsIGJlIGhhbmRsZWQgYWZ0ZXIgY3RybC5yZWNvbmNpbGUgdGhyb3VnaCBsaW5rZWRTaWduYWxcclxuICAgIH1cclxuXHJcbiAgICBjdHJsLnJlY29uY2lsZShtZXJnZUFycmF5KG5ld1ZhbHVlLCB1bnRyYWNrZWQoY3RybC52YWx1ZSkpKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBmb3JjZVJlY29uY2lsZSA9IChuZXdWYWx1ZTogVFtdKSA9PiB7XHJcbiAgICBjb25zdCBjdHJscyA9IHVudHJhY2tlZChjaGlsZHJlbik7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdWYWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjdHJscy5hdChpKT8uZm9yY2VSZWNvbmNpbGUobmV3VmFsdWVbaV0pO1xyXG4gICAgfVxyXG5cclxuICAgIGN0cmwuZm9yY2VSZWNvbmNpbGUobmV3VmFsdWUpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGNoaWxkcmVuVmFsaWQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAoIWNoaWxkcmVuKCkubGVuZ3RoKSByZXR1cm4gdHJ1ZTtcclxuICAgIHJldHVybiBjaGlsZHJlbigpLmV2ZXJ5KChkKSA9PiBkLnZhbGlkKCkpO1xyXG4gIH0pO1xyXG5cclxuICBjb25zdCBjaGlsZHJlblBlbmRpbmcgPSBjb21wdXRlZChcclxuICAgICgpID0+ICEhY2hpbGRyZW4oKS5sZW5ndGggJiYgY2hpbGRyZW4oKS5zb21lKChkKSA9PiBkLnBlbmRpbmcoKSksXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLmN0cmwsXHJcbiAgICBvd25FcnJvcixcclxuICAgIGVycm9yLFxyXG4gICAgdmFsaWQ6IGNvbXB1dGVkKCgpID0+IGN0cmwudmFsaWQoKSAmJiBjaGlsZHJlblZhbGlkKCkpLFxyXG4gICAgcGVuZGluZzogY29tcHV0ZWQoKCkgPT4gY3RybC5wZW5kaW5nKCkgfHwgY2hpbGRyZW5QZW5kaW5nKCkpLFxyXG4gICAgdG91Y2hlZCxcclxuICAgIGNoaWxkcmVuLFxyXG4gICAgZGlydHksXHJcbiAgICBtYXJrQWxsQXNUb3VjaGVkLFxyXG4gICAgbWFya0FsbEFzUHJpc3RpbmUsXHJcbiAgICBtaW4sXHJcbiAgICBtYXgsXHJcbiAgICBwYXJ0aWFsVmFsdWUsXHJcbiAgICBjYW5BZGQ6IGNvbXB1dGVkKFxyXG4gICAgICAoKSA9PiAhY3RybC5kaXNhYmxlZCgpICYmICFjdHJsLnJlYWRvbmx5KCkgJiYgbGVuZ3RoKCkgPCBtYXgoKSxcclxuICAgICksXHJcbiAgICBjYW5SZW1vdmU6IGNvbXB1dGVkKFxyXG4gICAgICAoKSA9PiAhY3RybC5kaXNhYmxlZCgpICYmICFjdHJsLnJlYWRvbmx5KCkgJiYgbGVuZ3RoKCkgPiBtaW4oKSxcclxuICAgICksXHJcbiAgICByZWNvbmNpbGUsXHJcbiAgICBmb3JjZVJlY29uY2lsZSxcclxuICAgIHJlc2V0OiAoKSA9PiB7XHJcbiAgICAgIGZvciAoY29uc3QgYyBvZiB1bnRyYWNrZWQoY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgYy5yZXNldCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGN0cmwucmVzZXQoKTtcclxuICAgIH0sXHJcbiAgICByZXNldFdpdGhJbml0aWFsOiAoaW5pdGlhbDogVFtdKSA9PiB7XHJcbiAgICAgIGNvbnN0IGN0cmxzID0gdW50cmFja2VkKGNoaWxkcmVuKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbml0aWFsLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY3RybHMuYXQoaSk/LnJlc2V0V2l0aEluaXRpYWwoaW5pdGlhbFtpXSk7XHJcbiAgICAgIH1cclxuICAgICAgY3RybC5yZXNldFdpdGhJbml0aWFsKGluaXRpYWwpO1xyXG4gICAgfSxcclxuICAgIHB1c2g6IChuZXh0KSA9PiBjdHJsLnZhbHVlLnVwZGF0ZSgoY3VyKSA9PiBbLi4uY3VyLCBuZXh0XSksXHJcbiAgICByZW1vdmU6IChpZHgpID0+XHJcbiAgICAgIGN0cmwudmFsdWUudXBkYXRlKChjdXIpID0+IGN1ci5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGlkeCkpLFxyXG4gIH07XHJcbn1cclxuIl19","import { computed, isSignal, signal, untracked, } from '@angular/core';\nimport { entries, mergeIfObject, values } from '@mmstack/object';\nimport { isDerivation, toFakeSignalDerivation, } from '@mmstack/primitives';\nimport { formControl, } from './form-control';\n/**\n * Creates a `FormGroupSignal`, which aggregates a set of child form controls into a single object.\n *\n * @typeParam T - The type of the form group's value (an object).\n * @typeParam TDerivations - A record where keys are the names of the child controls and values are the `FormControlSignal` instances.\n * @typeParam TParent - The type of the parent form control's value (if this group is nested within another group or array).\n * @param initial - The initial value of the form group (or a `WritableSignal` or `DerivedSignal` if the group is nested).\n * @param providedChildren - An object containing the child `FormControlSignal` instances, or a function that returns such an object.\n * Using a function allows for dynamic creation of child controls (e.g., in response to changes in other signals).\n * @param options - Optional configuration options for the form group.\n * @returns A `FormGroupSignal` instance.\n *\n * @example\n * // Create a simple form group:\n * const user = signal({ name: 'John Doe', age: 30 });\n * const form = formGroup(user, {\n * name: formControl(derived(user, 'name')),\n * age: formControl(derived(user, 'age')),\n * })\n *\n * // Create a nested form group:\n * const user = signal({ name: 'John', age: 30, address: {street: \"Some street\"} });\n *\n * const address = derived(user, 'address');\n * const userForm = formGroup(user, {\n * name: formControl(derived(user, 'name')),\n * age: formControl(derived(user, 'age')),\n * address: formGroup(address, {\n * street: formControl(derived(address, (address) => address.street), {\n * validator: () => (value) => value ? \"\" : \"required!\"\n * }) // you can create deeply nested structures.\n * })\n * });\n *\n * // Create a form group with dynamically created children replaced rare FormRecord requirements.\n * const showAddress = signal(false);\n * type Characteristic = {\n * valueType: 'string';\n * value: string;\n * } | {\n * valueType: 'number';\n * value: number;\n * }\n * const char = signal<Characteristic>({ valueType: 'string', value: '' });\n * const charForm = formGroup(char, () => {\n * if (char().valueType === 'string) retur