@mk-kit/ui 0.40.0 → 0.41.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.
@@ -310,7 +310,7 @@ class MkDynamicFields {
310
310
  return item;
311
311
  }
312
312
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkDynamicFields, deps: [], target: i0.ɵɵFactoryTarget.Component });
313
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkDynamicFields, isStandalone: true, selector: "mk-dynamic-fields", inputs: { fields: { classPropertyName: "fields", publicName: "fields", isSignal: true, isRequired: true, transformFunction: null }, group: { classPropertyName: "group", publicName: "group", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, scope: { classPropertyName: "scope", publicName: "scope", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "style.--mk-dyn-columns": "columns()" }, classAttribute: "mk-dynamic-fields" }, ngImport: i0, template: "@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", dependencies: [{ kind: "component", type: i0.forwardRef(() => MkDynamicFields), selector: "mk-dynamic-fields", inputs: ["fields", "group", "columns", "scope"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i1.DefaultValueAccessor), selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i0.forwardRef(() => i1.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i1.RequiredValidator), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i0.forwardRef(() => i1.FormControlDirective), selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i0.forwardRef(() => MkButton), selector: "button[mkButton], a[mkButton]", inputs: ["variant", "tone", "size", "loading", "fullWidth", "iconOnly", "disabled"] }, { kind: "component", type: i0.forwardRef(() => MkCheckbox), selector: "mk-checkbox", inputs: ["checked", "indeterminate", "disabled", "invalid", "required", "size", "tone", "aria-label"], outputs: ["checkedChange", "indeterminateChange"] }, { kind: "component", type: i0.forwardRef(() => MkFormField), selector: "mk-form-field", inputs: ["label", "hint", "error", "errorMessages", "errorOn", "required", "disabled", "size", "labelPosition"] }, { kind: "component", type: i0.forwardRef(() => MkInput), selector: "input[mkInput], textarea[mkInput]", inputs: ["size", "invalid"] }, { kind: "component", type: i0.forwardRef(() => MkNumberInput), selector: "mk-number-input", inputs: ["min", "max", "step", "value", "placeholder", "disabled", "invalid", "size"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkCurrencyInput), selector: "mk-currency-input", inputs: ["currency", "locale", "decimals", "min", "max", "allowNegative", "size", "invalid", "disabled", "placeholder", "value"], outputs: ["valueChange"], exportAs: ["mkCurrencyInput"] }, { kind: "component", type: i0.forwardRef(() => MkSelect), selector: "mk-select", inputs: ["options", "placeholder", "size", "invalid", "disabled", "value"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkMultiSelect), selector: "mk-multi-select", inputs: ["options", "placeholder", "size", "invalid", "disabled", "filterMode", "minChars", "loading", "max", "closeOnSelect", "emptyMessage", "value"], outputs: ["valueChange", "search", "optionAdded", "optionRemoved"] }, { kind: "component", type: i0.forwardRef(() => MkAutocomplete), selector: "mk-autocomplete", inputs: ["options", "placeholder", "size", "invalid", "disabled", "filterMode", "minChars", "loading", "requireSelection", "emptyMessage", "value"], outputs: ["valueChange", "search", "optionSelected"] }, { kind: "component", type: i0.forwardRef(() => MkRadioGroup), selector: "mk-radio-group", inputs: ["value", "disabled", "invalid", "required", "size", "tone", "name", "orientation"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkRadio), selector: "mk-radio", inputs: ["value", "disabled"] }, { kind: "component", type: i0.forwardRef(() => MkButtonToggleGroup), selector: "mk-button-toggle-group", inputs: ["multiple", "size", "tone", "disabled", "invalid", "aria-label", "value"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkButtonToggle), selector: "mk-button-toggle", inputs: ["value", "disabled"] }, { kind: "component", type: i0.forwardRef(() => MkSwitch), selector: "mk-switch", inputs: ["checked", "disabled", "invalid", "size", "tone", "aria-label"], outputs: ["checkedChange"] }, { kind: "component", type: i0.forwardRef(() => MkSlider), selector: "mk-slider", inputs: ["min", "max", "step", "disabled", "invalid", "size", "tone", "aria-label", "value"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkRating), selector: "mk-rating", inputs: ["max", "value", "readonly", "disabled", "invalid", "size", "ariaLabel"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkColorPicker), selector: "mk-color-picker", inputs: ["value", "swatches", "hexInput", "disabled", "invalid", "size", "ariaLabel"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkTagInput), selector: "mk-tag-input", inputs: ["value", "placeholder", "max", "allowDuplicates", "addOnBlur", "separators", "invalid", "disabled", "size"], outputs: ["valueChange", "added", "removed"] }, { kind: "component", type: i0.forwardRef(() => MkPhoneInput), selector: "mk-phone-input", inputs: ["countries", "preferredCountries", "valueFormat", "size", "invalid", "disabled", "placeholder", "country", "value"], outputs: ["countryChange", "valueChange"], exportAs: ["mkPhoneInput"] }, { kind: "component", type: i0.forwardRef(() => MkFileUpload), selector: "mk-file-upload", inputs: ["accept", "multiple", "maxSize", "maxFiles", "disabled", "invalid", "label", "hint", "hideList", "uploadFn", "autoUpload", "valueFormat", "files"], outputs: ["filesChange", "filesSelected", "rejected", "uploaded", "removed"] }, { kind: "component", type: i0.forwardRef(() => MkCodeEditor), selector: "mk-code-editor", inputs: ["language", "placeholder", "readOnly", "disabled", "invalid", "rows", "lineNumbers", "tabSize", "wrap", "size", "ariaLabel", "value"], outputs: ["valueChange", "validate"], exportAs: ["mkCodeEditor"] }, { kind: "component", type: i0.forwardRef(() => MkPasswordInput), selector: "mk-password-input", inputs: ["value", "placeholder", "disabled", "size", "invalid", "showStrength", "showRules", "minLength", "autocomplete"], outputs: ["valueChange"], exportAs: ["mkPasswordInput"] }, { kind: "component", type: i0.forwardRef(() => MkDatePicker), selector: "mk-date-picker", inputs: ["value", "min", "max", "disabledDate", "placeholder", "displayFormat", "disabled", "clearable", "invalid", "firstDayOfWeek", "size"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkTimePicker), selector: "mk-time-picker", inputs: ["value", "valueFormat", "min", "max", "step", "hour12", "disabled", "placeholder", "clearable", "invalid", "size"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkDateTimePicker), selector: "mk-datetime-picker", inputs: ["value", "min", "max", "disabledDate", "placeholder", "displayFormat", "step", "hour12", "disabled", "clearable", "invalid", "firstDayOfWeek", "size"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
313
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkDynamicFields, isStandalone: true, selector: "mk-dynamic-fields", inputs: { fields: { classPropertyName: "fields", publicName: "fields", isSignal: true, isRequired: true, transformFunction: null }, group: { classPropertyName: "group", publicName: "group", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, scope: { classPropertyName: "scope", publicName: "scope", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "style.--mk-dyn-columns": "columns()" }, classAttribute: "mk-dynamic-fields" }, ngImport: i0, template: "@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", dependencies: [{ kind: "component", type: i0.forwardRef(() => MkDynamicFields), selector: "mk-dynamic-fields", inputs: ["fields", "group", "columns", "scope"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i1.DefaultValueAccessor), selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i0.forwardRef(() => i1.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i1.RequiredValidator), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i0.forwardRef(() => i1.FormControlDirective), selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i0.forwardRef(() => MkButton), selector: "button[mkButton], a[mkButton]", inputs: ["variant", "tone", "size", "loading", "fullWidth", "iconOnly", "disabled"] }, { kind: "component", type: i0.forwardRef(() => MkCheckbox), selector: "mk-checkbox", inputs: ["checked", "indeterminate", "disabled", "invalid", "required", "size", "tone", "aria-label"], outputs: ["checkedChange", "indeterminateChange"] }, { kind: "component", type: i0.forwardRef(() => MkFormField), selector: "mk-form-field", inputs: ["label", "hint", "error", "errorMessages", "errorOn", "required", "disabled", "size", "labelPosition"] }, { kind: "component", type: i0.forwardRef(() => MkInput), selector: "input[mkInput], textarea[mkInput]", inputs: ["size", "invalid"] }, { kind: "component", type: i0.forwardRef(() => MkNumberInput), selector: "mk-number-input", inputs: ["aria-label", "min", "max", "step", "value", "placeholder", "disabled", "invalid", "size"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkCurrencyInput), selector: "mk-currency-input", inputs: ["aria-label", "currency", "locale", "decimals", "min", "max", "allowNegative", "size", "invalid", "disabled", "placeholder", "value"], outputs: ["valueChange"], exportAs: ["mkCurrencyInput"] }, { kind: "component", type: i0.forwardRef(() => MkSelect), selector: "mk-select", inputs: ["aria-label", "options", "placeholder", "size", "invalid", "disabled", "value"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkMultiSelect), selector: "mk-multi-select", inputs: ["aria-label", "options", "placeholder", "size", "invalid", "disabled", "filterMode", "minChars", "loading", "max", "closeOnSelect", "emptyMessage", "value"], outputs: ["valueChange", "search", "optionAdded", "optionRemoved"] }, { kind: "component", type: i0.forwardRef(() => MkAutocomplete), selector: "mk-autocomplete", inputs: ["aria-label", "options", "placeholder", "size", "invalid", "disabled", "filterMode", "minChars", "loading", "requireSelection", "emptyMessage", "value"], outputs: ["valueChange", "search", "optionSelected"] }, { kind: "component", type: i0.forwardRef(() => MkRadioGroup), selector: "mk-radio-group", inputs: ["value", "disabled", "invalid", "required", "size", "tone", "name", "orientation"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkRadio), selector: "mk-radio", inputs: ["value", "disabled"] }, { kind: "component", type: i0.forwardRef(() => MkButtonToggleGroup), selector: "mk-button-toggle-group", inputs: ["multiple", "size", "tone", "disabled", "invalid", "aria-label", "value"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkButtonToggle), selector: "mk-button-toggle", inputs: ["value", "disabled"] }, { kind: "component", type: i0.forwardRef(() => MkSwitch), selector: "mk-switch", inputs: ["checked", "disabled", "invalid", "size", "tone", "aria-label"], outputs: ["checkedChange"] }, { kind: "component", type: i0.forwardRef(() => MkSlider), selector: "mk-slider", inputs: ["min", "max", "step", "disabled", "invalid", "size", "tone", "aria-label", "value"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkRating), selector: "mk-rating", inputs: ["max", "value", "readonly", "disabled", "invalid", "size", "ariaLabel"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkColorPicker), selector: "mk-color-picker", inputs: ["value", "swatches", "hexInput", "disabled", "invalid", "size", "ariaLabel"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkTagInput), selector: "mk-tag-input", inputs: ["value", "placeholder", "max", "allowDuplicates", "addOnBlur", "separators", "invalid", "disabled", "size"], outputs: ["valueChange", "added", "removed"] }, { kind: "component", type: i0.forwardRef(() => MkPhoneInput), selector: "mk-phone-input", inputs: ["countries", "preferredCountries", "valueFormat", "size", "invalid", "disabled", "placeholder", "country", "value"], outputs: ["countryChange", "valueChange"], exportAs: ["mkPhoneInput"] }, { kind: "component", type: i0.forwardRef(() => MkFileUpload), selector: "mk-file-upload", inputs: ["accept", "multiple", "maxSize", "maxFiles", "disabled", "invalid", "label", "hint", "hideList", "uploadFn", "autoUpload", "valueFormat", "files"], outputs: ["filesChange", "filesSelected", "rejected", "uploaded", "removed"] }, { kind: "component", type: i0.forwardRef(() => MkCodeEditor), selector: "mk-code-editor", inputs: ["language", "placeholder", "readOnly", "disabled", "invalid", "rows", "lineNumbers", "tabSize", "wrap", "size", "ariaLabel", "value"], outputs: ["valueChange", "validate"], exportAs: ["mkCodeEditor"] }, { kind: "component", type: i0.forwardRef(() => MkPasswordInput), selector: "mk-password-input", inputs: ["value", "placeholder", "disabled", "size", "invalid", "showStrength", "showRules", "minLength", "autocomplete"], outputs: ["valueChange"], exportAs: ["mkPasswordInput"] }, { kind: "component", type: i0.forwardRef(() => MkDatePicker), selector: "mk-date-picker", inputs: ["value", "aria-label", "min", "max", "disabledDate", "placeholder", "displayFormat", "disabled", "clearable", "invalid", "firstDayOfWeek", "size"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkTimePicker), selector: "mk-time-picker", inputs: ["value", "aria-label", "valueFormat", "min", "max", "step", "hour12", "disabled", "placeholder", "clearable", "invalid", "size"], outputs: ["valueChange"] }, { kind: "component", type: i0.forwardRef(() => MkDateTimePicker), selector: "mk-datetime-picker", inputs: ["value", "min", "max", "disabledDate", "placeholder", "displayFormat", "step", "hour12", "disabled", "clearable", "invalid", "firstDayOfWeek", "size"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
314
314
  }
315
315
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkDynamicFields, decorators: [{
316
316
  type: Component,
@@ -1 +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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"}
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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"}
@@ -45,7 +45,7 @@ class MkAlert {
45
45
  this.dismissed.emit();
46
46
  }
47
47
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkAlert, deps: [], target: i0.ɵɵFactoryTarget.Component });
48
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkAlert, isStandalone: true, selector: "mk-alert", inputs: { tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, dismissible: { classPropertyName: "dismissible", publicName: "dismissible", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dismissed: "dismissed" }, host: { properties: { "attr.data-tone": "tone()", "class.mk-alert--soft": "variant() === 'soft'", "class.mk-alert--solid": "variant() === 'solid'", "class.mk-alert--outline": "variant() === 'outline'", "attr.role": "role()" }, classAttribute: "mk-alert" }, ngImport: i0, template: "<span class=\"mk-alert__icon\" aria-hidden=\"true\">\n <ng-content select=\"[mkAlertIcon]\" />\n</span>\n\n<div class=\"mk-alert__content\">\n @if (title(); as heading) {\n <p class=\"mk-alert__title\">{{ heading }}</p>\n }\n <div class=\"mk-alert__message\"><ng-content /></div>\n</div>\n\n@if (dismissible()) {\n <button\n type=\"button\"\n class=\"mk-alert__close\"\n [attr.aria-label]=\"i18n.dismiss\"\n (click)=\"onDismiss()\"\n >\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n}\n", styles: ["@charset \"UTF-8\";:host{--_main: var(--mk-info);--_hover: var(--mk-info-hover);--_contrast: var(--mk-info-contrast);--_subtle: var(--mk-info-subtle);--_subtle-text: var(--mk-info-subtle-text);display:flex;align-items:flex-start;gap:var(--mk-space-3);padding:var(--mk-space-3) var(--mk-space-4);border:var(--mk-border-width) solid transparent;border-radius:var(--mk-radius-md);font-size:var(--mk-font-size-sm);line-height:var(--mk-line-height-normal);color:var(--mk-text)}:host([data-tone=info]){--_main: var(--mk-info);--_hover: var(--mk-info-hover);--_contrast: var(--mk-info-contrast);--_subtle: var(--mk-info-subtle);--_subtle-text: var(--mk-info-subtle-text)}:host([data-tone=success]){--_main: var(--mk-success);--_hover: var(--mk-success-hover);--_contrast: var(--mk-success-contrast);--_subtle: var(--mk-success-subtle);--_subtle-text: var(--mk-success-subtle-text)}:host([data-tone=warning]){--_main: var(--mk-warning);--_hover: var(--mk-warning-hover);--_contrast: var(--mk-warning-contrast);--_subtle: var(--mk-warning-subtle);--_subtle-text: var(--mk-warning-subtle-text)}:host([data-tone=danger]){--_main: var(--mk-danger);--_hover: var(--mk-danger-hover);--_contrast: var(--mk-danger-contrast);--_subtle: var(--mk-danger-subtle);--_subtle-text: var(--mk-danger-subtle-text)}:host([data-tone=neutral]){--_main: var(--mk-surface-inverse);--_hover: var(--mk-surface-inverse);--_contrast: var(--mk-text-inverse);--_subtle: var(--mk-neutral-subtle);--_subtle-text: var(--mk-neutral-subtle-text)}:host(.mk-alert--soft){background-color:var(--_subtle);border-color:color-mix(in srgb,var(--_main) 22%,transparent);color:var(--_subtle-text)}:host(.mk-alert--outline){background-color:var(--mk-surface);border-color:color-mix(in srgb,var(--_main) 42%,var(--mk-border-strong));color:var(--mk-text)}:host(.mk-alert--solid){background-color:var(--_main);border-color:var(--_main);color:var(--_contrast)}.mk-alert__icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.25rem;height:1.25rem;margin-top:1px;color:var(--_main)}:host(.mk-alert--solid) .mk-alert__icon{color:currentColor}.mk-alert__icon:empty{display:none}.mk-alert__content{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--mk-space-1)}.mk-alert__title{margin:0;font-weight:var(--mk-font-weight-semibold);font-size:var(--mk-font-size-sm);line-height:var(--mk-line-height-snug)}.mk-alert__message{margin:0}.mk-alert__close{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;margin:-2px calc(var(--mk-space-1) * -1) 0 0;padding:0;background:transparent;border:0;border-radius:var(--mk-radius-sm);color:inherit;cursor:pointer;opacity:.7;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),background-color var(--mk-duration-fast) var(--mk-ease-standard)}.mk-alert__close:hover{opacity:1;background-image:linear-gradient(var(--mk-hover-overlay),var(--mk-hover-overlay))}.mk-alert__close:focus-visible{opacity:1;outline:var(--mk-focus-ring-width) solid var(--mk-focus-ring);outline-offset:var(--mk-focus-ring-offset)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
48
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkAlert, isStandalone: true, selector: "mk-alert", inputs: { tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, dismissible: { classPropertyName: "dismissible", publicName: "dismissible", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dismissed: "dismissed" }, host: { properties: { "attr.data-tone": "tone()", "class.mk-alert--soft": "variant() === 'soft'", "class.mk-alert--solid": "variant() === 'solid'", "class.mk-alert--outline": "variant() === 'outline'", "attr.role": "role()" }, classAttribute: "mk-alert" }, ngImport: i0, template: "<span class=\"mk-alert__icon\" aria-hidden=\"true\">\n <ng-content select=\"[mkAlertIcon]\" />\n</span>\n\n<div class=\"mk-alert__content\">\n @if (title(); as heading) {\n <p class=\"mk-alert__title\">{{ heading }}</p>\n }\n <div class=\"mk-alert__message\"><ng-content /></div>\n</div>\n\n@if (dismissible()) {\n <button\n type=\"button\"\n class=\"mk-alert__close\"\n [attr.aria-label]=\"i18n.dismiss\"\n (click)=\"onDismiss()\"\n >\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n}\n", styles: ["@charset \"UTF-8\";:host{--_main: var(--mk-info);--_hover: var(--mk-info-hover);--_contrast: var(--mk-info-contrast);--_subtle: var(--mk-info-subtle);--_subtle-text: var(--mk-info-subtle-text);display:flex;align-items:flex-start;gap:var(--mk-space-3);padding:var(--mk-space-3) var(--mk-space-4);border:var(--mk-border-width) solid transparent;border-radius:var(--mk-radius-md);font-size:var(--mk-font-size-sm);line-height:var(--mk-line-height-normal);color:var(--mk-text)}:host([data-tone=info]){--_main: var(--mk-info);--_hover: var(--mk-info-hover);--_contrast: var(--mk-info-contrast);--_subtle: var(--mk-info-subtle);--_subtle-text: var(--mk-info-subtle-text)}:host([data-tone=success]){--_main: var(--mk-success);--_hover: var(--mk-success-hover);--_contrast: var(--mk-success-contrast);--_subtle: var(--mk-success-subtle);--_subtle-text: var(--mk-success-subtle-text)}:host([data-tone=warning]){--_main: var(--mk-warning);--_hover: var(--mk-warning-hover);--_contrast: var(--mk-warning-contrast);--_subtle: var(--mk-warning-subtle);--_subtle-text: var(--mk-warning-subtle-text)}:host([data-tone=danger]){--_main: var(--mk-danger);--_hover: var(--mk-danger-hover);--_contrast: var(--mk-danger-contrast);--_subtle: var(--mk-danger-subtle);--_subtle-text: var(--mk-danger-subtle-text)}:host([data-tone=neutral]){--_main: var(--mk-surface-inverse);--_hover: var(--mk-surface-inverse);--_contrast: var(--mk-text-inverse);--_subtle: var(--mk-neutral-subtle);--_subtle-text: var(--mk-neutral-subtle-text)}:host(.mk-alert--soft){background-color:var(--_subtle);border-color:color-mix(in srgb,var(--_main) 22%,transparent);color:var(--_subtle-text)}:host(.mk-alert--outline){background-color:var(--mk-surface);border-color:color-mix(in srgb,var(--_main) 42%,var(--mk-border-strong));color:var(--mk-text)}:host(.mk-alert--solid){background-color:var(--_main);border-color:var(--_main);color:var(--_contrast)}.mk-alert__icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.25rem;height:1.25rem;margin-top:1px;color:var(--_main)}:host(.mk-alert--solid) .mk-alert__icon{color:currentColor}.mk-alert__icon:empty{display:none}.mk-alert__content{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--mk-space-1)}.mk-alert__title{margin:0;font-weight:var(--mk-font-weight-semibold);font-size:var(--mk-font-size-sm);line-height:var(--mk-line-height-snug);color:inherit}.mk-alert__message{margin:0;color:inherit}.mk-alert__close{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;margin:-2px calc(var(--mk-space-1) * -1) 0 0;padding:0;background:transparent;border:0;border-radius:var(--mk-radius-sm);color:inherit;cursor:pointer;opacity:.7;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),background-color var(--mk-duration-fast) var(--mk-ease-standard)}.mk-alert__close:hover{opacity:1;background-image:linear-gradient(var(--mk-hover-overlay),var(--mk-hover-overlay))}.mk-alert__close:focus-visible{opacity:1;outline:var(--mk-focus-ring-width) solid var(--mk-focus-ring);outline-offset:var(--mk-focus-ring-offset)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
49
49
  }
50
50
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkAlert, decorators: [{
51
51
  type: Component,
@@ -56,7 +56,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
56
56
  '[class.mk-alert--solid]': "variant() === 'solid'",
57
57
  '[class.mk-alert--outline]': "variant() === 'outline'",
58
58
  '[attr.role]': 'role()',
59
- }, template: "<span class=\"mk-alert__icon\" aria-hidden=\"true\">\n <ng-content select=\"[mkAlertIcon]\" />\n</span>\n\n<div class=\"mk-alert__content\">\n @if (title(); as heading) {\n <p class=\"mk-alert__title\">{{ heading }}</p>\n }\n <div class=\"mk-alert__message\"><ng-content /></div>\n</div>\n\n@if (dismissible()) {\n <button\n type=\"button\"\n class=\"mk-alert__close\"\n [attr.aria-label]=\"i18n.dismiss\"\n (click)=\"onDismiss()\"\n >\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n}\n", styles: ["@charset \"UTF-8\";:host{--_main: var(--mk-info);--_hover: var(--mk-info-hover);--_contrast: var(--mk-info-contrast);--_subtle: var(--mk-info-subtle);--_subtle-text: var(--mk-info-subtle-text);display:flex;align-items:flex-start;gap:var(--mk-space-3);padding:var(--mk-space-3) var(--mk-space-4);border:var(--mk-border-width) solid transparent;border-radius:var(--mk-radius-md);font-size:var(--mk-font-size-sm);line-height:var(--mk-line-height-normal);color:var(--mk-text)}:host([data-tone=info]){--_main: var(--mk-info);--_hover: var(--mk-info-hover);--_contrast: var(--mk-info-contrast);--_subtle: var(--mk-info-subtle);--_subtle-text: var(--mk-info-subtle-text)}:host([data-tone=success]){--_main: var(--mk-success);--_hover: var(--mk-success-hover);--_contrast: var(--mk-success-contrast);--_subtle: var(--mk-success-subtle);--_subtle-text: var(--mk-success-subtle-text)}:host([data-tone=warning]){--_main: var(--mk-warning);--_hover: var(--mk-warning-hover);--_contrast: var(--mk-warning-contrast);--_subtle: var(--mk-warning-subtle);--_subtle-text: var(--mk-warning-subtle-text)}:host([data-tone=danger]){--_main: var(--mk-danger);--_hover: var(--mk-danger-hover);--_contrast: var(--mk-danger-contrast);--_subtle: var(--mk-danger-subtle);--_subtle-text: var(--mk-danger-subtle-text)}:host([data-tone=neutral]){--_main: var(--mk-surface-inverse);--_hover: var(--mk-surface-inverse);--_contrast: var(--mk-text-inverse);--_subtle: var(--mk-neutral-subtle);--_subtle-text: var(--mk-neutral-subtle-text)}:host(.mk-alert--soft){background-color:var(--_subtle);border-color:color-mix(in srgb,var(--_main) 22%,transparent);color:var(--_subtle-text)}:host(.mk-alert--outline){background-color:var(--mk-surface);border-color:color-mix(in srgb,var(--_main) 42%,var(--mk-border-strong));color:var(--mk-text)}:host(.mk-alert--solid){background-color:var(--_main);border-color:var(--_main);color:var(--_contrast)}.mk-alert__icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.25rem;height:1.25rem;margin-top:1px;color:var(--_main)}:host(.mk-alert--solid) .mk-alert__icon{color:currentColor}.mk-alert__icon:empty{display:none}.mk-alert__content{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--mk-space-1)}.mk-alert__title{margin:0;font-weight:var(--mk-font-weight-semibold);font-size:var(--mk-font-size-sm);line-height:var(--mk-line-height-snug)}.mk-alert__message{margin:0}.mk-alert__close{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;margin:-2px calc(var(--mk-space-1) * -1) 0 0;padding:0;background:transparent;border:0;border-radius:var(--mk-radius-sm);color:inherit;cursor:pointer;opacity:.7;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),background-color var(--mk-duration-fast) var(--mk-ease-standard)}.mk-alert__close:hover{opacity:1;background-image:linear-gradient(var(--mk-hover-overlay),var(--mk-hover-overlay))}.mk-alert__close:focus-visible{opacity:1;outline:var(--mk-focus-ring-width) solid var(--mk-focus-ring);outline-offset:var(--mk-focus-ring-offset)}\n"] }]
59
+ }, template: "<span class=\"mk-alert__icon\" aria-hidden=\"true\">\n <ng-content select=\"[mkAlertIcon]\" />\n</span>\n\n<div class=\"mk-alert__content\">\n @if (title(); as heading) {\n <p class=\"mk-alert__title\">{{ heading }}</p>\n }\n <div class=\"mk-alert__message\"><ng-content /></div>\n</div>\n\n@if (dismissible()) {\n <button\n type=\"button\"\n class=\"mk-alert__close\"\n [attr.aria-label]=\"i18n.dismiss\"\n (click)=\"onDismiss()\"\n >\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n}\n", styles: ["@charset \"UTF-8\";:host{--_main: var(--mk-info);--_hover: var(--mk-info-hover);--_contrast: var(--mk-info-contrast);--_subtle: var(--mk-info-subtle);--_subtle-text: var(--mk-info-subtle-text);display:flex;align-items:flex-start;gap:var(--mk-space-3);padding:var(--mk-space-3) var(--mk-space-4);border:var(--mk-border-width) solid transparent;border-radius:var(--mk-radius-md);font-size:var(--mk-font-size-sm);line-height:var(--mk-line-height-normal);color:var(--mk-text)}:host([data-tone=info]){--_main: var(--mk-info);--_hover: var(--mk-info-hover);--_contrast: var(--mk-info-contrast);--_subtle: var(--mk-info-subtle);--_subtle-text: var(--mk-info-subtle-text)}:host([data-tone=success]){--_main: var(--mk-success);--_hover: var(--mk-success-hover);--_contrast: var(--mk-success-contrast);--_subtle: var(--mk-success-subtle);--_subtle-text: var(--mk-success-subtle-text)}:host([data-tone=warning]){--_main: var(--mk-warning);--_hover: var(--mk-warning-hover);--_contrast: var(--mk-warning-contrast);--_subtle: var(--mk-warning-subtle);--_subtle-text: var(--mk-warning-subtle-text)}:host([data-tone=danger]){--_main: var(--mk-danger);--_hover: var(--mk-danger-hover);--_contrast: var(--mk-danger-contrast);--_subtle: var(--mk-danger-subtle);--_subtle-text: var(--mk-danger-subtle-text)}:host([data-tone=neutral]){--_main: var(--mk-surface-inverse);--_hover: var(--mk-surface-inverse);--_contrast: var(--mk-text-inverse);--_subtle: var(--mk-neutral-subtle);--_subtle-text: var(--mk-neutral-subtle-text)}:host(.mk-alert--soft){background-color:var(--_subtle);border-color:color-mix(in srgb,var(--_main) 22%,transparent);color:var(--_subtle-text)}:host(.mk-alert--outline){background-color:var(--mk-surface);border-color:color-mix(in srgb,var(--_main) 42%,var(--mk-border-strong));color:var(--mk-text)}:host(.mk-alert--solid){background-color:var(--_main);border-color:var(--_main);color:var(--_contrast)}.mk-alert__icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.25rem;height:1.25rem;margin-top:1px;color:var(--_main)}:host(.mk-alert--solid) .mk-alert__icon{color:currentColor}.mk-alert__icon:empty{display:none}.mk-alert__content{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--mk-space-1)}.mk-alert__title{margin:0;font-weight:var(--mk-font-weight-semibold);font-size:var(--mk-font-size-sm);line-height:var(--mk-line-height-snug);color:inherit}.mk-alert__message{margin:0;color:inherit}.mk-alert__close{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;margin:-2px calc(var(--mk-space-1) * -1) 0 0;padding:0;background:transparent;border:0;border-radius:var(--mk-radius-sm);color:inherit;cursor:pointer;opacity:.7;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),background-color var(--mk-duration-fast) var(--mk-ease-standard)}.mk-alert__close:hover{opacity:1;background-image:linear-gradient(var(--mk-hover-overlay),var(--mk-hover-overlay))}.mk-alert__close:focus-visible{opacity:1;outline:var(--mk-focus-ring-width) solid var(--mk-focus-ring);outline-offset:var(--mk-focus-ring-offset)}\n"] }]
60
60
  }], propDecorators: { tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], dismissible: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissible", required: false }] }], dismissed: [{ type: i0.Output, args: ["dismissed"] }] } });
61
61
 
62
62
  /** Delay (ms) before a pointer-triggered tooltip opens. Focus opens instantly. */
@@ -1405,8 +1405,8 @@ class MkPromptDialog {
1405
1405
  ref = inject(MkOverlayRef);
1406
1406
  data = inject(MK_OVERLAY_DATA);
1407
1407
  i18n = inject(MK_I18N);
1408
- inputRef = viewChild('input', /* @ts-ignore */
1409
- ...(ngDevMode ? [{ debugName: "inputRef" }] : /* istanbul ignore next */ []));
1408
+ // `read: ElementRef` — the template ref also carries the MkInput directive, which would otherwise win.
1409
+ inputRef = viewChild('input', { ...(ngDevMode ? { debugName: "inputRef" } : /* istanbul ignore next */ {}), read: ElementRef });
1410
1410
  value = signal(this.data.value ?? '', /* @ts-ignore */
1411
1411
  ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1412
1412
  confirmText = computed(() => this.data.confirmText ?? this.i18n.ok, /* @ts-ignore */
@@ -1416,7 +1416,7 @@ class MkPromptDialog {
1416
1416
  canConfirm = computed(() => !this.data.required || this.value().trim().length > 0, /* @ts-ignore */
1417
1417
  ...(ngDevMode ? [{ debugName: "canConfirm" }] : /* istanbul ignore next */ []));
1418
1418
  constructor() {
1419
- afterNextRender(() => this.inputRef()?.nativeElement.focus());
1419
+ afterNextRender(() => this.inputRef()?.nativeElement?.focus());
1420
1420
  }
1421
1421
  onInput(event) {
1422
1422
  this.value.set(event.target.value);
@@ -1429,12 +1429,12 @@ class MkPromptDialog {
1429
1429
  this.ref.close(null);
1430
1430
  }
1431
1431
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkPromptDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
1432
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkPromptDialog, isStandalone: true, selector: "mk-prompt-dialog", viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["input"], descendants: true, isSignal: true }], ngImport: i0, template: "<mk-dialog [dialogTitle]=\"data.title\" hideClose>\n @if (data.message) {\n <p class=\"mk-confirm-dialog__message\">{{ data.message }}</p>\n }\n\n <mk-form-field [label]=\"data.label ?? ''\">\n <input\n #input\n mkInput\n [attr.type]=\"data.inputType ?? 'text'\"\n [value]=\"value()\"\n [attr.placeholder]=\"data.placeholder ?? null\"\n [attr.required]=\"data.required ? '' : null\"\n (input)=\"onInput($event)\"\n (keydown.enter)=\"submit()\"\n />\n </mk-form-field>\n\n <div mkDialogFooter>\n <button mkButton variant=\"ghost\" tone=\"neutral\" (click)=\"cancel()\">\n {{ cancelText() }}\n </button>\n <button mkButton (click)=\"submit()\" [disabled]=\"!canConfirm()\">\n {{ confirmText() }}\n </button>\n </div>\n</mk-dialog>\n", styles: [".mk-confirm-dialog__message{margin:0;color:var(--mk-text-muted);font-size:var(--mk-font-size-md);line-height:var(--mk-line-height-relaxed)}.mk-confirm-dialog__body{display:flex;align-items:flex-start;gap:var(--mk-space-3)}.mk-confirm-dialog__icon{flex-shrink:0;margin-top:.125rem;color:var(--mk-text-muted)}.mk-confirm-dialog__icon--danger{color:var(--mk-danger-text)}\n"], dependencies: [{ kind: "component", type: MkDialog, selector: "mk-dialog", inputs: ["dialogTitle", "titleId", "hideClose", "draggable", "resizable"] }, { kind: "component", type: MkButton, selector: "button[mkButton], a[mkButton]", inputs: ["variant", "tone", "size", "loading", "fullWidth", "iconOnly", "disabled"] }, { kind: "component", type: MkInput, selector: "input[mkInput], textarea[mkInput]", inputs: ["size", "invalid"] }, { kind: "component", type: MkFormField, selector: "mk-form-field", inputs: ["label", "hint", "error", "errorMessages", "errorOn", "required", "disabled", "size", "labelPosition"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1432
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkPromptDialog, isStandalone: true, selector: "mk-prompt-dialog", viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["input"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "<mk-dialog [dialogTitle]=\"data.title\" hideClose>\n @if (data.message) {\n <p class=\"mk-confirm-dialog__message\">{{ data.message }}</p>\n }\n\n <mk-form-field [label]=\"data.label ?? ''\">\n <input\n #input\n mkInput\n [attr.type]=\"data.inputType ?? 'text'\"\n [value]=\"value()\"\n [attr.placeholder]=\"data.placeholder ?? null\"\n [attr.required]=\"data.required ? '' : null\"\n (input)=\"onInput($event)\"\n (keydown.enter)=\"submit()\"\n />\n </mk-form-field>\n\n <div mkDialogFooter>\n <button mkButton variant=\"ghost\" tone=\"neutral\" (click)=\"cancel()\">\n {{ cancelText() }}\n </button>\n <button mkButton (click)=\"submit()\" [disabled]=\"!canConfirm()\">\n {{ confirmText() }}\n </button>\n </div>\n</mk-dialog>\n", styles: [".mk-confirm-dialog__message{margin:0;color:var(--mk-text-muted);font-size:var(--mk-font-size-md);line-height:var(--mk-line-height-relaxed)}.mk-confirm-dialog__body{display:flex;align-items:flex-start;gap:var(--mk-space-3)}.mk-confirm-dialog__icon{flex-shrink:0;margin-top:.125rem;color:var(--mk-text-muted)}.mk-confirm-dialog__icon--danger{color:var(--mk-danger-text)}\n"], dependencies: [{ kind: "component", type: MkDialog, selector: "mk-dialog", inputs: ["dialogTitle", "titleId", "hideClose", "draggable", "resizable"] }, { kind: "component", type: MkButton, selector: "button[mkButton], a[mkButton]", inputs: ["variant", "tone", "size", "loading", "fullWidth", "iconOnly", "disabled"] }, { kind: "component", type: MkInput, selector: "input[mkInput], textarea[mkInput]", inputs: ["size", "invalid"] }, { kind: "component", type: MkFormField, selector: "mk-form-field", inputs: ["label", "hint", "error", "errorMessages", "errorOn", "required", "disabled", "size", "labelPosition"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1433
1433
  }
1434
1434
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkPromptDialog, decorators: [{
1435
1435
  type: Component,
1436
1436
  args: [{ selector: 'mk-prompt-dialog', imports: [MkDialog, MkButton, MkInput, MkFormField], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mk-dialog [dialogTitle]=\"data.title\" hideClose>\n @if (data.message) {\n <p class=\"mk-confirm-dialog__message\">{{ data.message }}</p>\n }\n\n <mk-form-field [label]=\"data.label ?? ''\">\n <input\n #input\n mkInput\n [attr.type]=\"data.inputType ?? 'text'\"\n [value]=\"value()\"\n [attr.placeholder]=\"data.placeholder ?? null\"\n [attr.required]=\"data.required ? '' : null\"\n (input)=\"onInput($event)\"\n (keydown.enter)=\"submit()\"\n />\n </mk-form-field>\n\n <div mkDialogFooter>\n <button mkButton variant=\"ghost\" tone=\"neutral\" (click)=\"cancel()\">\n {{ cancelText() }}\n </button>\n <button mkButton (click)=\"submit()\" [disabled]=\"!canConfirm()\">\n {{ confirmText() }}\n </button>\n </div>\n</mk-dialog>\n", styles: [".mk-confirm-dialog__message{margin:0;color:var(--mk-text-muted);font-size:var(--mk-font-size-md);line-height:var(--mk-line-height-relaxed)}.mk-confirm-dialog__body{display:flex;align-items:flex-start;gap:var(--mk-space-3)}.mk-confirm-dialog__icon{flex-shrink:0;margin-top:.125rem;color:var(--mk-text-muted)}.mk-confirm-dialog__icon--danger{color:var(--mk-danger-text)}\n"] }]
1437
- }], ctorParameters: () => [], propDecorators: { inputRef: [{ type: i0.ViewChild, args: ['input', { isSignal: true }] }] } });
1437
+ }], ctorParameters: () => [], propDecorators: { inputRef: [{ type: i0.ViewChild, args: ['input', { ...{ read: ElementRef }, isSignal: true }] }] } });
1438
1438
 
1439
1439
  const DIALOG_PANEL_CLASS = 'mk-dialog-panel';
1440
1440
  /**