@mk-kit/ui 0.37.0 → 0.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mk-kit-ui-dynamic-form.mjs","sources":["../../../projects/mk-kit/dynamic-form/dynamic-form.types.ts","../../../projects/mk-kit/dynamic-form/schema.ts","../../../projects/mk-kit/dynamic-form/dynamic-form.ts","../../../projects/mk-kit/dynamic-form/dynamic-fields.html","../../../projects/mk-kit/dynamic-form/dynamic-form.html","../../../projects/mk-kit/dynamic-form/mk-kit-ui-dynamic-form.ts"],"sourcesContent":["import type { ValidatorFn } from '@angular/forms';\n\n/**\n * Field kinds `mk-dynamic-form` renders out of the box. Each maps to one\n * mk-kit control; `custom` renders a projected `mkDynamicField` template.\n */\nexport type MkDynamicFieldType =\n | 'text'\n | 'email'\n | 'password'\n | 'url'\n | 'tel'\n | 'search'\n | 'textarea'\n | 'number'\n | 'currency'\n | 'date'\n | 'time'\n | 'datetime'\n | 'select'\n | 'multi-select'\n | 'autocomplete'\n | 'radio'\n | 'toggle'\n | 'checkbox'\n | 'switch'\n | 'slider'\n | 'rating'\n | 'color'\n | 'tags'\n | 'phone'\n | 'file'\n | 'code'\n | 'custom';\n\n/** One option of a select / radio / toggle / autocomplete field. */\nexport interface MkDynamicOption {\n label: string;\n value: unknown;\n disabled?: boolean;\n}\n\n/**\n * Declarative validators — plain data so a schema can be stored as JSON.\n * `custom` takes Angular validator functions for anything else.\n */\nexport interface MkDynamicValidators {\n min?: number;\n max?: number;\n minLength?: number;\n maxLength?: number;\n /** A RegExp or its source string. */\n pattern?: string | RegExp;\n email?: boolean;\n /** Angular validator functions appended after the declarative ones. */\n custom?: ValidatorFn[];\n}\n\n/**\n * A serialisable condition over the form value (dotted paths reach into\n * groups: `address.country`). Combine with `and` / `or`; a function is the\n * escape hatch for TypeScript-only schemas.\n */\nexport type MkDynamicCondition =\n | { field: string; eq?: unknown; neq?: unknown; in?: unknown[]; notIn?: unknown[]; truthy?: boolean; empty?: boolean }\n | { and: MkDynamicCondition[] }\n | { or: MkDynamicCondition[] }\n | { not: MkDynamicCondition }\n | ((value: Record<string, unknown>) => boolean);\n\n/** Properties shared by every field that holds a value. */\nexport interface MkDynamicFieldBase {\n /** Key in the form value. */\n key: string;\n type: MkDynamicFieldType;\n label?: string;\n hint?: string;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n /** Initial value when the form (or a new array item) is created. */\n default?: unknown;\n validators?: MkDynamicValidators;\n /** Options for select / multi-select / radio / toggle / autocomplete. */\n options?: readonly MkDynamicOption[];\n /**\n * Extra inputs forwarded to the underlying control — the subset each type\n * understands (`rows`, `min`, `max`, `step`, `currency`, `accept`,\n * `multiple`, `swatches`, `language`, …). See the docs table.\n */\n props?: Record<string, unknown>;\n /** Grid columns (1–12) the field spans. Default: the form's `columns` split. */\n span?: number;\n /** Render (and enable) only when the condition holds. Hidden fields are excluded from the value. */\n showWhen?: MkDynamicCondition;\n /** Disable while the condition holds. */\n disabledWhen?: MkDynamicCondition;\n}\n\n/** A nested object: its fields become a child `FormGroup` under `key`. */\nexport interface MkDynamicGroup {\n type: 'group';\n key: string;\n label?: string;\n hint?: string;\n fields: MkDynamicField[];\n span?: number;\n /** Columns for the group's own grid (default: inherits the form's). */\n columns?: number;\n showWhen?: MkDynamicCondition;\n disabledWhen?: MkDynamicCondition;\n}\n\n/** A list of objects: a `FormArray` of groups with add / remove controls. */\nexport interface MkDynamicArray {\n type: 'array';\n key: string;\n label?: string;\n hint?: string;\n /** Fields of one item. */\n fields: MkDynamicField[];\n min?: number;\n max?: number;\n addLabel?: string;\n /** Initial items (each is patched over the item defaults). */\n default?: Record<string, unknown>[];\n span?: number;\n columns?: number;\n showWhen?: MkDynamicCondition;\n disabledWhen?: MkDynamicCondition;\n}\n\n/** A heading + description with no value of its own. */\nexport interface MkDynamicSection {\n type: 'section';\n label: string;\n hint?: string;\n span?: number;\n showWhen?: MkDynamicCondition;\n}\n\nexport type MkDynamicField = MkDynamicFieldBase | MkDynamicGroup | MkDynamicArray | MkDynamicSection;\n\n/** The whole form. */\nexport interface MkDynamicSchema {\n fields: MkDynamicField[];\n /** Default number of columns fields are laid out in (1–12). Default 1. */\n columns?: number;\n}\n\nexport function mkIsGroup(f: MkDynamicField): f is MkDynamicGroup {\n return f.type === 'group';\n}\nexport function mkIsArray(f: MkDynamicField): f is MkDynamicArray {\n return f.type === 'array';\n}\nexport function mkIsSection(f: MkDynamicField): f is MkDynamicSection {\n return f.type === 'section';\n}\nexport function mkIsValueField(f: MkDynamicField): f is MkDynamicFieldBase {\n return f.type !== 'group' && f.type !== 'array' && f.type !== 'section';\n}\n","import { AbstractControl, FormArray, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';\nimport {\n MkDynamicArray,\n MkDynamicCondition,\n MkDynamicField,\n MkDynamicFieldBase,\n MkDynamicGroup,\n MkDynamicSchema,\n mkIsArray,\n mkIsGroup,\n mkIsSection,\n} from './dynamic-form.types';\n\n/* ------------------------------------------------------------------------ */\n/* Defaults */\n/* ------------------------------------------------------------------------ */\n\n/** The empty value a field type starts with when no `default` is given. */\nexport function mkDynamicEmptyValue(field: MkDynamicFieldBase): unknown {\n switch (field.type) {\n case 'checkbox':\n case 'switch':\n return false;\n case 'multi-select':\n case 'tags':\n case 'file':\n return [];\n case 'number':\n case 'currency':\n case 'slider':\n case 'rating':\n case 'date':\n case 'time':\n case 'datetime':\n case 'select':\n case 'radio':\n case 'toggle':\n case 'autocomplete':\n case 'color':\n case 'phone':\n return null;\n default:\n return '';\n }\n}\n\n/** Default value object of a field list (groups nested, arrays as item lists). */\nexport function mkDynamicDefaults(fields: readonly MkDynamicField[]): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const f of fields) {\n if (mkIsSection(f)) continue;\n if (mkIsGroup(f)) out[f.key] = mkDynamicDefaults(f.fields);\n else if (mkIsArray(f)) out[f.key] = (f.default ?? []).map((item) => ({ ...mkDynamicDefaults(f.fields), ...item }));\n else out[f.key] = f.default !== undefined ? f.default : mkDynamicEmptyValue(f);\n }\n return out;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Validators */\n/* ------------------------------------------------------------------------ */\n\n/** Angular validators for one value field, from its declarative `validators` + `required`. */\nexport function mkDynamicValidators(field: MkDynamicFieldBase): ValidatorFn[] {\n const v = field.validators ?? {};\n const out: ValidatorFn[] = [];\n if (field.required) out.push(field.type === 'checkbox' || field.type === 'switch' ? Validators.requiredTrue : Validators.required);\n if (v.min !== undefined) out.push(Validators.min(v.min));\n if (v.max !== undefined) out.push(Validators.max(v.max));\n if (v.minLength !== undefined) out.push(Validators.minLength(v.minLength));\n if (v.maxLength !== undefined) out.push(Validators.maxLength(v.maxLength));\n if (v.pattern !== undefined) out.push(Validators.pattern(v.pattern));\n if (v.email || field.type === 'email') out.push(Validators.email);\n if (v.custom) out.push(...v.custom);\n return out;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Form construction */\n/* ------------------------------------------------------------------------ */\n\n/** Build the `FormControl` / `FormGroup` / `FormArray` for one field. */\nexport function mkDynamicControl(field: MkDynamicField, value?: unknown): AbstractControl {\n if (mkIsGroup(field)) return mkDynamicGroup(field.fields, value as Record<string, unknown> | undefined);\n if (mkIsArray(field)) {\n const items = (value as Record<string, unknown>[] | undefined) ?? field.default ?? [];\n return new FormArray(\n items.map((item) => mkDynamicGroup(field.fields, item)),\n arrayValidators(field),\n );\n }\n const f = field as MkDynamicFieldBase;\n const initial = value !== undefined ? value : f.default !== undefined ? f.default : mkDynamicEmptyValue(f);\n return new FormControl({ value: initial, disabled: !!f.disabled }, { validators: mkDynamicValidators(f) });\n}\n\nfunction arrayValidators(field: MkDynamicArray): ValidatorFn[] {\n const out: ValidatorFn[] = [];\n if (field.min) out.push((c) => ((c as FormArray).length < field.min! ? { minItems: { requiredLength: field.min, actualLength: (c as FormArray).length } } : null));\n if (field.max) out.push((c) => ((c as FormArray).length > field.max! ? { maxItems: { requiredLength: field.max, actualLength: (c as FormArray).length } } : null));\n return out;\n}\n\n/** A `FormGroup` for a field list; `value` (partial) overrides the defaults. */\nexport function mkDynamicGroup(fields: readonly MkDynamicField[], value?: Record<string, unknown>): FormGroup {\n const controls: Record<string, AbstractControl> = {};\n for (const f of fields) {\n if (mkIsSection(f)) continue;\n controls[f.key] = mkDynamicControl(f, value?.[f.key]);\n }\n return new FormGroup(controls);\n}\n\n/** Build the reactive form of a whole schema. */\nexport function mkDynamicForm(schema: MkDynamicSchema, value?: Record<string, unknown>): FormGroup {\n return mkDynamicGroup(schema.fields, value);\n}\n\n/* ------------------------------------------------------------------------ */\n/* Conditions */\n/* ------------------------------------------------------------------------ */\n\nfunction read(value: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce<unknown>((acc, k) => (acc && typeof acc === 'object' ? (acc as Record<string, unknown>)[k] : undefined), value);\n}\n\nfunction isEmpty(v: unknown): boolean {\n return v === null || v === undefined || v === '' || v === false || (Array.isArray(v) && v.length === 0);\n}\n\n/**\n * Evaluate a condition against a form value. `value` is normally the whole\n * form value; inside an array item the item's own value is used, with the\n * root available under `$root`.\n */\nexport function mkDynamicCondition(cond: MkDynamicCondition | undefined, value: Record<string, unknown>): boolean {\n if (cond === undefined) return true;\n if (typeof cond === 'function') return !!cond(value);\n if ('and' in cond) return cond.and.every((c) => mkDynamicCondition(c, value));\n if ('or' in cond) return cond.or.some((c) => mkDynamicCondition(c, value));\n if ('not' in cond) return !mkDynamicCondition(cond.not, value);\n const v = read(value, cond.field);\n if ('eq' in cond && v !== cond.eq) return false;\n if ('neq' in cond && v === cond.neq) return false;\n if (cond.in && !cond.in.includes(v)) return false;\n if (cond.notIn && cond.notIn.includes(v)) return false;\n if (cond.truthy !== undefined && !!v !== cond.truthy) return false;\n if (cond.empty !== undefined && isEmpty(v) !== cond.empty) return false;\n return true;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Introspection helpers */\n/* ------------------------------------------------------------------------ */\n\n/** Depth-first list of every value field with its dotted path. */\nexport function mkDynamicFlatten(\n fields: readonly MkDynamicField[],\n prefix = '',\n): Array<{ path: string; field: MkDynamicFieldBase | MkDynamicGroup | MkDynamicArray }> {\n const out: Array<{ path: string; field: MkDynamicFieldBase | MkDynamicGroup | MkDynamicArray }> = [];\n for (const f of fields) {\n if (mkIsSection(f)) continue;\n const path = prefix ? `${prefix}.${f.key}` : f.key;\n out.push({ path, field: f });\n if (mkIsGroup(f)) out.push(...mkDynamicFlatten(f.fields, path));\n }\n return out;\n}\n\n/** Column span a field takes in a grid of `columns`. */\nexport function mkDynamicSpan(field: MkDynamicField, columns: number): number {\n const c = Math.min(12, Math.max(1, columns || 1));\n if (mkIsSection(field) || mkIsGroup(field) || mkIsArray(field)) return field.span ?? 12;\n const span = field.span ?? Math.round(12 / c);\n return Math.min(12, Math.max(1, span));\n}\n\nexport type { MkDynamicGroup as MkDynamicGroupField };\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n TemplateRef,\n booleanAttribute,\n computed,\n contentChildren,\n effect,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, FormArray, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { DestroyRef } from '@angular/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkButton } from '@mk-kit/ui/button';\nimport { MkCheckbox } from '@mk-kit/ui/checkbox';\nimport {\n MkAutocomplete,\n MkButtonToggle,\n MkButtonToggleGroup,\n MkCodeEditor,\n MkColorPicker,\n MkCurrencyInput,\n MkFileUpload,\n MkFormField,\n MkInput,\n MkMultiSelect,\n MkNumberInput,\n MkPasswordInput,\n MkPhoneInput,\n MkRadio,\n MkRadioGroup,\n MkRating,\n MkSelect,\n MkSlider,\n MkSwitch,\n MkTagInput,\n} from '@mk-kit/ui/forms';\nimport { MkDatePicker, MkDateTimePicker, MkTimePicker } from '@mk-kit/ui/datetime';\nimport {\n MkDynamicArray,\n MkDynamicField,\n MkDynamicFieldBase,\n MkDynamicGroup,\n MkDynamicSchema,\n mkIsArray,\n mkIsGroup,\n mkIsSection,\n mkIsValueField,\n} from './dynamic-form.types';\nimport { mkDynamicCondition, mkDynamicForm, mkDynamicGroup, mkDynamicSpan } from './schema';\n\n/** Context handed to a custom field template. */\nexport interface MkDynamicFieldContext {\n $implicit: MkDynamicFieldBase;\n field: MkDynamicFieldBase;\n /** The field's `FormControl` — bind it with `[formControl]`. */\n control: FormControl;\n /** The current value of the whole form (or array item). */\n value: Record<string, unknown>;\n}\n\n/**\n * Registers a renderer for a custom field type:\n *\n * ```html\n * <mk-dynamic-form [schema]=\"schema\">\n * <ng-template mkDynamicField=\"signature\" let-field let-control=\"control\">\n * <mk-signature-pad [formControl]=\"control\" />\n * </ng-template>\n * </mk-dynamic-form>\n * ```\n *\n * A field `{ type: 'custom', key: 'sig', props: { renderer: 'signature' } }`\n * (or any built-in `type` you want to override) then renders this template\n * inside the usual `mk-form-field`.\n */\n@Directive({ selector: 'ng-template[mkDynamicField]' })\nexport class MkDynamicFieldDef {\n /** The type (or `props.renderer` name) this template renders. */\n readonly mkDynamicField = input.required<string>();\n readonly template = inject<TemplateRef<MkDynamicFieldContext>>(TemplateRef);\n\n static ngTemplateContextGuard(_dir: MkDynamicFieldDef, ctx: unknown): ctx is MkDynamicFieldContext {\n return true;\n }\n}\n\n/**\n * Renders one field list (the root, a group, or one array item) as a grid.\n * Internal — projected by {@link MkDynamicForm}; recursive for groups/arrays.\n */\n@Component({\n selector: 'mk-dynamic-fields',\n templateUrl: './dynamic-fields.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ReactiveFormsModule,\n NgTemplateOutlet,\n MkButton,\n MkCheckbox,\n MkFormField,\n MkInput,\n MkNumberInput,\n MkCurrencyInput,\n MkSelect,\n MkMultiSelect,\n MkAutocomplete,\n MkRadioGroup,\n MkRadio,\n MkButtonToggleGroup,\n MkButtonToggle,\n MkSwitch,\n MkSlider,\n MkRating,\n MkColorPicker,\n MkTagInput,\n MkPhoneInput,\n MkFileUpload,\n MkCodeEditor,\n MkPasswordInput,\n MkDatePicker,\n MkTimePicker,\n MkDateTimePicker,\n forwardRef(() => MkDynamicFields),\n ],\n host: {\n class: 'mk-dynamic-fields',\n '[style.--mk-dyn-columns]': 'columns()',\n },\n})\nexport class MkDynamicFields {\n private readonly root = inject(forwardRef(() => MkDynamicForm));\n protected readonly i18n = inject(MK_I18N);\n\n readonly fields = input.required<readonly MkDynamicField[]>();\n readonly group = input.required<FormGroup>();\n readonly columns = input(1, { transform: numberAttribute });\n /** Value the conditions of this level are evaluated against. */\n readonly scope = input.required<Record<string, unknown>>();\n\n protected readonly labelPosition = computed(() => this.root.labelPosition());\n protected readonly size = computed(() => this.root.size());\n\n protected control(f: MkDynamicField): AbstractControl {\n return this.group().get((f as MkDynamicFieldBase).key)!;\n }\n\n protected formGroup(f: MkDynamicGroup): FormGroup {\n return this.group().get(f.key) as FormGroup;\n }\n\n protected formArray(f: MkDynamicArray): FormArray<FormGroup> {\n return this.group().get(f.key) as FormArray<FormGroup>;\n }\n\n protected isVisible(f: MkDynamicField): boolean {\n return mkDynamicCondition(f.showWhen, this.scope());\n }\n\n protected span(f: MkDynamicField): number {\n return mkDynamicSpan(f, this.columns());\n }\n\n protected columnsOf(f: MkDynamicGroup | MkDynamicArray): number {\n return f.columns ?? this.columns();\n }\n\n protected isGroup = mkIsGroup;\n protected isArray = mkIsArray;\n protected isSection = mkIsSection;\n protected isValue = mkIsValueField;\n\n /** Custom template for a value field, if one is registered. */\n protected customTemplate(f: MkDynamicFieldBase): TemplateRef<MkDynamicFieldContext> | null {\n const name = (f.props?.['renderer'] as string | undefined) ?? f.type;\n return this.root.templateFor(name);\n }\n\n protected customContext(f: MkDynamicFieldBase): MkDynamicFieldContext {\n return { $implicit: f, field: f, control: this.control(f) as FormControl, value: this.scope() };\n }\n\n /** `props.x` with a typed default. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected p(f: MkDynamicFieldBase, key: string, fallback: unknown): any {\n const v = f.props?.[key];\n return v === undefined ? fallback : v;\n }\n\n protected inputType(f: MkDynamicFieldBase): string {\n return f.type === 'text' || f.type === 'textarea' ? 'text' : f.type;\n }\n\n protected itemScope(f: MkDynamicArray, index: number): Record<string, unknown> {\n const item = (this.formArray(f).at(index)?.getRawValue() ?? {}) as Record<string, unknown>;\n return { ...item, $root: this.scope()['$root'] ?? this.scope(), $index: index };\n }\n\n protected canAdd(f: MkDynamicArray): boolean {\n return !this.control(f).disabled && (!f.max || this.formArray(f).length < f.max);\n }\n\n protected canRemove(f: MkDynamicArray): boolean {\n return !this.control(f).disabled && this.formArray(f).length > (f.min ?? 0);\n }\n\n protected addItem(f: MkDynamicArray): void {\n const arr = this.formArray(f);\n arr.push(mkDynamicGroup(f.fields));\n arr.markAsDirty();\n this.root.sync();\n }\n\n protected removeItem(f: MkDynamicArray, index: number): void {\n const arr = this.formArray(f);\n arr.removeAt(index);\n arr.markAsDirty();\n this.root.sync();\n }\n\n protected trackItem(index: number, item: FormGroup): FormGroup {\n return item;\n }\n}\n\n/**\n * Dynamic form — renders a form from a JSON schema and manages one reactive\n * `FormGroup` for it. Every value field renders inside `mk-form-field`, so\n * labels, hints, required marks and localised validation messages come from\n * the schema alone.\n *\n * ```html\n * <mk-dynamic-form [schema]=\"schema\" [(value)]=\"user\" (formSubmit)=\"save($event)\">\n * <button mkButton type=\"submit\">Save</button>\n * </mk-dynamic-form>\n * ```\n *\n * ```ts\n * schema: MkDynamicSchema = {\n * columns: 2,\n * fields: [\n * { key: 'name', type: 'text', label: 'Name', required: true },\n * { key: 'role', type: 'select', label: 'Role', options: roles },\n * { key: 'company', type: 'text', label: 'Company', showWhen: { field: 'role', eq: 'b2b' } },\n * ],\n * };\n * ```\n *\n * - Hidden fields (`showWhen` false) are disabled, so `value` only carries\n * what the user can see; `form.getRawValue()` has everything.\n * - `form` is the live `FormGroup` for anything the schema does not cover.\n * - Custom field types: project an `ng-template[mkDynamicField]`.\n */\n@Component({\n selector: 'mk-dynamic-form',\n templateUrl: './dynamic-form.html',\n styleUrl: './dynamic-form.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ReactiveFormsModule, MkDynamicFields],\n host: {\n class: 'mk-dynamic-form',\n '[class.mk-dynamic-form--disabled]': 'disabled()',\n },\n})\nexport class MkDynamicForm {\n private readonly destroyRef = inject(DestroyRef);\n\n /** The schema. Changing it rebuilds the form (values of surviving keys are kept). */\n readonly schema = input.required<MkDynamicSchema>();\n /** Two-way form value (visible, enabled fields only). */\n readonly value = model<Record<string, unknown>>({});\n /** Disable every control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Label placement forwarded to every `mk-form-field`. */\n readonly labelPosition = input<'top' | 'float'>('top');\n /** Control size forwarded to the fields. */\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n /** Emits the value when the form is submitted and valid. */\n readonly formSubmit = output<Record<string, unknown>>();\n /** Emits when a submit is attempted while invalid (every control is marked touched). */\n readonly invalidSubmit = output<FormGroup>();\n\n private readonly defs = contentChildren(MkDynamicFieldDef, { descendants: true });\n\n private readonly formSignal = signal<FormGroup>(new FormGroup({}));\n private readonly formValue = signal<Record<string, unknown>>({});\n private subscription: { unsubscribe(): void } | null = null;\n private applying = false;\n\n /** The live reactive form. */\n get form(): FormGroup {\n return this.formSignal();\n }\n\n protected readonly formRef = computed(() => this.formSignal());\n /** Value including disabled fields — what conditions are evaluated against. */\n protected readonly scope = computed(() => this.formValue());\n protected readonly columns = computed(() => this.schema().columns ?? 1);\n protected readonly fields = computed(() => this.schema().fields);\n\n /** `true` while every control passes validation. */\n readonly valid = computed(() => {\n this.formValue();\n return this.formSignal().valid;\n });\n\n constructor() {\n // Rebuild on schema change, keeping the current value where keys survive.\n effect(() => {\n const schema = this.schema();\n const current = untracked(() => ({ ...this.formValue(), ...this.value() }));\n const form = mkDynamicForm(schema, current);\n untracked(() => this.attach(form));\n });\n // External value → form.\n effect(() => {\n const v = this.value();\n untracked(() => {\n if (this.applying) return;\n const form = this.formSignal();\n if (!shallowEqual(v, form.value as Record<string, unknown>)) {\n form.patchValue(v ?? {}, { emitEvent: true });\n }\n });\n });\n // Disabled input.\n effect(() => {\n const disabled = this.disabled();\n untracked(() => {\n const form = this.formSignal();\n if (disabled) form.disable({ emitEvent: false });\n else form.enable({ emitEvent: false });\n this.applyConditions(form, this.schema().fields, form.getRawValue() as Record<string, unknown>);\n this.sync();\n });\n });\n this.destroyRef.onDestroy(() => this.subscription?.unsubscribe());\n }\n\n private attach(form: FormGroup): void {\n this.subscription?.unsubscribe();\n this.subscription = form.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.sync());\n this.formSignal.set(form);\n if (this.disabled()) form.disable({ emitEvent: false });\n this.sync();\n }\n\n /** Re-evaluate conditions and push the form value to `value`. @internal */\n sync(): void {\n const form = this.formSignal();\n const raw = form.getRawValue() as Record<string, unknown>;\n this.applyConditions(form, this.schema().fields, raw);\n this.formValue.set(raw);\n const visible = form.value as Record<string, unknown>;\n if (!shallowEqual(visible, this.value())) {\n this.applying = true;\n try {\n this.value.set(visible);\n } finally {\n this.applying = false;\n }\n }\n }\n\n private applyConditions(group: FormGroup, fields: readonly MkDynamicField[], scope: Record<string, unknown>): void {\n if (this.disabled()) return;\n for (const f of fields) {\n if (mkIsSection(f)) continue;\n const ctrl = group.get(f.key);\n if (!ctrl) continue;\n const visible = mkDynamicCondition(f.showWhen, scope);\n const disabled = !visible || mkDynamicCondition(f.disabledWhen ?? (() => false), scope) || (mkIsValueField(f) && !!f.disabled);\n if (disabled && ctrl.enabled) ctrl.disable({ emitEvent: false });\n else if (!disabled && ctrl.disabled) ctrl.enable({ emitEvent: false });\n if (visible && mkIsGroup(f)) this.applyConditions(ctrl as FormGroup, f.fields, scope);\n if (visible && mkIsArray(f)) {\n for (const item of (ctrl as FormArray<FormGroup>).controls) {\n this.applyConditions(item, f.fields, { ...(item.getRawValue() as Record<string, unknown>), $root: scope });\n }\n }\n }\n }\n\n /** Template registered for a custom type / renderer name. @internal */\n templateFor(name: string): TemplateRef<MkDynamicFieldContext> | null {\n return this.defs().find((d) => d.mkDynamicField() === name)?.template ?? null;\n }\n\n /** Patch part of the value. */\n patch(value: Record<string, unknown>): void {\n this.form.patchValue(value);\n this.sync();\n }\n\n /** Reset to the schema defaults (or the given value). */\n reset(value?: Record<string, unknown>): void {\n const form = mkDynamicForm(this.schema(), value);\n this.attach(form);\n }\n\n /** Mark every control touched so validation messages show. */\n touchAll(): void {\n this.form.markAllAsTouched();\n this.formValue.set({ ...this.form.getRawValue() });\n }\n\n protected onSubmit(event: Event): void {\n event.preventDefault();\n const form = this.form;\n if (form.valid) {\n this.formSubmit.emit(form.value as Record<string, unknown>);\n } else {\n this.touchAll();\n this.invalidSubmit.emit(form);\n }\n }\n}\n\nfunction shallowEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') return false;\n const ka = Object.keys(a as object);\n const kb = Object.keys(b as object);\n if (ka.length !== kb.length) return false;\n for (const k of ka) {\n const x = (a as Record<string, unknown>)[k];\n const y = (b as Record<string, unknown>)[k];\n if (x === y) continue;\n if (x && y && typeof x === 'object' && typeof y === 'object') {\n if (JSON.stringify(x) !== JSON.stringify(y)) return false;\n continue;\n }\n return false;\n }\n return true;\n}\n","@for (f of fields(); track f.type + ':' + ($any(f).key ?? $any(f).label ?? $index)) {\n @if (isVisible(f)) {\n @if (isSection(f)) {\n <div class=\"mk-dynamic-fields__section\" [style.--mk-dyn-span]=\"span(f)\">\n <h3 class=\"mk-dynamic-fields__section-title\">{{ f.label }}</h3>\n @if (f.hint) {\n <p class=\"mk-dynamic-fields__section-hint\">{{ f.hint }}</p>\n }\n </div>\n } @else if (isGroup(f)) {\n <fieldset class=\"mk-dynamic-fields__group\" [style.--mk-dyn-span]=\"span(f)\" [disabled]=\"control(f).disabled\">\n @if (f.label) {\n <legend class=\"mk-dynamic-fields__legend\">{{ f.label }}</legend>\n }\n @if (f.hint) {\n <p class=\"mk-dynamic-fields__section-hint\">{{ f.hint }}</p>\n }\n <mk-dynamic-fields [fields]=\"f.fields\" [group]=\"formGroup(f)\" [columns]=\"columnsOf(f)\" [scope]=\"scope()\" />\n </fieldset>\n } @else if (isArray(f)) {\n <fieldset class=\"mk-dynamic-fields__array\" [style.--mk-dyn-span]=\"span(f)\" [disabled]=\"control(f).disabled\">\n @if (f.label) {\n <legend class=\"mk-dynamic-fields__legend\">{{ f.label }}</legend>\n }\n @if (f.hint) {\n <p class=\"mk-dynamic-fields__section-hint\">{{ f.hint }}</p>\n }\n @for (item of formArray(f).controls; track item; let i = $index) {\n <div class=\"mk-dynamic-fields__item\">\n <mk-dynamic-fields class=\"mk-dynamic-fields__item-fields\" [fields]=\"f.fields\" [group]=\"item\" [columns]=\"columnsOf(f)\" [scope]=\"itemScope(f, i)\" />\n <button\n mkButton\n type=\"button\"\n variant=\"ghost\"\n tone=\"neutral\"\n size=\"sm\"\n iconOnly\n class=\"mk-dynamic-fields__remove\"\n [attr.aria-label]=\"i18n.dynamicFormRemove(i + 1)\"\n [title]=\"i18n.dynamicFormRemove(i + 1)\"\n [disabled]=\"!canRemove(f)\"\n (click)=\"removeItem(f, i)\"\n >\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"M4 4l8 8M12 4l-8 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n </svg>\n </button>\n </div>\n }\n <div class=\"mk-dynamic-fields__array-actions\">\n <button mkButton type=\"button\" variant=\"soft\" size=\"sm\" [disabled]=\"!canAdd(f)\" (click)=\"addItem(f)\">\n {{ f.addLabel || i18n.dynamicFormAdd }}\n </button>\n </div>\n </fieldset>\n } @else if (isValue(f)) {\n @let ctrl = control(f);\n @let custom = customTemplate(f);\n <mk-form-field\n class=\"mk-dynamic-fields__field\"\n [style.--mk-dyn-span]=\"span(f)\"\n [label]=\"f.type === 'checkbox' || f.type === 'switch' ? '' : (f.label ?? '')\"\n [hint]=\"f.hint ?? ''\"\n [required]=\"!!f.required\"\n [size]=\"size()\"\n [labelPosition]=\"labelPosition()\"\n >\n @if (custom) {\n <ng-container *ngTemplateOutlet=\"custom; context: customContext(f)\" />\n } @else {\n @switch (f.type) {\n @case ('textarea') {\n <textarea mkInput [formControl]=\"$any(ctrl)\" [placeholder]=\"f.placeholder ?? ''\" [rows]=\"p(f, 'rows', 3)\"></textarea>\n }\n @case ('password') {\n <mk-password-input [formControl]=\"$any(ctrl)\" [placeholder]=\"f.placeholder ?? ''\" [showStrength]=\"p(f, 'showStrength', false)\" [showRules]=\"p(f, 'showRules', false)\" [minLength]=\"p(f, 'minLength', 8)\" />\n }\n @case ('number') {\n <mk-number-input [formControl]=\"$any(ctrl)\" [placeholder]=\"f.placeholder ?? ''\" [min]=\"p(f, 'min', f.validators?.min ?? null)\" [max]=\"p(f, 'max', f.validators?.max ?? null)\" [step]=\"p(f, 'step', 1)\" />\n }\n @case ('currency') {\n <mk-currency-input [formControl]=\"$any(ctrl)\" [placeholder]=\"f.placeholder ?? ''\" [currency]=\"p(f, 'currency', 'USD')\" [locale]=\"p(f, 'locale', undefined)\" [min]=\"p(f, 'min', f.validators?.min ?? null)\" [max]=\"p(f, 'max', f.validators?.max ?? null)\" />\n }\n @case ('date') {\n <mk-date-picker [formControl]=\"$any(ctrl)\" [placeholder]=\"f.placeholder ?? ''\" [min]=\"p(f, 'min', null)\" [max]=\"p(f, 'max', null)\" [clearable]=\"p(f, 'clearable', true)\" />\n }\n @case ('time') {\n <mk-time-picker [formControl]=\"$any(ctrl)\" [placeholder]=\"f.placeholder ?? ''\" [step]=\"p(f, 'step', 15)\" [hour12]=\"p(f, 'hour12', false)\" [clearable]=\"p(f, 'clearable', true)\" />\n }\n @case ('datetime') {\n <mk-datetime-picker [formControl]=\"$any(ctrl)\" [placeholder]=\"f.placeholder ?? ''\" [min]=\"p(f, 'min', null)\" [max]=\"p(f, 'max', null)\" [clearable]=\"p(f, 'clearable', true)\" />\n }\n @case ('select') {\n <mk-select [formControl]=\"$any(ctrl)\" [options]=\"$any(f.options ?? [])\" [placeholder]=\"f.placeholder ?? ''\" />\n }\n @case ('multi-select') {\n <mk-multi-select [formControl]=\"$any(ctrl)\" [options]=\"$any(f.options ?? [])\" [placeholder]=\"f.placeholder ?? ''\" [max]=\"p(f, 'max', 0)\" />\n }\n @case ('autocomplete') {\n <mk-autocomplete [formControl]=\"$any(ctrl)\" [options]=\"$any(f.options ?? [])\" [placeholder]=\"f.placeholder ?? ''\" [requireSelection]=\"p(f, 'requireSelection', false)\" />\n }\n @case ('radio') {\n <mk-radio-group [formControl]=\"$any(ctrl)\" [orientation]=\"p(f, 'orientation', 'vertical')\">\n @for (o of f.options ?? []; track $index) {\n <mk-radio [value]=\"o.value\" [disabled]=\"!!o.disabled\">{{ o.label }}</mk-radio>\n }\n </mk-radio-group>\n }\n @case ('toggle') {\n <mk-button-toggle-group [formControl]=\"$any(ctrl)\" [multiple]=\"p(f, 'multiple', false)\" [aria-label]=\"f.label ?? ''\">\n @for (o of f.options ?? []; track $index) {\n <mk-button-toggle [value]=\"o.value\" [disabled]=\"!!o.disabled\">{{ o.label }}</mk-button-toggle>\n }\n </mk-button-toggle-group>\n }\n @case ('checkbox') {\n <mk-checkbox [formControl]=\"$any(ctrl)\" [required]=\"!!f.required\">{{ f.label }}</mk-checkbox>\n }\n @case ('switch') {\n <mk-switch [formControl]=\"$any(ctrl)\">{{ f.label }}</mk-switch>\n }\n @case ('slider') {\n <mk-slider [formControl]=\"$any(ctrl)\" [min]=\"p(f, 'min', f.validators?.min ?? 0)\" [max]=\"p(f, 'max', f.validators?.max ?? 100)\" [step]=\"p(f, 'step', 1)\" [aria-label]=\"f.label ?? ''\" />\n }\n @case ('rating') {\n <mk-rating [formControl]=\"$any(ctrl)\" [max]=\"p(f, 'max', 5)\" [ariaLabel]=\"f.label ?? ''\" />\n }\n @case ('color') {\n <mk-color-picker [formControl]=\"$any(ctrl)\" [swatches]=\"p(f, 'swatches', [])\" [ariaLabel]=\"f.label ?? ''\" />\n }\n @case ('tags') {\n <mk-tag-input [formControl]=\"$any(ctrl)\" [placeholder]=\"f.placeholder ?? ''\" [max]=\"p(f, 'max', 0)\" />\n }\n @case ('phone') {\n <mk-phone-input [formControl]=\"$any(ctrl)\" [placeholder]=\"f.placeholder ?? ''\" [valueFormat]=\"p(f, 'valueFormat', 'e164')\" [country]=\"p(f, 'country', undefined)\" />\n }\n @case ('file') {\n <mk-file-upload [formControl]=\"$any(ctrl)\" [accept]=\"p(f, 'accept', '')\" [multiple]=\"p(f, 'multiple', false)\" [maxSize]=\"p(f, 'maxSize', 0)\" [maxFiles]=\"p(f, 'maxFiles', 0)\" />\n }\n @case ('code') {\n <mk-code-editor [formControl]=\"$any(ctrl)\" [language]=\"p(f, 'language', 'json')\" [rows]=\"p(f, 'rows', 8)\" [placeholder]=\"f.placeholder ?? ''\" />\n }\n @default {\n <input\n mkInput\n [type]=\"inputType(f)\"\n [formControl]=\"$any(ctrl)\"\n [placeholder]=\"f.placeholder ?? ''\"\n [attr.maxlength]=\"f.validators?.maxLength ?? null\"\n />\n }\n }\n }\n </mk-form-field>\n }\n }\n}\n","<form class=\"mk-dynamic-form__form\" [formGroup]=\"formRef()\" (submit)=\"onSubmit($event)\" novalidate>\n <mk-dynamic-fields [fields]=\"fields()\" [group]=\"formRef()\" [columns]=\"columns()\" [scope]=\"scope()\" />\n <div class=\"mk-dynamic-form__actions\">\n <ng-content />\n </div>\n</form>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}