@gravionlabs/helix-zod 22.1.1 → 22.1.2

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.
@@ -68,6 +68,87 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
68
68
  args: [{ selector: 'helix-dynamic-field', standalone: true, imports: [NgComponentOutlet], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!hiddenState()) {\n <ng-container [ngComponentOutlet]=\"component()\" [ngComponentOutletInputs]=\"outletInputs()\" />\n}\n", styles: [":host{display:block;width:100%}\n"] }]
69
69
  }], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], descriptor: [{ type: i0.Input, args: [{ isSignal: true, alias: "descriptor", required: true }] }] } });
70
70
 
71
+ const defOf$1 = (schema) => schema._zod.def;
72
+ /**
73
+ * Builds a fully-populated initial model value for a Zod schema — signal forms
74
+ * require a concrete model shape up front.
75
+ *
76
+ * Rules: `.default()` wins; strings → `''`; numbers/dates → `null` (paired
77
+ * with parse-transforming widgets); booleans → `false`; enums → first option;
78
+ * arrays → `[]`; objects → recursed shape; discriminated unions → default of
79
+ * the first variant; `optional` unwraps to its inner default, `nullable` → `null`.
80
+ */
81
+ function buildDefaultValue(schema) {
82
+ const def = defOf$1(schema);
83
+ switch (def.type) {
84
+ case 'default': {
85
+ const dv = def['defaultValue'];
86
+ return typeof dv === 'function' ? dv() : dv;
87
+ }
88
+ case 'optional': {
89
+ // Signal forms create no child field for an `undefined` value, so optional
90
+ // fields get their inner default (`''`, `null`, …) to stay navigable.
91
+ return buildDefaultValue(schema.unwrap());
92
+ }
93
+ case 'readonly':
94
+ case 'nonoptional':
95
+ return buildDefaultValue(schema.unwrap());
96
+ case 'nullable':
97
+ return null;
98
+ case 'string':
99
+ return '';
100
+ case 'number':
101
+ case 'int':
102
+ case 'date':
103
+ return null;
104
+ case 'boolean':
105
+ return false;
106
+ case 'enum': {
107
+ const options = schema.options;
108
+ return options[0];
109
+ }
110
+ case 'literal': {
111
+ const values = def['values'];
112
+ return values[0];
113
+ }
114
+ case 'array':
115
+ return [];
116
+ case 'object': {
117
+ const shape = schema.shape;
118
+ const value = {};
119
+ for (const [key, child] of Object.entries(shape)) {
120
+ value[key] = buildDefaultValue(child);
121
+ }
122
+ return value;
123
+ }
124
+ case 'union': {
125
+ const options = schema.options;
126
+ return buildDefaultValue(options[0]);
127
+ }
128
+ default:
129
+ return undefined;
130
+ }
131
+ }
132
+ /**
133
+ * Optional (non-nullable) leaves hold an empty model value (`null`) so signal
134
+ * forms keep a child field for them; Zod expects them absent. Maps those
135
+ * top-level `null`s to `undefined` before validating/parsing.
136
+ */
137
+ function nullsToAbsent(schema, value) {
138
+ if (typeof value !== 'object' || value === null)
139
+ return value;
140
+ const shape = schema.shape;
141
+ const result = { ...value };
142
+ for (const [key, child] of Object.entries(shape)) {
143
+ if (result[key] === null &&
144
+ child.safeParse(undefined).success &&
145
+ !child.safeParse(null).success) {
146
+ result[key] = undefined;
147
+ }
148
+ }
149
+ return result;
150
+ }
151
+
71
152
  /**
72
153
  * Builds the signal-forms schema for a Zod-driven dynamic form:
73
154
  *
@@ -83,7 +164,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
83
164
  */
84
165
  function buildHelixSchema(zodSchema, root) {
85
166
  return (rootPath) => {
86
- validateStandardSchema(rootPath, zodSchema);
167
+ const standard = zodSchema['~standard'];
168
+ validateStandardSchema(rootPath, {
169
+ '~standard': {
170
+ ...standard,
171
+ validate: (value) => standard.validate(nullsToAbsent(zodSchema, value)),
172
+ },
173
+ });
87
174
  applyDescriptorRules(rootPath, root, rootPath);
88
175
  };
89
176
  }
@@ -135,74 +222,6 @@ function applyDescriptorRules(path, descriptor, rootPath) {
135
222
  }
136
223
  }
137
224
 
138
- const defOf$1 = (schema) => schema._zod.def;
139
- /**
140
- * Builds a fully-populated initial model value for a Zod schema — signal forms
141
- * require a concrete model shape up front.
142
- *
143
- * Rules: `.default()` wins; strings → `''`; numbers/dates → `null` (paired
144
- * with parse-transforming widgets); booleans → `false`; enums → first option;
145
- * arrays → `[]`; objects → recursed shape; discriminated unions → default of
146
- * the first variant; `optional`/`nullable` leaves without a more specific
147
- * default → `undefined` / `null`.
148
- */
149
- function buildDefaultValue(schema) {
150
- const def = defOf$1(schema);
151
- switch (def.type) {
152
- case 'default': {
153
- const dv = def['defaultValue'];
154
- return typeof dv === 'function' ? dv() : dv;
155
- }
156
- case 'optional': {
157
- // Optional leaves default to undefined; optional containers still need a
158
- // concrete shape so the field tree has navigable paths.
159
- const inner = schema.unwrap();
160
- return isLeaf(inner) ? undefined : buildDefaultValue(inner);
161
- }
162
- case 'readonly':
163
- case 'nonoptional':
164
- return buildDefaultValue(schema.unwrap());
165
- case 'nullable':
166
- return null;
167
- case 'string':
168
- return '';
169
- case 'number':
170
- case 'int':
171
- case 'date':
172
- return null;
173
- case 'boolean':
174
- return false;
175
- case 'enum': {
176
- const options = schema.options;
177
- return options[0];
178
- }
179
- case 'literal': {
180
- const values = def['values'];
181
- return values[0];
182
- }
183
- case 'array':
184
- return [];
185
- case 'object': {
186
- const shape = schema.shape;
187
- const value = {};
188
- for (const [key, child] of Object.entries(shape)) {
189
- value[key] = buildDefaultValue(child);
190
- }
191
- return value;
192
- }
193
- case 'union': {
194
- const options = schema.options;
195
- return buildDefaultValue(options[0]);
196
- }
197
- default:
198
- return undefined;
199
- }
200
- }
201
- function isLeaf(schema) {
202
- const type = defOf$1(schema).type;
203
- return type !== 'object' && type !== 'array' && type !== 'union';
204
- }
205
-
206
225
  /**
207
226
  * Typed registry backing {@link helixMeta}. Checked before the zod global
208
227
  * registry by {@link readHelixMeta}.
@@ -454,7 +473,7 @@ class HelixDynamicForm {
454
473
  async handleSubmit(event) {
455
474
  event.preventDefault();
456
475
  await submit(this.formTree(), async (tree) => {
457
- this.submitted.emit(this.schema().parse(tree().value()));
476
+ this.submitted.emit(this.schema().parse(nullsToAbsent(this.schema(), tree().value())));
458
477
  return undefined;
459
478
  });
460
479
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gravionlabs-helix-zod.mjs","sources":["../../../projects/zod/src/lib/dynamic-form/registry/field-registry.ts","../../../projects/zod/src/lib/dynamic-form/components/dynamic-field/dynamic-field.ts","../../../projects/zod/src/lib/dynamic-form/components/dynamic-field/dynamic-field.html","../../../projects/zod/src/lib/dynamic-form/schema/signal-schema-builder.ts","../../../projects/zod/src/lib/dynamic-form/schema/zod-defaults.ts","../../../projects/zod/src/lib/dynamic-form/model/helix-field-meta.ts","../../../projects/zod/src/lib/dynamic-form/schema/zod-field-walker.ts","../../../projects/zod/src/lib/dynamic-form/components/dynamic-form/dynamic-form.ts","../../../projects/zod/src/lib/dynamic-form/components/dynamic-form/dynamic-form.html","../../../projects/zod/src/lib/internal/zod-issue-map.ts","../../../projects/zod/src/lib/dynamic-form/errors/helix-signal-errors.ts","../../../projects/zod/src/lib/dynamic-form/widgets/widget-base.ts","../../../projects/zod/src/lib/dynamic-form/widgets/array-widget/array-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/array-widget/array-widget.html","../../../projects/zod/src/lib/dynamic-form/widgets/checkbox-widget/checkbox-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/checkbox-widget/checkbox-widget.html","../../../projects/zod/src/lib/dynamic-form/widgets/date-widget/date-input.ts","../../../projects/zod/src/lib/dynamic-form/widgets/date-widget/date-input.html","../../../projects/zod/src/lib/dynamic-form/widgets/date-widget/date-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/date-widget/date-widget.html","../../../projects/zod/src/lib/dynamic-form/widgets/number-widget/number-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/number-widget/number-widget.html","../../../projects/zod/src/lib/dynamic-form/widgets/object-widget/object-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/object-widget/object-widget.html","../../../projects/zod/src/lib/dynamic-form/widgets/select-widget/select-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/select-widget/select-widget.html","../../../projects/zod/src/lib/dynamic-form/widgets/text-widget/text-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/text-widget/text-widget.html","../../../projects/zod/src/lib/dynamic-form/widgets/textarea-widget/textarea-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/textarea-widget/textarea-widget.html","../../../projects/zod/src/lib/dynamic-form/widgets/union-widget/union-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/union-widget/union-widget.html","../../../projects/zod/src/lib/dynamic-form/registry/provide-helix-dynamic-forms.ts","../../../projects/zod/src/lib/dynamic-form/schema/field-path.utils.ts","../../../projects/zod/src/lib/helix-zod-validators.ts","../../../projects/zod/src/public-api.ts","../../../projects/zod/src/gravionlabs-helix-zod.ts"],"sourcesContent":["import { Injectable, InjectionToken, inject, type Type } from '@angular/core';\nimport type { HelixErrorMessageResolver } from '../errors/helix-signal-errors';\nimport type { HelixWidgetKind } from '../model/helix-field-meta';\n\n// Declared by Angular's build toolchain — true in development, false in production.\ndeclare const ngDevMode: boolean | undefined;\n\n/** Registers a widget component for a {@link HelixWidgetKind}. */\nexport interface HelixFieldWidgetRegistration {\n widget: HelixWidgetKind;\n /** Component with `field` and `descriptor` inputs (see `HelixFieldWidgetBase`). */\n component: Type<unknown>;\n}\n\n/**\n * Multi-provider token holding widget registrations. Later registrations win,\n * so consumer widgets registered after the built-ins override them.\n */\nexport const HELIX_DYNAMIC_FIELD_WIDGETS = new InjectionToken<\n readonly HelixFieldWidgetRegistration[][]\n>('HELIX_DYNAMIC_FIELD_WIDGETS');\n\n/** Optional app-level error message resolver used by all built-in widgets. */\nexport const HELIX_ERROR_MESSAGE_RESOLVER = new InjectionToken<HelixErrorMessageResolver>(\n 'HELIX_ERROR_MESSAGE_RESOLVER',\n);\n\n/** Resolves the widget component registered for a widget kind. */\n@Injectable({ providedIn: 'root' })\nexport class HelixFieldWidgetResolver {\n readonly #registrations = inject(HELIX_DYNAMIC_FIELD_WIDGETS, { optional: true }) ?? [];\n\n resolve(widget: HelixWidgetKind): Type<unknown> {\n const flat = this.#registrations.flat();\n for (let i = flat.length - 1; i >= 0; i--) {\n if (flat[i].widget === widget) return flat[i].component;\n }\n throw new Error(\n `[HelixFieldWidgetResolver] No widget registered for kind \"${widget}\". ` +\n (typeof ngDevMode !== 'undefined' && ngDevMode\n ? `Did you forget provideHelixDynamicForms() or a custom { widgets: [...] } registration?`\n : ''),\n );\n }\n}\n","import { NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport type { Field } from '@angular/forms/signals';\nimport type { HelixFieldDescriptor } from '../../model/helix-field-descriptor';\nimport { HelixFieldWidgetResolver } from '../../registry/field-registry';\n\n/**\n * Dispatches one field descriptor to its registered widget component.\n *\n * Handles `hidden()` centrally: a hidden field renders nothing, per the\n * signal-forms guidance to `@if` on the hidden state.\n *\n * Imports no widget statically — composite widgets (object/array/union) import\n * this component, and built-in registrations live in\n * `provideHelixDynamicForms()`, which breaks the import cycle.\n */\n@Component({\n selector: 'helix-dynamic-field',\n standalone: true,\n imports: [NgComponentOutlet],\n templateUrl: './dynamic-field.html',\n styleUrl: './dynamic-field.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixDynamicField {\n readonly field = input.required<Field<any>>();\n readonly descriptor = input.required<HelixFieldDescriptor>();\n\n readonly #resolver = inject(HelixFieldWidgetResolver);\n\n protected readonly component = computed(() => this.#resolver.resolve(this.descriptor().widget));\n\n protected readonly outletInputs = computed(() => ({\n field: this.field(),\n descriptor: this.descriptor(),\n }));\n\n protected readonly hiddenState = computed(() => this.field()().hidden());\n}\n","@if (!hiddenState()) {\n <ng-container [ngComponentOutlet]=\"component()\" [ngComponentOutletInputs]=\"outletInputs()\" />\n}\n","import {\n applyEach,\n applyWhenValue,\n disabled,\n type FieldContext,\n hidden,\n readonly,\n required,\n type SchemaFn,\n type SchemaPath,\n validateStandardSchema,\n} from '@angular/forms/signals';\nimport type { z } from 'zod';\nimport type { HelixFieldDescriptor } from '../model/helix-field-descriptor';\n\n/**\n * Builds the signal-forms schema for a Zod-driven dynamic form:\n *\n * 1. Root-level `validateStandardSchema(rootPath, zodSchema)` — Zod issue\n * paths route errors onto the matching child fields, including cross-field\n * `.refine()` errors with a `path`.\n * 2. Conditional field state from {@link HelixFieldMeta} predicates\n * (`hiddenWhen`/`disabledWhen`/`readonlyWhen`/`requiredWhen`), evaluated\n * against the root form value.\n * 3. `meta.extraSchema` escape-hatch rules per field.\n * 4. `applyEach` for array items and `applyWhenValue` for discriminated-union\n * variants, so variant/item rules stay dormant unless active.\n */\nexport function buildHelixSchema<T extends Record<string, unknown>>(\n zodSchema: z.ZodObject,\n root: HelixFieldDescriptor,\n): SchemaFn<T> {\n return (rootPath) => {\n validateStandardSchema(rootPath as any, zodSchema as any);\n applyDescriptorRules(rootPath as any, root, rootPath as any);\n };\n}\n\n/** Reads the root form value from any nested logic context. */\nfunction rootValueOf(ctx: FieldContext<any, any>, rootPath: SchemaPath<any>): any {\n return (ctx as { valueOf(p: SchemaPath<any>): any }).valueOf(rootPath);\n}\n\nfunction applyConditionRules(\n path: SchemaPath<any>,\n descriptor: HelixFieldDescriptor,\n rootPath: SchemaPath<any>,\n): void {\n const meta = descriptor.meta;\n\n if (meta.hiddenWhen) {\n hidden(\n path as any,\n (ctx: FieldContext<any, any>) => !!meta.hiddenWhen?.(rootValueOf(ctx, rootPath)),\n );\n }\n if (meta.disabledWhen) {\n disabled(\n path as any,\n (ctx: FieldContext<any, any>) => meta.disabledWhen?.(rootValueOf(ctx, rootPath)) ?? false,\n );\n }\n if (meta.readonlyWhen) {\n readonly(\n path as any,\n (ctx: FieldContext<any, any>) => !!meta.readonlyWhen?.(rootValueOf(ctx, rootPath)),\n );\n }\n if (meta.requiredWhen) {\n required(path as any, {\n when: (ctx: FieldContext<any, any>) => !!meta.requiredWhen?.(rootValueOf(ctx, rootPath)),\n });\n }\n meta.extraSchema?.(path as any);\n}\n\nfunction applyDescriptorRules(\n path: SchemaPath<any>,\n descriptor: HelixFieldDescriptor,\n rootPath: SchemaPath<any>,\n): void {\n // Root-level conditions make no sense on the form itself — only on fields.\n if (path !== rootPath) applyConditionRules(path, descriptor, rootPath);\n\n for (const child of descriptor.children ?? []) {\n applyDescriptorRules((path as any)[child.key], child, rootPath);\n }\n\n if (descriptor.itemDescriptor) {\n const item = descriptor.itemDescriptor;\n applyEach(\n path as any,\n ((itemPath: any) => {\n applyDescriptorRules(itemPath, item, rootPath);\n }) as any,\n );\n }\n\n if (descriptor.union) {\n const { discriminator, variants } = descriptor.union;\n for (const [tag, variant] of variants) {\n applyWhenValue(\n path as any,\n ((value: any) => value?.[discriminator] === tag) as (value: any) => value is any,\n ((variantPath: any) => {\n // The union field itself carries the variant's children.\n for (const child of variant.children ?? []) {\n applyDescriptorRules(variantPath[child.key], child, rootPath);\n }\n }) as any,\n );\n }\n }\n}\n","import type { z } from 'zod';\n\ntype AnyZod = z.ZodType & {\n _zod: { def: Record<string, unknown> & { type: string } };\n};\n\nconst defOf = (schema: z.ZodType) => (schema as AnyZod)._zod.def;\n\n/**\n * Builds a fully-populated initial model value for a Zod schema — signal forms\n * require a concrete model shape up front.\n *\n * Rules: `.default()` wins; strings → `''`; numbers/dates → `null` (paired\n * with parse-transforming widgets); booleans → `false`; enums → first option;\n * arrays → `[]`; objects → recursed shape; discriminated unions → default of\n * the first variant; `optional`/`nullable` leaves without a more specific\n * default → `undefined` / `null`.\n */\nexport function buildDefaultValue(schema: z.ZodType): unknown {\n const def = defOf(schema);\n\n switch (def.type) {\n case 'default': {\n const dv = def['defaultValue'];\n return typeof dv === 'function' ? (dv as () => unknown)() : dv;\n }\n case 'optional': {\n // Optional leaves default to undefined; optional containers still need a\n // concrete shape so the field tree has navigable paths.\n const inner = (schema as unknown as { unwrap(): z.ZodType }).unwrap();\n return isLeaf(inner) ? undefined : buildDefaultValue(inner);\n }\n case 'readonly':\n case 'nonoptional':\n return buildDefaultValue((schema as unknown as { unwrap(): z.ZodType }).unwrap());\n case 'nullable':\n return null;\n case 'string':\n return '';\n case 'number':\n case 'int':\n case 'date':\n return null;\n case 'boolean':\n return false;\n case 'enum': {\n const options = (schema as unknown as { options: readonly unknown[] }).options;\n return options[0];\n }\n case 'literal': {\n const values = def['values'] as readonly unknown[];\n return values[0];\n }\n case 'array':\n return [];\n case 'object': {\n const shape = (schema as unknown as { shape: Record<string, z.ZodType> }).shape;\n const value: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(shape)) {\n value[key] = buildDefaultValue(child);\n }\n return value;\n }\n case 'union': {\n const options = (schema as unknown as { options: readonly z.ZodType[] }).options;\n return buildDefaultValue(options[0]);\n }\n default:\n return undefined;\n }\n}\n\nfunction isLeaf(schema: z.ZodType): boolean {\n const type = defOf(schema).type;\n return type !== 'object' && type !== 'array' && type !== 'union';\n}\n","import type { SchemaPath } from '@angular/forms/signals';\nimport { z } from 'zod';\n\n/**\n * Built-in widget kinds plus any custom key registered via\n * `provideHelixDynamicForms({ widgets })`.\n */\nexport type HelixWidgetKind =\n | 'text'\n | 'email'\n | 'password'\n | 'textarea'\n | 'number'\n | 'checkbox'\n | 'select'\n | 'date'\n | 'object'\n | 'array'\n | 'union'\n // biome-ignore lint/complexity/noBannedTypes: `string & {}` keeps literal autocomplete while allowing custom keys\n | (string & {});\n\nexport interface HelixSelectOption {\n label: string;\n value: unknown;\n}\n\n/**\n * UI metadata attached to a Zod field schema. Drives labels, widget selection,\n * ordering and the conditional engine of the dynamic form renderer.\n *\n * Attach it with {@link helixMeta} (preferred — keeps the same schema instance)\n * or via `schema.meta({ title, description, helix: { ... } })`.\n *\n * @template TRoot The root form model type the conditional predicates receive.\n */\nexport interface HelixFieldMeta<TRoot = Record<string, unknown>> {\n label?: string;\n placeholder?: string;\n hint?: string;\n /** Overrides the widget inferred from the Zod type. */\n widget?: HelixWidgetKind;\n /** Options for select-like widgets. Inferred from `z.enum()` when omitted. */\n options?: readonly HelixSelectOption[] | readonly string[];\n /** Render order among siblings — lower first; fields without order keep shape order. */\n order?: number;\n /** Label of the add button for array widgets. */\n addLabel?: string;\n /** Label of the remove button for array widgets. */\n removeLabel?: string;\n /** Hides the field (and excludes its errors from parent validity) when true. */\n hiddenWhen?: (root: TRoot) => boolean;\n /** Disables the field when truthy; a string return becomes the disabled reason. */\n disabledWhen?: (root: TRoot) => boolean | string;\n readonlyWhen?: (root: TRoot) => boolean;\n /** Marks the field required (signal-forms `required()` with `when`). */\n requiredWhen?: (root: TRoot) => boolean;\n /**\n * Escape hatch: additional signal-forms rules applied to this field's path\n * inside the generated schema (e.g. `p => validate(p, ...)`).\n */\n extraSchema?: (path: SchemaPath<any>) => void;\n /** Arbitrary passthrough for custom widgets. */\n [key: string]: unknown;\n}\n\n/**\n * Typed registry backing {@link helixMeta}. Checked before the zod global\n * registry by {@link readHelixMeta}.\n */\nexport const helixFieldMetaRegistry = z.registry<HelixFieldMeta>();\n\n/**\n * Attaches Helix UI metadata to a Zod schema and returns the **same** instance.\n *\n * Prefer this over `.meta()`, which clones the schema — metadata must live on\n * the exact instance composed into the `z.object()` shape for the walker to\n * find it.\n *\n * @example\n * const UserSchema = z.object({\n * email: helixMeta(z.email(), { label: 'E-mail', placeholder: 'you@example.com' }),\n * });\n */\nexport function helixMeta<S extends z.ZodType, TRoot = Record<string, unknown>>(\n schema: S,\n meta: HelixFieldMeta<TRoot>,\n): S {\n (helixFieldMetaRegistry as any).add(schema, meta);\n return schema;\n}\n\nconst WRAPPER_TYPES = new Set(['optional', 'nullable', 'default', 'readonly', 'nonoptional']);\n\nfunction metaOf(schema: z.ZodType): HelixFieldMeta | undefined {\n const registered = helixFieldMetaRegistry.get(schema);\n if (registered) return registered as HelixFieldMeta;\n\n const globalMeta = schema.meta();\n if (!globalMeta) return undefined;\n\n const { title, description, helix, ...rest } = globalMeta as {\n title?: string;\n description?: string;\n helix?: HelixFieldMeta;\n };\n const mapped: HelixFieldMeta = { ...rest };\n if (title !== undefined) mapped.label = title;\n if (description !== undefined) mapped.hint = description;\n return { ...mapped, ...helix };\n}\n\n/**\n * Reads {@link HelixFieldMeta} from a Zod schema: the typed registry first,\n * then the zod global registry (`.meta()` — `title` → `label`,\n * `description` → `hint`, `helix` key merged on top).\n *\n * Wrapper types (`optional`, `nullable`, `default`, `readonly`) are unwrapped\n * and their metadata merged — outermost wins.\n */\nexport function readHelixMeta(schema: z.ZodType): HelixFieldMeta {\n const layers: HelixFieldMeta[] = [];\n let current: z.ZodType | undefined = schema;\n\n while (current) {\n const meta = metaOf(current);\n if (meta) layers.push(meta);\n\n const def: { type: string } = (current as any)._zod.def;\n current = WRAPPER_TYPES.has(def.type) ? ((current as any).unwrap() as z.ZodType) : undefined;\n }\n\n // Innermost first so outer layers overwrite inner ones.\n return layers.reverse().reduce<HelixFieldMeta>((acc, layer) => ({ ...acc, ...layer }), {});\n}\n","import type { z } from 'zod';\nimport type { HelixFieldDescriptor } from '../model/helix-field-descriptor';\nimport {\n type HelixFieldMeta,\n type HelixSelectOption,\n type HelixWidgetKind,\n readHelixMeta,\n} from '../model/helix-field-meta';\n\n// Declared by Angular's build toolchain — true in development, false in production.\ndeclare const ngDevMode: boolean | undefined;\n\nconst WRAPPER_TYPES = new Set(['optional', 'nullable', 'default', 'readonly', 'nonoptional']);\n\n/** Native `<input type>` per input-based widget kind. */\nconst INPUT_TYPES: Record<string, string> = {\n text: 'text',\n email: 'email',\n password: 'password',\n number: 'number',\n date: 'date',\n};\n\ninterface Unwrapped {\n inner: z.ZodType;\n required: boolean;\n}\n\ntype AnyZod = z.ZodType & {\n _zod: { def: Record<string, unknown> & { type: string } };\n};\n\nfunction defOf(schema: z.ZodType): Record<string, unknown> & { type: string } {\n return (schema as AnyZod)._zod.def;\n}\n\n/** Peels optional/nullable/default/readonly wrappers, tracking requiredness. */\nfunction unwrap(schema: z.ZodType): Unwrapped {\n let inner = schema;\n let required = true;\n while (WRAPPER_TYPES.has(defOf(inner).type)) {\n const type = defOf(inner).type;\n if (type === 'optional' || type === 'nullable' || type === 'default') required = false;\n if (type === 'nonoptional') required = true;\n inner = (inner as unknown as { unwrap(): z.ZodType }).unwrap();\n }\n return { inner, required };\n}\n\nfunction normalizeOptions(\n options: HelixFieldMeta['options'],\n): readonly HelixSelectOption[] | undefined {\n if (!options) return undefined;\n return options.map((o) =>\n typeof o === 'string' ? { label: o, value: o } : (o as HelixSelectOption),\n );\n}\n\nfunction inferWidget(inner: z.ZodType): HelixWidgetKind | null {\n const def = defOf(inner);\n switch (def.type) {\n case 'string':\n return def['format'] === 'email' ? 'email' : 'text';\n case 'number':\n case 'int':\n return 'number';\n case 'boolean':\n return 'checkbox';\n case 'date':\n return 'date';\n case 'enum':\n case 'literal':\n return 'select';\n case 'array':\n return 'array';\n case 'object':\n return 'object';\n case 'union':\n return def['discriminator'] !== undefined ? 'union' : null;\n default:\n return null;\n }\n}\n\nfunction enumOptions(inner: z.ZodType): readonly HelixSelectOption[] | undefined {\n const def = defOf(inner);\n if (def.type === 'enum') {\n const values = (inner as unknown as { options: readonly (string | number)[] }).options;\n return values.map((v) => ({ label: String(v), value: v }));\n }\n if (def.type === 'literal') {\n const values = def['values'] as readonly (string | number | boolean)[];\n return values.map((v) => ({ label: String(v), value: v }));\n }\n return undefined;\n}\n\n/** Reads the discriminator literal of a union variant's tag field. */\nfunction discriminatorValue(variant: z.ZodType, discriminator: string): string | number | boolean {\n const shape = (variant as unknown as { shape: Record<string, z.ZodType> }).shape;\n const tagDef = defOf(unwrap(shape[discriminator]).inner);\n const values = tagDef['values'] as readonly (string | number | boolean)[] | undefined;\n if (!values?.length) {\n throw new Error(\n `[zodToFieldDescriptors] Discriminated union variant has no literal value for ` +\n `discriminator \"${discriminator}\".`,\n );\n }\n return values[0];\n}\n\nfunction walk(schema: z.ZodType, key: string, path: readonly string[]): HelixFieldDescriptor {\n const meta = readHelixMeta(schema);\n const { inner, required } = unwrap(schema);\n const def = defOf(inner);\n const inferred = inferWidget(inner);\n const widget = meta.widget ?? inferred;\n\n if (widget === null || widget === undefined) {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n throw new Error(\n `[zodToFieldDescriptors] Zod type \"${def.type}\" at path \"${path.join('.')}\" has no ` +\n `automatic widget mapping. Set { widget: '...' } via helixMeta() to render it with a ` +\n `registered (custom) widget.`,\n );\n }\n // Production: render nothing rather than crash — fall through as plain text.\n return {\n key,\n path,\n widget: 'text',\n meta,\n zodType: inner,\n zodSource: schema,\n required,\n inputType: 'text',\n };\n }\n\n const descriptor: HelixFieldDescriptor = {\n key,\n path,\n widget,\n meta,\n zodType: inner,\n zodSource: schema,\n required,\n inputType: INPUT_TYPES[widget],\n options: normalizeOptions(meta.options) ?? enumOptions(inner),\n };\n\n if (def.type === 'object') {\n const shape = (inner as unknown as { shape: Record<string, z.ZodType> }).shape;\n const children = Object.entries(shape).map(([childKey, childSchema], index) => ({\n index,\n descriptor: walk(childSchema, childKey, [...path, childKey]),\n }));\n children.sort(\n (a, b) =>\n (a.descriptor.meta.order ?? Number.MAX_SAFE_INTEGER) -\n (b.descriptor.meta.order ?? Number.MAX_SAFE_INTEGER) || a.index - b.index,\n );\n descriptor.children = children.map((c) => c.descriptor);\n }\n\n if (def.type === 'array') {\n descriptor.itemDescriptor = walk(def['element'] as z.ZodType, '', path);\n }\n\n if (widget === 'union' && def.type === 'union') {\n const discriminator = def['discriminator'] as string;\n const variants = new Map<string | number | boolean, HelixFieldDescriptor>();\n for (const variant of (inner as unknown as { options: readonly z.ZodType[] }).options) {\n variants.set(discriminatorValue(variant, discriminator), walk(variant, key, path));\n }\n descriptor.union = { discriminator, variants };\n }\n\n return descriptor;\n}\n\n/**\n * Walks an annotated `z.object()` schema and produces the recursive\n * {@link HelixFieldDescriptor} tree consumed by the dynamic form renderer.\n *\n * Widget inference: string→text (`z.email()`→email), number→number,\n * boolean→checkbox, date→date, enum/literal→select, array→array,\n * object→object, discriminated union→union. Anything else requires a\n * `widget` override in {@link HelixFieldMeta} (throws in dev mode otherwise).\n */\nexport function zodToFieldDescriptors(schema: z.ZodObject): HelixFieldDescriptor {\n return walk(schema as unknown as z.ZodType, '', []);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n Injector,\n inject,\n input,\n output,\n signal,\n untracked,\n type WritableSignal,\n} from '@angular/core';\nimport { form, submit } from '@angular/forms/signals';\nimport type { z } from 'zod';\nimport type { HelixFieldDescriptor } from '../../model/helix-field-descriptor';\nimport { buildHelixSchema } from '../../schema/signal-schema-builder';\nimport { buildDefaultValue } from '../../schema/zod-defaults';\nimport { zodToFieldDescriptors } from '../../schema/zod-field-walker';\nimport { HelixDynamicField } from '../dynamic-field/dynamic-field';\n\n/**\n * Renders a complete signal form from an annotated Zod object schema.\n *\n * - Validation: root-level `validateStandardSchema` — Zod issues are routed to\n * the matching fields.\n * - Model: pass your own `WritableSignal` via `model`, or let the component\n * derive an initial value from the schema (`buildDefaultValue`).\n * - Swapping the `schema` input recreates the form and resets its state.\n * - `submitted` emits the **parsed** (`schema.parse`) value on valid submit.\n *\n * Requires `provideHelixDynamicForms()` in the injector chain.\n */\n@Component({\n selector: 'helix-dynamic-form',\n standalone: true,\n imports: [HelixDynamicField],\n templateUrl: './dynamic-form.html',\n styleUrl: './dynamic-form.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixDynamicForm<T extends Record<string, unknown> = Record<string, unknown>> {\n readonly schema = input.required<z.ZodObject>();\n /** Optional external model — omit to derive the initial value from the schema. */\n readonly model = input<WritableSignal<T>>();\n readonly submitLabel = input('Submit');\n readonly showSubmit = input(true);\n\n readonly submitted = output<T>();\n\n readonly #injector = inject(Injector);\n\n protected readonly descriptors = computed(() => zodToFieldDescriptors(this.schema()));\n\n readonly #model = computed<WritableSignal<T>>(\n () => this.model() ?? signal(buildDefaultValue(this.schema() as unknown as z.ZodType) as T),\n );\n\n /** The form's `FieldTree` — recreated (state reset) when the schema changes. */\n readonly formTree = computed(() => {\n const model = this.#model();\n const schema = this.schema();\n const root = this.descriptors();\n return untracked(() =>\n form(model, buildHelixSchema<T>(schema, root), { injector: this.#injector }),\n );\n });\n\n protected childField(descriptor: HelixFieldDescriptor): any {\n return (this.formTree() as any)[descriptor.key];\n }\n\n protected async handleSubmit(event: Event): Promise<void> {\n event.preventDefault();\n await submit(this.formTree(), async (tree) => {\n this.submitted.emit(this.schema().parse(tree().value()) as T);\n return undefined;\n });\n }\n}\n","<form class=\"helix-dynamic-form\" novalidate (submit)=\"handleSubmit($event)\">\n @for (child of descriptors().children ?? []; track child.key) {\n <helix-dynamic-field [field]=\"childField(child)\" [descriptor]=\"child\" />\n }\n\n @if (showSubmit()) {\n <button\n type=\"submit\"\n class=\"helix-dynamic-form__submit\"\n [disabled]=\"formTree()().submitting()\"\n >\n {{ submitLabel() }}\n </button>\n }\n</form>\n","import { ValidatorKey } from '@gravionlabs/helix-core/validators';\nimport { type ZodIssue, ZodIssueCode } from 'zod';\n\n// Mirrors Validators' internal EMPTY_VALUES — defined locally to avoid\n// depending on unexported internals of @gravionlabs/helix-core.\nexport const EMPTY_VALUES: unknown[] = ['', null, undefined];\nexport const isEmptyValue = (v: unknown): boolean => EMPTY_VALUES.includes(v);\n\n/**\n * Maps a single `ZodIssue` to the corresponding `ValidatorKey`.\n *\n * NOTE: Zod v4 breaking changes accounted for here:\n * - `invalid_string` → `invalid_format` with `format` property (not `validation`)\n * - `too_small`/`too_big` use `origin` instead of `type`\n * - `not_integer` removed → `invalid_type` with `expected: 'int'`\n * - `invalid_type` for null/undefined no longer has a `received` field;\n * detected via the `value` parameter instead\n *\n * Returns `null` for issue codes with no automatic mapping — caller handles\n * these via `fallbackKey` (Option B).\n */\nexport function zodIssueToHelixKey(issue: ZodIssue, value: unknown): ValidatorKey | null {\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n // Zod v4 dropped the `received` field on invalid_type issues.\n // Detect required (null/undefined) errors by checking the control value directly.\n if (isEmptyValue(value)) return ValidatorKey.Required;\n // integer: Zod v4 changed not_integer → invalid_type { expected: 'int' }\n if ((issue as { expected: string }).expected === 'int') return ValidatorKey.Integer;\n // numeric type mismatch\n if (\n (issue as { expected: string }).expected === 'number' ||\n (issue as { expected: string }).expected === 'float'\n ) {\n return ValidatorKey.Number;\n }\n return null;\n\n case ZodIssueCode.invalid_format:\n // Zod v4: replaces invalid_string for all format-based string validations.\n // The `format` property holds the validation name.\n {\n const fmt = (issue as { format: string }).format;\n if (fmt === 'email') return ValidatorKey.Email;\n if (fmt === 'regex') return ValidatorKey.Pattern;\n if (fmt === 'datetime' || fmt === 'date' || fmt === 'time') return ValidatorKey.Date;\n }\n return null;\n\n case ZodIssueCode.too_small:\n // Zod v4: uses `origin` instead of `type` to identify the validated construct.\n {\n const origin = (issue as { origin: string }).origin;\n if (origin === 'string' || origin === 'array') return ValidatorKey.MinLength;\n if (origin === 'number') return ValidatorKey.Min;\n }\n return null;\n\n case ZodIssueCode.too_big:\n {\n const origin = (issue as { origin: string }).origin;\n if (origin === 'string' || origin === 'array') return ValidatorKey.MaxLength;\n if (origin === 'number') return ValidatorKey.Max;\n }\n return null;\n\n case ZodIssueCode.custom:\n return null; // must be handled via fallbackKey (Option B)\n\n default:\n return null;\n }\n}\n","import type { ValidationError } from '@angular/forms/signals';\nimport { ValidatorKey } from '@gravionlabs/helix-core/validators';\nimport type { ZodIssue } from 'zod';\nimport { zodIssueToHelixKey } from '../../internal/zod-issue-map';\n\n/**\n * App-level hook to customize user-facing error messages centrally.\n * Return a string to use it, or `null`/`undefined` to fall back to the\n * default message for the error.\n */\nexport type HelixErrorMessageResolver = (\n error: ValidationError,\n helixKey: ValidatorKey | null,\n) => string | null | undefined;\n\n/** Built-in signal-forms error kinds → ValidatorKey. */\nconst NG_KIND_TO_HELIX: Record<string, ValidatorKey> = {\n required: ValidatorKey.Required,\n min: ValidatorKey.Min,\n max: ValidatorKey.Max,\n minLength: ValidatorKey.MinLength,\n maxLength: ValidatorKey.MaxLength,\n pattern: ValidatorKey.Pattern,\n email: ValidatorKey.Email,\n};\n\n/**\n * Maps a signal-forms `ValidationError` to the `ValidatorKey` message\n * convention shared with `HelixZodValidators.fromZod`.\n *\n * @param error The signal-forms validation error.\n * @param value The current field value — used to distinguish Required from\n * type errors on Zod `invalid_type` issues (Zod v4 dropped the\n * `received` field).\n */\nexport function helixErrorKey(error: ValidationError, value?: unknown): ValidatorKey | null {\n if (error.kind === 'standardSchema') {\n const issue = (error as unknown as { issue: unknown }).issue as ZodIssue;\n return zodIssueToHelixKey(issue, value);\n }\n return NG_KIND_TO_HELIX[error.kind] ?? null;\n}\n\nfunction defaultMessage(error: ValidationError): string | null {\n if (error.kind === 'standardSchema') {\n const issue = (error as unknown as { issue: { message?: string } }).issue;\n return issue.message ?? null;\n }\n return error.message ?? null;\n}\n\n/**\n * Returns the message of the first displayable error, mirroring\n * `HelixFormField`'s first-error convention.\n *\n * Order of precedence per error: `resolver` result → Zod issue message /\n * signal-forms error message. Errors yielding no message are skipped.\n */\nexport function helixFirstErrorMessage(\n errors: readonly ValidationError[],\n options: { value?: unknown; resolver?: HelixErrorMessageResolver } = {},\n): string | null {\n for (const error of errors) {\n const resolved = options.resolver?.(error, helixErrorKey(error, options.value));\n const message = resolved ?? defaultMessage(error);\n if (message) return message;\n }\n return null;\n}\n","import { computed, Directive, inject, input } from '@angular/core';\nimport type { Field, FieldState } from '@angular/forms/signals';\nimport { helixFirstErrorMessage } from '../errors/helix-signal-errors';\nimport type { HelixFieldDescriptor } from '../model/helix-field-descriptor';\nimport { HELIX_ERROR_MESSAGE_RESOLVER } from '../registry/field-registry';\n\n/**\n * Base class for dynamic-form widgets. A widget is a standalone component with\n * the two inputs below; `HelixDynamicField` instantiates it via\n * `NgComponentOutlet` and feeds them in.\n */\n@Directive()\nexport abstract class HelixFieldWidgetBase<T = any> {\n readonly field = input.required<Field<T>>();\n readonly descriptor = input.required<HelixFieldDescriptor>();\n\n readonly #errorResolver = inject(HELIX_ERROR_MESSAGE_RESOLVER, { optional: true });\n\n protected readonly state = computed<FieldState<T>>(() => this.field()());\n\n /** Touched-gated first error message — mirrors `HelixFormField.activeError`. */\n protected readonly firstError = computed<string | null>(() => {\n const state = this.state();\n if (!state.touched()) return null;\n return helixFirstErrorMessage(state.errors(), {\n value: state.value(),\n resolver: this.#errorResolver ?? undefined,\n });\n });\n\n protected readonly label = computed(\n () => this.descriptor().meta.label ?? humanize(this.descriptor().key),\n );\n protected readonly hint = computed(() => this.descriptor().meta.hint);\n protected readonly placeholder = computed(() => this.descriptor().meta.placeholder ?? '');\n}\n\n/** `firstName` → `First name` — fallback label when meta provides none. */\nfunction humanize(key: string): string {\n if (!key) return '';\n const words = key\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/[_-]+/g, ' ')\n .toLowerCase();\n return words.charAt(0).toUpperCase() + words.slice(1);\n}\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { HelixDynamicField } from '../../components/dynamic-field/dynamic-field';\nimport { buildDefaultValue } from '../../schema/zod-defaults';\nimport { HelixFieldWidgetBase } from '../widget-base';\n\n/** Built-in widget for `z.array()` fields — item list with add/remove. */\n@Component({\n selector: 'helix-array-widget',\n standalone: true,\n imports: [HelixDynamicField],\n templateUrl: './array-widget.html',\n styleUrl: './array-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixArrayWidget extends HelixFieldWidgetBase<unknown[]> {\n protected readonly itemFields = computed(() => {\n const length = (this.state().value() ?? []).length;\n return Array.from({ length }, (_, index) => (this.field() as any)[index]);\n });\n\n protected readonly addLabel = computed(() => this.descriptor().meta.addLabel ?? 'Add');\n protected readonly removeLabel = computed(() => this.descriptor().meta.removeLabel ?? 'Remove');\n\n protected add(): void {\n const item = this.descriptor().itemDescriptor;\n if (!item) return;\n const value = buildDefaultValue(item.zodSource);\n this.state().value.update((current) => [...(current ?? []), value]);\n }\n\n protected removeAt(index: number): void {\n this.state().value.update((current) => (current ?? []).filter((_, i) => i !== index));\n }\n}\n","<div class=\"helix-array-widget\">\n @if (label(); as l) {\n <div class=\"helix-array-widget__label\">{{ l }}</div>\n }\n\n @for (itemField of itemFields(); track $index) {\n <div class=\"helix-array-widget__item\">\n <helix-dynamic-field [field]=\"itemField\" [descriptor]=\"descriptor().itemDescriptor!\" />\n <button\n type=\"button\"\n class=\"helix-array-widget__remove\"\n (click)=\"removeAt($index)\"\n >\n {{ removeLabel() }}\n </button>\n </div>\n }\n\n <button type=\"button\" class=\"helix-array-widget__add\" (click)=\"add()\">{{ addLabel() }}</button>\n\n @if (firstError(); as err) {\n <small class=\"helix-array-widget__message helix-array-widget__message--error\">{{ err }}</small>\n } @else if (hint(); as h) {\n <small class=\"helix-array-widget__message helix-array-widget__message--hint\">{{ h }}</small>\n }\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { HelixFieldWidgetBase } from '../widget-base';\n\n/** Built-in widget for boolean fields — checkbox with inline label. */\n@Component({\n selector: 'helix-checkbox-widget',\n standalone: true,\n imports: [FormField],\n templateUrl: './checkbox-widget.html',\n styleUrl: './checkbox-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixCheckboxWidget extends HelixFieldWidgetBase<boolean> {}\n","<div class=\"helix-checkbox-widget\">\n <label class=\"helix-checkbox-widget__label\">\n <input class=\"helix-checkbox-widget__input\" type=\"checkbox\" [formField]=\"field()\" />\n <span>{{ label() }}</span>\n </label>\n\n @if (firstError(); as err) {\n <small class=\"helix-checkbox-widget__message helix-checkbox-widget__message--error\">{{ err }}</small>\n } @else if (hint(); as h) {\n <small class=\"helix-checkbox-widget__message helix-checkbox-widget__message--hint\">{{ h }}</small>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { type FormValueControl, transformedValue } from '@angular/forms/signals';\n\nfunction toIsoDate(value: Date): string {\n const y = value.getFullYear().toString().padStart(4, '0');\n const m = (value.getMonth() + 1).toString().padStart(2, '0');\n const d = value.getDate().toString().padStart(2, '0');\n return `${y}-${m}-${d}`;\n}\n\n/**\n * Native `<input type=\"date\">` exposed as a signal-forms `FormValueControl`\n * with a `Date | null` model — string↔Date conversion via `transformedValue`.\n */\n@Component({\n selector: 'helix-date-input',\n standalone: true,\n templateUrl: './date-input.html',\n styleUrl: './date-input.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixDateInput implements FormValueControl<Date | null> {\n readonly value = model.required<Date | null>();\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly touched = model(false);\n\n protected readonly rawValue = transformedValue(this.value, {\n parse: (raw: string) => {\n if (raw === '') return { value: null };\n const parsed = new Date(`${raw}T00:00:00`);\n if (Number.isNaN(parsed.getTime())) {\n return { error: { kind: 'parse', message: `\"${raw}\" is not a valid date` } };\n }\n return { value: parsed };\n },\n format: (value) => (value ? toIsoDate(value) : ''),\n });\n\n protected onInput(event: Event): void {\n this.rawValue.set((event.target as HTMLInputElement).value);\n }\n\n protected onBlur(): void {\n this.touched.set(true);\n }\n}\n","<input\n class=\"helix-date-input__input\"\n type=\"date\"\n [value]=\"rawValue()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n/>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { HelixFormField } from '@gravionlabs/helix-shell';\nimport { HelixFieldWidgetBase } from '../widget-base';\nimport { HelixDateInput } from './date-input';\n\n/** Built-in widget for `z.date()` fields. */\n@Component({\n selector: 'helix-date-widget',\n standalone: true,\n imports: [FormField, HelixFormField, HelixDateInput],\n templateUrl: './date-widget.html',\n styleUrl: './date-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixDateWidget extends HelixFieldWidgetBase<Date | null> {}\n","<helix-form-field [label]=\"label()\" [hint]=\"hint()\" [error]=\"firstError()\">\n <helix-date-input [formField]=\"field()\" />\n</helix-form-field>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { HelixFormField } from '@gravionlabs/helix-shell';\nimport { HelixFieldWidgetBase } from '../widget-base';\n\n/** Built-in widget for numeric fields. */\n@Component({\n selector: 'helix-number-widget',\n standalone: true,\n imports: [FormField, HelixFormField],\n templateUrl: './number-widget.html',\n styleUrl: './number-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixNumberWidget extends HelixFieldWidgetBase<number | null> {}\n","<helix-form-field [label]=\"label()\" [hint]=\"hint()\" [error]=\"firstError()\">\n <input\n class=\"helix-number-widget__input\"\n type=\"number\"\n [placeholder]=\"placeholder()\"\n [formField]=\"field()\"\n />\n</helix-form-field>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { HelixDynamicField } from '../../components/dynamic-field/dynamic-field';\nimport { HelixFieldWidgetBase } from '../widget-base';\n\n/** Built-in widget for nested `z.object()` fields — fieldset + recursion. */\n@Component({\n selector: 'helix-object-widget',\n standalone: true,\n imports: [HelixDynamicField],\n templateUrl: './object-widget.html',\n styleUrl: './object-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixObjectWidget extends HelixFieldWidgetBase<Record<string, unknown>> {\n protected childField(key: string): any {\n return (this.field() as any)[key];\n }\n}\n","<fieldset class=\"helix-object-widget\">\n @if (label(); as l) {\n <legend class=\"helix-object-widget__legend\">{{ l }}</legend>\n }\n @if (hint(); as h) {\n <small class=\"helix-object-widget__hint\">{{ h }}</small>\n }\n\n @for (child of descriptor().children ?? []; track child.key) {\n <helix-dynamic-field [field]=\"childField(child.key)\" [descriptor]=\"child\" />\n }\n</fieldset>\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { HelixFormField, HelixSelect } from '@gravionlabs/helix-shell';\nimport { HelixFieldWidgetBase } from '../widget-base';\n\n/**\n * Built-in widget for enum/select fields — wraps `HelixSelect`, which the\n * signal-forms `FormField` directive binds via its `ControlValueAccessor`.\n */\n@Component({\n selector: 'helix-select-widget',\n standalone: true,\n imports: [FormField, HelixFormField, HelixSelect],\n templateUrl: './select-widget.html',\n styleUrl: './select-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixSelectWidget extends HelixFieldWidgetBase<unknown> {\n protected readonly selectOptions = computed(() => [...(this.descriptor().options ?? [])]);\n}\n","<helix-form-field [label]=\"label()\" [hint]=\"hint()\" [error]=\"firstError()\">\n <helix-select\n [options]=\"selectOptions()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"state().disabled()\"\n [formField]=\"field()\"\n />\n</helix-form-field>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { HelixFormField } from '@gravionlabs/helix-shell';\nimport { HelixFieldWidgetBase } from '../widget-base';\n\n/** Built-in widget for `text`, `email` and `password` fields. */\n@Component({\n selector: 'helix-text-widget',\n standalone: true,\n imports: [FormField, HelixFormField],\n templateUrl: './text-widget.html',\n styleUrl: './text-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixTextWidget extends HelixFieldWidgetBase<string> {}\n","<helix-form-field [label]=\"label()\" [hint]=\"hint()\" [error]=\"firstError()\">\n <input\n class=\"helix-text-widget__input\"\n [type]=\"descriptor().inputType ?? 'text'\"\n [placeholder]=\"placeholder()\"\n [formField]=\"field()\"\n />\n</helix-form-field>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { HelixFormField } from '@gravionlabs/helix-shell';\nimport { HelixFieldWidgetBase } from '../widget-base';\n\n/** Built-in widget for multiline text (`widget: 'textarea'`). */\n@Component({\n selector: 'helix-textarea-widget',\n standalone: true,\n imports: [FormField, HelixFormField],\n templateUrl: './textarea-widget.html',\n styleUrl: './textarea-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixTextareaWidget extends HelixFieldWidgetBase<string> {}\n","<helix-form-field [label]=\"label()\" [hint]=\"hint()\" [error]=\"firstError()\">\n <textarea\n class=\"helix-textarea-widget__input\"\n rows=\"4\"\n [placeholder]=\"placeholder()\"\n [formField]=\"field()\"\n ></textarea>\n</helix-form-field>\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { HelixFormField } from '@gravionlabs/helix-shell';\nimport { HelixDynamicField } from '../../components/dynamic-field/dynamic-field';\nimport { buildDefaultValue } from '../../schema/zod-defaults';\nimport { HelixFieldWidgetBase } from '../widget-base';\n\n/**\n * Built-in widget for `z.discriminatedUnion()` fields: a discriminator select\n * plus the active variant's fields.\n *\n * Switching the discriminator **resets** the union value to the new variant's\n * default (preserving the discriminator) — mandatory so the model always\n * matches the active variant's shape and all field paths exist.\n */\n@Component({\n selector: 'helix-union-widget',\n standalone: true,\n imports: [HelixDynamicField, HelixFormField],\n templateUrl: './union-widget.html',\n styleUrl: './union-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixUnionWidget extends HelixFieldWidgetBase<Record<string, unknown>> {\n protected readonly discriminator = computed(() => this.descriptor().union?.discriminator ?? '');\n\n protected readonly tags = computed(() => [...(this.descriptor().union?.variants.keys() ?? [])]);\n\n protected readonly activeTag = computed(\n () => (this.state().value() as Record<string, unknown> | undefined)?.[this.discriminator()],\n );\n\n protected readonly variantChildren = computed(() => {\n const variant = this.descriptor().union?.variants.get(this.activeTag() as string);\n return (variant?.children ?? []).filter((c) => c.key !== this.discriminator());\n });\n\n protected childField(key: string): any {\n return (this.field() as any)[key];\n }\n\n protected onTagChange(event: Event): void {\n const index = Number.parseInt((event.target as HTMLSelectElement).value, 10);\n const tag = this.tags()[index];\n const variant = this.descriptor().union?.variants.get(tag);\n if (variant === undefined || tag === this.activeTag()) return;\n\n const next = buildDefaultValue(variant.zodSource) as Record<string, unknown>;\n next[this.discriminator()] = tag;\n this.state().value.set(next);\n }\n}\n","<div class=\"helix-union-widget\">\n <helix-form-field [label]=\"label()\" [hint]=\"hint()\" [error]=\"firstError()\">\n <div class=\"helix-union-widget__select-wrapper\">\n <select\n class=\"helix-union-widget__select\"\n [disabled]=\"state().disabled()\"\n (change)=\"onTagChange($event)\"\n >\n @for (tag of tags(); track tag) {\n <option [value]=\"$index\" [selected]=\"tag === activeTag()\">{{ tag }}</option>\n }\n </select>\n <i class=\"helix-union-widget__icon pi pi-chevron-down\"></i>\n </div>\n </helix-form-field>\n\n @for (child of variantChildren(); track child.key) {\n <helix-dynamic-field [field]=\"childField(child.key)\" [descriptor]=\"child\" />\n }\n</div>\n","import { type EnvironmentProviders, makeEnvironmentProviders, type Provider } from '@angular/core';\nimport type { HelixErrorMessageResolver } from '../errors/helix-signal-errors';\nimport { HelixArrayWidget } from '../widgets/array-widget/array-widget';\nimport { HelixCheckboxWidget } from '../widgets/checkbox-widget/checkbox-widget';\nimport { HelixDateWidget } from '../widgets/date-widget/date-widget';\nimport { HelixNumberWidget } from '../widgets/number-widget/number-widget';\nimport { HelixObjectWidget } from '../widgets/object-widget/object-widget';\nimport { HelixSelectWidget } from '../widgets/select-widget/select-widget';\nimport { HelixTextWidget } from '../widgets/text-widget/text-widget';\nimport { HelixTextareaWidget } from '../widgets/textarea-widget/textarea-widget';\nimport { HelixUnionWidget } from '../widgets/union-widget/union-widget';\nimport {\n HELIX_DYNAMIC_FIELD_WIDGETS,\n HELIX_ERROR_MESSAGE_RESOLVER,\n type HelixFieldWidgetRegistration,\n HelixFieldWidgetResolver,\n} from './field-registry';\n\nconst BUILT_IN_WIDGETS: readonly HelixFieldWidgetRegistration[] = [\n { widget: 'text', component: HelixTextWidget },\n { widget: 'email', component: HelixTextWidget },\n { widget: 'password', component: HelixTextWidget },\n { widget: 'textarea', component: HelixTextareaWidget },\n { widget: 'number', component: HelixNumberWidget },\n { widget: 'checkbox', component: HelixCheckboxWidget },\n { widget: 'select', component: HelixSelectWidget },\n { widget: 'date', component: HelixDateWidget },\n { widget: 'object', component: HelixObjectWidget },\n { widget: 'array', component: HelixArrayWidget },\n { widget: 'union', component: HelixUnionWidget },\n];\n\nexport interface HelixDynamicFormsConfig {\n /**\n * Additional widget registrations. Registered after the built-ins, so a\n * registration for an existing kind (e.g. `'select'`) overrides it.\n */\n widgets?: readonly HelixFieldWidgetRegistration[];\n /** Central override hook for user-facing error messages. */\n errorMessageResolver?: HelixErrorMessageResolver;\n}\n\n/**\n * Provides the dynamic-form widget registry (built-in widgets included) and\n * optional configuration. Add it to `ApplicationConfig.providers` or a route's\n * `providers`.\n */\nexport function provideHelixDynamicForms(\n config: HelixDynamicFormsConfig = {},\n): EnvironmentProviders {\n const providers: Provider[] = [\n { provide: HELIX_DYNAMIC_FIELD_WIDGETS, multi: true, useValue: BUILT_IN_WIDGETS },\n // Re-provide the resolver here so it is created in THIS environment\n // injector and sees the registrations above. The `providedIn: 'root'`\n // fallback instance cannot see route-scoped providers.\n HelixFieldWidgetResolver,\n ];\n if (config.widgets?.length) {\n providers.push({ provide: HELIX_DYNAMIC_FIELD_WIDGETS, multi: true, useValue: config.widgets });\n }\n if (config.errorMessageResolver) {\n providers.push({\n provide: HELIX_ERROR_MESSAGE_RESOLVER,\n useValue: config.errorMessageResolver,\n });\n }\n return makeEnvironmentProviders(providers);\n}\n","import type { FieldTree } from '@angular/forms/signals';\n\n/**\n * Navigates a `FieldTree` by a root-relative property path\n * (e.g. `['address', 'city']`).\n */\nexport function fieldAtPath(tree: FieldTree<any>, path: readonly string[]): any {\n let current: any = tree;\n for (const key of path) {\n current = current[key];\n if (current === undefined) {\n throw new Error(`[fieldAtPath] No field at path \"${path.join('.')}\" (missing key \"${key}\").`);\n }\n }\n return current;\n}\n","import type { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport type { ValidatorKey } from '@gravionlabs/helix-core/validators';\nimport type { ZodSchema } from 'zod';\nimport { isEmptyValue, zodIssueToHelixKey } from './internal/zod-issue-map';\n\n// Declared by Angular's build toolchain — true in development, false in production.\ndeclare const ngDevMode: boolean | undefined;\n\nexport interface ZodHelixOptions {\n /**\n * Required when the schema contains `.refine()` or `.superRefine()`.\n * Those produce `ZodIssueCode.custom` which has no automatic `ValidatorKey`\n * mapping. The bridge throws a descriptive error in development (`ngDevMode`)\n * and skips silently in production when this is missing and a custom issue occurs.\n *\n * @example\n * HelixZodValidators.fromZod(\n * z.string().refine(v => !banned.includes(v), 'Not allowed'),\n * { fallbackKey: ValidatorKey.Pattern },\n * )\n */\n fallbackKey?: ValidatorKey;\n\n /**\n * When `true` (default), empty values (`''`, `null`, `undefined`) bypass Zod\n * and return `null` — matching `Validators`' default `allowEmpty = true`.\n * Set to `false` to let Zod validate empty values (e.g. for required fields).\n */\n allowEmpty?: boolean;\n}\n\nexport const HelixZodValidators = {\n /**\n * Converts a Zod field schema into a Helix-compatible Angular `ValidatorFn`.\n *\n * Each `ZodIssue` is mapped to its `ValidatorKey`. `HelixFormField` reads\n * those keys directly — no template changes required.\n *\n * All issues from a single `safeParse` are processed simultaneously, producing\n * one `ValidationErrors` key per issue — equivalent to stacking multiple\n * `Validators` calls.\n *\n * ### Known gaps\n * - `ValidatorKey.OneOf` / `AllOf` — `z.enum()` produces `invalid_value`,\n * which has no automatic mapping. Use `fallbackKey` or continue using\n * `Validators.oneOf` / `Validators.allOf`.\n * - `invalid_type` for `boolean` expected — Helix has no `Boolean` key.\n * Use `fallbackKey` or `Validators.pattern`.\n *\n * @param schema A Zod field schema (e.g. `UserSchema.shape.email`).\n * Do NOT pass schemas with `.transform()` — use the\n * input-only (pre-transform) variant for form controls.\n * @param options `allowEmpty` (default `true`) and optional `fallbackKey`\n * for `.refine()` / `custom` validators.\n *\n * @example\n * // Standard field — no fallbackKey needed\n * HelixZodValidators.fromZod(UserSchema.shape.email)\n *\n * @example\n * // Schema with .refine() — fallbackKey required (Option B)\n * HelixZodValidators.fromZod(\n * z.string().refine(v => !banned.includes(v), 'Username not allowed'),\n * { fallbackKey: ValidatorKey.Pattern },\n * )\n *\n * @example\n * // Required field — disable allowEmpty so empty value triggers Required / MinLength\n * HelixZodValidators.fromZod(UserSchema.shape.name, { allowEmpty: false })\n */\n fromZod(schema: ZodSchema, options: ZodHelixOptions = {}): ValidatorFn {\n const { fallbackKey, allowEmpty = true } = options;\n\n return (control: AbstractControl): ValidationErrors | null => {\n const value: unknown = control.value;\n\n // Replicate Validators' allowEmpty = true default:\n // skip Zod entirely for empty values unless the caller opts out.\n if (allowEmpty && isEmptyValue(value)) {\n return null;\n }\n\n const result = schema.safeParse(value);\n if (result.success) return null;\n\n const errors: ValidationErrors = {};\n\n for (const issue of result.error.issues) {\n const key = zodIssueToHelixKey(issue, value);\n\n if (key !== null) {\n errors[key] = issue.message;\n continue;\n }\n\n // No automatic mapping — apply Option B logic.\n if (fallbackKey !== undefined) {\n errors[fallbackKey] = issue.message;\n } else {\n // ngDevMode is set by Angular's build toolchain:\n // true in development builds, false (tree-shaken) in production.\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n throw new Error(\n `[HelixZodValidators.fromZod] Zod issue code \"${issue.code}\" has no ` +\n `automatic ValidatorKey mapping.\\n` +\n `Pass { fallbackKey: ValidatorKey.xxx } as the second argument.\\n` +\n `Failing issue: ${JSON.stringify(issue, null, 2)}`,\n );\n }\n // Production: skip the unmapped issue silently.\n // The control remains invalid if other issues produce mapped errors.\n }\n }\n\n return Object.keys(errors).length ? errors : null;\n };\n },\n};\n","/*\n * Public API Surface of @gravionlabs/helix-zod\n */\n\n// Dynamic forms — components\nexport { HelixDynamicField } from './lib/dynamic-form/components/dynamic-field/dynamic-field';\nexport { HelixDynamicForm } from './lib/dynamic-form/components/dynamic-form/dynamic-form';\n// Dynamic forms — errors\nexport type { HelixErrorMessageResolver } from './lib/dynamic-form/errors/helix-signal-errors';\nexport {\n helixErrorKey,\n helixFirstErrorMessage,\n} from './lib/dynamic-form/errors/helix-signal-errors';\n\n// Dynamic forms — schema engine\nexport type { HelixFieldDescriptor } from './lib/dynamic-form/model/helix-field-descriptor';\n// Dynamic forms — metadata\nexport type {\n HelixFieldMeta,\n HelixSelectOption,\n HelixWidgetKind,\n} from './lib/dynamic-form/model/helix-field-meta';\nexport {\n helixFieldMetaRegistry,\n helixMeta,\n readHelixMeta,\n} from './lib/dynamic-form/model/helix-field-meta';\n// Dynamic forms — registry & provider\nexport type { HelixFieldWidgetRegistration } from './lib/dynamic-form/registry/field-registry';\nexport {\n HELIX_DYNAMIC_FIELD_WIDGETS,\n HELIX_ERROR_MESSAGE_RESOLVER,\n HelixFieldWidgetResolver,\n} from './lib/dynamic-form/registry/field-registry';\nexport type { HelixDynamicFormsConfig } from './lib/dynamic-form/registry/provide-helix-dynamic-forms';\nexport { provideHelixDynamicForms } from './lib/dynamic-form/registry/provide-helix-dynamic-forms';\nexport { fieldAtPath } from './lib/dynamic-form/schema/field-path.utils';\nexport { buildHelixSchema } from './lib/dynamic-form/schema/signal-schema-builder';\nexport { buildDefaultValue } from './lib/dynamic-form/schema/zod-defaults';\nexport { zodToFieldDescriptors } from './lib/dynamic-form/schema/zod-field-walker';\nexport { HelixArrayWidget } from './lib/dynamic-form/widgets/array-widget/array-widget';\nexport { HelixCheckboxWidget } from './lib/dynamic-form/widgets/checkbox-widget/checkbox-widget';\nexport { HelixDateInput } from './lib/dynamic-form/widgets/date-widget/date-input';\nexport { HelixDateWidget } from './lib/dynamic-form/widgets/date-widget/date-widget';\nexport { HelixNumberWidget } from './lib/dynamic-form/widgets/number-widget/number-widget';\nexport { HelixObjectWidget } from './lib/dynamic-form/widgets/object-widget/object-widget';\nexport { HelixSelectWidget } from './lib/dynamic-form/widgets/select-widget/select-widget';\nexport { HelixTextWidget } from './lib/dynamic-form/widgets/text-widget/text-widget';\nexport { HelixTextareaWidget } from './lib/dynamic-form/widgets/textarea-widget/textarea-widget';\nexport { HelixUnionWidget } from './lib/dynamic-form/widgets/union-widget/union-widget';\n// Dynamic forms — widgets\nexport { HelixFieldWidgetBase } from './lib/dynamic-form/widgets/widget-base';\n// Reactive-forms bridge\nexport type { ZodHelixOptions } from './lib/helix-zod-validators';\nexport { HelixZodValidators } from './lib/helix-zod-validators';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["defOf","WRAPPER_TYPES"],"mappings":"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"}
1
+ {"version":3,"file":"gravionlabs-helix-zod.mjs","sources":["../../../projects/zod/src/lib/dynamic-form/registry/field-registry.ts","../../../projects/zod/src/lib/dynamic-form/components/dynamic-field/dynamic-field.ts","../../../projects/zod/src/lib/dynamic-form/components/dynamic-field/dynamic-field.html","../../../projects/zod/src/lib/dynamic-form/schema/zod-defaults.ts","../../../projects/zod/src/lib/dynamic-form/schema/signal-schema-builder.ts","../../../projects/zod/src/lib/dynamic-form/model/helix-field-meta.ts","../../../projects/zod/src/lib/dynamic-form/schema/zod-field-walker.ts","../../../projects/zod/src/lib/dynamic-form/components/dynamic-form/dynamic-form.ts","../../../projects/zod/src/lib/dynamic-form/components/dynamic-form/dynamic-form.html","../../../projects/zod/src/lib/internal/zod-issue-map.ts","../../../projects/zod/src/lib/dynamic-form/errors/helix-signal-errors.ts","../../../projects/zod/src/lib/dynamic-form/widgets/widget-base.ts","../../../projects/zod/src/lib/dynamic-form/widgets/array-widget/array-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/array-widget/array-widget.html","../../../projects/zod/src/lib/dynamic-form/widgets/checkbox-widget/checkbox-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/checkbox-widget/checkbox-widget.html","../../../projects/zod/src/lib/dynamic-form/widgets/date-widget/date-input.ts","../../../projects/zod/src/lib/dynamic-form/widgets/date-widget/date-input.html","../../../projects/zod/src/lib/dynamic-form/widgets/date-widget/date-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/date-widget/date-widget.html","../../../projects/zod/src/lib/dynamic-form/widgets/number-widget/number-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/number-widget/number-widget.html","../../../projects/zod/src/lib/dynamic-form/widgets/object-widget/object-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/object-widget/object-widget.html","../../../projects/zod/src/lib/dynamic-form/widgets/select-widget/select-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/select-widget/select-widget.html","../../../projects/zod/src/lib/dynamic-form/widgets/text-widget/text-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/text-widget/text-widget.html","../../../projects/zod/src/lib/dynamic-form/widgets/textarea-widget/textarea-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/textarea-widget/textarea-widget.html","../../../projects/zod/src/lib/dynamic-form/widgets/union-widget/union-widget.ts","../../../projects/zod/src/lib/dynamic-form/widgets/union-widget/union-widget.html","../../../projects/zod/src/lib/dynamic-form/registry/provide-helix-dynamic-forms.ts","../../../projects/zod/src/lib/dynamic-form/schema/field-path.utils.ts","../../../projects/zod/src/lib/helix-zod-validators.ts","../../../projects/zod/src/public-api.ts","../../../projects/zod/src/gravionlabs-helix-zod.ts"],"sourcesContent":["import { Injectable, InjectionToken, inject, type Type } from '@angular/core';\nimport type { HelixErrorMessageResolver } from '../errors/helix-signal-errors';\nimport type { HelixWidgetKind } from '../model/helix-field-meta';\n\n// Declared by Angular's build toolchain — true in development, false in production.\ndeclare const ngDevMode: boolean | undefined;\n\n/** Registers a widget component for a {@link HelixWidgetKind}. */\nexport interface HelixFieldWidgetRegistration {\n widget: HelixWidgetKind;\n /** Component with `field` and `descriptor` inputs (see `HelixFieldWidgetBase`). */\n component: Type<unknown>;\n}\n\n/**\n * Multi-provider token holding widget registrations. Later registrations win,\n * so consumer widgets registered after the built-ins override them.\n */\nexport const HELIX_DYNAMIC_FIELD_WIDGETS = new InjectionToken<\n readonly HelixFieldWidgetRegistration[][]\n>('HELIX_DYNAMIC_FIELD_WIDGETS');\n\n/** Optional app-level error message resolver used by all built-in widgets. */\nexport const HELIX_ERROR_MESSAGE_RESOLVER = new InjectionToken<HelixErrorMessageResolver>(\n 'HELIX_ERROR_MESSAGE_RESOLVER',\n);\n\n/** Resolves the widget component registered for a widget kind. */\n@Injectable({ providedIn: 'root' })\nexport class HelixFieldWidgetResolver {\n readonly #registrations = inject(HELIX_DYNAMIC_FIELD_WIDGETS, { optional: true }) ?? [];\n\n resolve(widget: HelixWidgetKind): Type<unknown> {\n const flat = this.#registrations.flat();\n for (let i = flat.length - 1; i >= 0; i--) {\n if (flat[i].widget === widget) return flat[i].component;\n }\n throw new Error(\n `[HelixFieldWidgetResolver] No widget registered for kind \"${widget}\". ` +\n (typeof ngDevMode !== 'undefined' && ngDevMode\n ? `Did you forget provideHelixDynamicForms() or a custom { widgets: [...] } registration?`\n : ''),\n );\n }\n}\n","import { NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport type { Field } from '@angular/forms/signals';\nimport type { HelixFieldDescriptor } from '../../model/helix-field-descriptor';\nimport { HelixFieldWidgetResolver } from '../../registry/field-registry';\n\n/**\n * Dispatches one field descriptor to its registered widget component.\n *\n * Handles `hidden()` centrally: a hidden field renders nothing, per the\n * signal-forms guidance to `@if` on the hidden state.\n *\n * Imports no widget statically — composite widgets (object/array/union) import\n * this component, and built-in registrations live in\n * `provideHelixDynamicForms()`, which breaks the import cycle.\n */\n@Component({\n selector: 'helix-dynamic-field',\n standalone: true,\n imports: [NgComponentOutlet],\n templateUrl: './dynamic-field.html',\n styleUrl: './dynamic-field.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixDynamicField {\n readonly field = input.required<Field<any>>();\n readonly descriptor = input.required<HelixFieldDescriptor>();\n\n readonly #resolver = inject(HelixFieldWidgetResolver);\n\n protected readonly component = computed(() => this.#resolver.resolve(this.descriptor().widget));\n\n protected readonly outletInputs = computed(() => ({\n field: this.field(),\n descriptor: this.descriptor(),\n }));\n\n protected readonly hiddenState = computed(() => this.field()().hidden());\n}\n","@if (!hiddenState()) {\n <ng-container [ngComponentOutlet]=\"component()\" [ngComponentOutletInputs]=\"outletInputs()\" />\n}\n","import type { z } from 'zod';\n\ntype AnyZod = z.ZodType & {\n _zod: { def: Record<string, unknown> & { type: string } };\n};\n\nconst defOf = (schema: z.ZodType) => (schema as AnyZod)._zod.def;\n\n/**\n * Builds a fully-populated initial model value for a Zod schema — signal forms\n * require a concrete model shape up front.\n *\n * Rules: `.default()` wins; strings → `''`; numbers/dates → `null` (paired\n * with parse-transforming widgets); booleans → `false`; enums → first option;\n * arrays → `[]`; objects → recursed shape; discriminated unions → default of\n * the first variant; `optional` unwraps to its inner default, `nullable` → `null`.\n */\nexport function buildDefaultValue(schema: z.ZodType): unknown {\n const def = defOf(schema);\n\n switch (def.type) {\n case 'default': {\n const dv = def['defaultValue'];\n return typeof dv === 'function' ? (dv as () => unknown)() : dv;\n }\n case 'optional': {\n // Signal forms create no child field for an `undefined` value, so optional\n // fields get their inner default (`''`, `null`, …) to stay navigable.\n return buildDefaultValue((schema as unknown as { unwrap(): z.ZodType }).unwrap());\n }\n case 'readonly':\n case 'nonoptional':\n return buildDefaultValue((schema as unknown as { unwrap(): z.ZodType }).unwrap());\n case 'nullable':\n return null;\n case 'string':\n return '';\n case 'number':\n case 'int':\n case 'date':\n return null;\n case 'boolean':\n return false;\n case 'enum': {\n const options = (schema as unknown as { options: readonly unknown[] }).options;\n return options[0];\n }\n case 'literal': {\n const values = def['values'] as readonly unknown[];\n return values[0];\n }\n case 'array':\n return [];\n case 'object': {\n const shape = (schema as unknown as { shape: Record<string, z.ZodType> }).shape;\n const value: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(shape)) {\n value[key] = buildDefaultValue(child);\n }\n return value;\n }\n case 'union': {\n const options = (schema as unknown as { options: readonly z.ZodType[] }).options;\n return buildDefaultValue(options[0]);\n }\n default:\n return undefined;\n }\n}\n\n/**\n * Optional (non-nullable) leaves hold an empty model value (`null`) so signal\n * forms keep a child field for them; Zod expects them absent. Maps those\n * top-level `null`s to `undefined` before validating/parsing.\n */\nexport function nullsToAbsent(schema: z.ZodObject, value: unknown): unknown {\n if (typeof value !== 'object' || value === null) return value;\n const shape = (schema as unknown as { shape: Record<string, z.ZodType> }).shape;\n const result: Record<string, unknown> = { ...(value as Record<string, unknown>) };\n for (const [key, child] of Object.entries(shape)) {\n if (\n result[key] === null &&\n child.safeParse(undefined).success &&\n !child.safeParse(null).success\n ) {\n result[key] = undefined;\n }\n }\n return result;\n}\n","import {\n applyEach,\n applyWhenValue,\n disabled,\n type FieldContext,\n hidden,\n readonly,\n required,\n type SchemaFn,\n type SchemaPath,\n validateStandardSchema,\n} from '@angular/forms/signals';\nimport type { z } from 'zod';\nimport type { HelixFieldDescriptor } from '../model/helix-field-descriptor';\nimport { nullsToAbsent } from './zod-defaults';\n\n/**\n * Builds the signal-forms schema for a Zod-driven dynamic form:\n *\n * 1. Root-level `validateStandardSchema(rootPath, zodSchema)` — Zod issue\n * paths route errors onto the matching child fields, including cross-field\n * `.refine()` errors with a `path`.\n * 2. Conditional field state from {@link HelixFieldMeta} predicates\n * (`hiddenWhen`/`disabledWhen`/`readonlyWhen`/`requiredWhen`), evaluated\n * against the root form value.\n * 3. `meta.extraSchema` escape-hatch rules per field.\n * 4. `applyEach` for array items and `applyWhenValue` for discriminated-union\n * variants, so variant/item rules stay dormant unless active.\n */\nexport function buildHelixSchema<T extends Record<string, unknown>>(\n zodSchema: z.ZodObject,\n root: HelixFieldDescriptor,\n): SchemaFn<T> {\n return (rootPath) => {\n const standard = (zodSchema as any)['~standard'];\n validateStandardSchema(\n rootPath as any,\n {\n '~standard': {\n ...standard,\n validate: (value: unknown) => standard.validate(nullsToAbsent(zodSchema, value)),\n },\n } as any,\n );\n applyDescriptorRules(rootPath as any, root, rootPath as any);\n };\n}\n\n/** Reads the root form value from any nested logic context. */\nfunction rootValueOf(ctx: FieldContext<any, any>, rootPath: SchemaPath<any>): any {\n return (ctx as { valueOf(p: SchemaPath<any>): any }).valueOf(rootPath);\n}\n\nfunction applyConditionRules(\n path: SchemaPath<any>,\n descriptor: HelixFieldDescriptor,\n rootPath: SchemaPath<any>,\n): void {\n const meta = descriptor.meta;\n\n if (meta.hiddenWhen) {\n hidden(\n path as any,\n (ctx: FieldContext<any, any>) => !!meta.hiddenWhen?.(rootValueOf(ctx, rootPath)),\n );\n }\n if (meta.disabledWhen) {\n disabled(\n path as any,\n (ctx: FieldContext<any, any>) => meta.disabledWhen?.(rootValueOf(ctx, rootPath)) ?? false,\n );\n }\n if (meta.readonlyWhen) {\n readonly(\n path as any,\n (ctx: FieldContext<any, any>) => !!meta.readonlyWhen?.(rootValueOf(ctx, rootPath)),\n );\n }\n if (meta.requiredWhen) {\n required(path as any, {\n when: (ctx: FieldContext<any, any>) => !!meta.requiredWhen?.(rootValueOf(ctx, rootPath)),\n });\n }\n meta.extraSchema?.(path as any);\n}\n\nfunction applyDescriptorRules(\n path: SchemaPath<any>,\n descriptor: HelixFieldDescriptor,\n rootPath: SchemaPath<any>,\n): void {\n // Root-level conditions make no sense on the form itself — only on fields.\n if (path !== rootPath) applyConditionRules(path, descriptor, rootPath);\n\n for (const child of descriptor.children ?? []) {\n applyDescriptorRules((path as any)[child.key], child, rootPath);\n }\n\n if (descriptor.itemDescriptor) {\n const item = descriptor.itemDescriptor;\n applyEach(\n path as any,\n ((itemPath: any) => {\n applyDescriptorRules(itemPath, item, rootPath);\n }) as any,\n );\n }\n\n if (descriptor.union) {\n const { discriminator, variants } = descriptor.union;\n for (const [tag, variant] of variants) {\n applyWhenValue(\n path as any,\n ((value: any) => value?.[discriminator] === tag) as (value: any) => value is any,\n ((variantPath: any) => {\n // The union field itself carries the variant's children.\n for (const child of variant.children ?? []) {\n applyDescriptorRules(variantPath[child.key], child, rootPath);\n }\n }) as any,\n );\n }\n }\n}\n","import type { SchemaPath } from '@angular/forms/signals';\nimport { z } from 'zod';\n\n/**\n * Built-in widget kinds plus any custom key registered via\n * `provideHelixDynamicForms({ widgets })`.\n */\nexport type HelixWidgetKind =\n | 'text'\n | 'email'\n | 'password'\n | 'textarea'\n | 'number'\n | 'checkbox'\n | 'select'\n | 'date'\n | 'object'\n | 'array'\n | 'union'\n // biome-ignore lint/complexity/noBannedTypes: `string & {}` keeps literal autocomplete while allowing custom keys\n | (string & {});\n\nexport interface HelixSelectOption {\n label: string;\n value: unknown;\n}\n\n/**\n * UI metadata attached to a Zod field schema. Drives labels, widget selection,\n * ordering and the conditional engine of the dynamic form renderer.\n *\n * Attach it with {@link helixMeta} (preferred — keeps the same schema instance)\n * or via `schema.meta({ title, description, helix: { ... } })`.\n *\n * @template TRoot The root form model type the conditional predicates receive.\n */\nexport interface HelixFieldMeta<TRoot = Record<string, unknown>> {\n label?: string;\n placeholder?: string;\n hint?: string;\n /** Overrides the widget inferred from the Zod type. */\n widget?: HelixWidgetKind;\n /** Options for select-like widgets. Inferred from `z.enum()` when omitted. */\n options?: readonly HelixSelectOption[] | readonly string[];\n /** Render order among siblings — lower first; fields without order keep shape order. */\n order?: number;\n /** Label of the add button for array widgets. */\n addLabel?: string;\n /** Label of the remove button for array widgets. */\n removeLabel?: string;\n /** Hides the field (and excludes its errors from parent validity) when true. */\n hiddenWhen?: (root: TRoot) => boolean;\n /** Disables the field when truthy; a string return becomes the disabled reason. */\n disabledWhen?: (root: TRoot) => boolean | string;\n readonlyWhen?: (root: TRoot) => boolean;\n /** Marks the field required (signal-forms `required()` with `when`). */\n requiredWhen?: (root: TRoot) => boolean;\n /**\n * Escape hatch: additional signal-forms rules applied to this field's path\n * inside the generated schema (e.g. `p => validate(p, ...)`).\n */\n extraSchema?: (path: SchemaPath<any>) => void;\n /** Arbitrary passthrough for custom widgets. */\n [key: string]: unknown;\n}\n\n/**\n * Typed registry backing {@link helixMeta}. Checked before the zod global\n * registry by {@link readHelixMeta}.\n */\nexport const helixFieldMetaRegistry = z.registry<HelixFieldMeta>();\n\n/**\n * Attaches Helix UI metadata to a Zod schema and returns the **same** instance.\n *\n * Prefer this over `.meta()`, which clones the schema — metadata must live on\n * the exact instance composed into the `z.object()` shape for the walker to\n * find it.\n *\n * @example\n * const UserSchema = z.object({\n * email: helixMeta(z.email(), { label: 'E-mail', placeholder: 'you@example.com' }),\n * });\n */\nexport function helixMeta<S extends z.ZodType, TRoot = Record<string, unknown>>(\n schema: S,\n meta: HelixFieldMeta<TRoot>,\n): S {\n (helixFieldMetaRegistry as any).add(schema, meta);\n return schema;\n}\n\nconst WRAPPER_TYPES = new Set(['optional', 'nullable', 'default', 'readonly', 'nonoptional']);\n\nfunction metaOf(schema: z.ZodType): HelixFieldMeta | undefined {\n const registered = helixFieldMetaRegistry.get(schema);\n if (registered) return registered as HelixFieldMeta;\n\n const globalMeta = schema.meta();\n if (!globalMeta) return undefined;\n\n const { title, description, helix, ...rest } = globalMeta as {\n title?: string;\n description?: string;\n helix?: HelixFieldMeta;\n };\n const mapped: HelixFieldMeta = { ...rest };\n if (title !== undefined) mapped.label = title;\n if (description !== undefined) mapped.hint = description;\n return { ...mapped, ...helix };\n}\n\n/**\n * Reads {@link HelixFieldMeta} from a Zod schema: the typed registry first,\n * then the zod global registry (`.meta()` — `title` → `label`,\n * `description` → `hint`, `helix` key merged on top).\n *\n * Wrapper types (`optional`, `nullable`, `default`, `readonly`) are unwrapped\n * and their metadata merged — outermost wins.\n */\nexport function readHelixMeta(schema: z.ZodType): HelixFieldMeta {\n const layers: HelixFieldMeta[] = [];\n let current: z.ZodType | undefined = schema;\n\n while (current) {\n const meta = metaOf(current);\n if (meta) layers.push(meta);\n\n const def: { type: string } = (current as any)._zod.def;\n current = WRAPPER_TYPES.has(def.type) ? ((current as any).unwrap() as z.ZodType) : undefined;\n }\n\n // Innermost first so outer layers overwrite inner ones.\n return layers.reverse().reduce<HelixFieldMeta>((acc, layer) => ({ ...acc, ...layer }), {});\n}\n","import type { z } from 'zod';\nimport type { HelixFieldDescriptor } from '../model/helix-field-descriptor';\nimport {\n type HelixFieldMeta,\n type HelixSelectOption,\n type HelixWidgetKind,\n readHelixMeta,\n} from '../model/helix-field-meta';\n\n// Declared by Angular's build toolchain — true in development, false in production.\ndeclare const ngDevMode: boolean | undefined;\n\nconst WRAPPER_TYPES = new Set(['optional', 'nullable', 'default', 'readonly', 'nonoptional']);\n\n/** Native `<input type>` per input-based widget kind. */\nconst INPUT_TYPES: Record<string, string> = {\n text: 'text',\n email: 'email',\n password: 'password',\n number: 'number',\n date: 'date',\n};\n\ninterface Unwrapped {\n inner: z.ZodType;\n required: boolean;\n}\n\ntype AnyZod = z.ZodType & {\n _zod: { def: Record<string, unknown> & { type: string } };\n};\n\nfunction defOf(schema: z.ZodType): Record<string, unknown> & { type: string } {\n return (schema as AnyZod)._zod.def;\n}\n\n/** Peels optional/nullable/default/readonly wrappers, tracking requiredness. */\nfunction unwrap(schema: z.ZodType): Unwrapped {\n let inner = schema;\n let required = true;\n while (WRAPPER_TYPES.has(defOf(inner).type)) {\n const type = defOf(inner).type;\n if (type === 'optional' || type === 'nullable' || type === 'default') required = false;\n if (type === 'nonoptional') required = true;\n inner = (inner as unknown as { unwrap(): z.ZodType }).unwrap();\n }\n return { inner, required };\n}\n\nfunction normalizeOptions(\n options: HelixFieldMeta['options'],\n): readonly HelixSelectOption[] | undefined {\n if (!options) return undefined;\n return options.map((o) =>\n typeof o === 'string' ? { label: o, value: o } : (o as HelixSelectOption),\n );\n}\n\nfunction inferWidget(inner: z.ZodType): HelixWidgetKind | null {\n const def = defOf(inner);\n switch (def.type) {\n case 'string':\n return def['format'] === 'email' ? 'email' : 'text';\n case 'number':\n case 'int':\n return 'number';\n case 'boolean':\n return 'checkbox';\n case 'date':\n return 'date';\n case 'enum':\n case 'literal':\n return 'select';\n case 'array':\n return 'array';\n case 'object':\n return 'object';\n case 'union':\n return def['discriminator'] !== undefined ? 'union' : null;\n default:\n return null;\n }\n}\n\nfunction enumOptions(inner: z.ZodType): readonly HelixSelectOption[] | undefined {\n const def = defOf(inner);\n if (def.type === 'enum') {\n const values = (inner as unknown as { options: readonly (string | number)[] }).options;\n return values.map((v) => ({ label: String(v), value: v }));\n }\n if (def.type === 'literal') {\n const values = def['values'] as readonly (string | number | boolean)[];\n return values.map((v) => ({ label: String(v), value: v }));\n }\n return undefined;\n}\n\n/** Reads the discriminator literal of a union variant's tag field. */\nfunction discriminatorValue(variant: z.ZodType, discriminator: string): string | number | boolean {\n const shape = (variant as unknown as { shape: Record<string, z.ZodType> }).shape;\n const tagDef = defOf(unwrap(shape[discriminator]).inner);\n const values = tagDef['values'] as readonly (string | number | boolean)[] | undefined;\n if (!values?.length) {\n throw new Error(\n `[zodToFieldDescriptors] Discriminated union variant has no literal value for ` +\n `discriminator \"${discriminator}\".`,\n );\n }\n return values[0];\n}\n\nfunction walk(schema: z.ZodType, key: string, path: readonly string[]): HelixFieldDescriptor {\n const meta = readHelixMeta(schema);\n const { inner, required } = unwrap(schema);\n const def = defOf(inner);\n const inferred = inferWidget(inner);\n const widget = meta.widget ?? inferred;\n\n if (widget === null || widget === undefined) {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n throw new Error(\n `[zodToFieldDescriptors] Zod type \"${def.type}\" at path \"${path.join('.')}\" has no ` +\n `automatic widget mapping. Set { widget: '...' } via helixMeta() to render it with a ` +\n `registered (custom) widget.`,\n );\n }\n // Production: render nothing rather than crash — fall through as plain text.\n return {\n key,\n path,\n widget: 'text',\n meta,\n zodType: inner,\n zodSource: schema,\n required,\n inputType: 'text',\n };\n }\n\n const descriptor: HelixFieldDescriptor = {\n key,\n path,\n widget,\n meta,\n zodType: inner,\n zodSource: schema,\n required,\n inputType: INPUT_TYPES[widget],\n options: normalizeOptions(meta.options) ?? enumOptions(inner),\n };\n\n if (def.type === 'object') {\n const shape = (inner as unknown as { shape: Record<string, z.ZodType> }).shape;\n const children = Object.entries(shape).map(([childKey, childSchema], index) => ({\n index,\n descriptor: walk(childSchema, childKey, [...path, childKey]),\n }));\n children.sort(\n (a, b) =>\n (a.descriptor.meta.order ?? Number.MAX_SAFE_INTEGER) -\n (b.descriptor.meta.order ?? Number.MAX_SAFE_INTEGER) || a.index - b.index,\n );\n descriptor.children = children.map((c) => c.descriptor);\n }\n\n if (def.type === 'array') {\n descriptor.itemDescriptor = walk(def['element'] as z.ZodType, '', path);\n }\n\n if (widget === 'union' && def.type === 'union') {\n const discriminator = def['discriminator'] as string;\n const variants = new Map<string | number | boolean, HelixFieldDescriptor>();\n for (const variant of (inner as unknown as { options: readonly z.ZodType[] }).options) {\n variants.set(discriminatorValue(variant, discriminator), walk(variant, key, path));\n }\n descriptor.union = { discriminator, variants };\n }\n\n return descriptor;\n}\n\n/**\n * Walks an annotated `z.object()` schema and produces the recursive\n * {@link HelixFieldDescriptor} tree consumed by the dynamic form renderer.\n *\n * Widget inference: string→text (`z.email()`→email), number→number,\n * boolean→checkbox, date→date, enum/literal→select, array→array,\n * object→object, discriminated union→union. Anything else requires a\n * `widget` override in {@link HelixFieldMeta} (throws in dev mode otherwise).\n */\nexport function zodToFieldDescriptors(schema: z.ZodObject): HelixFieldDescriptor {\n return walk(schema as unknown as z.ZodType, '', []);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n Injector,\n inject,\n input,\n output,\n signal,\n untracked,\n type WritableSignal,\n} from '@angular/core';\nimport { form, submit } from '@angular/forms/signals';\nimport type { z } from 'zod';\nimport type { HelixFieldDescriptor } from '../../model/helix-field-descriptor';\nimport { buildHelixSchema } from '../../schema/signal-schema-builder';\nimport { buildDefaultValue, nullsToAbsent } from '../../schema/zod-defaults';\nimport { zodToFieldDescriptors } from '../../schema/zod-field-walker';\nimport { HelixDynamicField } from '../dynamic-field/dynamic-field';\n\n/**\n * Renders a complete signal form from an annotated Zod object schema.\n *\n * - Validation: root-level `validateStandardSchema` — Zod issues are routed to\n * the matching fields.\n * - Model: pass your own `WritableSignal` via `model`, or let the component\n * derive an initial value from the schema (`buildDefaultValue`).\n * - Swapping the `schema` input recreates the form and resets its state.\n * - `submitted` emits the **parsed** (`schema.parse`) value on valid submit.\n *\n * Requires `provideHelixDynamicForms()` in the injector chain.\n */\n@Component({\n selector: 'helix-dynamic-form',\n standalone: true,\n imports: [HelixDynamicField],\n templateUrl: './dynamic-form.html',\n styleUrl: './dynamic-form.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixDynamicForm<T extends Record<string, unknown> = Record<string, unknown>> {\n readonly schema = input.required<z.ZodObject>();\n /** Optional external model — omit to derive the initial value from the schema. */\n readonly model = input<WritableSignal<T>>();\n readonly submitLabel = input('Submit');\n readonly showSubmit = input(true);\n\n readonly submitted = output<T>();\n\n readonly #injector = inject(Injector);\n\n protected readonly descriptors = computed(() => zodToFieldDescriptors(this.schema()));\n\n readonly #model = computed<WritableSignal<T>>(\n () => this.model() ?? signal(buildDefaultValue(this.schema() as unknown as z.ZodType) as T),\n );\n\n /** The form's `FieldTree` — recreated (state reset) when the schema changes. */\n readonly formTree = computed(() => {\n const model = this.#model();\n const schema = this.schema();\n const root = this.descriptors();\n return untracked(() =>\n form(model, buildHelixSchema<T>(schema, root), { injector: this.#injector }),\n );\n });\n\n protected childField(descriptor: HelixFieldDescriptor): any {\n return (this.formTree() as any)[descriptor.key];\n }\n\n protected async handleSubmit(event: Event): Promise<void> {\n event.preventDefault();\n await submit(this.formTree(), async (tree) => {\n this.submitted.emit(this.schema().parse(nullsToAbsent(this.schema(), tree().value())) as T);\n return undefined;\n });\n }\n}\n","<form class=\"helix-dynamic-form\" novalidate (submit)=\"handleSubmit($event)\">\n @for (child of descriptors().children ?? []; track child.key) {\n <helix-dynamic-field [field]=\"childField(child)\" [descriptor]=\"child\" />\n }\n\n @if (showSubmit()) {\n <button\n type=\"submit\"\n class=\"helix-dynamic-form__submit\"\n [disabled]=\"formTree()().submitting()\"\n >\n {{ submitLabel() }}\n </button>\n }\n</form>\n","import { ValidatorKey } from '@gravionlabs/helix-core/validators';\nimport { type ZodIssue, ZodIssueCode } from 'zod';\n\n// Mirrors Validators' internal EMPTY_VALUES — defined locally to avoid\n// depending on unexported internals of @gravionlabs/helix-core.\nexport const EMPTY_VALUES: unknown[] = ['', null, undefined];\nexport const isEmptyValue = (v: unknown): boolean => EMPTY_VALUES.includes(v);\n\n/**\n * Maps a single `ZodIssue` to the corresponding `ValidatorKey`.\n *\n * NOTE: Zod v4 breaking changes accounted for here:\n * - `invalid_string` → `invalid_format` with `format` property (not `validation`)\n * - `too_small`/`too_big` use `origin` instead of `type`\n * - `not_integer` removed → `invalid_type` with `expected: 'int'`\n * - `invalid_type` for null/undefined no longer has a `received` field;\n * detected via the `value` parameter instead\n *\n * Returns `null` for issue codes with no automatic mapping — caller handles\n * these via `fallbackKey` (Option B).\n */\nexport function zodIssueToHelixKey(issue: ZodIssue, value: unknown): ValidatorKey | null {\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n // Zod v4 dropped the `received` field on invalid_type issues.\n // Detect required (null/undefined) errors by checking the control value directly.\n if (isEmptyValue(value)) return ValidatorKey.Required;\n // integer: Zod v4 changed not_integer → invalid_type { expected: 'int' }\n if ((issue as { expected: string }).expected === 'int') return ValidatorKey.Integer;\n // numeric type mismatch\n if (\n (issue as { expected: string }).expected === 'number' ||\n (issue as { expected: string }).expected === 'float'\n ) {\n return ValidatorKey.Number;\n }\n return null;\n\n case ZodIssueCode.invalid_format:\n // Zod v4: replaces invalid_string for all format-based string validations.\n // The `format` property holds the validation name.\n {\n const fmt = (issue as { format: string }).format;\n if (fmt === 'email') return ValidatorKey.Email;\n if (fmt === 'regex') return ValidatorKey.Pattern;\n if (fmt === 'datetime' || fmt === 'date' || fmt === 'time') return ValidatorKey.Date;\n }\n return null;\n\n case ZodIssueCode.too_small:\n // Zod v4: uses `origin` instead of `type` to identify the validated construct.\n {\n const origin = (issue as { origin: string }).origin;\n if (origin === 'string' || origin === 'array') return ValidatorKey.MinLength;\n if (origin === 'number') return ValidatorKey.Min;\n }\n return null;\n\n case ZodIssueCode.too_big:\n {\n const origin = (issue as { origin: string }).origin;\n if (origin === 'string' || origin === 'array') return ValidatorKey.MaxLength;\n if (origin === 'number') return ValidatorKey.Max;\n }\n return null;\n\n case ZodIssueCode.custom:\n return null; // must be handled via fallbackKey (Option B)\n\n default:\n return null;\n }\n}\n","import type { ValidationError } from '@angular/forms/signals';\nimport { ValidatorKey } from '@gravionlabs/helix-core/validators';\nimport type { ZodIssue } from 'zod';\nimport { zodIssueToHelixKey } from '../../internal/zod-issue-map';\n\n/**\n * App-level hook to customize user-facing error messages centrally.\n * Return a string to use it, or `null`/`undefined` to fall back to the\n * default message for the error.\n */\nexport type HelixErrorMessageResolver = (\n error: ValidationError,\n helixKey: ValidatorKey | null,\n) => string | null | undefined;\n\n/** Built-in signal-forms error kinds → ValidatorKey. */\nconst NG_KIND_TO_HELIX: Record<string, ValidatorKey> = {\n required: ValidatorKey.Required,\n min: ValidatorKey.Min,\n max: ValidatorKey.Max,\n minLength: ValidatorKey.MinLength,\n maxLength: ValidatorKey.MaxLength,\n pattern: ValidatorKey.Pattern,\n email: ValidatorKey.Email,\n};\n\n/**\n * Maps a signal-forms `ValidationError` to the `ValidatorKey` message\n * convention shared with `HelixZodValidators.fromZod`.\n *\n * @param error The signal-forms validation error.\n * @param value The current field value — used to distinguish Required from\n * type errors on Zod `invalid_type` issues (Zod v4 dropped the\n * `received` field).\n */\nexport function helixErrorKey(error: ValidationError, value?: unknown): ValidatorKey | null {\n if (error.kind === 'standardSchema') {\n const issue = (error as unknown as { issue: unknown }).issue as ZodIssue;\n return zodIssueToHelixKey(issue, value);\n }\n return NG_KIND_TO_HELIX[error.kind] ?? null;\n}\n\nfunction defaultMessage(error: ValidationError): string | null {\n if (error.kind === 'standardSchema') {\n const issue = (error as unknown as { issue: { message?: string } }).issue;\n return issue.message ?? null;\n }\n return error.message ?? null;\n}\n\n/**\n * Returns the message of the first displayable error, mirroring\n * `HelixFormField`'s first-error convention.\n *\n * Order of precedence per error: `resolver` result → Zod issue message /\n * signal-forms error message. Errors yielding no message are skipped.\n */\nexport function helixFirstErrorMessage(\n errors: readonly ValidationError[],\n options: { value?: unknown; resolver?: HelixErrorMessageResolver } = {},\n): string | null {\n for (const error of errors) {\n const resolved = options.resolver?.(error, helixErrorKey(error, options.value));\n const message = resolved ?? defaultMessage(error);\n if (message) return message;\n }\n return null;\n}\n","import { computed, Directive, inject, input } from '@angular/core';\nimport type { Field, FieldState } from '@angular/forms/signals';\nimport { helixFirstErrorMessage } from '../errors/helix-signal-errors';\nimport type { HelixFieldDescriptor } from '../model/helix-field-descriptor';\nimport { HELIX_ERROR_MESSAGE_RESOLVER } from '../registry/field-registry';\n\n/**\n * Base class for dynamic-form widgets. A widget is a standalone component with\n * the two inputs below; `HelixDynamicField` instantiates it via\n * `NgComponentOutlet` and feeds them in.\n */\n@Directive()\nexport abstract class HelixFieldWidgetBase<T = any> {\n readonly field = input.required<Field<T>>();\n readonly descriptor = input.required<HelixFieldDescriptor>();\n\n readonly #errorResolver = inject(HELIX_ERROR_MESSAGE_RESOLVER, { optional: true });\n\n protected readonly state = computed<FieldState<T>>(() => this.field()());\n\n /** Touched-gated first error message — mirrors `HelixFormField.activeError`. */\n protected readonly firstError = computed<string | null>(() => {\n const state = this.state();\n if (!state.touched()) return null;\n return helixFirstErrorMessage(state.errors(), {\n value: state.value(),\n resolver: this.#errorResolver ?? undefined,\n });\n });\n\n protected readonly label = computed(\n () => this.descriptor().meta.label ?? humanize(this.descriptor().key),\n );\n protected readonly hint = computed(() => this.descriptor().meta.hint);\n protected readonly placeholder = computed(() => this.descriptor().meta.placeholder ?? '');\n}\n\n/** `firstName` → `First name` — fallback label when meta provides none. */\nfunction humanize(key: string): string {\n if (!key) return '';\n const words = key\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/[_-]+/g, ' ')\n .toLowerCase();\n return words.charAt(0).toUpperCase() + words.slice(1);\n}\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { HelixDynamicField } from '../../components/dynamic-field/dynamic-field';\nimport { buildDefaultValue } from '../../schema/zod-defaults';\nimport { HelixFieldWidgetBase } from '../widget-base';\n\n/** Built-in widget for `z.array()` fields — item list with add/remove. */\n@Component({\n selector: 'helix-array-widget',\n standalone: true,\n imports: [HelixDynamicField],\n templateUrl: './array-widget.html',\n styleUrl: './array-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixArrayWidget extends HelixFieldWidgetBase<unknown[]> {\n protected readonly itemFields = computed(() => {\n const length = (this.state().value() ?? []).length;\n return Array.from({ length }, (_, index) => (this.field() as any)[index]);\n });\n\n protected readonly addLabel = computed(() => this.descriptor().meta.addLabel ?? 'Add');\n protected readonly removeLabel = computed(() => this.descriptor().meta.removeLabel ?? 'Remove');\n\n protected add(): void {\n const item = this.descriptor().itemDescriptor;\n if (!item) return;\n const value = buildDefaultValue(item.zodSource);\n this.state().value.update((current) => [...(current ?? []), value]);\n }\n\n protected removeAt(index: number): void {\n this.state().value.update((current) => (current ?? []).filter((_, i) => i !== index));\n }\n}\n","<div class=\"helix-array-widget\">\n @if (label(); as l) {\n <div class=\"helix-array-widget__label\">{{ l }}</div>\n }\n\n @for (itemField of itemFields(); track $index) {\n <div class=\"helix-array-widget__item\">\n <helix-dynamic-field [field]=\"itemField\" [descriptor]=\"descriptor().itemDescriptor!\" />\n <button\n type=\"button\"\n class=\"helix-array-widget__remove\"\n (click)=\"removeAt($index)\"\n >\n {{ removeLabel() }}\n </button>\n </div>\n }\n\n <button type=\"button\" class=\"helix-array-widget__add\" (click)=\"add()\">{{ addLabel() }}</button>\n\n @if (firstError(); as err) {\n <small class=\"helix-array-widget__message helix-array-widget__message--error\">{{ err }}</small>\n } @else if (hint(); as h) {\n <small class=\"helix-array-widget__message helix-array-widget__message--hint\">{{ h }}</small>\n }\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { HelixFieldWidgetBase } from '../widget-base';\n\n/** Built-in widget for boolean fields — checkbox with inline label. */\n@Component({\n selector: 'helix-checkbox-widget',\n standalone: true,\n imports: [FormField],\n templateUrl: './checkbox-widget.html',\n styleUrl: './checkbox-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixCheckboxWidget extends HelixFieldWidgetBase<boolean> {}\n","<div class=\"helix-checkbox-widget\">\n <label class=\"helix-checkbox-widget__label\">\n <input class=\"helix-checkbox-widget__input\" type=\"checkbox\" [formField]=\"field()\" />\n <span>{{ label() }}</span>\n </label>\n\n @if (firstError(); as err) {\n <small class=\"helix-checkbox-widget__message helix-checkbox-widget__message--error\">{{ err }}</small>\n } @else if (hint(); as h) {\n <small class=\"helix-checkbox-widget__message helix-checkbox-widget__message--hint\">{{ h }}</small>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { type FormValueControl, transformedValue } from '@angular/forms/signals';\n\nfunction toIsoDate(value: Date): string {\n const y = value.getFullYear().toString().padStart(4, '0');\n const m = (value.getMonth() + 1).toString().padStart(2, '0');\n const d = value.getDate().toString().padStart(2, '0');\n return `${y}-${m}-${d}`;\n}\n\n/**\n * Native `<input type=\"date\">` exposed as a signal-forms `FormValueControl`\n * with a `Date | null` model — string↔Date conversion via `transformedValue`.\n */\n@Component({\n selector: 'helix-date-input',\n standalone: true,\n templateUrl: './date-input.html',\n styleUrl: './date-input.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixDateInput implements FormValueControl<Date | null> {\n readonly value = model.required<Date | null>();\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly touched = model(false);\n\n protected readonly rawValue = transformedValue(this.value, {\n parse: (raw: string) => {\n if (raw === '') return { value: null };\n const parsed = new Date(`${raw}T00:00:00`);\n if (Number.isNaN(parsed.getTime())) {\n return { error: { kind: 'parse', message: `\"${raw}\" is not a valid date` } };\n }\n return { value: parsed };\n },\n format: (value) => (value ? toIsoDate(value) : ''),\n });\n\n protected onInput(event: Event): void {\n this.rawValue.set((event.target as HTMLInputElement).value);\n }\n\n protected onBlur(): void {\n this.touched.set(true);\n }\n}\n","<input\n class=\"helix-date-input__input\"\n type=\"date\"\n [value]=\"rawValue()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n/>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { HelixFormField } from '@gravionlabs/helix-shell';\nimport { HelixFieldWidgetBase } from '../widget-base';\nimport { HelixDateInput } from './date-input';\n\n/** Built-in widget for `z.date()` fields. */\n@Component({\n selector: 'helix-date-widget',\n standalone: true,\n imports: [FormField, HelixFormField, HelixDateInput],\n templateUrl: './date-widget.html',\n styleUrl: './date-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixDateWidget extends HelixFieldWidgetBase<Date | null> {}\n","<helix-form-field [label]=\"label()\" [hint]=\"hint()\" [error]=\"firstError()\">\n <helix-date-input [formField]=\"field()\" />\n</helix-form-field>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { HelixFormField } from '@gravionlabs/helix-shell';\nimport { HelixFieldWidgetBase } from '../widget-base';\n\n/** Built-in widget for numeric fields. */\n@Component({\n selector: 'helix-number-widget',\n standalone: true,\n imports: [FormField, HelixFormField],\n templateUrl: './number-widget.html',\n styleUrl: './number-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixNumberWidget extends HelixFieldWidgetBase<number | null> {}\n","<helix-form-field [label]=\"label()\" [hint]=\"hint()\" [error]=\"firstError()\">\n <input\n class=\"helix-number-widget__input\"\n type=\"number\"\n [placeholder]=\"placeholder()\"\n [formField]=\"field()\"\n />\n</helix-form-field>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { HelixDynamicField } from '../../components/dynamic-field/dynamic-field';\nimport { HelixFieldWidgetBase } from '../widget-base';\n\n/** Built-in widget for nested `z.object()` fields — fieldset + recursion. */\n@Component({\n selector: 'helix-object-widget',\n standalone: true,\n imports: [HelixDynamicField],\n templateUrl: './object-widget.html',\n styleUrl: './object-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixObjectWidget extends HelixFieldWidgetBase<Record<string, unknown>> {\n protected childField(key: string): any {\n return (this.field() as any)[key];\n }\n}\n","<fieldset class=\"helix-object-widget\">\n @if (label(); as l) {\n <legend class=\"helix-object-widget__legend\">{{ l }}</legend>\n }\n @if (hint(); as h) {\n <small class=\"helix-object-widget__hint\">{{ h }}</small>\n }\n\n @for (child of descriptor().children ?? []; track child.key) {\n <helix-dynamic-field [field]=\"childField(child.key)\" [descriptor]=\"child\" />\n }\n</fieldset>\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { HelixFormField, HelixSelect } from '@gravionlabs/helix-shell';\nimport { HelixFieldWidgetBase } from '../widget-base';\n\n/**\n * Built-in widget for enum/select fields — wraps `HelixSelect`, which the\n * signal-forms `FormField` directive binds via its `ControlValueAccessor`.\n */\n@Component({\n selector: 'helix-select-widget',\n standalone: true,\n imports: [FormField, HelixFormField, HelixSelect],\n templateUrl: './select-widget.html',\n styleUrl: './select-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixSelectWidget extends HelixFieldWidgetBase<unknown> {\n protected readonly selectOptions = computed(() => [...(this.descriptor().options ?? [])]);\n}\n","<helix-form-field [label]=\"label()\" [hint]=\"hint()\" [error]=\"firstError()\">\n <helix-select\n [options]=\"selectOptions()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"state().disabled()\"\n [formField]=\"field()\"\n />\n</helix-form-field>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { HelixFormField } from '@gravionlabs/helix-shell';\nimport { HelixFieldWidgetBase } from '../widget-base';\n\n/** Built-in widget for `text`, `email` and `password` fields. */\n@Component({\n selector: 'helix-text-widget',\n standalone: true,\n imports: [FormField, HelixFormField],\n templateUrl: './text-widget.html',\n styleUrl: './text-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixTextWidget extends HelixFieldWidgetBase<string> {}\n","<helix-form-field [label]=\"label()\" [hint]=\"hint()\" [error]=\"firstError()\">\n <input\n class=\"helix-text-widget__input\"\n [type]=\"descriptor().inputType ?? 'text'\"\n [placeholder]=\"placeholder()\"\n [formField]=\"field()\"\n />\n</helix-form-field>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormField } from '@angular/forms/signals';\nimport { HelixFormField } from '@gravionlabs/helix-shell';\nimport { HelixFieldWidgetBase } from '../widget-base';\n\n/** Built-in widget for multiline text (`widget: 'textarea'`). */\n@Component({\n selector: 'helix-textarea-widget',\n standalone: true,\n imports: [FormField, HelixFormField],\n templateUrl: './textarea-widget.html',\n styleUrl: './textarea-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixTextareaWidget extends HelixFieldWidgetBase<string> {}\n","<helix-form-field [label]=\"label()\" [hint]=\"hint()\" [error]=\"firstError()\">\n <textarea\n class=\"helix-textarea-widget__input\"\n rows=\"4\"\n [placeholder]=\"placeholder()\"\n [formField]=\"field()\"\n ></textarea>\n</helix-form-field>\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { HelixFormField } from '@gravionlabs/helix-shell';\nimport { HelixDynamicField } from '../../components/dynamic-field/dynamic-field';\nimport { buildDefaultValue } from '../../schema/zod-defaults';\nimport { HelixFieldWidgetBase } from '../widget-base';\n\n/**\n * Built-in widget for `z.discriminatedUnion()` fields: a discriminator select\n * plus the active variant's fields.\n *\n * Switching the discriminator **resets** the union value to the new variant's\n * default (preserving the discriminator) — mandatory so the model always\n * matches the active variant's shape and all field paths exist.\n */\n@Component({\n selector: 'helix-union-widget',\n standalone: true,\n imports: [HelixDynamicField, HelixFormField],\n templateUrl: './union-widget.html',\n styleUrl: './union-widget.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixUnionWidget extends HelixFieldWidgetBase<Record<string, unknown>> {\n protected readonly discriminator = computed(() => this.descriptor().union?.discriminator ?? '');\n\n protected readonly tags = computed(() => [...(this.descriptor().union?.variants.keys() ?? [])]);\n\n protected readonly activeTag = computed(\n () => (this.state().value() as Record<string, unknown> | undefined)?.[this.discriminator()],\n );\n\n protected readonly variantChildren = computed(() => {\n const variant = this.descriptor().union?.variants.get(this.activeTag() as string);\n return (variant?.children ?? []).filter((c) => c.key !== this.discriminator());\n });\n\n protected childField(key: string): any {\n return (this.field() as any)[key];\n }\n\n protected onTagChange(event: Event): void {\n const index = Number.parseInt((event.target as HTMLSelectElement).value, 10);\n const tag = this.tags()[index];\n const variant = this.descriptor().union?.variants.get(tag);\n if (variant === undefined || tag === this.activeTag()) return;\n\n const next = buildDefaultValue(variant.zodSource) as Record<string, unknown>;\n next[this.discriminator()] = tag;\n this.state().value.set(next);\n }\n}\n","<div class=\"helix-union-widget\">\n <helix-form-field [label]=\"label()\" [hint]=\"hint()\" [error]=\"firstError()\">\n <div class=\"helix-union-widget__select-wrapper\">\n <select\n class=\"helix-union-widget__select\"\n [disabled]=\"state().disabled()\"\n (change)=\"onTagChange($event)\"\n >\n @for (tag of tags(); track tag) {\n <option [value]=\"$index\" [selected]=\"tag === activeTag()\">{{ tag }}</option>\n }\n </select>\n <i class=\"helix-union-widget__icon pi pi-chevron-down\"></i>\n </div>\n </helix-form-field>\n\n @for (child of variantChildren(); track child.key) {\n <helix-dynamic-field [field]=\"childField(child.key)\" [descriptor]=\"child\" />\n }\n</div>\n","import { type EnvironmentProviders, makeEnvironmentProviders, type Provider } from '@angular/core';\nimport type { HelixErrorMessageResolver } from '../errors/helix-signal-errors';\nimport { HelixArrayWidget } from '../widgets/array-widget/array-widget';\nimport { HelixCheckboxWidget } from '../widgets/checkbox-widget/checkbox-widget';\nimport { HelixDateWidget } from '../widgets/date-widget/date-widget';\nimport { HelixNumberWidget } from '../widgets/number-widget/number-widget';\nimport { HelixObjectWidget } from '../widgets/object-widget/object-widget';\nimport { HelixSelectWidget } from '../widgets/select-widget/select-widget';\nimport { HelixTextWidget } from '../widgets/text-widget/text-widget';\nimport { HelixTextareaWidget } from '../widgets/textarea-widget/textarea-widget';\nimport { HelixUnionWidget } from '../widgets/union-widget/union-widget';\nimport {\n HELIX_DYNAMIC_FIELD_WIDGETS,\n HELIX_ERROR_MESSAGE_RESOLVER,\n type HelixFieldWidgetRegistration,\n HelixFieldWidgetResolver,\n} from './field-registry';\n\nconst BUILT_IN_WIDGETS: readonly HelixFieldWidgetRegistration[] = [\n { widget: 'text', component: HelixTextWidget },\n { widget: 'email', component: HelixTextWidget },\n { widget: 'password', component: HelixTextWidget },\n { widget: 'textarea', component: HelixTextareaWidget },\n { widget: 'number', component: HelixNumberWidget },\n { widget: 'checkbox', component: HelixCheckboxWidget },\n { widget: 'select', component: HelixSelectWidget },\n { widget: 'date', component: HelixDateWidget },\n { widget: 'object', component: HelixObjectWidget },\n { widget: 'array', component: HelixArrayWidget },\n { widget: 'union', component: HelixUnionWidget },\n];\n\nexport interface HelixDynamicFormsConfig {\n /**\n * Additional widget registrations. Registered after the built-ins, so a\n * registration for an existing kind (e.g. `'select'`) overrides it.\n */\n widgets?: readonly HelixFieldWidgetRegistration[];\n /** Central override hook for user-facing error messages. */\n errorMessageResolver?: HelixErrorMessageResolver;\n}\n\n/**\n * Provides the dynamic-form widget registry (built-in widgets included) and\n * optional configuration. Add it to `ApplicationConfig.providers` or a route's\n * `providers`.\n */\nexport function provideHelixDynamicForms(\n config: HelixDynamicFormsConfig = {},\n): EnvironmentProviders {\n const providers: Provider[] = [\n { provide: HELIX_DYNAMIC_FIELD_WIDGETS, multi: true, useValue: BUILT_IN_WIDGETS },\n // Re-provide the resolver here so it is created in THIS environment\n // injector and sees the registrations above. The `providedIn: 'root'`\n // fallback instance cannot see route-scoped providers.\n HelixFieldWidgetResolver,\n ];\n if (config.widgets?.length) {\n providers.push({ provide: HELIX_DYNAMIC_FIELD_WIDGETS, multi: true, useValue: config.widgets });\n }\n if (config.errorMessageResolver) {\n providers.push({\n provide: HELIX_ERROR_MESSAGE_RESOLVER,\n useValue: config.errorMessageResolver,\n });\n }\n return makeEnvironmentProviders(providers);\n}\n","import type { FieldTree } from '@angular/forms/signals';\n\n/**\n * Navigates a `FieldTree` by a root-relative property path\n * (e.g. `['address', 'city']`).\n */\nexport function fieldAtPath(tree: FieldTree<any>, path: readonly string[]): any {\n let current: any = tree;\n for (const key of path) {\n current = current[key];\n if (current === undefined) {\n throw new Error(`[fieldAtPath] No field at path \"${path.join('.')}\" (missing key \"${key}\").`);\n }\n }\n return current;\n}\n","import type { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport type { ValidatorKey } from '@gravionlabs/helix-core/validators';\nimport type { ZodSchema } from 'zod';\nimport { isEmptyValue, zodIssueToHelixKey } from './internal/zod-issue-map';\n\n// Declared by Angular's build toolchain — true in development, false in production.\ndeclare const ngDevMode: boolean | undefined;\n\nexport interface ZodHelixOptions {\n /**\n * Required when the schema contains `.refine()` or `.superRefine()`.\n * Those produce `ZodIssueCode.custom` which has no automatic `ValidatorKey`\n * mapping. The bridge throws a descriptive error in development (`ngDevMode`)\n * and skips silently in production when this is missing and a custom issue occurs.\n *\n * @example\n * HelixZodValidators.fromZod(\n * z.string().refine(v => !banned.includes(v), 'Not allowed'),\n * { fallbackKey: ValidatorKey.Pattern },\n * )\n */\n fallbackKey?: ValidatorKey;\n\n /**\n * When `true` (default), empty values (`''`, `null`, `undefined`) bypass Zod\n * and return `null` — matching `Validators`' default `allowEmpty = true`.\n * Set to `false` to let Zod validate empty values (e.g. for required fields).\n */\n allowEmpty?: boolean;\n}\n\nexport const HelixZodValidators = {\n /**\n * Converts a Zod field schema into a Helix-compatible Angular `ValidatorFn`.\n *\n * Each `ZodIssue` is mapped to its `ValidatorKey`. `HelixFormField` reads\n * those keys directly — no template changes required.\n *\n * All issues from a single `safeParse` are processed simultaneously, producing\n * one `ValidationErrors` key per issue — equivalent to stacking multiple\n * `Validators` calls.\n *\n * ### Known gaps\n * - `ValidatorKey.OneOf` / `AllOf` — `z.enum()` produces `invalid_value`,\n * which has no automatic mapping. Use `fallbackKey` or continue using\n * `Validators.oneOf` / `Validators.allOf`.\n * - `invalid_type` for `boolean` expected — Helix has no `Boolean` key.\n * Use `fallbackKey` or `Validators.pattern`.\n *\n * @param schema A Zod field schema (e.g. `UserSchema.shape.email`).\n * Do NOT pass schemas with `.transform()` — use the\n * input-only (pre-transform) variant for form controls.\n * @param options `allowEmpty` (default `true`) and optional `fallbackKey`\n * for `.refine()` / `custom` validators.\n *\n * @example\n * // Standard field — no fallbackKey needed\n * HelixZodValidators.fromZod(UserSchema.shape.email)\n *\n * @example\n * // Schema with .refine() — fallbackKey required (Option B)\n * HelixZodValidators.fromZod(\n * z.string().refine(v => !banned.includes(v), 'Username not allowed'),\n * { fallbackKey: ValidatorKey.Pattern },\n * )\n *\n * @example\n * // Required field — disable allowEmpty so empty value triggers Required / MinLength\n * HelixZodValidators.fromZod(UserSchema.shape.name, { allowEmpty: false })\n */\n fromZod(schema: ZodSchema, options: ZodHelixOptions = {}): ValidatorFn {\n const { fallbackKey, allowEmpty = true } = options;\n\n return (control: AbstractControl): ValidationErrors | null => {\n const value: unknown = control.value;\n\n // Replicate Validators' allowEmpty = true default:\n // skip Zod entirely for empty values unless the caller opts out.\n if (allowEmpty && isEmptyValue(value)) {\n return null;\n }\n\n const result = schema.safeParse(value);\n if (result.success) return null;\n\n const errors: ValidationErrors = {};\n\n for (const issue of result.error.issues) {\n const key = zodIssueToHelixKey(issue, value);\n\n if (key !== null) {\n errors[key] = issue.message;\n continue;\n }\n\n // No automatic mapping — apply Option B logic.\n if (fallbackKey !== undefined) {\n errors[fallbackKey] = issue.message;\n } else {\n // ngDevMode is set by Angular's build toolchain:\n // true in development builds, false (tree-shaken) in production.\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n throw new Error(\n `[HelixZodValidators.fromZod] Zod issue code \"${issue.code}\" has no ` +\n `automatic ValidatorKey mapping.\\n` +\n `Pass { fallbackKey: ValidatorKey.xxx } as the second argument.\\n` +\n `Failing issue: ${JSON.stringify(issue, null, 2)}`,\n );\n }\n // Production: skip the unmapped issue silently.\n // The control remains invalid if other issues produce mapped errors.\n }\n }\n\n return Object.keys(errors).length ? errors : null;\n };\n },\n};\n","/*\n * Public API Surface of @gravionlabs/helix-zod\n */\n\n// Dynamic forms — components\nexport { HelixDynamicField } from './lib/dynamic-form/components/dynamic-field/dynamic-field';\nexport { HelixDynamicForm } from './lib/dynamic-form/components/dynamic-form/dynamic-form';\n// Dynamic forms — errors\nexport type { HelixErrorMessageResolver } from './lib/dynamic-form/errors/helix-signal-errors';\nexport {\n helixErrorKey,\n helixFirstErrorMessage,\n} from './lib/dynamic-form/errors/helix-signal-errors';\n\n// Dynamic forms — schema engine\nexport type { HelixFieldDescriptor } from './lib/dynamic-form/model/helix-field-descriptor';\n// Dynamic forms — metadata\nexport type {\n HelixFieldMeta,\n HelixSelectOption,\n HelixWidgetKind,\n} from './lib/dynamic-form/model/helix-field-meta';\nexport {\n helixFieldMetaRegistry,\n helixMeta,\n readHelixMeta,\n} from './lib/dynamic-form/model/helix-field-meta';\n// Dynamic forms — registry & provider\nexport type { HelixFieldWidgetRegistration } from './lib/dynamic-form/registry/field-registry';\nexport {\n HELIX_DYNAMIC_FIELD_WIDGETS,\n HELIX_ERROR_MESSAGE_RESOLVER,\n HelixFieldWidgetResolver,\n} from './lib/dynamic-form/registry/field-registry';\nexport type { HelixDynamicFormsConfig } from './lib/dynamic-form/registry/provide-helix-dynamic-forms';\nexport { provideHelixDynamicForms } from './lib/dynamic-form/registry/provide-helix-dynamic-forms';\nexport { fieldAtPath } from './lib/dynamic-form/schema/field-path.utils';\nexport { buildHelixSchema } from './lib/dynamic-form/schema/signal-schema-builder';\nexport { buildDefaultValue } from './lib/dynamic-form/schema/zod-defaults';\nexport { zodToFieldDescriptors } from './lib/dynamic-form/schema/zod-field-walker';\nexport { HelixArrayWidget } from './lib/dynamic-form/widgets/array-widget/array-widget';\nexport { HelixCheckboxWidget } from './lib/dynamic-form/widgets/checkbox-widget/checkbox-widget';\nexport { HelixDateInput } from './lib/dynamic-form/widgets/date-widget/date-input';\nexport { HelixDateWidget } from './lib/dynamic-form/widgets/date-widget/date-widget';\nexport { HelixNumberWidget } from './lib/dynamic-form/widgets/number-widget/number-widget';\nexport { HelixObjectWidget } from './lib/dynamic-form/widgets/object-widget/object-widget';\nexport { HelixSelectWidget } from './lib/dynamic-form/widgets/select-widget/select-widget';\nexport { HelixTextWidget } from './lib/dynamic-form/widgets/text-widget/text-widget';\nexport { HelixTextareaWidget } from './lib/dynamic-form/widgets/textarea-widget/textarea-widget';\nexport { HelixUnionWidget } from './lib/dynamic-form/widgets/union-widget/union-widget';\n// Dynamic forms — widgets\nexport { HelixFieldWidgetBase } from './lib/dynamic-form/widgets/widget-base';\n// Reactive-forms bridge\nexport type { ZodHelixOptions } from './lib/helix-zod-validators';\nexport { HelixZodValidators } from './lib/helix-zod-validators';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["defOf","WRAPPER_TYPES"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravionlabs/helix-zod",
3
- "version": "22.1.1",
3
+ "version": "22.1.2",
4
4
  "description": "Helix Zod v4 adapter for Angular — reactive-forms validator bridge and dynamic forms from annotated Zod schemas.",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -262,8 +262,7 @@ declare function buildHelixSchema<T extends Record<string, unknown>>(zodSchema:
262
262
  * Rules: `.default()` wins; strings → `''`; numbers/dates → `null` (paired
263
263
  * with parse-transforming widgets); booleans → `false`; enums → first option;
264
264
  * arrays → `[]`; objects → recursed shape; discriminated unions → default of
265
- * the first variant; `optional`/`nullable` leaves without a more specific
266
- * default → `undefined` / `null`.
265
+ * the first variant; `optional` unwraps to its inner default, `nullable` → `null`.
267
266
  */
268
267
  declare function buildDefaultValue(schema: z.ZodType): unknown;
269
268