UNPKG

vue-formic-dynamic-forms

Version:

Powerful library for creating dynamic, validated forms in Vue 3 based on JSON schemas

3 lines (2 loc) 45.7 kB
(function(h,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(h=typeof globalThis<"u"?globalThis:h||self,e(h.VueDynamicForms={},h.Vue))})(this,function(h,e){"use strict";var Mt=Object.defineProperty;var Pt=(h,e,T)=>e in h?Mt(h,e,{enumerable:!0,configurable:!0,writable:!0,value:T}):h[e]=T;var P=(h,e,T)=>Pt(h,typeof e!="symbol"?e+"":e,T);const T={equals:(a,t)=>a===t,notEquals:(a,t)=>a!==t,contains:(a,t)=>typeof a=="string"&&typeof t=="string"||Array.isArray(a)?a.includes(t):!1,notContains:(a,t)=>!T.contains(a,t),gt:(a,t)=>{const i=Number(a),r=Number(t);return!isNaN(i)&&!isNaN(r)&&i>r},gte:(a,t)=>{const i=Number(a),r=Number(t);return!isNaN(i)&&!isNaN(r)&&i>=r},lt:(a,t)=>{const i=Number(a),r=Number(t);return!isNaN(i)&&!isNaN(r)&&i<r},lte:(a,t)=>{const i=Number(a),r=Number(t);return!isNaN(i)&&!isNaN(r)&&i<=r},empty:a=>a==null?!0:typeof a=="string"?a.trim()==="":Array.isArray(a)?a.length===0:typeof a=="object"?Object.keys(a).length===0:!1,notEmpty:a=>!T.empty(a),in:(a,t)=>Array.isArray(t)&&t.includes(a),notIn:(a,t)=>!T.in(a,t)};function ie(a,t){const i=Te(t,a.field),r=T[a.operator];return r?a.operator==="in"||a.operator==="notIn"?r(i,a.values||[]):a.operator==="empty"||a.operator==="notEmpty"?r(i):r(i,a.value):(console.warn(`Unknown operator: ${a.operator}`),!1)}function H(a,t,i="and"){if(!a||a.length===0)return!0;const r=a.map(m=>ie(m,t));return i==="and"?r.every(m=>m):r.some(m=>m)}function X(a,t){const i=a.logic||"and";let r=!0,m=!1,n=!1;return a.show&&(r=H(a.show,t,i)),a.hide&&H(a.hide,t,i)&&(r=!1),a.required&&(m=H(a.required,t,i)),a.disabled&&(n=H(a.disabled,t,i)),{visible:r,required:m,disabled:n}}function Te(a,t){return t.split(".").reduce((i,r)=>i&&typeof i=="object"?i[r]:void 0,a)}class re{constructor(t={}){P(this,"formData",{});P(this,"fieldConditions",new Map);P(this,"cache",new Map);this.formData={...t}}updateFormData(t){this.formData={...t},this.cache.clear()}registerFieldConditions(t,i){this.fieldConditions.set(t,i),this.cache.delete(t)}getFieldState(t){const i=t;if(this.cache.has(i))return this.cache.get(i);const r=this.fieldConditions.get(t);let m={visible:!0,required:!1,disabled:!1};return r&&(m=X(r,this.formData)),this.cache.set(i,m),m}getAllFieldStates(){const t={};for(const i of this.fieldConditions.keys())t[i]=this.getFieldState(i);return t}getFieldDependencies(t){const i=this.fieldConditions.get(t);if(!i)return[];const r=new Set,m=n=>{n&&n.forEach(s=>{r.add(s.field)})};return m(i.show),m(i.hide),m(i.required),m(i.disabled),Array.from(r)}getDependentFields(t){const i=[];for(const r of this.fieldConditions.keys())this.getFieldDependencies(r).includes(t)&&i.push(r);return i}}function se(a,t){var Q;const{formData:i,validationEngine:r,conditionsEngine:m,validateOnChange:n=!0,validateOnBlur:s=!0,debounceValidation:d=300}=t,l=e.ref({value:a.defaultValue??"",error:null,touched:!1,dirty:!1,validating:!1,valid:!0,visible:!0,disabled:!1,required:((Q=a.validation)==null?void 0:Q.required)??!1}),b=e.ref([]),V=e.ref(!1),S=e.computed({get:()=>l.value.value,set:D=>{l.value.value=D,l.value.dirty=!0,i.value[a.name]=D,n&&o()}}),p=e.computed(()=>l.value.visible),B=e.computed(()=>{var D;return l.value.disabled||((D=a.attributes)==null?void 0:D.disabled)}),L=e.computed(()=>l.value.required),O=e.computed(()=>!!l.value.error),z=e.computed(()=>l.value.validating),c=e.computed(()=>{var D,E;return a.conditions?X(a.conditions,i.value):{visible:!0,required:((D=a.validation)==null?void 0:D.required)??!1,disabled:((E=a.attributes)==null?void 0:E.disabled)??!1}});e.watch(c,D=>{l.value.visible=D.visible,l.value.required=D.required,l.value.disabled=D.disabled},{immediate:!0});async function o(){l.value.validating=!0;try{let D;return d>0?D=await r.validateFieldDebounced(a,l.value.value,i.value,d):D=await r.validateField(a,l.value.value,i.value),l.value.error=D.error||null,l.value.valid=D.isValid,D}finally{l.value.validating=!1}}function k(){}function y(){l.value.touched=!0,s&&o()}function g(D){const E=D.target;let w=E.value;switch(a.type){case"number":if(E.value==="")w="";else{const M=E.valueAsNumber;w=isNaN(M)?E.value:M}break;case"checkbox":w=E.checked;break;case"date":case"datetime-local":w=E.valueAsDate||E.value;break;case"file":w=E.files;break;default:w=E.value}S.value=w}function A(D){g(D)}async function R(){if(Array.isArray(a.options)){b.value=a.options;return}if(typeof a.options=="function"){V.value=!0;try{b.value=await a.options()}catch{b.value=[]}finally{V.value=!1}}}function G(){l.value.value=a.defaultValue??"",l.value.error=null,l.value.touched=!1,l.value.dirty=!1,l.value.validating=!1,l.value.valid=!0,i.value[a.name]=l.value.value}function ee(D){S.value=D}function Z(D){l.value.error=D,l.value.valid=!D}function te(){Z(null)}const J=e.computed(()=>{var E,w,M,f,u,C,$,j,Ne,we,Oe,Ae,qe;const D={id:`field-${a.name}`,name:a.name,type:a.type,value:S.value,required:L.value,disabled:B.value,readonly:(E=a.attributes)==null?void 0:E.readonly,placeholder:(w=a.attributes)==null?void 0:w.placeholder,autocomplete:(M=a.attributes)==null?void 0:M.autocomplete,pattern:(f=a.attributes)==null?void 0:f.pattern,min:(u=a.attributes)==null?void 0:u.min,max:(C=a.attributes)==null?void 0:C.max,step:($=a.attributes)==null?void 0:$.step,multiple:(j=a.attributes)==null?void 0:j.multiple,accept:(Ne=a.attributes)==null?void 0:Ne.accept,rows:(we=a.attributes)==null?void 0:we.rows,cols:(Oe=a.attributes)==null?void 0:Oe.cols,maxlength:(Ae=a.attributes)==null?void 0:Ae.maxlength,minlength:(qe=a.attributes)==null?void 0:qe.minlength,"aria-invalid":O.value?"true":"false","aria-describedby":O.value?`field-${a.name}-error`:void 0};return Object.fromEntries(Object.entries(D).filter(([,Rt])=>Rt!==void 0))}),ae=e.computed(()=>{const D=[];return a.fieldClass&&D.push(a.fieldClass),O.value&&a.errorClass&&D.push(a.errorClass),D.join(" ")});function le(){i.value[a.name]=l.value.value,a.options&&R(),a.conditions&&m.registerFieldConditions(a.name,a.conditions)}return le(),{fieldState:e.readonly(l),fieldValue:S,fieldOptions:e.readonly(b),loadingOptions:e.readonly(V),isVisible:p,isDisabled:B,isRequired:L,hasError:O,isValidating:z,validateField:o,resetField:G,setValue:ee,setError:Z,clearError:te,loadOptions:R,handleFocus:k,handleBlur:y,handleInput:g,handleChange:A,inputAttrs:J,inputClasses:ae,fieldSchema:e.readonly(a)}}function N(a,t,i){return r=>({type:a,validate:t,message:r||i||`Validation failed for ${a}`})}const ne=N("required",a=>a==null?!1:typeof a=="string"?a.trim().length>0:Array.isArray(a)?a.length>0:typeof a=="boolean"?!0:typeof a=="number"?!isNaN(a):!0,"Это поле обязательно для заполнения"),oe=(a,t)=>N("minLength",i=>i==null||i===""?!0:String(i).length>=a,t||`Минимальная длина: ${a} символов`)(),de=(a,t)=>N("maxLength",i=>i==null||i===""?!0:String(i).length<=a,t||`Максимальная длина: ${a} символов`)(),ce=(a,t)=>N("min",i=>{if(i==null||i==="")return!0;const r=Number(i);return!isNaN(r)&&r>=a},t||`Минимальное значение: ${a}`)(),fe=(a,t)=>N("max",i=>{if(i==null||i==="")return!0;const r=Number(i);return!isNaN(r)&&r<=a},t||`Максимальное значение: ${a}`)(),me=N("email",a=>a?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(a)):!0,"Введите корректный email адрес"),ue=N("url",a=>{if(!a)return!0;try{return new URL(String(a)),!0}catch{return!1}},"Введите корректный URL"),pe=(a,t)=>N("pattern",i=>i?(typeof a=="string"?new RegExp(a):a).test(String(i)):!0,t||"Значение не соответствует требуемому формату")(),he=(a,t)=>N("oneOf",i=>i==null?!0:a.includes(i),t||`Значение должно быть одним из: ${a.join(", ")}`)(),be=(a,t)=>N("notOneOf",i=>i==null?!0:!a.includes(i),t||`Значение не может быть одним из: ${a.join(", ")}`)(),ye=N("number",a=>a==null||a===""?!0:!isNaN(Number(a)),"Значение должно быть числом"),ge=N("integer",a=>{if(a==null||a==="")return!0;const t=Number(a);return!isNaN(t)&&Number.isInteger(t)},"Значение должно быть целым числом"),De=(a,t)=>N("custom",a,t||"Кастомная валидация не прошла")(),ke=(a,t)=>N("sameAs",(i,r)=>{const m=r[a];return i===m},t||`Значение должно совпадать с полем ${a}`)(),Ce=(a,t)=>N("differentFrom",(i,r)=>{const m=r[a];return i!==m},t||`Значение должно отличаться от поля ${a}`)(),q={required:ne,minLength:oe,maxLength:de,min:ce,max:fe,email:me,url:ue,pattern:pe,oneOf:he,notOneOf:be,number:ye,integer:ge,custom:De,sameAs:ke,differentFrom:Ce};function v(a){if(typeof window<"u")switch(a){case"yup":return!!window.yup;case"zod":return!!window.z;case"vee-validate":return!!window.VeeValidate;default:return!1}return!1}const Ve={name:"yup",isAvailable(){return v("yup")},async validate(a,t,i){if(!this.isAvailable())return[{field:"unknown",message:"Yup library is not available",type:"error",value:t}];try{return await a.validate(t,{context:i,abortEarly:!1}),[]}catch(r){return r.inner?r.inner.map(m=>({field:m.path||"unknown",message:m.message,type:m.type||"validation",value:m.value})):[{field:r.path||"unknown",message:r.message,type:r.type||"validation",value:t}]}}},Se={name:"zod",isAvailable(){return v("zod")},async validate(a,t,i){if(!this.isAvailable())return[{field:"unknown",message:"Zod library is not available",type:"error",value:t}];try{return a.parse(t),[]}catch(r){return r.errors?r.errors.map(m=>{var n;return{field:((n=m.path)==null?void 0:n.join("."))||"unknown",message:m.message,type:m.code||"validation",value:t}}):[{field:"unknown",message:r.message||"Validation failed",type:"validation",value:t}]}}},Be={name:"vee-validate",isAvailable(){return v("vee-validate")},async validate(a,t,i){if(!this.isAvailable())return[{field:"unknown",message:"VeeValidate library is not available",type:"error",value:t}];try{let r;if(typeof a=="string"){if(r=window.VeeValidate[a],!r)throw new Error(`VeeValidate rule "${a}" not found`)}else r=a;const m=await r(t,[],{form:i});return m===!0||m===void 0?[]:[{field:"unknown",message:typeof m=="string"?m:"Validation failed",type:"vee-validate",value:t}]}catch(r){return[{field:"unknown",message:r.message||"Validation failed",type:"vee-validate",value:t}]}}},_=new Map([["yup",Ve],["zod",Se],["vee-validate",Be]]);function W(a){const t=_.get(a);return t&&t.isAvailable()?t:null}function je(){return Array.from(_.values()).filter(a=>a.isAvailable())}class Ee{constructor(){P(this,"abortControllers",new Map);P(this,"validationCache",new Map);P(this,"debounceTimers",new Map)}async validateField(t,i,r,m){const n=t.name;this.cancelFieldValidation(n);const s=new AbortController;this.abortControllers.set(n,s);const d={fieldName:n,fieldValue:i,formData:r,formSchema:m==null?void 0:m.formSchema,abortSignal:s.signal,...m};try{const l=await this.validateWithBuiltinValidators(t,i,r,d);if(l.length>0)return{field:n,isValid:!1,error:l[0].message,pending:!1};const b=await this.validateWithExternalValidators(t,i,r,d);return b.length>0?{field:n,isValid:!1,error:b[0].message,pending:!1}:{field:n,isValid:!0,pending:!1}}catch(l){return l.name==="AbortError"?{field:n,isValid:!1,pending:!0}:{field:n,isValid:!1,error:l.message||"Ошибка валидации",pending:!1}}finally{this.abortControllers.delete(n)}}async validateForm(t,i){const r=t.map(d=>this.validateField(d,i[d.name],i)),m=await Promise.allSettled(r),n={},s=[];return m.forEach((d,l)=>{const b=t[l];if(d.status==="fulfilled"){const V=d.value;!V.isValid&&V.error&&(n[b.name]=V.error,s.push({field:b.name,message:V.error,type:"validation",value:i[b.name]}))}else n[b.name]="Ошибка валидации",s.push({field:b.name,message:"Ошибка валидации",type:"error",value:i[b.name]})}),{isValid:Object.keys(n).length===0,errors:n,fieldErrors:s}}async validateWithBuiltinValidators(t,i,r,m){const n=[],s=t.validation;if(!s)return n;const d=[];s.required&&d.push(q.required(s.message)),s.minLength!==void 0&&d.push(q.minLength(s.minLength,s.message)),s.maxLength!==void 0&&d.push(q.maxLength(s.maxLength,s.message)),s.min!==void 0&&d.push(q.min(s.min,s.message)),s.max!==void 0&&d.push(q.max(s.max,s.message)),s.email&&d.push(q.email(s.message)),s.url&&d.push(q.url(s.message)),s.pattern&&d.push(q.pattern(s.pattern,s.message)),s.custom&&d.push(q.custom(s.custom,s.message));for(const l of d)try{const b=await l.validate(i,r,t.name);if(b!==!0){n.push({field:t.name,message:typeof b=="string"?b:l.message||"Ошибка валидации",type:l.type,value:i});break}}catch(b){n.push({field:t.name,message:b.message||"Ошибка валидации",type:"error",value:i});break}return n}async validateWithExternalValidators(t,i,r,m){const n=t.externalValidation;if(!n)return[];const s=[];if(n.yup){const d=W("yup");if(d)try{const l=await d.validate(n.yup,i,r);s.push(...l)}catch{}}if(n.zod){const d=W("zod");if(d)try{const l=await d.validate(n.zod,i,r);s.push(...l)}catch{}}if(n.veeValidate){const d=W("vee-validate");if(d)try{const l=await d.validate(n.veeValidate,i,r);s.push(...l)}catch{}}if(n.custom)try{const d=await n.custom(i,r);d!==!0&&s.push({field:t.name,message:typeof d=="string"?d:"Кастомная валидация не прошла",type:"custom",value:i})}catch(d){s.push({field:t.name,message:d.message||"Ошибка кастомной валидации",type:"custom-error",value:i})}return s}cancelFieldValidation(t){const i=this.abortControllers.get(t);i&&(i.abort(),this.abortControllers.delete(t));const r=this.debounceTimers.get(t);r&&(clearTimeout(r),this.debounceTimers.delete(t))}validateFieldDebounced(t,i,r,m=300){return new Promise(n=>{const s=t.name,d=this.debounceTimers.get(s);d&&clearTimeout(d);const l=setTimeout(()=>{this.debounceTimers.delete(s),this.validateField(t,i,r).then(n)},m);this.debounceTimers.set(s,l)})}dispose(){for(const t of this.abortControllers.values())t.abort();this.abortControllers.clear();for(const t of this.debounceTimers.values())clearTimeout(t);this.debounceTimers.clear(),this.validationCache.clear()}}function Fe(a,t){var D,E,w,M;const{schema:i,initialData:r={},validateOnChange:m=((D=i.config)==null?void 0:D.validateOnChange)??!0,validateOnBlur:n=((E=i.config)==null?void 0:E.validateOnBlur)??!0,validateOnSubmit:s=((w=i.config)==null?void 0:w.validateOnSubmit)??!0,resetOnSubmit:d=((M=i.config)==null?void 0:M.resetOnSubmit)??!1,debounceValidation:l=300}=a,b=new Ee,V=new re(r),S=e.ref({}),p=e.reactive({values:{},errors:{},touched:{},dirty:{},isSubmitting:!1,isValidating:!1,isValid:!0,isDirty:!1,submitCount:0,fields:{}}),B=new Map;function L(){const f={};i.fields.forEach(u=>{var j;const C=r[u.name]??u.defaultValue??O(u.type);f[u.name]=C;const $=se(u,{formData:S,validationEngine:b,conditionsEngine:V,validateOnChange:m,validateOnBlur:n,debounceValidation:l});B.set(u.name,$),p.fields[u.name]={value:C,error:null,touched:!1,dirty:!1,validating:!1,valid:!0,visible:!0,disabled:!1,required:((j=u.validation)==null?void 0:j.required)??!1}}),S.value={...f},p.values={...f},V.updateFormData(S.value)}function O(f){switch(f){case"checkbox":return!1;case"number":case"range":return 0;case"multiselect":return[];case"file":return null;default:return""}}const z=e.computed(()=>i.fields.filter(f=>{const u=B.get(f.name);return(u==null?void 0:u.isVisible.value)??!0})),c=e.computed(()=>Object.values(p.errors).every(f=>!f)),o=e.computed(()=>Object.values(p.dirty).some(f=>f)),k=e.computed(()=>Object.entries(p.errors).filter(([,f])=>f).map(([f,u])=>({field:f,message:u,type:"validation",value:S.value[f]})));e.watch(S,f=>{if(p.values={...f},V.updateFormData(f),Object.keys(f).forEach(u=>{var $;const C=r[u]??(($=i.fields.find(j=>j.name===u))==null?void 0:$.defaultValue);p.dirty[u]=f[u]!==C}),p.isDirty=o.value,t!=null&&t.change){const u=Object.keys(f).find(C=>f[C]!==p.values[C]);u&&t.change(u,f[u],f)}},{deep:!0});async function y(){p.isValidating=!0;try{const f=await b.validateForm(i.fields,S.value);return p.errors={...f.errors},p.isValid=f.isValid,Object.keys(p.fields).forEach(u=>{p.fields[u].error=f.errors[u]||null,p.fields[u].valid=!f.errors[u]}),t!=null&&t.validate&&t.validate(f.errors),f}finally{p.isValidating=!1}}async function g(f){const u=B.get(f);if(!u)return!1;const C=await u.validateField();return p.errors[f]=C.error||"",p.fields[f].error=C.error||null,p.fields[f].valid=C.isValid,p.fields[f].validating=C.pending||!1,C.isValid}async function A(){if(!p.isSubmitting){p.isSubmitting=!0,p.submitCount++;try{Object.keys(p.fields).forEach(u=>{p.touched[u]=!0,p.fields[u].touched=!0});let f=!0;s&&(f=(await y()).isValid),t!=null&&t.submit&&await t.submit(S.value,f),d&&f&&R()}finally{p.isSubmitting=!1}}}function R(){B.forEach(f=>{f.resetField()}),p.errors={},p.touched={},p.dirty={},p.isDirty=!1,p.isValid=!0,p.submitCount=0,Object.keys(p.fields).forEach(f=>{var $;const u=i.fields.find(j=>j.name===f),C=(u==null?void 0:u.defaultValue)??O((u==null?void 0:u.type)||"text");p.fields[f]={value:C,error:null,touched:!1,dirty:!1,validating:!1,valid:!0,visible:!0,disabled:!1,required:(($=u==null?void 0:u.validation)==null?void 0:$.required)??!1}}),t!=null&&t.reset&&t.reset()}function G(f){Object.entries(f).forEach(([u,C])=>{const $=B.get(u);$&&$.setValue(C)})}function ee(f){Object.entries(f).forEach(([u,C])=>{const $=B.get(u);$&&$.setError(C),p.errors[u]=C,p.fields[u]&&(p.fields[u].error=C,p.fields[u].valid=!C)}),p.isValid=c.value}function Z(){B.forEach(f=>{f.clearError()}),p.errors={},Object.keys(p.fields).forEach(f=>{p.fields[f].error=null,p.fields[f].valid=!0}),p.isValid=!0}function te(f){return B.get(f)}function J(){const f={};return B.forEach((u,C)=>{f[C]=u}),f}function ae(f){t!=null&&t.focus&&t.focus(f,S.value[f])}function le(f){p.touched[f]=!0,p.fields[f]&&(p.fields[f].touched=!0),t!=null&&t.blur&&t.blur(f,S.value[f])}function Q(){b.dispose()}return L(),{formData:e.readonly(S),formState:e.readonly(p),schema:e.readonly(i),fields:J(),visibleFields:z,isFormValid:c,isFormDirty:o,fieldErrors:k,validateForm:y,validateField:g,submitForm:A,resetForm:R,setFormValues:G,setFormErrors:ee,clearFormErrors:Z,getFieldData:te,getAllFieldsData:J,handleFieldFocus:ae,handleFieldBlur:le,validationEngine:b,conditionsEngine:V,dispose:Q}}const Le=["for"],ze={key:0,class:"field-required"},Re={key:0,class:"field-description"},Me={class:"field-input-wrapper"},Pe=["innerHTML"],He=["innerHTML"],Ie={key:0,class:"field-validating"},Ge=["innerHTML"],We=["id"],Ue=e.defineComponent({__name:"BaseField",props:{fieldData:{}},setup(a){const t=a,i=e.computed(()=>{const n=["dynamic-field",`field-type-${t.fieldData.fieldSchema.type}`];return t.fieldData.fieldSchema.wrapperClass&&n.push(t.fieldData.fieldSchema.wrapperClass),t.fieldData.hasError.value&&n.push("field-error"),t.fieldData.isDisabled.value&&n.push("field-disabled"),t.fieldData.fieldState.value.touched&&n.push("field-touched"),t.fieldData.fieldState.value.dirty&&n.push("field-dirty"),n.join(" ")}),r=e.computed(()=>{const n=["field-label"];return t.fieldData.fieldSchema.labelClass&&n.push(t.fieldData.fieldSchema.labelClass),n.join(" ")}),m=e.computed(()=>{const n=["field-error-message"];return t.fieldData.fieldSchema.errorClass&&n.push(t.fieldData.fieldSchema.errorClass),n.join(" ")});return(n,s)=>n.fieldData.isVisible.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(i.value)},[e.renderSlot(n.$slots,"label",{field:n.fieldData.fieldSchema,required:n.fieldData.isRequired.value},()=>[n.fieldData.fieldSchema.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:n.fieldData.inputAttrs.value.id,class:e.normalizeClass(r.value)},[e.createTextVNode(e.toDisplayString(n.fieldData.fieldSchema.label)+" ",1),n.fieldData.isRequired.value?(e.openBlock(),e.createElementBlock("span",ze,"*")):e.createCommentVNode("",!0)],10,Le)):e.createCommentVNode("",!0)],!0),e.renderSlot(n.$slots,"description",{field:n.fieldData.fieldSchema},()=>[n.fieldData.fieldSchema.description?(e.openBlock(),e.createElementBlock("div",Re,e.toDisplayString(n.fieldData.fieldSchema.description),1)):e.createCommentVNode("",!0)],!0),e.createElementVNode("div",Me,[e.renderSlot(n.$slots,"prefix",{field:n.fieldData.fieldSchema},()=>{var d;return[(d=n.fieldData.fieldSchema.slots)!=null&&d.prefix?(e.openBlock(),e.createElementBlock("div",{key:0,class:"field-prefix",innerHTML:n.fieldData.fieldSchema.slots.prefix},null,8,Pe)):e.createCommentVNode("",!0)]},!0),e.renderSlot(n.$slots,"input",{field:n.fieldData,attrs:n.fieldData.inputAttrs,classes:n.fieldData.inputClasses},()=>[e.createElementVNode("input",e.mergeProps(n.fieldData.inputAttrs,{class:[n.fieldData.inputClasses,"field-input"],onInput:s[0]||(s[0]=(...d)=>n.fieldData.handleInput&&n.fieldData.handleInput(...d)),onChange:s[1]||(s[1]=(...d)=>n.fieldData.handleChange&&n.fieldData.handleChange(...d)),onFocus:s[2]||(s[2]=(...d)=>n.fieldData.handleFocus&&n.fieldData.handleFocus(...d)),onBlur:s[3]||(s[3]=(...d)=>n.fieldData.handleBlur&&n.fieldData.handleBlur(...d))}),null,16)],!0),e.renderSlot(n.$slots,"suffix",{field:n.fieldData.fieldSchema},()=>{var d;return[(d=n.fieldData.fieldSchema.slots)!=null&&d.suffix?(e.openBlock(),e.createElementBlock("div",{key:0,class:"field-suffix",innerHTML:n.fieldData.fieldSchema.slots.suffix},null,8,He)):e.createCommentVNode("",!0)]},!0),n.fieldData.isValidating.value?(e.openBlock(),e.createElementBlock("div",Ie,[e.renderSlot(n.$slots,"validating",{},()=>[s[4]||(s[4]=e.createElementVNode("span",{class:"validation-spinner"},"⟳",-1))],!0)])):e.createCommentVNode("",!0)]),e.renderSlot(n.$slots,"help",{field:n.fieldData.fieldSchema},()=>{var d;return[(d=n.fieldData.fieldSchema.slots)!=null&&d.help?(e.openBlock(),e.createElementBlock("div",{key:0,class:"field-help",innerHTML:n.fieldData.fieldSchema.slots.help},null,8,Ge)):e.createCommentVNode("",!0)]},!0),e.renderSlot(n.$slots,"error",{field:n.fieldData,error:n.fieldData.fieldState.value.error},()=>[n.fieldData.hasError.value?(e.openBlock(),e.createElementBlock("div",{key:0,id:`field-${n.fieldData.fieldSchema.name}-error`,class:e.normalizeClass(m.value)},e.toDisplayString(n.fieldData.fieldState.value.error),11,We)):e.createCommentVNode("",!0)],!0)],2)):e.createCommentVNode("",!0)}}),I=(a,t)=>{const i=a.__vccOpts||a;for(const[r,m]of t)i[r]=m;return i},F=I(Ue,[["__scopeId","data-v-fbd766f5"]]),Ye=["for"],Ke={key:0,class:"field-required"},Ze={key:0,class:"field-description"},Je={class:"field-input-wrapper"},Qe={key:0,value:""},Xe=["value","disabled","title"],ve={class:"selected-values"},_e=["onClick"],xe={key:0,class:"placeholder"},et={class:"multiselect-dropdown"},tt=["value","checked","disabled","onChange"],at={key:0,class:"option-description"},lt={key:0,class:"field-loading"},it={key:1,class:"field-validating"},rt=["innerHTML"],st=["id"],U=I(e.defineComponent({__name:"SelectField",props:{fieldData:{}},setup(a){const t=a,i=e.ref(!1),r=e.ref(null),m=e.computed(()=>{const c={...t.fieldData.inputAttrs.value},{multiple:o,type:k,...y}=c;return{...y,multiple:t.fieldData.fieldSchema.type==="multiselect"}}),n=e.computed(()=>t.fieldData.inputClasses),s=e.computed(()=>{if(t.fieldData.fieldSchema.type!=="multiselect")return[];const c=t.fieldData.fieldValue.value||[];return(t.fieldData.fieldOptions.value||[]).filter(k=>c.includes(k.value))}),d=e.computed(()=>{const c=["dynamic-field",`field-type-${t.fieldData.fieldSchema.type}`];return t.fieldData.fieldSchema.wrapperClass&&c.push(t.fieldData.fieldSchema.wrapperClass),t.fieldData.hasError.value&&c.push("field-error"),t.fieldData.isDisabled.value&&c.push("field-disabled"),c.join(" ")}),l=e.computed(()=>{const c=["field-label"];return t.fieldData.fieldSchema.labelClass&&c.push(t.fieldData.fieldSchema.labelClass),c.join(" ")}),b=e.computed(()=>{const c=["field-error-message"];return t.fieldData.fieldSchema.errorClass&&c.push(t.fieldData.fieldSchema.errorClass),c.join(" ")});function V(c){const o=c.target;t.fieldData.fieldValue.value=o.value}function S(c){r.value=c}function p(){t.fieldData.isDisabled.value||(i.value=!i.value)}function B(c){return(t.fieldData.fieldValue.value||[]).includes(c)}function L(c,o){const k=o.target,y=t.fieldData.fieldValue.value||[];k.checked?t.fieldData.fieldValue.value=[...y,c]:t.fieldData.fieldValue.value=y.filter(g=>g!==c)}function O(c){const o=t.fieldData.fieldValue.value||[];t.fieldData.fieldValue.value=o.filter(k=>k!==c)}function z(c){const o=c.target;r.value&&!r.value.contains(o)&&(i.value=!1)}return e.onMounted(()=>{document.addEventListener("click",z)}),e.onUnmounted(()=>{document.removeEventListener("click",z)}),(c,o)=>c.fieldData.isVisible.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(d.value)},[e.renderSlot(c.$slots,"label",{field:c.fieldData.fieldSchema,required:c.fieldData.isRequired.value},()=>[c.fieldData.fieldSchema.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:c.fieldData.inputAttrs.value.id,class:e.normalizeClass(l.value)},[e.createTextVNode(e.toDisplayString(c.fieldData.fieldSchema.label)+" ",1),c.fieldData.isRequired.value?(e.openBlock(),e.createElementBlock("span",Ke,"*")):e.createCommentVNode("",!0)],10,Ye)):e.createCommentVNode("",!0)],!0),e.renderSlot(c.$slots,"description",{field:c.fieldData.fieldSchema},()=>[c.fieldData.fieldSchema.description?(e.openBlock(),e.createElementBlock("div",Ze,e.toDisplayString(c.fieldData.fieldSchema.description),1)):e.createCommentVNode("",!0)],!0),e.createElementVNode("div",Je,[e.renderSlot(c.$slots,"input",{field:c.fieldData,attrs:m.value,classes:n.value,options:c.fieldData.fieldOptions,loading:c.fieldData.loadingOptions.value},()=>{var k,y;return[c.fieldData.fieldSchema.type==="select"?(e.openBlock(),e.createElementBlock("select",e.mergeProps({key:0},m.value,{class:[n.value,"field-select"],onChange:V,onFocus:o[0]||(o[0]=(...g)=>c.fieldData.handleFocus&&c.fieldData.handleFocus(...g)),onBlur:o[1]||(o[1]=(...g)=>c.fieldData.handleBlur&&c.fieldData.handleBlur(...g))}),[c.fieldData.isRequired.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("option",Qe,e.toDisplayString(((k=c.fieldData.fieldSchema.attributes)==null?void 0:k.placeholder)||"Выберите значение"),1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.fieldData.fieldOptions.value,g=>(e.openBlock(),e.createElementBlock("option",{key:g.value,value:g.value,disabled:g.disabled,title:g.description},e.toDisplayString(g.label),9,Xe))),128))],16)):c.fieldData.fieldSchema.type==="multiselect"?(e.openBlock(),e.createElementBlock("div",{key:1,class:"multiselect-container",ref:S},[e.createElementVNode("div",{class:e.normalizeClass(["multiselect-input",[n.value,"field-multiselect"]]),onClick:p},[e.createElementVNode("div",ve,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,g=>(e.openBlock(),e.createElementBlock("span",{key:g.value,class:"selected-tag"},[e.createTextVNode(e.toDisplayString(g.label)+" ",1),e.createElementVNode("button",{type:"button",onClick:e.withModifiers(A=>O(g.value),["stop"]),class:"tag-remove"}," × ",8,_e)]))),128)),s.value.length===0?(e.openBlock(),e.createElementBlock("span",xe,e.toDisplayString(((y=c.fieldData.fieldSchema.attributes)==null?void 0:y.placeholder)||"Выберите значения"),1)):e.createCommentVNode("",!0)]),o[2]||(o[2]=e.createElementVNode("div",{class:"multiselect-arrow"},"▼",-1))],2),e.withDirectives(e.createElementVNode("div",et,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.fieldData.fieldOptions.value,g=>(e.openBlock(),e.createElementBlock("label",{key:g.value,class:e.normalizeClass(["multiselect-option",{disabled:g.disabled}])},[e.createElementVNode("input",{type:"checkbox",value:g.value,checked:B(g.value),disabled:g.disabled,onChange:A=>L(g.value,A)},null,40,tt),e.createElementVNode("span",null,e.toDisplayString(g.label),1),g.description?(e.openBlock(),e.createElementBlock("div",at,e.toDisplayString(g.description),1)):e.createCommentVNode("",!0)],2))),128))],512),[[e.vShow,i.value]])])):e.createCommentVNode("",!0)]},!0),c.fieldData.loadingOptions.value?(e.openBlock(),e.createElementBlock("div",lt,[e.renderSlot(c.$slots,"loading",{},()=>[o[3]||(o[3]=e.createElementVNode("span",{class:"loading-spinner"},"⟳",-1))],!0)])):e.createCommentVNode("",!0),c.fieldData.isValidating.value?(e.openBlock(),e.createElementBlock("div",it,[e.renderSlot(c.$slots,"validating",{},()=>[o[4]||(o[4]=e.createElementVNode("span",{class:"validation-spinner"},"⟳",-1))],!0)])):e.createCommentVNode("",!0)]),e.renderSlot(c.$slots,"help",{field:c.fieldData.fieldSchema},()=>{var k;return[(k=c.fieldData.fieldSchema.slots)!=null&&k.help?(e.openBlock(),e.createElementBlock("div",{key:0,class:"field-help",innerHTML:c.fieldData.fieldSchema.slots.help},null,8,rt)):e.createCommentVNode("",!0)]},!0),e.renderSlot(c.$slots,"error",{field:c.fieldData,error:c.fieldData.fieldState.value.error},()=>[c.fieldData.hasError.value?(e.openBlock(),e.createElementBlock("div",{key:0,id:`field-${c.fieldData.fieldSchema.name}-error`,class:e.normalizeClass(b.value)},e.toDisplayString(c.fieldData.fieldState.value.error),11,st)):e.createCommentVNode("",!0)],!0)],2)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-043da355"]]),nt={class:"radio-fieldset"},ot={key:0,class:"field-required"},dt={key:0,class:"field-description"},ct={class:"radio-group"},ft=["name","value","checked","disabled","required"],mt={class:"radio-label"},ut={key:0,class:"option-description"},pt={key:0,class:"field-loading"},ht=["innerHTML"],bt=["id"],x=I(e.defineComponent({__name:"RadioField",props:{fieldData:{}},setup(a){const t=a,i=e.computed(()=>{const s=["dynamic-field","field-type-radio"];return t.fieldData.fieldSchema.wrapperClass&&s.push(t.fieldData.fieldSchema.wrapperClass),t.fieldData.hasError.value&&s.push("field-error"),t.fieldData.isDisabled.value&&s.push("field-disabled"),s.join(" ")}),r=e.computed(()=>{const s=["field-label"];return t.fieldData.fieldSchema.labelClass&&s.push(t.fieldData.fieldSchema.labelClass),s.join(" ")}),m=e.computed(()=>{const s=["field-error-message"];return t.fieldData.fieldSchema.errorClass&&s.push(t.fieldData.fieldSchema.errorClass),s.join(" ")});function n(s){const d=s.target;t.fieldData.fieldValue.value=d.value}return(s,d)=>s.fieldData.isVisible.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(i.value)},[e.renderSlot(s.$slots,"label",{field:s.fieldData.fieldSchema,required:s.fieldData.isRequired.value},()=>[e.createElementVNode("fieldset",nt,[s.fieldData.fieldSchema.label?(e.openBlock(),e.createElementBlock("legend",{key:0,class:e.normalizeClass(r.value)},[e.createTextVNode(e.toDisplayString(s.fieldData.fieldSchema.label)+" ",1),s.fieldData.isRequired.value?(e.openBlock(),e.createElementBlock("span",ot,"*")):e.createCommentVNode("",!0)],2)):e.createCommentVNode("",!0),e.renderSlot(s.$slots,"description",{field:s.fieldData.fieldSchema},()=>[s.fieldData.fieldSchema.description?(e.openBlock(),e.createElementBlock("div",dt,e.toDisplayString(s.fieldData.fieldSchema.description),1)):e.createCommentVNode("",!0)],!0),e.createElementVNode("div",ct,[e.renderSlot(s.$slots,"input",{field:s.fieldData,options:s.fieldData.fieldOptions,loading:s.fieldData.loadingOptions.value},()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.fieldData.fieldOptions.value,l=>(e.openBlock(),e.createElementBlock("label",{key:l.value,class:e.normalizeClass(["radio-option",{disabled:l.disabled||s.fieldData.isDisabled.value}])},[e.createElementVNode("input",{type:"radio",name:s.fieldData.fieldSchema.name,value:l.value,checked:s.fieldData.fieldValue.value===l.value,disabled:l.disabled||s.fieldData.isDisabled.value,required:s.fieldData.isRequired.value,class:"radio-input",onChange:n,onFocus:d[0]||(d[0]=(...b)=>s.fieldData.handleFocus&&s.fieldData.handleFocus(...b)),onBlur:d[1]||(d[1]=(...b)=>s.fieldData.handleBlur&&s.fieldData.handleBlur(...b))},null,40,ft),e.createElementVNode("span",mt,e.toDisplayString(l.label),1),l.description?(e.openBlock(),e.createElementBlock("div",ut,e.toDisplayString(l.description),1)):e.createCommentVNode("",!0)],2))),128))],!0),s.fieldData.loadingOptions.value?(e.openBlock(),e.createElementBlock("div",pt,[e.renderSlot(s.$slots,"loading",{},()=>[d[2]||(d[2]=e.createElementVNode("span",{class:"loading-spinner"},"⟳",-1))],!0)])):e.createCommentVNode("",!0)])])],!0),e.renderSlot(s.$slots,"help",{field:s.fieldData.fieldSchema},()=>{var l;return[(l=s.fieldData.fieldSchema.slots)!=null&&l.help?(e.openBlock(),e.createElementBlock("div",{key:0,class:"field-help",innerHTML:s.fieldData.fieldSchema.slots.help},null,8,ht)):e.createCommentVNode("",!0)]},!0),e.renderSlot(s.$slots,"error",{field:s.fieldData,error:s.fieldData.fieldState.value.error},()=>[s.fieldData.hasError.value?(e.openBlock(),e.createElementBlock("div",{key:0,id:`field-${s.fieldData.fieldSchema.name}-error`,class:e.normalizeClass(m.value)},e.toDisplayString(s.fieldData.fieldState.value.error),11,bt)):e.createCommentVNode("",!0)],!0)],2)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-25e2da68"]]),yt={class:"checkbox-container"},gt={class:"checkbox-content"},Dt={key:0,class:"field-required"},kt={key:0,class:"field-description"},Ct=["innerHTML"],Vt=["id"],Y=I(e.defineComponent({__name:"CheckboxField",props:{fieldData:{}},setup(a){const t=a,i=e.computed(()=>({...{...t.fieldData.inputAttrs},type:"checkbox",checked:!!t.fieldData.fieldValue.value})),r=e.computed(()=>t.fieldData.inputClasses),m=e.computed(()=>{const l=["dynamic-field","field-type-checkbox"];return t.fieldData.fieldSchema.wrapperClass&&l.push(t.fieldData.fieldSchema.wrapperClass),t.fieldData.hasError.value&&l.push("field-error"),t.fieldData.isDisabled.value&&l.push("field-disabled"),t.fieldData.fieldState.value.touched&&l.push("field-touched"),t.fieldData.fieldState.value.dirty&&l.push("field-dirty"),l.join(" ")}),n=e.computed(()=>{const l=["field-label"];return t.fieldData.fieldSchema.labelClass&&l.push(t.fieldData.fieldSchema.labelClass),l.join(" ")}),s=e.computed(()=>{const l=["field-error-message"];return t.fieldData.fieldSchema.errorClass&&l.push(t.fieldData.fieldSchema.errorClass),l.join(" ")});function d(l){const b=l.target;t.fieldData.fieldValue.value=b.checked}return(l,b)=>l.fieldData.isVisible.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(m.value)},[e.renderSlot(l.$slots,"input",{field:l.fieldData,attrs:i.value,classes:r.value},()=>[e.createElementVNode("label",yt,[e.createElementVNode("input",e.mergeProps(i.value,{class:[r.value,"checkbox-input"],onChange:d,onFocus:b[0]||(b[0]=(...V)=>l.fieldData.handleFocus&&l.fieldData.handleFocus(...V)),onBlur:b[1]||(b[1]=(...V)=>l.fieldData.handleBlur&&l.fieldData.handleBlur(...V))}),null,16),b[2]||(b[2]=e.createElementVNode("span",{class:"checkbox-checkmark"},null,-1)),e.createElementVNode("div",gt,[e.renderSlot(l.$slots,"label",{field:l.fieldData.fieldSchema,required:l.fieldData.isRequired.value},()=>[l.fieldData.fieldSchema.label?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(n.value)},[e.createTextVNode(e.toDisplayString(l.fieldData.fieldSchema.label)+" ",1),l.fieldData.isRequired.value?(e.openBlock(),e.createElementBlock("span",Dt,"*")):e.createCommentVNode("",!0)],2)):e.createCommentVNode("",!0)],!0),e.renderSlot(l.$slots,"description",{field:l.fieldData.fieldSchema},()=>[l.fieldData.fieldSchema.description?(e.openBlock(),e.createElementBlock("div",kt,e.toDisplayString(l.fieldData.fieldSchema.description),1)):e.createCommentVNode("",!0)],!0)])])],!0),e.renderSlot(l.$slots,"help",{field:l.fieldData.fieldSchema},()=>{var V;return[(V=l.fieldData.fieldSchema.slots)!=null&&V.help?(e.openBlock(),e.createElementBlock("div",{key:0,class:"field-help",innerHTML:l.fieldData.fieldSchema.slots.help},null,8,Ct)):e.createCommentVNode("",!0)]},!0),e.renderSlot(l.$slots,"error",{field:l.fieldData,error:l.fieldData.fieldState.value.error},()=>[l.fieldData.hasError.value?(e.openBlock(),e.createElementBlock("div",{key:0,id:`field-${l.fieldData.fieldSchema.name}-error`,class:e.normalizeClass(s.value)},e.toDisplayString(l.fieldData.fieldState.value.error),11,Vt)):e.createCommentVNode("",!0)],!0)],2)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-ed1081e8"]]),K=e.defineComponent({__name:"DynamicField",props:{fieldData:{},customComponents:{default:()=>({})}},setup(a){const t=a,i=e.useSlots(),r=e.computed(()=>Object.keys(i).map(d=>({name:d,slot:i[d]}))),m={text:F,email:F,password:F,url:F,tel:F,number:F,textarea:F,hidden:F,date:F,"datetime-local":F,time:F,file:F,range:F,color:F,select:U,multiselect:U,radio:x,checkbox:Y,switch:Y},n=e.computed(()=>{const d=t.fieldData.fieldSchema;if(d.component){if(t.customComponents[d.component])return t.customComponents[d.component];console.warn(`Custom component "${d.component}" not found for field "${d.name}"`)}const l=m[d.type];return l||(console.warn(`No component found for field type "${d.type}", using BaseField`),F)}),s=e.computed(()=>({...t.fieldData.fieldSchema.props||{}}));return(d,l)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(n.value),e.mergeProps({fieldData:d.fieldData},s.value),e.createSlots({_:2},[e.renderList(r.value,(b,V)=>({name:b.name,fn:e.withCtx(S=>[e.renderSlot(d.$slots,b.name,e.normalizeProps(e.guardReactiveProps(S)))])}))]),1040,["fieldData"]))}}),St={key:0,class:"form-header"},Bt={key:0,class:"form-title"},Et={key:1,class:"form-description"},Ft={key:0,class:"form-errors"},$t={class:"form-errors-list"},Nt={class:"form-body"},wt={class:"form-fieldset"},Ot=["onClick"],At={key:1,class:"form-group-description"},qt={class:"form-actions"},Tt=["disabled"],jt={key:0,class:"submit-spinner"},Lt=["disabled"],$e=I(e.defineComponent({__name:"DynamicForm",props:{schema:{},initialData:{default:()=>({})},customComponents:{default:()=>({})},validateOnChange:{type:Boolean},validateOnBlur:{type:Boolean},validateOnSubmit:{type:Boolean},resetOnSubmit:{type:Boolean},allowInvalidSubmit:{type:Boolean,default:!1},showGlobalErrors:{type:Boolean,default:!0},showResetButton:{type:Boolean,default:!0},submitText:{default:"Отправить"},resetText:{default:"Сбросить"},debounceValidation:{default:300}},emits:["submit","change","blur","focus","reset","validate"],setup(a,{expose:t,emit:i}){const r=a,m=i,n=e.useSlots(),s=e.ref(new Set),d=e.computed(()=>Object.keys(n).map(o=>({name:o,slot:n[o]}))),l=Fe({schema:r.schema,initialData:r.initialData,validateOnChange:r.validateOnChange,validateOnBlur:r.validateOnBlur,validateOnSubmit:r.validateOnSubmit,resetOnSubmit:r.resetOnSubmit,debounceValidation:r.debounceValidation},{submit:(o,k)=>m("submit",o,k),change:(o,k,y)=>m("change",o,k,y),blur:(o,k)=>m("blur",o,k),focus:(o,k)=>m("focus",o,k),reset:()=>m("reset"),validate:o=>m("validate",o)});e.onMounted(()=>{r.schema.groups&&r.schema.groups.forEach(o=>{o.collapsed&&s.value.add(o.name)})}),e.onUnmounted(()=>{l.dispose()});const b=e.computed(()=>{var k;const o=["dynamic-form"];return r.schema.layout&&o.push(`form-layout-${r.schema.layout}`),(k=r.schema.config)!=null&&k.formClass&&o.push(r.schema.config.formClass),l.formState.isSubmitting&&o.push("form-submitting"),l.isFormValid.value||o.push("form-invalid"),l.isFormDirty.value&&o.push("form-dirty"),o.join(" ")}),V=e.computed(()=>{const o=["fields-container"];return r.schema.layout&&o.push(`layout-${r.schema.layout}`),o.join(" ")}),S=e.computed(()=>r.schema.groups?r.schema.groups.filter(()=>!0):[]);function p(){l.submitForm()}function B(){l.resetForm(),s.value.clear(),r.schema.groups&&r.schema.groups.forEach(o=>{o.collapsed&&s.value.add(o.name)})}function L(o){const k=r.schema.fields.find(y=>y.name===o);return(k==null?void 0:k.label)||o}function O(o){return o.fields.map(k=>r.schema.fields.find(y=>y.name===k)).filter(Boolean)}function z(o){s.value.has(o)?s.value.delete(o):s.value.add(o)}function c(o){return s.value.has(o)}return t({formHandler:l,validateForm:l.validateForm,validateField:l.validateField,resetForm:B,submitForm:p,setFormValues:l.setFormValues,setFormErrors:l.setFormErrors,clearFormErrors:l.clearFormErrors,getFieldData:l.getFieldData,formData:l.formData,formState:l.formState,isValid:l.isFormValid,isDirty:l.isFormDirty}),(o,k)=>(e.openBlock(),e.createElementBlock("form",{class:e.normalizeClass(b.value),onSubmit:e.withModifiers(p,["prevent"]),onReset:e.withModifiers(B,["prevent"])},[e.renderSlot(o.$slots,"header",{schema:e.unref(l).schema,state:e.unref(l).formState},()=>[o.schema.title||o.schema.description?(e.openBlock(),e.createElementBlock("div",St,[o.schema.title?(e.openBlock(),e.createElementBlock("h2",Bt,e.toDisplayString(o.schema.title),1)):e.createCommentVNode("",!0),o.schema.description?(e.openBlock(),e.createElementBlock("p",Et,e.toDisplayString(o.schema.description),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],!0),e.renderSlot(o.$slots,"errors",{errors:e.unref(l).fieldErrors.value,state:e.unref(l).formState},()=>[o.showGlobalErrors&&e.unref(l).fieldErrors.value.length>0?(e.openBlock(),e.createElementBlock("div",Ft,[k[0]||(k[0]=e.createElementVNode("h4",{class:"form-errors-title"},"Ошибки валидации:",-1)),e.createElementVNode("ul",$t,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(l).fieldErrors.value,y=>(e.openBlock(),e.createElementBlock("li",{key:y.field,class:"form-error-item"},[e.createElementVNode("strong",null,e.toDisplayString(L(y.field))+":",1),e.createTextVNode(" "+e.toDisplayString(y.message),1)]))),128))])])):e.createCommentVNode("",!0)],!0),e.createElementVNode("div",Nt,[o.schema.groups&&o.schema.groups.length>0?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(S.value,y=>(e.openBlock(),e.createElementBlock("div",{key:y.name,class:"form-group"},[e.renderSlot(o.$slots,"group",{group:y,fields:O(y),schema:e.unref(l).schema,state:e.unref(l).formState},()=>[e.createElementVNode("fieldset",wt,[y.label?(e.openBlock(),e.createElementBlock("legend",{key:0,class:e.normalizeClass(["form-group-legend",{collapsible:y.collapsible}]),onClick:g=>y.collapsible?z(y.name):void 0},[e.createTextVNode(e.toDisplayString(y.label)+" ",1),y.collapsible?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["group-toggle",{collapsed:c(y.name)}])}," ▼ ",2)):e.createCommentVNode("",!0)],10,Ot)):e.createCommentVNode("",!0),y.description?(e.openBlock(),e.createElementBlock("div",At,e.toDisplayString(y.description),1)):e.createCommentVNode("",!0),e.withDirectives(e.createElementVNode("div",{class:e.normalizeClass(["form-group-fields",V.value])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.fields,g=>(e.openBlock(),e.createBlock(K,{key:g,fieldData:e.unref(l).getFieldData(g),customComponents:o.customComponents},e.createSlots({_:2},[e.renderList(d.value,(A,R)=>({name:A.name,fn:e.withCtx(G=>[A.name.startsWith("field-")?e.renderSlot(o.$slots,A.name,e.mergeProps({key:0,ref_for:!0},G),void 0,!0):e.createCommentVNode("",!0)])}))]),1032,["fieldData","customComponents"]))),128))],2),[[e.vShow,!c(y.name)]])])],!0)]))),128)):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["form-fields",V.value])},[e.renderSlot(o.$slots,"fields",{fields:e.unref(l).visibleFields.value,schema:e.unref(l).schema,state:e.unref(l).formState},()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(l).visibleFields.value,y=>(e.openBlock(),e.createBlock(K,{key:y.name,fieldData:e.unref(l).getFieldData(y.name),customComponents:o.customComponents},e.createSlots({_:2},[e.renderList(d.value,(g,A)=>({name:g.name,fn:e.withCtx(R=>[g.name.startsWith("field-")?e.renderSlot(o.$slots,g.name,e.mergeProps({key:0,ref_for:!0},R),void 0,!0):e.createCommentVNode("",!0)])}))]),1032,["fieldData","customComponents"]))),128))],!0)],2))]),e.renderSlot(o.$slots,"actions",{submit:p,reset:B,state:e.unref(l).formState,isValid:e.unref(l).isFormValid.value,isDirty:e.unref(l).isFormDirty.value},()=>[e.createElementVNode("div",qt,[e.createElementVNode("button",{type:"submit",class:"btn btn-primary",disabled:e.unref(l).formState.isSubmitting||!o.allowInvalidSubmit&&!e.unref(l).isFormValid.value},[e.unref(l).formState.isSubmitting?(e.openBlock(),e.createElementBlock("span",jt," ⟳ ")):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(o.submitText),1)],8,Tt),o.showResetButton?(e.openBlock(),e.createElementBlock("button",{key:0,type:"reset",class:"btn btn-secondary",disabled:e.unref(l).formState.isSubmitting},e.toDisplayString(o.resetText),9,Lt)):e.createCommentVNode("",!0)])],!0),e.renderSlot(o.$slots,"footer",{schema:e.unref(l).schema,state:e.unref(l).formState,values:e.unref(l).formData.value},void 0,!0)],34))}}),[["__scopeId","data-v-62c89d3a"]]),zt={install(a){a.component("BaseField",F),a.component("SelectField",U),a.component("RadioField",x),a.component("CheckboxField",Y),a.component("DynamicField",K),a.component("DynamicForm",$e)}};h.BaseField=F,h.CheckboxField=Y,h.ConditionsEngine=re,h.DynamicField=K,h.DynamicForm=$e,h.RadioField=x,h.SelectField=U,h.ValidationEngine=Ee,h.builtinValidators=q,h.custom=De,h.default=zt,h.differentFrom=Ce,h.email=me,h.evaluateCondition=ie,h.evaluateConditions=H,h.evaluateFieldLogic=X,h.getAvailableAdapters=je,h.getValidatorAdapter=W,h.integer=ge,h.max=fe,h.maxLength=de,h.min=ce,h.minLength=oe,h.notOneOf=be,h.number=ye,h.oneOf=he,h.pattern=pe,h.required=ne,h.sameAs=ke,h.url=ue,h.useDynamicField=se,h.useDynamicForm=Fe,h.validatorAdapters=_,h.veeValidateAdapter=Be,h.yupAdapter=Ve,h.zodAdapter=Se,Object.defineProperties(h,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}); //# sourceMappingURL=index.umd.js.map