pdyform 2.2.1 → 2.3.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.
@@ -2,13 +2,12 @@ import { Component } from 'vue';
2
2
  import { ComponentOptionsMixin } from 'vue';
3
3
  import { ComponentProvideOptions } from 'vue';
4
4
  import { DefineComponent } from 'vue';
5
+ import { FormEngine } from 'pdyform-core';
5
6
  import { FormField } from 'pdyform-core';
6
7
  import { FormRuntimeState } from 'pdyform-core';
7
8
  import { FormSchema } from 'pdyform-core';
8
- import { FormStore } from 'pdyform-core';
9
9
  import { PublicProps } from 'vue';
10
10
  import { Ref } from 'vue';
11
- import { StoreApi } from 'zustand/vanilla';
12
11
 
13
12
  declare type __VLS_Props = {
14
13
  schema: FormSchema;
@@ -66,37 +65,23 @@ onBlur?: ((...args: any[]) => any) | undefined;
66
65
  }>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
67
66
 
68
67
  export declare function useForm({ schema }: UseFormOptions): {
69
- store: StoreApi<FormStore>;
68
+ engine: FormEngine;
70
69
  state: Ref< {
71
- setFieldValue: (name: string, rawValue: unknown) => Promise<void>;
72
- setFieldBlur: (name: string) => Promise<void>;
73
- setSubmitting: (isSubmitting: boolean) => void;
74
- runSubmitValidation: () => Promise<{
75
- state: FormRuntimeState;
76
- hasError: boolean;
77
- }>;
78
- values: Record<string, any>;
70
+ values: Record<string, unknown>;
79
71
  errors: Record<string, string>;
80
72
  validatingFields: string[];
81
73
  isSubmitting: boolean;
82
- }, FormStore | {
83
- setFieldValue: (name: string, rawValue: unknown) => Promise<void>;
84
- setFieldBlur: (name: string) => Promise<void>;
85
- setSubmitting: (isSubmitting: boolean) => void;
86
- runSubmitValidation: () => Promise<{
87
- state: FormRuntimeState;
88
- hasError: boolean;
89
- }>;
90
- values: Record<string, any>;
74
+ }, FormRuntimeState | {
75
+ values: Record<string, unknown>;
91
76
  errors: Record<string, string>;
92
77
  validatingFields: string[];
93
78
  isSubmitting: boolean;
94
79
  }>;
95
80
  setValue: (name: string, value: any) => Promise<void>;
96
- getValue: (name: string) => any;
81
+ getValue: (name: string) => unknown;
97
82
  validate: () => Promise<{
98
83
  hasError: boolean;
99
- values: Record<string, any>;
84
+ values: Record<string, unknown>;
100
85
  }>;
101
86
  reset: () => void;
102
87
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),D=require("clsx"),j=require("tailwind-merge"),c=require("radix-vue"),V=require("lucide-vue-next");function C(t){if(typeof t=="number")return Number.isNaN(t)?null:t;if(typeof t!="string"||t.trim()==="")return null;const o=Number(t);return Number.isNaN(o)?null:o}var z={required:"{label} is required",min:"{label} must be at least {value}",max:"{label} must be at most {value}",email:"Invalid email address",pattern:"Invalid format",custom:"Invalid value"};function v(t,o,l){return t.replace("{label}",o.label).replace("{value}",String(l.value||""))}function w(t,o,l){if(!o)return l;const r=o.split(/[.[\]]/).filter(Boolean);let n=t;for(const a of r){if(n==null)return l;n=n[a]}return n===void 0?l:n}function M(t,o,l){if(Object(t)!==t)return t;const r=o.split(/[.[\]]/).filter(Boolean),n={...t};let a=n;for(let s=0;s<r.length-1;s++){const i=r[s],d=r[s+1],m=/^\d+$/.test(d);!(i in a)||a[i]===null||typeof a[i]!="object"?a[i]=m?[]:{}:a[i]=Array.isArray(a[i])?[...a[i]]:{...a[i]},a=a[i]}return a[r[r.length-1]]=l,n}function N(t,o){if(t.type!=="number")return o;if(o===""||o===void 0||o===null)return"";const l=C(o);return l===null?o:l}async function P(t,o,l){if(!o.validations)return null;const r={...z,...l};for(const n of o.validations)switch(n.type){case"required":if(t==null||t===""||Array.isArray(t)&&t.length===0)return n.message||v(r.required,o,n);break;case"min":if(o.type==="number"){const a=C(t);if(a!==null&&a<n.value){const s=o.type==="number"?r.min:typeof t=="string"?"{label} must be at least {value} characters":r.min;return n.message||v(s,o,n)}break}if(typeof t=="number"&&t<n.value)return n.message||v(r.min,o,n);if(typeof t=="string"&&t.length<n.value)return n.message||v("{label} must be at least {value} characters",o,n);break;case"max":if(o.type==="number"){const a=C(t);if(a!==null&&a>n.value)return n.message||v(r.max,o,n);break}if(typeof t=="number"&&t>n.value)return n.message||v(r.max,o,n);if(typeof t=="string"&&t.length>n.value)return n.message||v("{label} must be at most {value} characters",o,n);break;case"email":{if(t&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t))return n.message||v(r.email,o,n);break}case"pattern":if(t&&n.value&&!new RegExp(n.value).test(t))return n.message||v(r.pattern,o,n);break;case"custom":if(n.validator){const a=await n.validator(t);if(typeof a=="string")return a;if(a===!1)return n.message||v(r.custom,o,n)}break}return null}async function I(t,o,l,r,n,a){if(r&&n){const i=await r(n);if(i[o])return i[o]}const s=t.find(i=>i.name===o);return s?await P(l,s,a):null}async function T(t,o,l,r){let n={};l&&(n=await l(o));const a=t.map(async s=>{if(n[s.name]||(typeof s.hidden=="function"?s.hidden(o):s.hidden))return;const d=await P(w(o,s.name),s,r);d&&(n[s.name]=d)});return await Promise.all(a),n}function U(t){return t.reduce((o,l)=>(o[l.name]=l.defaultValue!==void 0?l.defaultValue:l.type==="checkbox"?[]:"",o),{})}const $=t=>{let o;const l=new Set,r=(m,k)=>{const u=typeof m=="function"?m(o):m;if(!Object.is(u,o)){const p=o;o=k??(typeof u!="object"||u===null)?u:Object.assign({},o,u),l.forEach(b=>b(o,p))}},n=()=>o,i={setState:r,getState:n,getInitialState:()=>d,subscribe:m=>(l.add(m),()=>l.delete(m))},d=o=t(r,n,i);return i},O=t=>t?$(t):$;function A(t,o,l){return O()((r,n)=>({values:U(t),errors:{},validatingFields:[],isSubmitting:!1,setFieldValue:async(a,s)=>{const i=t.find(u=>u.name===a),d=i?N(i,s):s;r(u=>({values:M(u.values,a,d)}));const m=!!n().errors[a];if(i&&["select","checkbox","radio","switch","date"].includes(i.type)||m){r(u=>({validatingFields:[...u.validatingFields,a]}));try{const u=n().values,p=await I(t,a,d,o,u,l);r(b=>({errors:{...b.errors,[a]:p||""},validatingFields:b.validatingFields.filter(f=>f!==a)}))}catch{r(p=>({validatingFields:p.validatingFields.filter(b=>b!==a)}))}}},setFieldBlur:async a=>{r(s=>({validatingFields:[...s.validatingFields,a]}));try{const s=n().values,i=w(s,a),d=await I(t,a,i,o,s,l);r(m=>({errors:{...m.errors,[a]:d||""},validatingFields:m.validatingFields.filter(k=>k!==a)}))}catch{r(i=>({validatingFields:i.validatingFields.filter(d=>d!==a)}))}},setSubmitting:a=>r({isSubmitting:a}),runSubmitValidation:async()=>{r({isSubmitting:!0});const a=n(),s=await T(t,a.values,o,l),i=Object.keys(s).length>0;return r({errors:s,isSubmitting:!1}),{state:n(),hasError:i}}}))}function y(...t){return j.twMerge(D.clsx(t))}const L=["type","value"],E=e.defineComponent({__name:"Input",props:{class:{},type:{},modelValue:{}},emits:["update:modelValue","blur"],setup(t,{emit:o}){const l=t,r=o;return(n,a)=>(e.openBlock(),e.createElementBlock("input",e.mergeProps(n.$attrs,{type:t.type,class:e.unref(y)("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",l.class),value:t.modelValue,onInput:a[0]||(a[0]=s=>r("update:modelValue",s.target.value)),onBlur:a[1]||(a[1]=s=>r("blur",s))}),null,16,L))}}),x=e.defineComponent({__name:"InputRenderer",props:{field:{},fieldId:{},modelValue:{},ariaInvalid:{type:Boolean},ariaRequired:{type:Boolean},ariaDescribedby:{}},emits:["update:modelValue","blur"],setup(t,{emit:o}){const l=t,r=o,n=a=>{r("update:modelValue",N(l.field,a))};return(a,s)=>(e.openBlock(),e.createBlock(E,{id:t.fieldId,type:t.field.type,placeholder:t.field.placeholder,disabled:typeof t.field.disabled=="boolean"?t.field.disabled:void 0,name:t.field.name,modelValue:t.modelValue??"","onUpdate:modelValue":n,onBlur:s[0]||(s[0]=i=>r("blur",i))},null,8,["id","type","placeholder","disabled","name","modelValue"]))}}),G=["value"],H=e.defineComponent({__name:"Textarea",props:{class:{},modelValue:{}},emits:["update:modelValue","blur"],setup(t,{emit:o}){const l=t,r=o;return(n,a)=>(e.openBlock(),e.createElementBlock("textarea",e.mergeProps(n.$attrs,{class:e.unref(y)("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",l.class),value:t.modelValue,onInput:a[0]||(a[0]=s=>r("update:modelValue",s.target.value)),onBlur:a[1]||(a[1]=s=>r("blur",s))}),null,16,G))}}),K=e.defineComponent({__name:"TextareaRenderer",props:{field:{},fieldId:{},modelValue:{},ariaInvalid:{type:Boolean},ariaRequired:{type:Boolean},ariaDescribedby:{}},emits:["update:modelValue"],setup(t,{emit:o}){const l=o;return(r,n)=>(e.openBlock(),e.createBlock(H,{id:t.fieldId,placeholder:t.field.placeholder,disabled:typeof t.field.disabled=="boolean"?t.field.disabled:void 0,name:t.field.name,modelValue:t.modelValue??"","onUpdate:modelValue":n[0]||(n[0]=a=>l("update:modelValue",a))},null,8,["id","placeholder","disabled","name","modelValue"]))}}),W=e.defineComponent({__name:"SelectTrigger",props:{disabled:{type:Boolean},asChild:{type:Boolean},as:{},class:{}},setup(t){const o=t,l=e.computed(()=>{const{class:n,...a}=o;return a}),r=c.useForwardProps(l);return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.SelectTrigger),e.mergeProps(e.unref(r),{class:e.unref(y)("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",o.class)}),{default:e.withCtx(()=>[e.renderSlot(n.$slots,"default"),e.createVNode(e.unref(c.SelectIcon),{"as-child":""},{default:e.withCtx(()=>[e.createVNode(e.unref(V.ChevronDown),{class:"h-4 w-4 opacity-50"})]),_:1})]),_:3},16,["class"]))}}),J=e.defineComponent({__name:"SelectContent",props:{forceMount:{type:Boolean},position:{default:"popper"},bodyLock:{type:Boolean},side:{},sideOffset:{},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},updatePositionStrategy:{},prioritizePosition:{type:Boolean},asChild:{type:Boolean},as:{},class:{}},setup(t){const o=t,l=e.computed(()=>{const{class:n,...a}=o;return a}),r=c.useForwardProps(l);return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.SelectPortal),null,{default:e.withCtx(()=>[e.createVNode(e.unref(c.SelectContent),e.mergeProps(e.unref(r),{class:e.unref(y)("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",t.position==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",o.class)}),{default:e.withCtx(()=>[e.createVNode(e.unref(c.SelectViewport),{class:e.normalizeClass(e.unref(y)("p-1",t.position==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"))},{default:e.withCtx(()=>[e.renderSlot(n.$slots,"default")]),_:3},8,["class"])]),_:3},16,["class"])]),_:3}))}}),Q={class:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center"},X=e.defineComponent({__name:"SelectItem",props:{value:{},disabled:{type:Boolean},textValue:{},asChild:{type:Boolean},as:{},class:{}},setup(t){const o=t,l=e.computed(()=>{const{class:n,...a}=o;return a}),r=c.useForwardProps(l);return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.SelectItem),e.mergeProps(e.unref(r),{class:e.unref(y)("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",o.class)}),{default:e.withCtx(()=>[e.createElementVNode("span",Q,[e.createVNode(e.unref(c.SelectItemIndicator),null,{default:e.withCtx(()=>[e.createVNode(e.unref(V.Check),{class:"h-4 w-4"})]),_:1})]),e.createVNode(e.unref(c.SelectItemText),null,{default:e.withCtx(()=>[e.renderSlot(n.$slots,"default")]),_:3})]),_:3},16,["class"]))}}),Y=e.defineComponent({__name:"Select",props:{open:{type:Boolean},defaultOpen:{type:Boolean},defaultValue:{},modelValue:{},dir:{},name:{},autocomplete:{},disabled:{type:Boolean},required:{type:Boolean}},emits:["update:modelValue","update:open"],setup(t,{emit:o}){const l=t,r=o,n=c.useForwardPropsEmits(l,r);return(a,s)=>(e.openBlock(),e.createBlock(e.unref(c.SelectRoot),e.normalizeProps(e.guardReactiveProps(e.unref(n))),{default:e.withCtx(()=>[e.renderSlot(a.$slots,"default")]),_:3},16))}}),Z=e.defineComponent({__name:"SelectRenderer",props:{field:{},fieldId:{},modelValue:{},ariaInvalid:{type:Boolean},ariaRequired:{type:Boolean},ariaDescribedby:{}},emits:["update:modelValue"],setup(t,{emit:o}){const l=o;return(r,n)=>(e.openBlock(),e.createBlock(Y,{disabled:typeof t.field.disabled=="boolean"?t.field.disabled:void 0,name:t.field.name,modelValue:t.modelValue!=null?String(t.modelValue):"","onUpdate:modelValue":n[0]||(n[0]=a=>l("update:modelValue",a))},{default:e.withCtx(()=>[e.createVNode(W,{id:t.fieldId},{default:e.withCtx(()=>[e.createVNode(e.unref(c.SelectValue),{placeholder:t.field.placeholder||"Select an option"},null,8,["placeholder"])]),_:1},8,["id"]),e.createVNode(J,null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.field.options,a=>(e.openBlock(),e.createBlock(X,{key:a.value,value:String(a.value)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.label),1)]),_:2},1032,["value"]))),128))]),_:1})]),_:1},8,["disabled","name","modelValue"]))}}),_=e.defineComponent({__name:"Checkbox",props:{defaultChecked:{type:Boolean},checked:{type:[Boolean,String]},disabled:{type:Boolean},required:{type:Boolean},name:{},value:{},id:{},asChild:{type:Boolean},as:{},class:{}},emits:["update:checked","blur"],setup(t,{emit:o}){const l=t,r=o,n=e.computed(()=>{const{class:s,...i}=l;return i}),a=c.useForwardPropsEmits(n,r);return(s,i)=>(e.openBlock(),e.createBlock(e.unref(c.CheckboxRoot),e.mergeProps(e.unref(a),{class:e.unref(y)("peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",l.class),onBlur:i[0]||(i[0]=d=>r("blur"))}),{default:e.withCtx(()=>[e.createVNode(e.unref(c.CheckboxIndicator),{class:"flex h-full w-full items-center justify-center text-current"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Check),{class:"h-4 w-4"})]),_:1})]),_:1},16,["class"]))}}),F=e.defineComponent({__name:"Label",props:{for:{},asChild:{type:Boolean},as:{},class:{}},setup(t){const o=t,l=e.computed(()=>{const{class:r,...n}=o;return n});return(r,n)=>(e.openBlock(),e.createBlock(e.unref(c.Label),e.mergeProps(l.value,{class:e.unref(y)("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",o.class)}),{default:e.withCtx(()=>[e.renderSlot(r.$slots,"default")]),_:3},16,["class"]))}}),ee={class:"flex flex-wrap gap-4"},te=e.defineComponent({__name:"CheckboxRenderer",props:{field:{},fieldId:{},modelValue:{},ariaInvalid:{type:Boolean},ariaRequired:{type:Boolean},ariaDescribedby:{}},emits:["update:modelValue"],setup(t,{emit:o}){const l=t,r=o,n=(a,s)=>{const i=Array.isArray(l.modelValue)?[...l.modelValue]:[];if(s)i.push(a);else{const d=i.indexOf(a);d>-1&&i.splice(d,1)}r("update:modelValue",i)};return(a,s)=>(e.openBlock(),e.createElementBlock("div",ee,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.field.options,i=>(e.openBlock(),e.createElementBlock("div",{key:i.value,class:"flex items-center space-x-2"},[e.createVNode(_,{id:`checkbox-${t.field.name}-${i.value}`,disabled:typeof t.field.disabled=="boolean"?t.field.disabled:void 0,checked:Array.isArray(t.modelValue)&&t.modelValue.includes(i.value),"onUpdate:checked":d=>n(i.value,!!d)},null,8,["id","disabled","checked","onUpdate:checked"]),e.createVNode(F,{for:`checkbox-${t.field.name}-${i.value}`,class:"font-normal"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.label),1)]),_:2},1032,["for"])]))),128))]))}}),ae=e.defineComponent({__name:"RadioGroupItem",props:{id:{},value:{},disabled:{type:Boolean},required:{type:Boolean},name:{},asChild:{type:Boolean},as:{},class:{}},setup(t){const o=t,l=e.computed(()=>{const{class:n,...a}=o;return a}),r=c.useForwardProps(l);return(n,a)=>(e.openBlock(),e.createBlock(e.unref(c.RadioGroupItem),e.mergeProps(e.unref(r),{class:e.unref(y)("aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",o.class)}),{default:e.withCtx(()=>[e.createVNode(e.unref(c.RadioGroupIndicator),{class:"flex items-center justify-center"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Circle),{class:"h-2.5 w-2.5 fill-current text-current"})]),_:1})]),_:1},16,["class"]))}}),ne=e.defineComponent({__name:"RadioGroup",props:{modelValue:{},defaultValue:{},disabled:{type:Boolean},name:{},required:{type:Boolean},orientation:{},dir:{},loop:{type:Boolean},asChild:{type:Boolean},as:{},class:{}},emits:["update:modelValue"],setup(t,{emit:o}){const l=t,r=o,n=e.computed(()=>{const{class:s,...i}=l;return i}),a=c.useForwardPropsEmits(n,r);return(s,i)=>(e.openBlock(),e.createBlock(e.unref(c.RadioGroupRoot),e.mergeProps(e.unref(a),{class:e.unref(y)("grid gap-2",l.class)}),{default:e.withCtx(()=>[e.renderSlot(s.$slots,"default")]),_:3},16,["class"]))}}),oe=e.defineComponent({__name:"RadioRenderer",props:{field:{},fieldId:{},modelValue:{},ariaInvalid:{type:Boolean},ariaRequired:{type:Boolean},ariaDescribedby:{}},emits:["update:modelValue"],setup(t,{emit:o}){const l=o;return(r,n)=>(e.openBlock(),e.createBlock(ne,{class:"flex flex-wrap gap-4",disabled:typeof t.field.disabled=="boolean"?t.field.disabled:void 0,name:t.field.name,modelValue:t.modelValue!=null?String(t.modelValue):"","onUpdate:modelValue":n[0]||(n[0]=a=>l("update:modelValue",a))},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.field.options,a=>(e.openBlock(),e.createElementBlock("div",{key:a.value,class:"flex items-center space-x-2"},[e.createVNode(ae,{id:`radio-${t.field.name}-${a.value}`,value:String(a.value)},null,8,["id","value"]),e.createVNode(F,{for:`radio-${t.field.name}-${a.value}`,class:"font-normal"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.label),1)]),_:2},1032,["for"])]))),128))]),_:1},8,["disabled","name","modelValue"]))}}),le=e.defineComponent({__name:"DateRenderer",props:{field:{},modelValue:{},fieldId:{},ariaInvalid:{type:Boolean},ariaRequired:{type:Boolean},ariaDescribedby:{}},emits:["update:modelValue","blur"],setup(t,{emit:o}){const l=o;return(r,n)=>(e.openBlock(),e.createBlock(E,{id:t.fieldId,type:"date",modelValue:t.modelValue,placeholder:t.field.placeholder,disabled:typeof t.field.disabled=="boolean"?t.field.disabled:void 0,name:t.field.name,"aria-invalid":t.ariaInvalid,"aria-required":t.ariaRequired,"aria-describedby":t.ariaDescribedby,"onUpdate:modelValue":n[0]||(n[0]=a=>l("update:modelValue",a)),onBlur:n[1]||(n[1]=a=>l("blur",a))},null,8,["id","modelValue","placeholder","disabled","name","aria-invalid","aria-required","aria-describedby"]))}}),re=e.defineComponent({__name:"Switch",props:{defaultChecked:{type:Boolean},checked:{type:Boolean},disabled:{type:Boolean},required:{type:Boolean},name:{},id:{},value:{},asChild:{type:Boolean},as:{},class:{}},emits:["update:checked"],setup(t,{emit:o}){const l=t,r=o,n=e.computed(()=>{const{class:s,...i}=l;return i}),a=c.useForwardPropsEmits(n,r);return(s,i)=>(e.openBlock(),e.createBlock(e.unref(c.SwitchRoot),e.mergeProps(e.unref(a),{class:e.unref(y)("peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",l.class)}),{default:e.withCtx(()=>[e.createVNode(e.unref(c.SwitchThumb),{class:e.normalizeClass(e.unref(y)("pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0"))},null,8,["class"])]),_:1},16,["class"]))}}),ie={class:"flex items-center space-x-2"},se=e.defineComponent({__name:"SwitchRenderer",props:{field:{},modelValue:{type:Boolean},fieldId:{},ariaInvalid:{type:Boolean},ariaRequired:{type:Boolean},ariaDescribedby:{}},emits:["update:modelValue","blur"],setup(t,{emit:o}){const l=o;return(r,n)=>(e.openBlock(),e.createElementBlock("div",ie,[e.createVNode(re,{id:t.fieldId,checked:t.modelValue,disabled:typeof t.field.disabled=="boolean"?t.field.disabled:void 0,"aria-invalid":t.ariaInvalid,"aria-required":t.ariaRequired,"aria-describedby":t.ariaDescribedby,"onUpdate:checked":n[0]||(n[0]=a=>l("update:modelValue",a))},null,8,["id","checked","disabled","aria-invalid","aria-required","aria-describedby"])]))}}),S={text:x,number:x,password:x,email:x,textarea:K,select:Z,checkbox:te,radio:oe,date:le,switch:se},de={key:0,class:"text-destructive"},ce=["id"],ue=["id"],R=e.defineComponent({__name:"FormFieldRenderer",props:{field:{},modelValue:{},error:{},componentMap:{}},emits:["update:modelValue","blur"],setup(t,{emit:o}){const l=t,r=o,n=e.computed(()=>`field-${l.field.name}`),a=e.computed(()=>`${n.value}-description`),s=e.computed(()=>`${n.value}-error`),i=e.computed(()=>{var u;return(u=l.field.validations)==null?void 0:u.some(p=>p.type==="required")}),d=e.computed(()=>{const u=[];return l.field.description&&u.push(a.value),l.error&&u.push(s.value),u.length>0?u.join(" "):void 0}),m=e.computed(()=>l.componentMap?{...S,...l.componentMap}:S),k=e.computed(()=>m.value[l.field.type]??x);return(u,p)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["space-y-2",t.field.className])},[t.field.label?(e.openBlock(),e.createBlock(F,{key:0,for:n.value,class:e.normalizeClass(i.value?"flex items-center gap-1":"")},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.field.label)+" ",1),i.value?(e.openBlock(),e.createElementBlock("span",de,"*")):e.createCommentVNode("",!0)]),_:1},8,["for","class"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(k.value),{field:t.field,fieldId:n.value,modelValue:t.modelValue,"aria-invalid":!!t.error,"aria-required":i.value,"aria-describedby":d.value,"onUpdate:modelValue":p[0]||(p[0]=b=>r("update:modelValue",b)),onBlur:p[1]||(p[1]=b=>r("blur",b))},null,40,["field","fieldId","modelValue","aria-invalid","aria-required","aria-describedby"])),t.field.description?(e.openBlock(),e.createElementBlock("p",{key:1,id:a.value,class:"text-[0.8rem] text-muted-foreground"},e.toDisplayString(t.field.description),9,ce)):e.createCommentVNode("",!0),t.error?(e.openBlock(),e.createElementBlock("p",{key:2,id:s.value,class:"text-[0.8rem] font-medium text-destructive"},e.toDisplayString(t.error),9,ue)):e.createCommentVNode("",!0)],2))}});function q({schema:t}){const o=A(t.fields,t.resolver,t.errorMessages),l=e.ref(o.getState()),r=o.subscribe(d=>{l.value=d});return e.onUnmounted(()=>{r()}),{store:o,state:l,setValue:async(d,m)=>{await o.getState().setFieldValue(d,m)},getValue:d=>w(l.value.values,d),validate:async()=>{const{hasError:d,state:m}=await o.getState().runSubmitValidation();return{hasError:d,values:m.values}},reset:()=>{o.setState({values:{},errors:{},isSubmitting:!1})}}}const me={key:0,class:"space-y-1"},fe={key:0,class:"text-2xl font-bold tracking-tight"},pe={key:1,class:"text-muted-foreground"},be={class:"space-y-4"},ge=["disabled"],ye=e.defineComponent({__name:"DynamicForm",props:{schema:{},className:{},form:{}},emits:["submit"],setup(t,{emit:o}){const l=t,r=o,n=q({schema:l.schema}),a=l.form||n,{store:s,state:i}=a,d=async(f,B)=>{await s.getState().setFieldValue(f,B)},m=async f=>{await s.getState().setFieldBlur(f)},k=f=>typeof f.hidden=="function"?f.hidden(i.value.values):!!f.hidden,u=f=>{const B=typeof f.disabled=="function"?f.disabled(i.value.values):!!f.disabled,g=i.value.validatingFields.includes(f.name);return{...f,disabled:B||g}},p=async()=>{const{hasError:f,values:B}=await a.validate();if(f){const g=l.schema.fields.find(h=>i.value.errors[h.name]);if(g){const h=document.getElementById(`field-${g.name}`);h==null||h.focus(),h==null||h.scrollIntoView({behavior:"smooth",block:"center"})}return}await r("submit",B)},b=e.computed(()=>i.value.validatingFields.length>0);return(f,B)=>(e.openBlock(),e.createElementBlock("form",{class:e.normalizeClass(["space-y-6",t.className]),onSubmit:e.withModifiers(p,["prevent"])},[t.schema.title||t.schema.description?(e.openBlock(),e.createElementBlock("div",me,[t.schema.title?(e.openBlock(),e.createElementBlock("h2",fe,e.toDisplayString(t.schema.title),1)):e.createCommentVNode("",!0),t.schema.description?(e.openBlock(),e.createElementBlock("p",pe,e.toDisplayString(t.schema.description),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",be,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.schema.fields,g=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:g.id},[k(g)?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(R,{key:0,field:u(g),"model-value":e.unref(w)(e.unref(i).values,g.name),error:e.unref(i).errors[g.name],"onUpdate:modelValue":h=>d(g.name,h),onBlur:h=>m(g.name)},null,8,["field","model-value","error","onUpdate:modelValue","onBlur"]))],64))),128))]),e.createElementVNode("button",{type:"submit",disabled:e.unref(i).isSubmitting||b.value,class:"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2 w-full"},e.toDisplayString(e.unref(i).isSubmitting?"Submitting...":b.value?"Validating...":t.schema.submitButtonText||"Submit"),9,ge)],34))}});exports.DynamicForm=ye;exports.FormFieldRenderer=R;exports.defaultComponentMap=S;exports.useForm=q;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),z=require("clsx"),M=require("tailwind-merge"),d=require("radix-vue"),V=require("lucide-vue-next");function C(t){if(typeof t=="number")return Number.isNaN(t)?null:t;if(typeof t!="string"||t.trim()==="")return null;const o=Number(t);return Number.isNaN(o)?null:o}var T={required:"{label} is required",min:"{label} must be at least {value}",max:"{label} must be at most {value}",email:"Invalid email address",pattern:"Invalid format",custom:"Invalid value"};function k(t,o,l){return t?t.replace("{label}",o.label).replace("{value}",String(l.value||"")):""}function w(t,o,l){if(!o)return l;const r=o.split(/[.[\]]/).filter(Boolean);let a=t;for(const n of r){if(a==null)return l;a=a[n]}return a===void 0?l:a}function U(t,o,l){if(Object(t)!==t)return t;const r=o.split(/[.[\]]/).filter(Boolean),a={...t};let n=a;for(let s=0;s<r.length-1;s++){const i=r[s],c=r[s+1],y=/^\d+$/.test(c);!(i in n)||n[i]===null||typeof n[i]!="object"?n[i]=y?[]:{}:n[i]=Array.isArray(n[i])?[...n[i]]:{...n[i]},n=n[i]}return n[r[r.length-1]]=l,a}function I(t,o){if(t.type!=="number")return o;if(o===""||o===void 0||o===null)return"";const l=C(o);return l===null?o:l}async function P(t,o,l){if(!o.validations)return null;const r={...T,...l};for(const a of o.validations)switch(a.type){case"required":if(t==null||t===""||Array.isArray(t)&&t.length===0)return a.message||k(r.required,o,a);break;case"min":if(o.type==="number"){const n=C(t);if(n!==null&&n<a.value){const s=o.type==="number"?r.min:typeof t=="string"?"{label} must be at least {value} characters":r.min;return a.message||k(s,o,a)}break}if(typeof t=="number"&&t<a.value)return a.message||k(r.min,o,a);if(typeof t=="string"&&t.length<a.value)return a.message||k("{label} must be at least {value} characters",o,a);break;case"max":if(o.type==="number"){const n=C(t);if(n!==null&&n>a.value)return a.message||k(r.max,o,a);break}if(typeof t=="number"&&t>a.value)return a.message||k(r.max,o,a);if(typeof t=="string"&&t.length>a.value)return a.message||k("{label} must be at most {value} characters",o,a);break;case"email":{if(t&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t))return a.message||k(r.email,o,a);break}case"pattern":if(t&&a.value&&!new RegExp(a.value).test(t))return a.message||k(r.pattern,o,a);break;case"custom":if(a.validator){const n=await a.validator(t);if(typeof n=="string")return n;if(n===!1)return a.message||k(r.custom,o,a)}break}return null}async function N(t,o,l,r,a,n){if(r&&a){const i=await r(a);if(i[o])return i[o]}const s=t.find(i=>i.name===o);return s?await P(l,s,n):null}async function j(t,o,l,r){let a={};l&&(a=await l(o));const n=t.map(async s=>{if(a[s.name]||(typeof s.hidden=="function"?s.hidden(o):s.hidden))return;const c=await P(w(o,s.name),s,r);c&&(a[s.name]=c)});return await Promise.all(n),a}function A(t){return t.reduce((o,l)=>(o[l.name]=l.defaultValue!==void 0?l.defaultValue:l.type==="checkbox"?[]:"",o),{})}function O(t){let o=t;const l=new Set;return{getState:()=>o,setState:s=>{const i=typeof s=="function"?s(o):s;if(!Object.is(i,o)){const c=o;o={...o,...i},l.forEach(y=>y(o,c))}},subscribe:s=>(l.add(s),()=>l.delete(s))}}function L(t,o,l){const r=O({values:A(t),errors:{},validatingFields:[],isSubmitting:!1}),{getState:a,setState:n}=r;return{store:r,setFieldValue:async(u,m)=>{const b=t.find(f=>f.name===u),v=b?I(b,m):m;n(f=>({values:U(f.values,u,v)}));const p=!!a().errors[u];if(b&&["select","checkbox","radio","switch","date"].includes(b.type)||p){n(f=>({validatingFields:[...f.validatingFields,u]}));try{const f=a().values,g=await N(t,u,v,o,f,l);n($=>({errors:{...$.errors,[u]:g||""},validatingFields:$.validatingFields.filter(D=>D!==u)}))}catch{n(f=>({validatingFields:f.validatingFields.filter(g=>g!==u)}))}}},setFieldBlur:async u=>{n(m=>({validatingFields:[...m.validatingFields,u]}));try{const m=a().values,b=w(m,u),v=await N(t,u,b,o,m,l);n(p=>({errors:{...p.errors,[u]:v||""},validatingFields:p.validatingFields.filter(B=>B!==u)}))}catch{n(m=>({validatingFields:m.validatingFields.filter(b=>b!==u)}))}},setSubmitting:u=>n({isSubmitting:u}),runSubmitValidation:async()=>{n({isSubmitting:!0});const u=a().values,m=await j(t,u,o,l),b=Object.keys(m).length>0;return n({errors:m,isSubmitting:!1}),{state:a(),hasError:b}}}}function h(...t){return M.twMerge(z.clsx(t))}const G=["type","value"],E=e.defineComponent({__name:"Input",props:{class:{},type:{},modelValue:{}},emits:["update:modelValue","blur"],setup(t,{emit:o}){const l=t,r=o;return(a,n)=>(e.openBlock(),e.createElementBlock("input",e.mergeProps(a.$attrs,{type:t.type,class:e.unref(h)("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",l.class),value:t.modelValue,onInput:n[0]||(n[0]=s=>r("update:modelValue",s.target.value)),onBlur:n[1]||(n[1]=s=>r("blur",s))}),null,16,G))}}),x=e.defineComponent({__name:"InputRenderer",props:{field:{},fieldId:{},modelValue:{},ariaInvalid:{type:Boolean},ariaRequired:{type:Boolean},ariaDescribedby:{}},emits:["update:modelValue","blur"],setup(t,{emit:o}){const l=t,r=o,a=n=>{r("update:modelValue",I(l.field,n))};return(n,s)=>(e.openBlock(),e.createBlock(E,{id:t.fieldId,type:t.field.type,placeholder:t.field.placeholder,disabled:typeof t.field.disabled=="boolean"?t.field.disabled:void 0,name:t.field.name,"model-value":t.modelValue??"","onUpdate:modelValue":a,onBlur:s[0]||(s[0]=i=>r("blur",i))},null,8,["id","type","placeholder","disabled","name","model-value"]))}}),H=["value"],K=e.defineComponent({__name:"Textarea",props:{class:{},modelValue:{}},emits:["update:modelValue","blur"],setup(t,{emit:o}){const l=t,r=o;return(a,n)=>(e.openBlock(),e.createElementBlock("textarea",e.mergeProps(a.$attrs,{class:e.unref(h)("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",l.class),value:t.modelValue,onInput:n[0]||(n[0]=s=>r("update:modelValue",s.target.value)),onBlur:n[1]||(n[1]=s=>r("blur",s))}),null,16,H))}}),W=e.defineComponent({__name:"TextareaRenderer",props:{field:{},fieldId:{},modelValue:{},ariaInvalid:{type:Boolean},ariaRequired:{type:Boolean},ariaDescribedby:{}},emits:["update:modelValue"],setup(t,{emit:o}){const l=o;return(r,a)=>(e.openBlock(),e.createBlock(K,{id:t.fieldId,placeholder:t.field.placeholder,disabled:typeof t.field.disabled=="boolean"?t.field.disabled:void 0,name:t.field.name,"model-value":t.modelValue??"","onUpdate:modelValue":a[0]||(a[0]=n=>l("update:modelValue",n))},null,8,["id","placeholder","disabled","name","model-value"]))}}),J=e.defineComponent({__name:"SelectTrigger",props:{disabled:{type:Boolean},asChild:{type:Boolean},as:{},class:{}},setup(t){const o=t,l=e.computed(()=>{const{class:a,...n}=o;return n}),r=d.useForwardProps(l);return(a,n)=>(e.openBlock(),e.createBlock(e.unref(d.SelectTrigger),e.mergeProps(e.unref(r),{class:e.unref(h)("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",o.class)}),{default:e.withCtx(()=>[e.renderSlot(a.$slots,"default"),e.createVNode(e.unref(d.SelectIcon),{"as-child":""},{default:e.withCtx(()=>[e.createVNode(e.unref(V.ChevronDown),{class:"h-4 w-4 opacity-50"})]),_:1})]),_:3},16,["class"]))}}),Q=e.defineComponent({__name:"SelectContent",props:{forceMount:{type:Boolean},position:{default:"popper"},bodyLock:{type:Boolean},side:{},sideOffset:{},align:{},alignOffset:{},avoidCollisions:{type:Boolean},collisionBoundary:{},collisionPadding:{},arrowPadding:{},sticky:{},hideWhenDetached:{type:Boolean},updatePositionStrategy:{},prioritizePosition:{type:Boolean},asChild:{type:Boolean},as:{},class:{}},setup(t){const o=t,l=e.computed(()=>{const{class:a,...n}=o;return n}),r=d.useForwardProps(l);return(a,n)=>(e.openBlock(),e.createBlock(e.unref(d.SelectPortal),null,{default:e.withCtx(()=>[e.createVNode(e.unref(d.SelectContent),e.mergeProps(e.unref(r),{class:e.unref(h)("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",t.position==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",o.class)}),{default:e.withCtx(()=>[e.createVNode(e.unref(d.SelectViewport),{class:e.normalizeClass(e.unref(h)("p-1",t.position==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"))},{default:e.withCtx(()=>[e.renderSlot(a.$slots,"default")]),_:3},8,["class"])]),_:3},16,["class"])]),_:3}))}}),X={class:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center"},Y=e.defineComponent({__name:"SelectItem",props:{value:{},disabled:{type:Boolean},textValue:{},asChild:{type:Boolean},as:{},class:{}},setup(t){const o=t,l=e.computed(()=>{const{class:a,...n}=o;return n}),r=d.useForwardProps(l);return(a,n)=>(e.openBlock(),e.createBlock(e.unref(d.SelectItem),e.mergeProps(e.unref(r),{class:e.unref(h)("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",o.class)}),{default:e.withCtx(()=>[e.createElementVNode("span",X,[e.createVNode(e.unref(d.SelectItemIndicator),null,{default:e.withCtx(()=>[e.createVNode(e.unref(V.Check),{class:"h-4 w-4"})]),_:1})]),e.createVNode(e.unref(d.SelectItemText),null,{default:e.withCtx(()=>[e.renderSlot(a.$slots,"default")]),_:3})]),_:3},16,["class"]))}}),Z=e.defineComponent({__name:"Select",props:{open:{type:Boolean},defaultOpen:{type:Boolean},defaultValue:{},modelValue:{},dir:{},name:{},autocomplete:{},disabled:{type:Boolean},required:{type:Boolean}},emits:["update:modelValue","update:open"],setup(t,{emit:o}){const l=t,r=o,a=d.useForwardPropsEmits(l,r);return(n,s)=>(e.openBlock(),e.createBlock(e.unref(d.SelectRoot),e.normalizeProps(e.guardReactiveProps(e.unref(a))),{default:e.withCtx(()=>[e.renderSlot(n.$slots,"default")]),_:3},16))}}),_=e.defineComponent({__name:"SelectRenderer",props:{field:{},fieldId:{},modelValue:{},ariaInvalid:{type:Boolean},ariaRequired:{type:Boolean},ariaDescribedby:{}},emits:["update:modelValue"],setup(t,{emit:o}){const l=o;return(r,a)=>(e.openBlock(),e.createBlock(Z,{disabled:typeof t.field.disabled=="boolean"?t.field.disabled:void 0,name:t.field.name,"model-value":t.modelValue!=null?String(t.modelValue):"","onUpdate:modelValue":a[0]||(a[0]=n=>l("update:modelValue",n))},{default:e.withCtx(()=>[e.createVNode(J,{id:t.fieldId},{default:e.withCtx(()=>[e.createVNode(e.unref(d.SelectValue),{placeholder:t.field.placeholder||"Select an option"},null,8,["placeholder"])]),_:1},8,["id"]),e.createVNode(Q,null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.field.options,n=>(e.openBlock(),e.createBlock(Y,{key:n.value,value:String(n.value)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.label),1)]),_:2},1032,["value"]))),128))]),_:1})]),_:1},8,["disabled","name","model-value"]))}}),ee=e.defineComponent({__name:"Checkbox",props:{defaultChecked:{type:Boolean},checked:{type:[Boolean,String]},disabled:{type:Boolean},required:{type:Boolean},name:{},value:{},id:{},asChild:{type:Boolean},as:{},class:{}},emits:["update:checked","blur"],setup(t,{emit:o}){const l=t,r=o,a=e.computed(()=>{const{class:s,...i}=l;return i}),n=d.useForwardPropsEmits(a,r);return(s,i)=>(e.openBlock(),e.createBlock(e.unref(d.CheckboxRoot),e.mergeProps(e.unref(n),{class:e.unref(h)("peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",l.class),onBlur:i[0]||(i[0]=c=>r("blur"))}),{default:e.withCtx(()=>[e.createVNode(e.unref(d.CheckboxIndicator),{class:"flex h-full w-full items-center justify-center text-current"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Check),{class:"h-4 w-4"})]),_:1})]),_:1},16,["class"]))}}),F=e.defineComponent({__name:"Label",props:{for:{},asChild:{type:Boolean},as:{},class:{}},setup(t){const o=t,l=e.computed(()=>{const{class:r,...a}=o;return a});return(r,a)=>(e.openBlock(),e.createBlock(e.unref(d.Label),e.mergeProps(l.value,{class:e.unref(h)("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",o.class)}),{default:e.withCtx(()=>[e.renderSlot(r.$slots,"default")]),_:3},16,["class"]))}}),te={class:"flex flex-wrap gap-4"},ae=e.defineComponent({__name:"CheckboxRenderer",props:{field:{},fieldId:{},modelValue:{},ariaInvalid:{type:Boolean},ariaRequired:{type:Boolean},ariaDescribedby:{}},emits:["update:modelValue"],setup(t,{emit:o}){const l=t,r=o,a=(n,s)=>{const i=Array.isArray(l.modelValue)?[...l.modelValue]:[];if(s)i.push(n);else{const c=i.indexOf(n);c>-1&&i.splice(c,1)}r("update:modelValue",i)};return(n,s)=>(e.openBlock(),e.createElementBlock("div",te,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.field.options,i=>(e.openBlock(),e.createElementBlock("div",{key:i.value,class:"flex items-center space-x-2"},[e.createVNode(ee,{id:`checkbox-${t.field.name}-${i.value}`,disabled:typeof t.field.disabled=="boolean"?t.field.disabled:void 0,checked:Array.isArray(t.modelValue)&&t.modelValue.includes(i.value),"onUpdate:checked":c=>a(i.value,!!c)},null,8,["id","disabled","checked","onUpdate:checked"]),e.createVNode(F,{for:`checkbox-${t.field.name}-${i.value}`,class:"font-normal"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.label),1)]),_:2},1032,["for"])]))),128))]))}}),ne=e.defineComponent({__name:"RadioGroupItem",props:{id:{},value:{},disabled:{type:Boolean},required:{type:Boolean},name:{},asChild:{type:Boolean},as:{},class:{}},setup(t){const o=t,l=e.computed(()=>{const{class:a,...n}=o;return n}),r=d.useForwardProps(l);return(a,n)=>(e.openBlock(),e.createBlock(e.unref(d.RadioGroupItem),e.mergeProps(e.unref(r),{class:e.unref(h)("aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",o.class)}),{default:e.withCtx(()=>[e.createVNode(e.unref(d.RadioGroupIndicator),{class:"flex items-center justify-center"},{default:e.withCtx(()=>[e.createVNode(e.unref(V.Circle),{class:"h-2.5 w-2.5 fill-current text-current"})]),_:1})]),_:1},16,["class"]))}}),oe=e.defineComponent({__name:"RadioGroup",props:{modelValue:{},defaultValue:{},disabled:{type:Boolean},name:{},required:{type:Boolean},orientation:{},dir:{},loop:{type:Boolean},asChild:{type:Boolean},as:{},class:{}},emits:["update:modelValue"],setup(t,{emit:o}){const l=t,r=o,a=e.computed(()=>{const{class:s,...i}=l;return i}),n=d.useForwardPropsEmits(a,r);return(s,i)=>(e.openBlock(),e.createBlock(e.unref(d.RadioGroupRoot),e.mergeProps(e.unref(n),{class:e.unref(h)("grid gap-2",l.class)}),{default:e.withCtx(()=>[e.renderSlot(s.$slots,"default")]),_:3},16,["class"]))}}),le=e.defineComponent({__name:"RadioRenderer",props:{field:{},fieldId:{},modelValue:{},ariaInvalid:{type:Boolean},ariaRequired:{type:Boolean},ariaDescribedby:{}},emits:["update:modelValue"],setup(t,{emit:o}){const l=o;return(r,a)=>(e.openBlock(),e.createBlock(oe,{class:"flex flex-wrap gap-4",disabled:typeof t.field.disabled=="boolean"?t.field.disabled:void 0,name:t.field.name,"model-value":t.modelValue!=null?String(t.modelValue):"","onUpdate:modelValue":a[0]||(a[0]=n=>l("update:modelValue",n))},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.field.options,n=>(e.openBlock(),e.createElementBlock("div",{key:n.value,class:"flex items-center space-x-2"},[e.createVNode(ne,{id:`radio-${t.field.name}-${n.value}`,value:String(n.value)},null,8,["id","value"]),e.createVNode(F,{for:`radio-${t.field.name}-${n.value}`,class:"font-normal"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.label),1)]),_:2},1032,["for"])]))),128))]),_:1},8,["disabled","name","model-value"]))}}),re=e.defineComponent({__name:"DateRenderer",props:{field:{},modelValue:{},fieldId:{},ariaInvalid:{type:Boolean},ariaRequired:{type:Boolean},ariaDescribedby:{}},emits:["update:modelValue","blur"],setup(t,{emit:o}){const l=o;return(r,a)=>(e.openBlock(),e.createBlock(E,{id:t.fieldId,type:"date","model-value":t.modelValue,placeholder:t.field.placeholder,disabled:typeof t.field.disabled=="boolean"?t.field.disabled:void 0,name:t.field.name,"aria-invalid":t.ariaInvalid,"aria-required":t.ariaRequired,"aria-describedby":t.ariaDescribedby,"onUpdate:modelValue":a[0]||(a[0]=n=>l("update:modelValue",n)),onBlur:a[1]||(a[1]=n=>l("blur",n))},null,8,["id","model-value","placeholder","disabled","name","aria-invalid","aria-required","aria-describedby"]))}}),ie=e.defineComponent({__name:"Switch",props:{defaultChecked:{type:Boolean},checked:{type:Boolean},disabled:{type:Boolean},required:{type:Boolean},name:{},id:{},value:{},asChild:{type:Boolean},as:{},class:{}},emits:["update:checked"],setup(t,{emit:o}){const l=t,r=o,a=e.computed(()=>{const{class:s,...i}=l;return i}),n=d.useForwardPropsEmits(a,r);return(s,i)=>(e.openBlock(),e.createBlock(e.unref(d.SwitchRoot),e.mergeProps(e.unref(n),{class:e.unref(h)("peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",l.class)}),{default:e.withCtx(()=>[e.createVNode(e.unref(d.SwitchThumb),{class:e.normalizeClass(e.unref(h)("pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0"))},null,8,["class"])]),_:1},16,["class"]))}}),se={class:"flex items-center space-x-2"},de=e.defineComponent({__name:"SwitchRenderer",props:{field:{},modelValue:{type:Boolean},fieldId:{},ariaInvalid:{type:Boolean},ariaRequired:{type:Boolean},ariaDescribedby:{}},emits:["update:modelValue","blur"],setup(t,{emit:o}){const l=o;return(r,a)=>(e.openBlock(),e.createElementBlock("div",se,[e.createVNode(ie,{id:t.fieldId,checked:t.modelValue,disabled:typeof t.field.disabled=="boolean"?t.field.disabled:void 0,"aria-invalid":t.ariaInvalid,"aria-required":t.ariaRequired,"aria-describedby":t.ariaDescribedby,"onUpdate:checked":a[0]||(a[0]=n=>l("update:modelValue",n))},null,8,["id","checked","disabled","aria-invalid","aria-required","aria-describedby"])]))}}),S={text:x,number:x,password:x,email:x,textarea:W,select:_,checkbox:ae,radio:le,date:re,switch:de},ce={key:0,class:"text-destructive"},ue=["id"],me=["id"],R=e.defineComponent({__name:"FormFieldRenderer",props:{field:{},modelValue:{},error:{},componentMap:{}},emits:["update:modelValue","blur"],setup(t,{emit:o}){const l=t,r=o,a=e.computed(()=>`field-${l.field.name}`),n=e.computed(()=>`${a.value}-description`),s=e.computed(()=>`${a.value}-error`),i=e.computed(()=>{var m;return(m=l.field.validations)==null?void 0:m.some(b=>b.type==="required")}),c=e.computed(()=>{const m=[];return l.field.description&&m.push(n.value),l.error&&m.push(s.value),m.length>0?m.join(" "):void 0}),y=e.computed(()=>l.componentMap?{...S,...l.componentMap}:S),u=e.computed(()=>y.value[l.field.type]??x);return(m,b)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["space-y-2",t.field.className])},[t.field.label?(e.openBlock(),e.createBlock(F,{key:0,for:a.value,class:e.normalizeClass(i.value?"flex items-center gap-1":"")},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.field.label)+" ",1),i.value?(e.openBlock(),e.createElementBlock("span",ce,"*")):e.createCommentVNode("",!0)]),_:1},8,["for","class"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(u.value),{field:t.field,"field-id":a.value,"model-value":t.modelValue,"aria-invalid":!!t.error,"aria-required":i.value,"aria-describedby":c.value,"onUpdate:modelValue":b[0]||(b[0]=v=>r("update:modelValue",v)),onBlur:b[1]||(b[1]=v=>r("blur",v))},null,40,["field","field-id","model-value","aria-invalid","aria-required","aria-describedby"])),t.field.description?(e.openBlock(),e.createElementBlock("p",{key:1,id:n.value,class:"text-[0.8rem] text-muted-foreground"},e.toDisplayString(t.field.description),9,ue)):e.createCommentVNode("",!0),t.error?(e.openBlock(),e.createElementBlock("p",{key:2,id:s.value,class:"text-[0.8rem] font-medium text-destructive"},e.toDisplayString(t.error),9,me)):e.createCommentVNode("",!0)],2))}});function q({schema:t}){const o=L(t.fields,t.resolver,t.errorMessages),l=e.ref(o.store.getState()),r=o.store.subscribe(c=>{l.value=c});return e.onUnmounted(()=>{r()}),{engine:o,state:l,setValue:async(c,y)=>{await o.setFieldValue(c,y)},getValue:c=>w(l.value.values,c),validate:async()=>{const{hasError:c,state:y}=await o.runSubmitValidation();return{hasError:c,values:y.values}},reset:()=>{o.store.setState({values:{},errors:{},isSubmitting:!1})}}}const fe={key:0,class:"space-y-1"},pe={key:0,class:"text-2xl font-bold tracking-tight"},be={key:1,class:"text-muted-foreground"},ge={class:"space-y-4"},ye=["disabled"],he=e.defineComponent({__name:"DynamicForm",props:{schema:{},className:{},form:{}},emits:["submit"],setup(t,{emit:o}){const l=t,r=o,a=q({schema:l.schema}),n=l.form||a,{engine:s,state:i}=n,c=async(p,B)=>{await s.setFieldValue(p,B)},y=async p=>{await s.setFieldBlur(p)},u=p=>typeof p.hidden=="function"?p.hidden(i.value.values):!!p.hidden,m=p=>{const B=typeof p.disabled=="function"?p.disabled(i.value.values):!!p.disabled,f=i.value.validatingFields.includes(p.name);return{...p,disabled:B||f}},b=async()=>{const{hasError:p,values:B}=await n.validate();if(p){const f=l.schema.fields.find(g=>i.value.errors[g.name]);if(f){const g=document.getElementById(`field-${f.name}`);g==null||g.focus(),g==null||g.scrollIntoView({behavior:"smooth",block:"center"})}return}await r("submit",B)},v=e.computed(()=>i.value.validatingFields.length>0);return(p,B)=>(e.openBlock(),e.createElementBlock("form",{class:e.normalizeClass(["space-y-6",t.className]),onSubmit:e.withModifiers(b,["prevent"])},[t.schema.title||t.schema.description?(e.openBlock(),e.createElementBlock("div",fe,[t.schema.title?(e.openBlock(),e.createElementBlock("h2",pe,e.toDisplayString(t.schema.title),1)):e.createCommentVNode("",!0),t.schema.description?(e.openBlock(),e.createElementBlock("p",be,e.toDisplayString(t.schema.description),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",ge,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.schema.fields,f=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.id},[u(f)?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(R,{key:0,field:m(f),"model-value":e.unref(w)(e.unref(i).values,f.name),error:e.unref(i).errors[f.name],"onUpdate:modelValue":g=>c(f.name,g),onBlur:g=>y(f.name)},null,8,["field","model-value","error","onUpdate:modelValue","onBlur"]))],64))),128))]),e.createElementVNode("button",{type:"submit",disabled:e.unref(i).isSubmitting||v.value,class:"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2 w-full"},e.toDisplayString(e.unref(i).isSubmitting?"Submitting...":v.value?"Validating...":t.schema.submitButtonText||"Submit"),9,ye)],34))}});exports.DynamicForm=he;exports.FormFieldRenderer=R;exports.defaultComponentMap=S;exports.useForm=q;