@bach.software/vue-dynamic-form 0.4.0 → 0.5.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.
package/README.md CHANGED
@@ -117,16 +117,17 @@ const fields: Metadata[] = [
117
117
  Instead of writing watchers and side effects, describe what each field looks like given the current state. The library re-evaluates on every relevant change:
118
118
 
119
119
  ```ts
120
- const field = {
121
- name: 'vatNumber',
122
- type: 'text',
123
- fieldOptions: { label: 'VAT Number' },
124
- computedProps: [
125
- (field) => {
126
- field.disabled = accountType.value !== 'business';
127
- }
128
- ]
129
- };
120
+ const fields: Metadata[] = [
121
+ { name: 'accountType', type: 'select', /* ... */ },
122
+ {
123
+ name: 'vatNumber',
124
+ type: 'text',
125
+ fieldOptions: { label: 'VAT Number' },
126
+ computedProps: [
127
+ (field) => { field.disabled = accountType.value !== 'business'; }
128
+ ]
129
+ }
130
+ ];
130
131
  ```
131
132
 
132
133
  No watchers, no event handlers. Change `accountType` and the field responds instantly. Works for visibility, options, validation rules, labels — anything on the field.
@@ -136,17 +137,19 @@ No watchers, no event handlers. Change `accountType` and the field responds inst
136
137
  Control repetition with `minOccurs` and `maxOccurs`. The library manages array indexing, add/remove, and validates each occurrence independently:
137
138
 
138
139
  ```ts
139
- const field = {
140
- name: 'contacts',
141
- type: 'heading',
142
- minOccurs: 1,
143
- maxOccurs: 5,
144
- arrayItemName: 'contact',
145
- children: [
146
- { name: 'name', type: 'text', fieldOptions: { label: 'Name' } },
147
- { name: 'email', type: 'text', fieldOptions: { label: 'Email' } },
148
- ],
149
- };
140
+ const fields: Metadata[] = [
141
+ {
142
+ name: 'contacts',
143
+ type: 'heading',
144
+ minOccurs: 1,
145
+ maxOccurs: 5,
146
+ arrayItemName: 'contact',
147
+ children: [
148
+ { name: 'name', type: 'text', fieldOptions: { label: 'Name' } },
149
+ { name: 'email', type: 'text', fieldOptions: { label: 'Email' } },
150
+ ],
151
+ },
152
+ ];
150
153
  ```
151
154
 
152
155
  ### Mutually exclusive choices
@@ -154,26 +157,28 @@ const field = {
154
157
  Branches that disable their siblings the moment one becomes active. Nested validation only applies to the active branch:
155
158
 
156
159
  ```ts
157
- const field = {
158
- name: 'payment',
159
- type: 'heading',
160
- choice: [
161
- {
162
- name: 'card',
163
- fieldOptions: { label: 'Credit card' },
164
- children: [
165
- { name: 'number', type: 'text', fieldOptions: { label: 'Card number' } },
166
- ],
167
- },
168
- {
169
- name: 'transfer',
170
- fieldOptions: { label: 'Bank transfer' },
171
- children: [
172
- { name: 'iban', type: 'text', fieldOptions: { label: 'IBAN' } },
173
- ],
174
- },
175
- ],
176
- };
160
+ const fields: Metadata[] = [
161
+ {
162
+ name: 'payment',
163
+ type: 'heading',
164
+ choice: [
165
+ {
166
+ name: 'card',
167
+ fieldOptions: { label: 'Credit card' },
168
+ children: [
169
+ { name: 'number', type: 'text', fieldOptions: { label: 'Card number' } },
170
+ ],
171
+ },
172
+ {
173
+ name: 'transfer',
174
+ fieldOptions: { label: 'Bank transfer' },
175
+ children: [
176
+ { name: 'iban', type: 'text', fieldOptions: { label: 'IBAN' } },
177
+ ],
178
+ },
179
+ ],
180
+ },
181
+ ];
177
182
  ```
178
183
 
179
184
  ### XSD-inspired validation rules
@@ -181,15 +186,17 @@ const field = {
181
186
  Built-in rules derived from the XSD specification, with human-readable message overrides:
182
187
 
183
188
  ```ts
184
- const field = {
185
- name: 'username',
186
- type: 'text',
187
- restriction: {
188
- minLength: 3,
189
- maxLength: 30,
190
- pattern: '^[a-z0-9_]+$',
189
+ const fields: Metadata[] = [
190
+ {
191
+ name: 'username',
192
+ type: 'text',
193
+ restriction: {
194
+ minLength: 3,
195
+ maxLength: 30,
196
+ pattern: '^[a-z0-9_]+$',
197
+ },
191
198
  },
192
- };
199
+ ];
193
200
  ```
194
201
 
195
202
  Pass `settings.messages` to `DynamicForm` to customise any message globally.
@@ -1,12 +1,12 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),g=require("./useDynamicForm-CIS8GwHy.cjs");function y(d,u){return!d||!u||(d=u?.({...d}),d.children=d?.children?.map(r=>y(r,u)),d.choice=d?.choice?.map(r=>y(r,u))),d}const v={key:0,xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"size-3"},N={key:1,xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"size-3"},k=e.defineComponent({__name:"IconButton",props:{icon:{},color:{default:"blue"}},emits:["click"],setup(d){return(u,r)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:e.normalizeClass(["cursor-pointer inline-flex items-center justify-center rounded-full size-5 text-white-800 cursor-pointer",{"bg-blue-200 hover:bg-blue-300":u.color==="blue","bg-red-200 hover:bg-red-300":u.color==="red"}]),onClick:r[0]||(r[0]=b=>u.$emit("click"))},[u.icon==="plus"?(e.openBlock(),e.createElementBlock("svg",v,r[1]||(r[1]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4.5v15m7.5-7.5h-15"},null,-1)]))):e.createCommentVNode("",!0),u.icon==="minus"?(e.openBlock(),e.createElementBlock("svg",N,r[2]||(r[2]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M5 12h14"},null,-1)]))):e.createCommentVNode("",!0)],2))}}),V={class:"text-sm whitespace-pre-wrap"},_=["data-testid"],E={class:"grid grid-cols-1 md:grid-cols-2 gap-6"},O={key:0,class:"text-red-500 dark:text-rose-400"},w={key:1,class:"text-sm text-gray-400"},S={class:"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6"},$={class:"text-sm whitespace-pre-wrap"},D=["data-testid"],T=["for"],F={key:0,class:"text-red-500 dark:text-rose-400"},W={key:1,class:"text-sm text-gray-400"},z={class:"text-sm whitespace-pre-wrap"},L=["data-testid"],q=["for"],I={key:0,class:"text-red-500 dark:text-rose-400"},R={key:1,class:"text-sm text-gray-400"},A={class:"flex gap-2 items-center"},U={class:"flex flex-col grow"},j={class:"text-sm whitespace-pre-wrap"},P=["data-testid"],G={key:0,class:"text-red-500 dark:text-rose-400"},H={key:1,class:"text-sm text-gray-400"},J={class:"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6"},Y={class:"text-sm whitespace-pre-wrap"},Q=["data-testid"],X={key:0,class:"text-red-500 dark:text-rose-400"},Z={key:1,class:"text-sm text-gray-400"},K={class:"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6"},M={class:"text-sm whitespace-pre-wrap"},ee=["data-testid"],te=["id","value","disabled","onChange","onBlur"],le=["value"],oe=["id","onUpdate:modelValue","disabled","onBlur"],ne=["value"],ie=["id","checked","disabled","onChange","onBlur"],se=["id","onUpdate:modelValue","disabled","onBlur"],re=["id","onUpdate:modelValue","disabled","onBlur"],ae=["id","value","disabled","onInput","onBlur"],C=e.defineComponent({__name:"TestFormTemplate",setup(d){const u=g.defineMetadata();return(r,b)=>(e.openBlock(),e.createBlock(g._sfc_main$4,{"metadata-configuration":e.unref(u)},{heading:e.withCtx(({fieldMetadata:t,fieldContext:{errorMessage:l,label:o},disabled:i,canAddItems:n,addItem:a,canRemoveItems:p,removeItem:c,slotProps:s})=>[t.hidden?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["mt-4",{"md:col-span-2":t.fullWidth}])},[o?(e.openBlock(),e.createElementBlock("h3",{key:0,class:e.normalizeClass(["flex text-xl font-bold gap-2 items-center mb-2",{"text-gray-500":t.disabled||i}])},[e.createTextVNode(e.toDisplayString(o)+" ",1),n?(e.openBlock(),e.createBlock(k,{key:0,icon:"plus",tabindex:"-1","data-testid":`${t.path}-add-button`,onClick:a},null,8,["data-testid","onClick"])):e.createCommentVNode("",!0),p?(e.openBlock(),e.createBlock(k,{key:1,icon:"minus",tabindex:"-1",color:"red","data-testid":`${t.path}-remove-button`,onClick:c},null,8,["data-testid","onClick"])):e.createCommentVNode("",!0)],2)):e.createCommentVNode("",!0),e.createElementVNode("pre",V,e.toDisplayString(t.description),1),l.value?(e.openBlock(),e.createElementBlock("span",{key:1,class:"text-red-600 text-sm","data-testid":`${t.path}-error-message`},e.toDisplayString(l.value),9,_)):e.createCommentVNode("",!0),e.createElementVNode("div",E,[e.renderSlot(r.$slots,"default",{level:(s?.level??0)+1})])],2))]),"heading-array":e.withCtx(()=>[e.renderSlot(r.$slots,"default")]),"default-choice":e.withCtx(({fieldMetadata:t,fieldContext:{errorMessage:l,label:o},disabled:i,required:n,slotProps:a,settings:{showOptionalInsteadOfRequired:p}})=>[t.hidden?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["flex flex-col gap-2",{"md:col-span-2":t.fullWidth}])},[e.createElementVNode("span",{class:e.normalizeClass(["flex gap-2 items-center",{"text-gray-500":i}])},[e.createTextVNode(e.toDisplayString(o)+" ",1),n&&!p?(e.openBlock(),e.createElementBlock("span",O,"*")):e.createCommentVNode("",!0),!n&&p?(e.openBlock(),e.createElementBlock("span",w,"(optional)")):e.createCommentVNode("",!0)],2),e.createElementVNode("div",S,[e.renderSlot(r.$slots,"default",{level:(a?.level??0)+1,belowChoiceField:!0})]),e.createElementVNode("pre",$,e.toDisplayString(t.description),1),l.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:"text-red-600 text-sm","data-testid":`${t.path}-error-message`},e.toDisplayString(l.value),9,D)):e.createCommentVNode("",!0)],2))]),"default-array":e.withCtx(({fieldMetadata:t,fieldContext:{errorMessage:l,label:o},disabled:i,required:n,canAddItems:a,addItem:p,settings:{showOptionalInsteadOfRequired:c}})=>[t.hidden?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["flex flex-col gap-2",{"md:col-span-2":t.fullWidth}])},[e.createElementVNode("label",{for:`${t.path}[0]`,class:e.normalizeClass([{"text-gray-500":t.disabled||i},"flex gap-2 items-center"])},[e.createTextVNode(e.toDisplayString(o)+" ",1),n&&!c?(e.openBlock(),e.createElementBlock("span",F,"*")):e.createCommentVNode("",!0),!n&&c?(e.openBlock(),e.createElementBlock("span",W,"(optional)")):e.createCommentVNode("",!0),a?(e.openBlock(),e.createBlock(k,{key:2,icon:"plus",tabindex:"-1","data-testid":`${t.path}-add-button`,onClick:p},null,8,["data-testid","onClick"])):e.createCommentVNode("",!0)],10,T),e.renderSlot(r.$slots,"default",{hideLabel:!0}),e.createElementVNode("pre",z,e.toDisplayString(t.description),1),l.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:"text-red-600 text-sm","data-testid":`${t.path}-error-message`},e.toDisplayString(l.value),9,L)):e.createCommentVNode("",!0)],2))]),default:e.withCtx(({fieldMetadata:t,fieldContext:{errorMessage:l,label:o},disabled:i,required:n,canRemoveItems:a,removeItem:p,slotProps:c,settings:{showOptionalInsteadOfRequired:s}})=>[t.hidden?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["flex flex-col gap-2",{"md:col-span-2":t.fullWidth}])},[c?.hideLabel?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("label",{key:0,for:t.path,class:e.normalizeClass([{"text-gray-500":t.disabled||i},"flex gap-1 items-center"])},[e.createTextVNode(e.toDisplayString(o)+" ",1),n&&!s?(e.openBlock(),e.createElementBlock("span",I,"*")):e.createCommentVNode("",!0),!n&&s?(e.openBlock(),e.createElementBlock("span",R,"(optional)")):e.createCommentVNode("",!0)],10,q)),e.createElementVNode("div",A,[e.createElementVNode("div",U,[e.renderSlot(r.$slots,"default")]),e.createVNode(k,{class:e.normalizeClass({invisible:!a}),icon:"minus",tabindex:"-1",color:"red","data-testid":`${t.path}-remove-button`,onClick:p},null,8,["class","data-testid","onClick"])]),e.createElementVNode("pre",j,e.toDisplayString(t.description),1),l.value?(e.openBlock(),e.createElementBlock("span",{key:1,class:"text-red-600 text-sm","data-testid":`${t.path}-error-message`},e.toDisplayString(l.value),9,P)):e.createCommentVNode("",!0)],2)),e.renderSlot(r.$slots,"attributes")]),"group-array":e.withCtx(({fieldMetadata:t,fieldContext:{errorMessage:l,label:o},disabled:i,required:n,canAddItems:a,addItem:p,slotProps:c,settings:{showOptionalInsteadOfRequired:s}})=>[t.hidden?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[],64)):c?.belowChoiceField?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass({"md:col-span-2":t.fullWidth})},[e.createElementVNode("span",{class:e.normalizeClass(["flex gap-2 items-center mb-2",{"text-gray-500":t.disabled||i}])},[e.createTextVNode(e.toDisplayString(o)+" ",1),n&&!s?(e.openBlock(),e.createElementBlock("span",G,"*")):e.createCommentVNode("",!0),!n&&s?(e.openBlock(),e.createElementBlock("span",H,"(optional)")):e.createCommentVNode("",!0),a?(e.openBlock(),e.createBlock(k,{key:2,icon:"plus",tabindex:"-1","data-testid":`${t.path}-add-button`,onClick:p},null,8,["data-testid","onClick"])):e.createCommentVNode("",!0)],2),e.createElementVNode("div",J,[e.renderSlot(r.$slots,"default",{level:(c?.level??0)+1})]),e.createElementVNode("pre",Y,e.toDisplayString(t.description),1),l.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:"text-red-600 text-sm","data-testid":`${t.path}-error-message`},e.toDisplayString(l.value),9,Q)):e.createCommentVNode("",!0)],2)):e.renderSlot(r.$slots,"default",{key:2})]),group:e.withCtx(({fieldMetadata:t,fieldContext:{errorMessage:l,label:o},disabled:i,required:n,canAddItems:a,canRemoveItems:p,addItem:c,removeItem:s,slotProps:m,settings:{showOptionalInsteadOfRequired:h}})=>[t.hidden?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass({"md:col-span-2":t.fullWidth})},[m?.hideLabel?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["flex gap-2 items-center mb-2",{"text-gray-500":t.disabled||i}])},[e.createTextVNode(e.toDisplayString(o)+" ",1),n&&!h?(e.openBlock(),e.createElementBlock("span",X,"*")):e.createCommentVNode("",!0),!n&&h?(e.openBlock(),e.createElementBlock("span",Z,"(optional)")):e.createCommentVNode("",!0),a?(e.openBlock(),e.createBlock(k,{key:2,icon:"plus",tabindex:"-1","data-testid":`${t.path}-add-button`,onClick:c},null,8,["data-testid","onClick"])):e.createCommentVNode("",!0),p?(e.openBlock(),e.createBlock(k,{key:3,icon:"minus",tabindex:"-1","data-testid":`${t.path}-remove-button`,color:"red",onClick:s},null,8,["data-testid","onClick"])):e.createCommentVNode("",!0)],2)),e.createElementVNode("div",K,[e.renderSlot(r.$slots,"default",{level:(m?.level??0)+1})]),e.createElementVNode("pre",M,e.toDisplayString(t.description),1),l.value?(e.openBlock(),e.createElementBlock("span",{key:1,class:"text-red-600 text-sm","data-testid":`${t.path}-error-message`},e.toDisplayString(l.value),9,ee)):e.createCommentVNode("",!0)],2)),e.renderSlot(r.$slots,"attributes")]),"select-input":e.withCtx(({fieldMetadata:t,fieldContext:{value:l,handleBlur:o,handleChange:i},disabled:n})=>[e.createElementVNode("select",{id:t.path,value:l.value,disabled:t.disabled||n,class:"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm",onChange:i,onBlur:o},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.options,({key:a,value:p})=>(e.openBlock(),e.createElementBlock("option",{key:a,value:a},e.toDisplayString(p),9,le))),128))],40,te)]),"selectBoundByVModel-input":e.withCtx(({fieldMetadata:t,fieldContext:{value:l,handleBlur:o},disabled:i})=>[e.withDirectives(e.createElementVNode("select",{id:t.path,"onUpdate:modelValue":n=>l.value=n,disabled:t.disabled||i,class:"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm",onBlur:o},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.options,({key:n,value:a})=>(e.openBlock(),e.createElementBlock("option",{key:n,value:n},e.toDisplayString(a),9,ne))),128))],40,oe),[[e.vModelSelect,l.value]])]),"checkbox-input":e.withCtx(({fieldMetadata:t,fieldContext:{value:l,handleBlur:o,handleChange:i},disabled:n})=>[e.createElementVNode("input",{id:t.path,checked:l.value,disabled:t.disabled||n,type:"checkbox",class:"h-6 bg-gray-100 border-gray-200 border rounded px-3 text-sm",onChange:a=>i(a.target.checked),onBlur:o},null,40,ie)]),"checkboxBoundByVModel-input":e.withCtx(({fieldMetadata:t,fieldContext:{value:l,handleBlur:o},disabled:i})=>[e.withDirectives(e.createElementVNode("input",{id:t.path,"onUpdate:modelValue":n=>l.value=n,disabled:t.disabled||i,type:"checkbox",class:"h-6 bg-gray-100 border-gray-200 border rounded px-3 text-sm",onBlur:o},null,40,se),[[e.vModelCheckbox,l.value]])]),"textBoundByVModel-input":e.withCtx(({fieldMetadata:t,fieldContext:{value:l,handleBlur:o},disabled:i})=>[e.withDirectives(e.createElementVNode("input",{id:t.path,"onUpdate:modelValue":n=>l.value=n,disabled:t.disabled||i,type:"text",class:"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm",onBlur:o},null,40,re),[[e.vModelText,l.value]])]),"default-input":e.withCtx(({fieldMetadata:t,fieldContext:{value:l,handleBlur:o,handleChange:i},disabled:n})=>[e.createElementVNode("input",{id:t.path,value:l.value,disabled:t.disabled||n,type:"text",class:"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm",onInput:i,onBlur:o},null,40,ae)]),_:3},8,["metadata-configuration"]))}}),de={class:"flex justify-end gap-2"},ce={key:1,type:"submit",class:"cursor-pointer mt-4 bg-blue-500 text-white px-4 py-2 rounded","data-testid":"submit"},ue={key:0,"data-testid":"errors",class:"col-12 text-red-600"},pe=["innerHTML"],me={key:1,"data-testid":"isSubmitted"},he={key:2,class:"bg-gray-100 p-4 rounded-lg text-sm overflow-auto"},ke=e.defineComponent({__name:"TestForm",props:{metadata:{},settings:{},showDebugState:{type:Boolean,default:!1},initialEdit:{type:Boolean,default:!0},hideFieldsWithoutValue:{type:Boolean,default:!1},initialValues:{}},setup(d){const{values:u,handleSubmit:r,errors:b,meta:t}=g.useDynamicForm({initialValues:d.initialValues}),l=e.ref(),o=e.ref(d.initialEdit),i=e.ref(!1),n=e.computed(()=>d.metadata?.map(c=>y(c,s=>(s.computedProps=s.computedProps??[],s.computedProps.push(m=>{o.value||(m.disabled=!0)}),d.hideFieldsWithoutValue&&(s.computedProps.push((m,h)=>{!o.value&&!g.checkTreeHasValue(h.value)&&(m.hidden=!0)}),s.computedProps.push((m,h,x)=>{!o.value&&x.value.length>0&&x.value.every(B=>B.hidden)&&(m.hidden=!0)})),s)))),a=e.computed(()=>({analytics:!0,messages:{required:"{field} is required",minOccurs:"At least {min} items required",choiceMinOccurs:"The following fields need to occur at least {min} time(s): {field}",minLength:"The minimum length of {field} is {length}",maxLength:"The maximum length of {field} is {length}",length:"{field} must be exactly {length} characters",pattern:"{field} does not match the required pattern",minInclusive:"{field} must be at least {min}",maxInclusive:"{field} must be at most {max}",minExclusive:"{field} must be greater than {min}",maxExclusive:"{field} must be less than {max}",enumeration:"{field} must be one of the allowed values",whiteSpace:"{field} contains invalid whitespace (mode: {mode})",fractionDigits:"{field} may have at most {digits} decimal place(s)",totalDigits:"{field} may have at most {digits} significant digit(s)"},...d.settings??{}}));function p(c){r(s=>{i.value=!0,o.value=!1},({errors:s})=>{i.value=!1})(c)}return(c,s)=>(e.openBlock(),e.createElementBlock("form",{onSubmit:e.withModifiers(p,["prevent"])},[e.createElementVNode("div",de,[o.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"cursor-pointer mt-4 bg-blue-500 text-white px-4 py-2 rounded","data-testid":"submit",onClick:s[0]||(s[0]=m=>o.value=!0)}," Edit ")),o.value?(e.openBlock(),e.createElementBlock("button",ce," Submit ")):e.createCommentVNode("",!0),o.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"cursor-pointer mt-4 bg-gray-200 text-black px-4 py-2 rounded","data-testid":"cancel",onClick:s[1]||(s[1]=m=>o.value=!1)}," Cancel ")):e.createCommentVNode("",!0)]),Object.values(e.unref(b)).length?(e.openBlock(),e.createElementBlock("div",ue,[s[3]||(s[3]=e.createTextVNode(" Errors: ",-1)),e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),(m,h)=>(e.openBlock(),e.createElementBlock("li",{key:h},[e.createElementVNode("span",{innerHTML:m},null,8,pe)]))),128))])])):e.createCommentVNode("",!0),e.createVNode(g._sfc_main,{template:C,metadata:n.value,settings:a.value,"onUpdate:modelValue":s[2]||(s[2]=m=>l.value=m)},null,8,["metadata","settings"]),i.value?(e.openBlock(),e.createElementBlock("span",me)):e.createCommentVNode("",!0),c.showDebugState?(e.openBlock(),e.createElementBlock("pre",he,"IsDirty: "+e.toDisplayString(e.unref(t).dirty)+`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),f=require("./mapEachMetadataItem-CDDSsb0c.cjs"),B={key:0,xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"size-3"},v={key:1,xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"size-3"},k=e.defineComponent({__name:"IconButton",props:{icon:{},color:{default:"blue"}},emits:["click"],setup(u){return(p,a)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:e.normalizeClass(["cursor-pointer inline-flex items-center justify-center rounded-full size-5 text-white-800 cursor-pointer",{"bg-blue-200 hover:bg-blue-300":u.color==="blue","bg-red-200 hover:bg-red-300":u.color==="red"}]),onClick:a[0]||(a[0]=b=>p.$emit("click"))},[u.icon==="plus"?(e.openBlock(),e.createElementBlock("svg",B,[...a[1]||(a[1]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4.5v15m7.5-7.5h-15"},null,-1)])])):e.createCommentVNode("",!0),u.icon==="minus"?(e.openBlock(),e.createElementBlock("svg",v,[...a[2]||(a[2]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M5 12h14"},null,-1)])])):e.createCommentVNode("",!0)],2))}}),N={class:"text-sm whitespace-pre-wrap"},V=["data-testid"],E={class:"grid grid-cols-1 md:grid-cols-2 gap-6"},_={key:0,class:"text-red-500 dark:text-rose-400"},O={key:1,class:"text-sm text-gray-400"},w={class:"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6"},S={class:"text-sm whitespace-pre-wrap"},$=["data-testid"],T=["for"],D={key:0,class:"text-red-500 dark:text-rose-400"},F={key:1,class:"text-sm text-gray-400"},W={class:"text-sm whitespace-pre-wrap"},z=["data-testid"],L=["for"],q={key:0,class:"text-red-500 dark:text-rose-400"},I={key:1,class:"text-sm text-gray-400"},R={class:"flex gap-2 items-center"},A={class:"flex flex-col grow"},U={class:"text-sm whitespace-pre-wrap"},j=["data-testid"],P={key:0,class:"text-red-500 dark:text-rose-400"},G={key:1,class:"text-sm text-gray-400"},H={class:"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6"},J={class:"text-sm whitespace-pre-wrap"},Y=["data-testid"],Q={key:0,class:"text-red-500 dark:text-rose-400"},X={key:1,class:"text-sm text-gray-400"},Z={class:"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6"},K={class:"text-sm whitespace-pre-wrap"},M=["data-testid"],ee=["id","value","disabled","onChange","onBlur"],te=["value"],le=["id","onUpdate:modelValue","disabled","onBlur"],oe=["value"],ne=["id","checked","disabled","onChange","onBlur"],ie=["id","onUpdate:modelValue","disabled","onBlur"],se=["id","onUpdate:modelValue","disabled","onBlur"],ae=["id","value","disabled","onInput","onBlur"],x=e.defineComponent({__name:"TestFormTemplate",setup(u){const p=f.defineMetadata();return(a,b)=>(e.openBlock(),e.createBlock(f._sfc_main$4,{"metadata-configuration":e.unref(p)},{heading:e.withCtx(({fieldMetadata:t,fieldContext:{errorMessage:l,label:o},disabled:i,canAddItems:n,addItem:r,canRemoveItems:d,removeItem:c,slotProps:s})=>[t.hidden?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["mt-4",{"md:col-span-2":t.fullWidth}])},[o?(e.openBlock(),e.createElementBlock("h3",{key:0,class:e.normalizeClass(["flex text-xl font-bold gap-2 items-center mb-2",{"text-gray-500":t.disabled||i}])},[e.createTextVNode(e.toDisplayString(o)+" ",1),n?(e.openBlock(),e.createBlock(k,{key:0,icon:"plus",tabindex:"-1","data-testid":`${t.path}-add-button`,onClick:r},null,8,["data-testid","onClick"])):e.createCommentVNode("",!0),d?(e.openBlock(),e.createBlock(k,{key:1,icon:"minus",tabindex:"-1",color:"red","data-testid":`${t.path}-remove-button`,onClick:c},null,8,["data-testid","onClick"])):e.createCommentVNode("",!0)],2)):e.createCommentVNode("",!0),e.createElementVNode("pre",N,e.toDisplayString(t.description),1),l.value?(e.openBlock(),e.createElementBlock("span",{key:1,class:"text-red-600 text-sm","data-testid":`${t.path}-error-message`},e.toDisplayString(l.value),9,V)):e.createCommentVNode("",!0),e.createElementVNode("div",E,[e.renderSlot(a.$slots,"default",{level:(s?.level??0)+1})])],2))]),"heading-array":e.withCtx(()=>[e.renderSlot(a.$slots,"default")]),"default-choice":e.withCtx(({fieldMetadata:t,fieldContext:{errorMessage:l,label:o},disabled:i,required:n,slotProps:r,settings:{showOptionalInsteadOfRequired:d}})=>[t.hidden?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["flex flex-col gap-2",{"md:col-span-2":t.fullWidth}])},[e.createElementVNode("span",{class:e.normalizeClass(["flex gap-2 items-center",{"text-gray-500":i}])},[e.createTextVNode(e.toDisplayString(o)+" ",1),n&&!d?(e.openBlock(),e.createElementBlock("span",_,"*")):e.createCommentVNode("",!0),!n&&d?(e.openBlock(),e.createElementBlock("span",O,"(optional)")):e.createCommentVNode("",!0)],2),e.createElementVNode("div",w,[e.renderSlot(a.$slots,"default",{level:(r?.level??0)+1,belowChoiceField:!0})]),e.createElementVNode("pre",S,e.toDisplayString(t.description),1),l.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:"text-red-600 text-sm","data-testid":`${t.path}-error-message`},e.toDisplayString(l.value),9,$)):e.createCommentVNode("",!0)],2))]),"default-array":e.withCtx(({fieldMetadata:t,fieldContext:{errorMessage:l,label:o},disabled:i,required:n,canAddItems:r,addItem:d,settings:{showOptionalInsteadOfRequired:c}})=>[t.hidden?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["flex flex-col gap-2",{"md:col-span-2":t.fullWidth}])},[e.createElementVNode("label",{for:`${t.path}[0]`,class:e.normalizeClass([{"text-gray-500":t.disabled||i},"flex gap-2 items-center"])},[e.createTextVNode(e.toDisplayString(o)+" ",1),n&&!c?(e.openBlock(),e.createElementBlock("span",D,"*")):e.createCommentVNode("",!0),!n&&c?(e.openBlock(),e.createElementBlock("span",F,"(optional)")):e.createCommentVNode("",!0),r?(e.openBlock(),e.createBlock(k,{key:2,icon:"plus",tabindex:"-1","data-testid":`${t.path}-add-button`,onClick:d},null,8,["data-testid","onClick"])):e.createCommentVNode("",!0)],10,T),e.renderSlot(a.$slots,"default",{hideLabel:!0}),e.createElementVNode("pre",W,e.toDisplayString(t.description),1),l.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:"text-red-600 text-sm","data-testid":`${t.path}-error-message`},e.toDisplayString(l.value),9,z)):e.createCommentVNode("",!0)],2))]),default:e.withCtx(({fieldMetadata:t,fieldContext:{errorMessage:l,label:o},disabled:i,required:n,canRemoveItems:r,removeItem:d,slotProps:c,settings:{showOptionalInsteadOfRequired:s}})=>[t.hidden?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["flex flex-col gap-2",{"md:col-span-2":t.fullWidth}])},[c?.hideLabel?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("label",{key:0,for:t.path,class:e.normalizeClass([{"text-gray-500":t.disabled||i},"flex gap-1 items-center"])},[e.createTextVNode(e.toDisplayString(o)+" ",1),n&&!s?(e.openBlock(),e.createElementBlock("span",q,"*")):e.createCommentVNode("",!0),!n&&s?(e.openBlock(),e.createElementBlock("span",I,"(optional)")):e.createCommentVNode("",!0)],10,L)),e.createElementVNode("div",R,[e.createElementVNode("div",A,[e.renderSlot(a.$slots,"default")]),e.createVNode(k,{class:e.normalizeClass({invisible:!r}),icon:"minus",tabindex:"-1",color:"red","data-testid":`${t.path}-remove-button`,onClick:d},null,8,["class","data-testid","onClick"])]),e.createElementVNode("pre",U,e.toDisplayString(t.description),1),l.value?(e.openBlock(),e.createElementBlock("span",{key:1,class:"text-red-600 text-sm","data-testid":`${t.path}-error-message`},e.toDisplayString(l.value),9,j)):e.createCommentVNode("",!0)],2)),e.renderSlot(a.$slots,"attributes")]),"group-array":e.withCtx(({fieldMetadata:t,fieldContext:{errorMessage:l,label:o},disabled:i,required:n,canAddItems:r,addItem:d,slotProps:c,settings:{showOptionalInsteadOfRequired:s}})=>[t.hidden?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[],64)):c?.belowChoiceField?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass({"md:col-span-2":t.fullWidth})},[e.createElementVNode("span",{class:e.normalizeClass(["flex gap-2 items-center mb-2",{"text-gray-500":t.disabled||i}])},[e.createTextVNode(e.toDisplayString(o)+" ",1),n&&!s?(e.openBlock(),e.createElementBlock("span",P,"*")):e.createCommentVNode("",!0),!n&&s?(e.openBlock(),e.createElementBlock("span",G,"(optional)")):e.createCommentVNode("",!0),r?(e.openBlock(),e.createBlock(k,{key:2,icon:"plus",tabindex:"-1","data-testid":`${t.path}-add-button`,onClick:d},null,8,["data-testid","onClick"])):e.createCommentVNode("",!0)],2),e.createElementVNode("div",H,[e.renderSlot(a.$slots,"default",{level:(c?.level??0)+1})]),e.createElementVNode("pre",J,e.toDisplayString(t.description),1),l.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:"text-red-600 text-sm","data-testid":`${t.path}-error-message`},e.toDisplayString(l.value),9,Y)):e.createCommentVNode("",!0)],2)):e.renderSlot(a.$slots,"default",{key:2})]),group:e.withCtx(({fieldMetadata:t,fieldContext:{errorMessage:l,label:o},disabled:i,required:n,canAddItems:r,canRemoveItems:d,addItem:c,removeItem:s,slotProps:m,settings:{showOptionalInsteadOfRequired:h}})=>[t.hidden?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass({"md:col-span-2":t.fullWidth})},[m?.hideLabel?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["flex gap-2 items-center mb-2",{"text-gray-500":t.disabled||i}])},[e.createTextVNode(e.toDisplayString(o)+" ",1),n&&!h?(e.openBlock(),e.createElementBlock("span",Q,"*")):e.createCommentVNode("",!0),!n&&h?(e.openBlock(),e.createElementBlock("span",X,"(optional)")):e.createCommentVNode("",!0),r?(e.openBlock(),e.createBlock(k,{key:2,icon:"plus",tabindex:"-1","data-testid":`${t.path}-add-button`,onClick:c},null,8,["data-testid","onClick"])):e.createCommentVNode("",!0),d?(e.openBlock(),e.createBlock(k,{key:3,icon:"minus",tabindex:"-1","data-testid":`${t.path}-remove-button`,color:"red",onClick:s},null,8,["data-testid","onClick"])):e.createCommentVNode("",!0)],2)),e.createElementVNode("div",Z,[e.renderSlot(a.$slots,"default",{level:(m?.level??0)+1})]),e.createElementVNode("pre",K,e.toDisplayString(t.description),1),l.value?(e.openBlock(),e.createElementBlock("span",{key:1,class:"text-red-600 text-sm","data-testid":`${t.path}-error-message`},e.toDisplayString(l.value),9,M)):e.createCommentVNode("",!0)],2)),e.renderSlot(a.$slots,"attributes")]),"select-input":e.withCtx(({fieldMetadata:t,fieldContext:{value:l,handleBlur:o,handleChange:i},disabled:n})=>[e.createElementVNode("select",{id:t.path,value:l.value,disabled:t.disabled||n,class:"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm",onChange:i,onBlur:o},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.options,({key:r,value:d})=>(e.openBlock(),e.createElementBlock("option",{key:r,value:r},e.toDisplayString(d),9,te))),128))],40,ee)]),"selectBoundByVModel-input":e.withCtx(({fieldMetadata:t,fieldContext:{value:l,handleBlur:o},disabled:i})=>[e.withDirectives(e.createElementVNode("select",{id:t.path,"onUpdate:modelValue":n=>l.value=n,disabled:t.disabled||i,class:"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm",onBlur:o},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.options,({key:n,value:r})=>(e.openBlock(),e.createElementBlock("option",{key:n,value:n},e.toDisplayString(r),9,oe))),128))],40,le),[[e.vModelSelect,l.value]])]),"checkbox-input":e.withCtx(({fieldMetadata:t,fieldContext:{value:l,handleBlur:o,handleChange:i},disabled:n})=>[e.createElementVNode("input",{id:t.path,checked:l.value,disabled:t.disabled||n,type:"checkbox",class:"h-6 bg-gray-100 border-gray-200 border rounded px-3 text-sm",onChange:r=>i(r.target.checked),onBlur:o},null,40,ne)]),"checkboxBoundByVModel-input":e.withCtx(({fieldMetadata:t,fieldContext:{value:l,handleBlur:o},disabled:i})=>[e.withDirectives(e.createElementVNode("input",{id:t.path,"onUpdate:modelValue":n=>l.value=n,disabled:t.disabled||i,type:"checkbox",class:"h-6 bg-gray-100 border-gray-200 border rounded px-3 text-sm",onBlur:o},null,40,ie),[[e.vModelCheckbox,l.value]])]),"textBoundByVModel-input":e.withCtx(({fieldMetadata:t,fieldContext:{value:l,handleBlur:o},disabled:i})=>[e.withDirectives(e.createElementVNode("input",{id:t.path,"onUpdate:modelValue":n=>l.value=n,disabled:t.disabled||i,type:"text",class:"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm",onBlur:o},null,40,se),[[e.vModelText,l.value]])]),"default-input":e.withCtx(({fieldMetadata:t,fieldContext:{value:l,handleBlur:o,handleChange:i},disabled:n})=>[e.createElementVNode("input",{id:t.path,value:l.value,disabled:t.disabled||n,type:"text",class:"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm",onInput:i,onBlur:o},null,40,ae)]),_:3},8,["metadata-configuration"]))}}),re={class:"flex justify-end gap-2"},de={key:1,type:"submit",class:"cursor-pointer mt-4 bg-blue-500 text-white px-4 py-2 rounded","data-testid":"submit"},ce={key:0,"data-testid":"errors",class:"col-12 text-red-600"},ue=["innerHTML"],me={key:1,"data-testid":"isSubmitted"},pe={key:2,class:"bg-gray-100 p-4 rounded-lg text-sm overflow-auto"},he=e.defineComponent({__name:"TestForm",props:{metadata:{},settings:{},showDebugState:{type:Boolean,default:!1},initialEdit:{type:Boolean,default:!0},hideFieldsWithoutValue:{type:Boolean,default:!1},initialValues:{}},setup(u){const{values:p,handleSubmit:a,errors:b,meta:t}=f.useDynamicForm({initialValues:u.initialValues}),l=e.ref(),o=e.ref(u.initialEdit),i=e.ref(!1),n=e.computed(()=>u.metadata?.map(c=>f.mapEachMetadataItem(c,s=>(s.computedProps=s.computedProps??[],s.computedProps.push(m=>{o.value||(m.disabled=!0)}),u.hideFieldsWithoutValue&&(s.computedProps.push((m,h)=>{!o.value&&!f.checkTreeHasValue(h.value)&&(m.hidden=!0)}),s.computedProps.push((m,h,y)=>{!o.value&&y.value.length>0&&y.value.every(C=>C.hidden)&&(m.hidden=!0)})),s)))),r=e.computed(()=>({analytics:!0,messages:{required:"{field} is required",minOccurs:"At least {min} items required",choiceMinOccurs:"The following fields need to occur at least {min} time(s): {field}",minLength:"The minimum length of {field} is {length}",maxLength:"The maximum length of {field} is {length}",length:"{field} must be exactly {length} characters",pattern:"{field} does not match the required pattern",minInclusive:"{field} must be at least {min}",maxInclusive:"{field} must be at most {max}",minExclusive:"{field} must be greater than {min}",maxExclusive:"{field} must be less than {max}",enumeration:"{field} must be one of the allowed values",whiteSpace:"{field} contains invalid whitespace (mode: {mode})",fractionDigits:"{field} may have at most {digits} decimal place(s)",totalDigits:"{field} may have at most {digits} significant digit(s)"},...u.settings??{}}));function d(c){a(s=>{i.value=!0,o.value=!1},({errors:s})=>{i.value=!1})(c)}return(c,s)=>(e.openBlock(),e.createElementBlock("form",{onSubmit:e.withModifiers(d,["prevent"])},[e.createElementVNode("div",re,[o.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"cursor-pointer mt-4 bg-blue-500 text-white px-4 py-2 rounded","data-testid":"submit",onClick:s[0]||(s[0]=m=>o.value=!0)}," Edit ")),o.value?(e.openBlock(),e.createElementBlock("button",de," Submit ")):e.createCommentVNode("",!0),o.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"cursor-pointer mt-4 bg-gray-200 text-black px-4 py-2 rounded","data-testid":"cancel",onClick:s[1]||(s[1]=m=>o.value=!1)}," Cancel ")):e.createCommentVNode("",!0)]),Object.values(e.unref(b)).length?(e.openBlock(),e.createElementBlock("div",ce,[s[3]||(s[3]=e.createTextVNode(" Errors: ",-1)),e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),(m,h)=>(e.openBlock(),e.createElementBlock("li",{key:h},[e.createElementVNode("span",{innerHTML:m},null,8,ue)]))),128))])])):e.createCommentVNode("",!0),e.createVNode(f._sfc_main,{template:x,metadata:n.value,settings:r.value,"onUpdate:modelValue":s[2]||(s[2]=m=>l.value=m)},null,8,["metadata","settings"]),i.value?(e.openBlock(),e.createElementBlock("span",me)):e.createCommentVNode("",!0),u.showDebugState?(e.openBlock(),e.createElementBlock("pre",pe,"IsDirty: "+e.toDisplayString(e.unref(t).dirty)+`
2
2
  Pending: `+e.toDisplayString(e.unref(t).pending)+`
3
3
  Touched: `+e.toDisplayString(e.unref(t).touched)+`
4
4
  Valid: `+e.toDisplayString(e.unref(t).valid)+`
5
5
  Submitted: `+e.toDisplayString(i.value)+`
6
6
 
7
7
  // form values:
8
- `+e.toDisplayString(JSON.stringify(e.unref(u),null,2))+`
9
- `,1)):e.createCommentVNode("",!0)],32))}}),fe=f([{name:"text",type:"text",fieldOptions:{label:"Text Input"},path:"with.custom.structure",restriction:{maxLength:10}}]),ge=f([{fieldOptions:{label:"Array Fields"},type:"heading",children:[{fieldOptions:{label:"Optional field (max 3)"},minOccurs:0,maxOccurs:3},{fieldOptions:{label:"Required field (max 3)"},maxOccurs:3},{fieldOptions:{label:"2 Fields required"},minOccurs:2,maxOccurs:4},{fieldOptions:{label:"Section (2 sections required)"},type:"heading",minOccurs:2,maxOccurs:4,fullWidth:!0,children:[{fieldOptions:{label:"Nested field 1"}},{fieldOptions:{label:"Required Nested field 2"},type:"select",options:[{key:"option1",value:"Option 1"},{key:"option2",value:"Option 2"},{key:"option3",value:"Option 3"}]},{fieldOptions:{label:"Nested field 3"},type:"checkbox"}]}]}]),be=f([{fieldOptions:{label:"Grouped Fields"},type:"heading",children:[{fieldOptions:{label:"Required group"},type:"group",children:[{fieldOptions:{label:"Required Nested field 1"},fullWidth:!0},{fieldOptions:{label:"Required Nested field 2"},fullWidth:!0}]},{fieldOptions:{label:"Optional group"},type:"group",minOccurs:0,description:`The group is optional, therefore the children will only be required once 1 value is filled in.
8
+ `+e.toDisplayString(JSON.stringify(e.unref(p),null,2))+`
9
+ `,1)):e.createCommentVNode("",!0)],32))}}),ke=g([{name:"text",type:"text",fieldOptions:{label:"Text Input"},path:"with.custom.structure",restriction:{maxLength:10}}]),ge=g([{fieldOptions:{label:"Array Fields"},type:"heading",children:[{fieldOptions:{label:"Optional field (max 3)"},minOccurs:0,maxOccurs:3},{fieldOptions:{label:"Required field (max 3)"},maxOccurs:3},{fieldOptions:{label:"2 Fields required"},minOccurs:2,maxOccurs:4},{fieldOptions:{label:"Section (2 sections required)"},type:"heading",minOccurs:2,maxOccurs:4,fullWidth:!0,children:[{fieldOptions:{label:"Nested field 1"}},{fieldOptions:{label:"Required Nested field 2"},type:"select",options:[{key:"option1",value:"Option 1"},{key:"option2",value:"Option 2"},{key:"option3",value:"Option 3"}]},{fieldOptions:{label:"Nested field 3"},type:"checkbox"}]}]}]),fe=g([{fieldOptions:{label:"Grouped Fields"},type:"heading",children:[{fieldOptions:{label:"Required group"},type:"group",children:[{fieldOptions:{label:"Required Nested field 1"},fullWidth:!0},{fieldOptions:{label:"Required Nested field 2"},fullWidth:!0}]},{fieldOptions:{label:"Optional group"},type:"group",minOccurs:0,description:`The group is optional, therefore the children will only be required once 1 value is filled in.
10
10
 
11
- You can test it by filling in one of the fields.`,children:[{fieldOptions:{label:"Required Nested field 1"},fullWidth:!0},{fieldOptions:{label:"Required Nested field 2"},fullWidth:!0}]}]},{fieldOptions:{label:"Grouped Array Fields"},type:"heading",children:[{fieldOptions:{label:"Required group"},type:"group",maxOccurs:5,fullWidth:!0,children:[{fieldOptions:{label:"Required Nested field 1"}},{fieldOptions:{label:"Required Nested field 2"}}]},{fieldOptions:{label:"Optional group"},type:"group",minOccurs:0,maxOccurs:5,fullWidth:!0,children:[{fieldOptions:{label:"Required Nested field 1"}},{fieldOptions:{label:"Required Nested field 2"}}]}]}]),ye=f([{fieldOptions:{label:"Choice Fields (minOccurs 1, maxOccurs 1)"},type:"heading",children:[{fieldOptions:{label:"Simple Choice Field"},fullWidth:!0,description:"In a choice field, only 1 of the fields can be filled in.",choice:[{fieldOptions:{label:"Nested Field 1"}},{fieldOptions:{label:"Nested Field 2"}}]}]},{fieldOptions:{label:"Choice Grouped Fields (minOccurs 1, maxOccurs 3)"},type:"heading",children:[{fieldOptions:{label:"Array Choice Field"},type:"group",maxOccurs:3,fullWidth:!0,description:"In a choice field, only 1 of the fields can be filled in.",choice:[{fieldOptions:{label:"Nested Field 1"},type:"group",children:[{fieldOptions:{label:"Nested Child Field 1"},fullWidth:!0},{fieldOptions:{label:"Nested Child Field 2"},fullWidth:!0}]},{fieldOptions:{label:"Nested Field 2"},type:"group",children:[{fieldOptions:{label:"Nested Child Field 1"},fullWidth:!0},{fieldOptions:{label:"Nested Child Field 2"},fullWidth:!0}]}]}]},{fieldOptions:{label:"Choice Array Fields (minOccurs 1, maxOccurs 3)"},type:"heading",children:[{fieldOptions:{label:"Array Choice Field"},type:"group",maxOccurs:3,fullWidth:!0,description:"In a choice field, only 1 of the fields can be filled in.",choice:[{fieldOptions:{label:"Nested Field 1"},maxOccurs:3},{fieldOptions:{label:"Nested Field 2"},maxOccurs:3}]}]}]),xe=f([{fieldOptions:{label:"Personal Info"},type:"heading",name:"person",description:"Only showing the fields that have a value. Click edit to change.",fullWidth:!0,children:[{name:"firstName",fieldOptions:{label:"First Name"}},{name:"lastName",fieldOptions:{label:"Last Name"}},{name:"email",fieldOptions:{label:"Email"}}]},{fieldOptions:{label:"Address"},type:"heading",name:"address",fullWidth:!0,children:[{name:"street",fieldOptions:{label:"Street"},minOccurs:0},{name:"city",fieldOptions:{label:"City"},minOccurs:0},{name:"country",fieldOptions:{label:"Country"},minOccurs:0}]}],void 0,{initialEdit:!1,hideFieldsWithoutValue:!0,initialValues:{person:{firstName:"Jack",lastName:"Smit"}}}),Ce=f([{name:"items",type:"text",fieldOptions:{label:"Items"},maxOccurs:3,attributes:[{name:"lang",type:"text",minOccurs:0}]}],{});function f(d,u,r={}){return e.markRaw(e.defineComponent({render:()=>e.h(ke,{...r,metadata:d,settings:u,showDebugState:!0})}))}exports.TestFormTemplate=C;exports.arrayTestCase=ge;exports.childFieldsTestCase=xe;exports.choiceTestCase=ye;exports.createTestCase=f;exports.defaultTestCase=fe;exports.groupTestCase=be;exports.individualTestCase=Ce;
11
+ You can test it by filling in one of the fields.`,children:[{fieldOptions:{label:"Required Nested field 1"},fullWidth:!0},{fieldOptions:{label:"Required Nested field 2"},fullWidth:!0}]}]},{fieldOptions:{label:"Grouped Array Fields"},type:"heading",children:[{fieldOptions:{label:"Required group"},type:"group",maxOccurs:5,fullWidth:!0,children:[{fieldOptions:{label:"Required Nested field 1"}},{fieldOptions:{label:"Required Nested field 2"}}]},{fieldOptions:{label:"Optional group"},type:"group",minOccurs:0,maxOccurs:5,fullWidth:!0,children:[{fieldOptions:{label:"Required Nested field 1"}},{fieldOptions:{label:"Required Nested field 2"}}]}]}]),be=g([{fieldOptions:{label:"Choice Fields (minOccurs 1, maxOccurs 1)"},type:"heading",children:[{fieldOptions:{label:"Simple Choice Field"},fullWidth:!0,description:"In a choice field, only 1 of the fields can be filled in.",choice:[{fieldOptions:{label:"Nested Field 1"}},{fieldOptions:{label:"Nested Field 2"}}]}]},{fieldOptions:{label:"Choice Grouped Fields (minOccurs 1, maxOccurs 3)"},type:"heading",children:[{fieldOptions:{label:"Array Choice Field"},type:"group",maxOccurs:3,fullWidth:!0,description:"In a choice field, only 1 of the fields can be filled in.",choice:[{fieldOptions:{label:"Nested Field 1"},type:"group",children:[{fieldOptions:{label:"Nested Child Field 1"},fullWidth:!0},{fieldOptions:{label:"Nested Child Field 2"},fullWidth:!0}]},{fieldOptions:{label:"Nested Field 2"},type:"group",children:[{fieldOptions:{label:"Nested Child Field 1"},fullWidth:!0},{fieldOptions:{label:"Nested Child Field 2"},fullWidth:!0}]}]}]},{fieldOptions:{label:"Choice Array Fields (minOccurs 1, maxOccurs 3)"},type:"heading",children:[{fieldOptions:{label:"Array Choice Field"},type:"group",maxOccurs:3,fullWidth:!0,description:"In a choice field, only 1 of the fields can be filled in.",choice:[{fieldOptions:{label:"Nested Field 1"},maxOccurs:3},{fieldOptions:{label:"Nested Field 2"},maxOccurs:3}]}]}]),ye=g([{fieldOptions:{label:"Personal Info"},type:"heading",name:"person",description:"Only showing the fields that have a value. Click edit to change.",fullWidth:!0,children:[{name:"firstName",fieldOptions:{label:"First Name"}},{name:"lastName",fieldOptions:{label:"Last Name"}},{name:"email",fieldOptions:{label:"Email"}}]},{fieldOptions:{label:"Address"},type:"heading",name:"address",fullWidth:!0,children:[{name:"street",fieldOptions:{label:"Street"},minOccurs:0},{name:"city",fieldOptions:{label:"City"},minOccurs:0},{name:"country",fieldOptions:{label:"Country"},minOccurs:0}]}],void 0,{initialEdit:!1,hideFieldsWithoutValue:!0,initialValues:{person:{firstName:"Jack",lastName:"Smit"}}}),xe=g([{name:"items",type:"text",fieldOptions:{label:"Items"},maxOccurs:3,attributes:[{name:"lang",type:"text",minOccurs:0}]}],{});function g(u,p,a={}){return e.markRaw(e.defineComponent({render:()=>e.h(he,{...a,metadata:u,settings:p,showDebugState:!0})}))}exports.TestFormTemplate=x;exports.arrayTestCase=ge;exports.childFieldsTestCase=ye;exports.choiceTestCase=be;exports.createTestCase=g;exports.defaultTestCase=ke;exports.groupTestCase=fe;exports.individualTestCase=xe;
12
12
  //# sourceMappingURL=examples.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"examples.cjs.js","sources":["../src/utils/mapEachMetadataItem.ts","../src/examples/components/IconButton.vue","../src/examples/TestFormTemplate.vue","../src/examples/TestForm.vue","../src/examples/__tests__/TestFormTemplate.testcases.ts"],"sourcesContent":["import type { FieldMetadata } from '@/types/FieldMetadata';\n\n/**\n * Recursively walks a `FieldMetadata` tree (visiting `children` and `choice`) and applies\n * `callbackFunc` to every node, returning the transformed tree.\n *\n * The callback receives a shallow clone of each node, so mutations inside the callback do not\n * affect the original metadata. `children` and `choice` on the returned node are replaced with\n * the recursively-mapped results after the callback runs.\n */\nexport function mapEachMetadataItem<\n ExtendedFieldTypes extends string = string,\n ExtendedProperties extends object = object,\n>(\n metadata: FieldMetadata<ExtendedFieldTypes, ExtendedProperties>,\n callbackFunc: (item: FieldMetadata<ExtendedFieldTypes, ExtendedProperties>) => FieldMetadata<ExtendedFieldTypes, ExtendedProperties>,\n): FieldMetadata<ExtendedFieldTypes, ExtendedProperties> {\n if (!metadata || !callbackFunc)\n return metadata;\n\n metadata = callbackFunc?.({ ...metadata });\n metadata.children = metadata?.children?.map(x => mapEachMetadataItem(x, callbackFunc));\n metadata.choice = metadata?.choice?.map(x => mapEachMetadataItem(x, callbackFunc));\n return metadata;\n}\n","<script lang=\"ts\" setup>\ninterface Props {\n icon: 'plus' | 'minus'\n color?: 'blue' | 'red'\n}\ninterface Emits {\n (e: 'click'): void\n}\nconst {\n icon,\n color = 'blue',\n} = defineProps<Props>();\ndefineEmits<Emits>();\n</script>\n\n<template>\n <button\n type=\"button\"\n class=\"cursor-pointer inline-flex items-center justify-center rounded-full size-5 text-white-800 cursor-pointer\"\n :class=\"{\n 'bg-blue-200 hover:bg-blue-300': color === 'blue',\n 'bg-red-200 hover:bg-red-300': color === 'red',\n }\"\n @click=\"$emit('click')\"\n >\n <svg v-if=\"icon === 'plus'\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-3\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 4.5v15m7.5-7.5h-15\" />\n </svg>\n <svg v-if=\"icon === 'minus'\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-3\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 12h14\" />\n </svg>\n </button>\n</template>\n","<script lang=\"ts\" setup>\nimport type { GetDynamicFormSettingsType } from '@/types/GetDynamicFormSettingsType';\nimport type { GetMetadataType } from '@/types/GetMetadataType';\nimport DynamicFormTemplate from '@/components/DynamicFormTemplate.vue';\nimport { defineMetadata } from '@/core/defineMetadata';\nimport IconButton from './components/IconButton.vue';\n\nexport type Metadata = GetMetadataType<typeof metadata>;\n\nexport type DynamicFormSettings = GetDynamicFormSettingsType<typeof metadata>;\n\nconst metadata = defineMetadata<\n {\n text: string\n textBoundByVModel: string\n select: string\n selectBoundByVModel: string\n checkbox: boolean\n checkboxBoundByVModel: boolean\n heading: never\n group: never\n },\n {\n description?: string\n options?: { key: string, value: string }[]\n fullWidth?: boolean\n disabled?: boolean\n hidden?: boolean\n },\n /**\n * Free to decide what attributes you want to pass internally between your templates.\n * You can add any attribute to a <slot /> and then it will be accessible in props.slotProps.\n */\n {\n hideLabel?: boolean\n /** Example on how to keep track of the levels */\n level?: number\n /** Helps identifying that we're below a choice field, so if we're rendering an array we can adjust our layout */\n belowChoiceField?: boolean\n hidden?: boolean\n },\n {\n showOptionalInsteadOfRequired?: boolean\n }\n>();\n</script>\n\n<template>\n <DynamicFormTemplate :metadata-configuration=\"metadata\">\n <template #heading=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, canAddItems, addItem, canRemoveItems, removeItem, slotProps }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"mt-4\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <h3 v-if=\"label\" class=\"flex text-xl font-bold gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n <IconButton v-if=\"canRemoveItems\" icon=\"minus\" tabindex=\"-1\" color=\"red\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" @click=\"removeItem\" />\n </h3>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n </div>\n </template>\n\n <template #heading-array>\n <!-- Don't show any extra elements for the heading -->\n <slot />\n </template>\n\n <template #default-choice=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, slotProps, settings: { showOptionalInsteadOfRequired } }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span class=\"flex gap-2 items-center\" :class=\"{ 'text-gray-500': disabled }\">\n {{ label }}\n <span v-if=\"required && !showOptionalInsteadOfRequired\" class=\"text-red-500 dark:text-rose-400\">*</span>\n <span v-if=\"!required && showOptionalInsteadOfRequired\" class=\"text-sm text-gray-400\">(optional)</span>\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" :below-choice-field=\"true\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n </template>\n\n <template #default-array=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, addItem, settings: { showOptionalInsteadOfRequired } }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <label :for=\"`${fieldMetadata.path}[0]`\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\" class=\"flex gap-2 items-center\">\n {{ label }}\n <span v-if=\"required && !showOptionalInsteadOfRequired\" class=\"text-red-500 dark:text-rose-400\">*</span>\n <span v-if=\"!required && showOptionalInsteadOfRequired\" class=\"text-sm text-gray-400\">(optional)</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n </label>\n <slot :hide-label=\"true\" />\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n </template>\n\n <template #default=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canRemoveItems, removeItem, slotProps, settings: { showOptionalInsteadOfRequired } }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <label v-if=\"!slotProps?.hideLabel\" :for=\"fieldMetadata.path\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\" class=\"flex gap-1 items-center\">\n {{ label }}\n <span v-if=\"required && !showOptionalInsteadOfRequired\" class=\"text-red-500 dark:text-rose-400\">*</span>\n <span v-if=\"!required && showOptionalInsteadOfRequired\" class=\"text-sm text-gray-400\">(optional)</span>\n </label>\n <div class=\"flex gap-2 items-center\">\n <div class=\"flex flex-col grow\">\n <slot />\n </div>\n <IconButton :class=\"{ invisible: !canRemoveItems }\" icon=\"minus\" tabindex=\"-1\" color=\"red\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" @click=\"removeItem\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <slot name=\"attributes\" />\n </template>\n\n <template #group-array=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, addItem, slotProps, settings: { showOptionalInsteadOfRequired } }\">\n <template v-if=\"fieldMetadata.hidden\" />\n <!-- In case we're below a choice field, the first array item is not automatically added, so show a label with buttons -->\n <div v-else-if=\"slotProps?.belowChoiceField\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span class=\"flex gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <span v-if=\"required && !showOptionalInsteadOfRequired\" class=\"text-red-500 dark:text-rose-400\">*</span>\n <span v-if=\"!required && showOptionalInsteadOfRequired\" class=\"text-sm text-gray-400\">(optional)</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <!-- In case we show an input directly, show a label and buttons -->\n <slot v-else />\n </template>\n\n <template #group=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, canRemoveItems, addItem, removeItem, slotProps, settings: { showOptionalInsteadOfRequired } }\">\n <!-- In case of a grouped field we render the field differently -->\n <div v-if=\"!fieldMetadata.hidden\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span v-if=\"!slotProps?.hideLabel\" class=\"flex gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <span v-if=\"required && !showOptionalInsteadOfRequired\" class=\"text-red-500 dark:text-rose-400\">*</span>\n <span v-if=\"!required && showOptionalInsteadOfRequired\" class=\"text-sm text-gray-400\">(optional)</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n <IconButton v-if=\"canRemoveItems\" icon=\"minus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" color=\"red\" @click=\"removeItem\" />\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <slot name=\"attributes\" />\n </template>\n\n <template #select-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <select\n :id=\"fieldMetadata.path\"\n :value=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @change=\"handleChange\"\n @blur=\"handleBlur\"\n >\n <option v-for=\"{ key: optionKey, value: optionValue } in fieldMetadata.options\" :key=\"optionKey\" :value=\"optionKey\">\n {{ optionValue }}\n </option>\n </select>\n </template>\n\n <template #selectBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <select\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n <option v-for=\"{ key: optionKey, value: optionValue } in fieldMetadata.options\" :key=\"optionKey\" :value=\"optionKey\">\n {{ optionValue }}\n </option>\n </select>\n </template>\n\n <template #checkbox-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n :checked=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"checkbox\"\n class=\"h-6 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @change=\"handleChange(($event.target as HTMLInputElement).checked)\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #checkboxBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"checkbox\"\n class=\"h-6 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #textBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"text\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #default-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n :value=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"text\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @input=\"handleChange\"\n @blur=\"handleBlur\"\n >\n </template>\n </DynamicFormTemplate>\n</template>\n","<script setup lang=\"ts\">\nimport type { GenericObject } from 'vee-validate';\n\nimport type { DynamicFormSettings, Metadata } from './TestFormTemplate.vue';\nimport { computed, ref } from 'vue';\nimport { checkTreeHasValue } from '@/utils/checkTreeHasValue';\nimport { mapEachMetadataItem } from '@/utils/mapEachMetadataItem';\nimport DynamicForm from '../components/DynamicForm.vue';\nimport { useDynamicForm } from '../core/useDynamicForm';\nimport TestFormTemplate from './TestFormTemplate.vue';\n\nexport interface Props {\n metadata: Metadata[]\n settings?: DynamicFormSettings\n showDebugState?: boolean\n initialEdit?: boolean\n hideFieldsWithoutValue?: boolean\n initialValues?: GenericObject\n}\n\nconst { metadata, settings: _settings, initialEdit = true, hideFieldsWithoutValue = false, showDebugState = false, initialValues } = defineProps<Props>();\n\nconst { values, handleSubmit, errors, meta } = useDynamicForm({\n initialValues,\n});\nconst manualValues = ref();\nconst editMode = ref(initialEdit);\nconst isSubmitted = ref(false);\n\n// Add edit mode functionality to the form. In case we're not in edit mode, disable all items.\nconst metadataWithEdit = computed(() => metadata?.map(x => mapEachMetadataItem(x, (item) => {\n item.computedProps = item.computedProps ?? [];\n\n // Disable all fields when not in edit mode\n item.computedProps.push((thisField) => {\n if (!editMode.value)\n thisField.disabled = true;\n });\n\n if (hideFieldsWithoutValue) {\n // In view mode, hide fields that have no value\n item.computedProps.push((thisField, fieldValue) => {\n if (!editMode.value && !checkTreeHasValue(fieldValue.value))\n thisField.hidden = true;\n });\n\n // In view mode, hide a parent field when all of its children are hidden\n item.computedProps.push((thisField, _fieldValue, childFields) => {\n if (!editMode.value && childFields.value.length > 0 && childFields.value.every(c => c.hidden))\n thisField.hidden = true;\n });\n }\n\n return item;\n})));\n\nconst settings = computed(() => ({\n analytics: true,\n messages: {\n required: '{field} is required',\n minOccurs: 'At least {min} items required',\n choiceMinOccurs: 'The following fields need to occur at least {min} time(s): {field}',\n minLength: 'The minimum length of {field} is {length}',\n maxLength: 'The maximum length of {field} is {length}',\n length: '{field} must be exactly {length} characters',\n pattern: '{field} does not match the required pattern',\n minInclusive: '{field} must be at least {min}',\n maxInclusive: '{field} must be at most {max}',\n minExclusive: '{field} must be greater than {min}',\n maxExclusive: '{field} must be less than {max}',\n enumeration: '{field} must be one of the allowed values',\n whiteSpace: '{field} contains invalid whitespace (mode: {mode})',\n fractionDigits: '{field} may have at most {digits} decimal place(s)',\n totalDigits: '{field} may have at most {digits} significant digit(s)',\n },\n ...(_settings ?? {}),\n}));\n\nfunction submit(e?: Event) {\n handleSubmit(\n (_values) => {\n isSubmitted.value = true;\n editMode.value = false;\n },\n ({ errors: _errors }) => {\n isSubmitted.value = false;\n },\n )(e);\n};\n</script>\n\n<template>\n <form @submit.prevent=\"submit\">\n <div class=\"flex justify-end gap-2\">\n <button v-if=\"!editMode\" type=\"button\" class=\"cursor-pointer mt-4 bg-blue-500 text-white px-4 py-2 rounded\" data-testid=\"submit\" @click=\"editMode = true\">\n Edit\n </button>\n <button v-if=\"editMode\" type=\"submit\" class=\"cursor-pointer mt-4 bg-blue-500 text-white px-4 py-2 rounded\" data-testid=\"submit\">\n Submit\n </button>\n <button v-if=\"editMode\" type=\"button\" class=\"cursor-pointer mt-4 bg-gray-200 text-black px-4 py-2 rounded\" data-testid=\"cancel\" @click=\"editMode = false\">\n Cancel\n </button>\n </div>\n <div v-if=\"Object.values(errors).length\" data-testid=\"errors\" class=\"col-12 text-red-600\">\n Errors:\n <ul>\n <li v-for=\"(error, key) in errors\" :key=\"key\">\n <span v-html=\"error\" />\n </li>\n </ul>\n </div>\n <DynamicForm\n :template=\"TestFormTemplate\"\n :metadata=\"metadataWithEdit\"\n :settings\n @update:model-value=\"manualValues = $event\"\n />\n <span v-if=\"isSubmitted\" data-testid=\"isSubmitted\" />\n <pre v-if=\"showDebugState\" class=\"bg-gray-100 p-4 rounded-lg text-sm overflow-auto\">\nIsDirty: {{ meta.dirty }}\nPending: {{ meta.pending }}\nTouched: {{ meta.touched }}\nValid: {{ meta.valid }}\nSubmitted: {{ isSubmitted }}\n\n// form values:\n{{ JSON.stringify(values, null, 2) }}\n </pre>\n </form>\n</template>\n","import type { GenericObject } from 'vee-validate';\nimport type { DynamicFormSettings, Metadata } from '@/examples/TestFormTemplate.vue';\n\nimport { defineComponent, h, markRaw } from 'vue';\nimport TestForm from '@/examples/TestForm.vue';\n\nexport const defaultTestCase = createTestCase([{\n name: 'text',\n type: 'text',\n fieldOptions: { label: 'Text Input' },\n path: 'with.custom.structure',\n restriction: { maxLength: 10 },\n}]);\n\nexport const arrayTestCase = createTestCase([{\n fieldOptions: { label: 'Array Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Optional field (max 3)' }, minOccurs: 0, maxOccurs: 3 },\n { fieldOptions: { label: 'Required field (max 3)' }, maxOccurs: 3 },\n { fieldOptions: { label: '2 Fields required' }, minOccurs: 2, maxOccurs: 4 },\n { fieldOptions: { label: 'Section (2 sections required)' }, type: 'heading', minOccurs: 2, maxOccurs: 4, fullWidth: true, children: [\n { fieldOptions: { label: 'Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' }, type: 'select', options: [\n { key: 'option1', value: 'Option 1' },\n { key: 'option2', value: 'Option 2' },\n { key: 'option3', value: 'Option 3' },\n ] },\n { fieldOptions: { label: 'Nested field 3' }, type: 'checkbox' },\n ] },\n ],\n}]);\n\nexport const groupTestCase = createTestCase([{\n fieldOptions: { label: 'Grouped Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Required group' }, type: 'group', children: [\n { fieldOptions: { label: 'Required Nested field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Required Nested field 2' }, fullWidth: true },\n ] },\n { fieldOptions: { label: 'Optional group' }, type: 'group', minOccurs: 0, description: `The group is optional, therefore the children will only be required once 1 value is filled in.\n \nYou can test it by filling in one of the fields.`, children: [\n { fieldOptions: { label: 'Required Nested field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Required Nested field 2' }, fullWidth: true },\n ] },\n ],\n}, {\n fieldOptions: { label: 'Grouped Array Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Required group' }, type: 'group', maxOccurs: 5, fullWidth: true, children: [\n { fieldOptions: { label: 'Required Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' } },\n ] },\n { fieldOptions: { label: 'Optional group' }, type: 'group', minOccurs: 0, maxOccurs: 5, fullWidth: true, children: [\n { fieldOptions: { label: 'Required Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' } },\n ] },\n ],\n}]);\n\nexport const choiceTestCase = createTestCase([\n {\n fieldOptions: { label: 'Choice Fields (minOccurs 1, maxOccurs 1)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Simple Choice Field' }, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' } },\n { fieldOptions: { label: 'Nested Field 2' } },\n ] },\n ],\n },\n {\n fieldOptions: { label: 'Choice Grouped Fields (minOccurs 1, maxOccurs 3)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Array Choice Field' }, type: 'group', maxOccurs: 3, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' }, type: 'group', children: [\n { fieldOptions: { label: 'Nested Child Field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Nested Child Field 2' }, fullWidth: true },\n ] },\n { fieldOptions: { label: 'Nested Field 2' }, type: 'group', children: [\n { fieldOptions: { label: 'Nested Child Field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Nested Child Field 2' }, fullWidth: true },\n ] },\n ] },\n ],\n },\n {\n fieldOptions: { label: 'Choice Array Fields (minOccurs 1, maxOccurs 3)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Array Choice Field' }, type: 'group', maxOccurs: 3, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' }, maxOccurs: 3 },\n { fieldOptions: { label: 'Nested Field 2' }, maxOccurs: 3 },\n ] },\n ],\n },\n]);\n\nexport const childFieldsTestCase = createTestCase([\n {\n fieldOptions: { label: 'Personal Info' },\n type: 'heading',\n name: 'person',\n description: 'Only showing the fields that have a value. Click edit to change.',\n fullWidth: true,\n children: [\n { name: 'firstName', fieldOptions: { label: 'First Name' } },\n { name: 'lastName', fieldOptions: { label: 'Last Name' } },\n { name: 'email', fieldOptions: { label: 'Email' } },\n ],\n },\n {\n fieldOptions: { label: 'Address' },\n type: 'heading',\n name: 'address',\n fullWidth: true,\n children: [\n { name: 'street', fieldOptions: { label: 'Street' }, minOccurs: 0 },\n { name: 'city', fieldOptions: { label: 'City' }, minOccurs: 0 },\n { name: 'country', fieldOptions: { label: 'Country' }, minOccurs: 0 },\n ],\n },\n], undefined, {\n initialEdit: false,\n hideFieldsWithoutValue: true,\n initialValues: {\n person: {\n firstName: 'Jack',\n lastName: 'Smit',\n },\n },\n});\n\nexport const individualTestCase = createTestCase(\n [{\n name: 'items',\n type: 'text',\n fieldOptions: { label: 'Items' },\n maxOccurs: 3,\n attributes: [{ name: 'lang', type: 'text', minOccurs: 0 }],\n }],\n {\n // validateOnValueUpdate: false,\n // validateOnValueUpdateAfterSubmit: false,\n // validateWhenInError: true,\n // validateOnBlur: true,\n },\n);\n\nexport function createTestCase(\n metadata: Metadata[],\n settings?: DynamicFormSettings,\n testCaseConfig: {\n initialEdit?: boolean\n hideFieldsWithoutValue?: boolean\n initialValues?: GenericObject\n } = {},\n) {\n return markRaw(defineComponent({\n render: () => h(TestForm, { ...testCaseConfig, metadata, settings, showDebugState: true }),\n }));\n}\n"],"names":["mapEachMetadataItem","metadata","callbackFunc","x","_createElementBlock","color","$emit","icon","_openBlock","_hoisted_1","_cache","_createElementVNode","_hoisted_2","defineMetadata","_createBlock","DynamicFormTemplate","_unref","fieldMetadata","errorMessage","label","disabled","canAddItems","addItem","canRemoveItems","removeItem","slotProps","_normalizeClass","_createTextVNode","_toDisplayString","IconButton","_hoisted_3","_renderSlot","_ctx","_withCtx","required","showOptionalInsteadOfRequired","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_createVNode","_hoisted_19","_hoisted_20","_Fragment","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","value","handleBlur","handleChange","optionKey","optionValue","_hoisted_32","$event","_hoisted_34","_vModelSelect","_vModelCheckbox","_vModelText","values","handleSubmit","errors","meta","useDynamicForm","__props","manualValues","ref","editMode","isSubmitted","metadataWithEdit","computed","item","thisField","fieldValue","checkTreeHasValue","_fieldValue","childFields","c","settings","submit","e","_values","_errors","_renderList","error","key","DynamicForm","TestFormTemplate","showDebugState","defaultTestCase","createTestCase","arrayTestCase","groupTestCase","choiceTestCase","childFieldsTestCase","individualTestCase","testCaseConfig","markRaw","defineComponent","h","TestForm"],"mappings":"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"}
1
+ {"version":3,"file":"examples.cjs.js","sources":["../src/examples/components/IconButton.vue","../src/examples/TestFormTemplate.vue","../src/examples/TestForm.vue","../src/examples/__tests__/TestFormTemplate.testcases.ts"],"sourcesContent":["<script lang=\"ts\" setup>\ninterface Props {\n icon: 'plus' | 'minus'\n color?: 'blue' | 'red'\n}\ninterface Emits {\n (e: 'click'): void\n}\nconst {\n icon,\n color = 'blue',\n} = defineProps<Props>();\ndefineEmits<Emits>();\n</script>\n\n<template>\n <button\n type=\"button\"\n class=\"cursor-pointer inline-flex items-center justify-center rounded-full size-5 text-white-800 cursor-pointer\"\n :class=\"{\n 'bg-blue-200 hover:bg-blue-300': color === 'blue',\n 'bg-red-200 hover:bg-red-300': color === 'red',\n }\"\n @click=\"$emit('click')\"\n >\n <svg v-if=\"icon === 'plus'\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-3\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 4.5v15m7.5-7.5h-15\" />\n </svg>\n <svg v-if=\"icon === 'minus'\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"size-3\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 12h14\" />\n </svg>\n </button>\n</template>\n","<script lang=\"ts\" setup>\nimport type { GetDynamicFormSettingsType } from '@/types/GetDynamicFormSettingsType';\nimport type { GetMetadataType } from '@/types/GetMetadataType';\nimport DynamicFormTemplate from '@/components/DynamicFormTemplate.vue';\nimport { defineMetadata } from '@/core/defineMetadata';\nimport IconButton from './components/IconButton.vue';\n\nexport type Metadata = GetMetadataType<typeof metadata>;\n\nexport type DynamicFormSettings = GetDynamicFormSettingsType<typeof metadata>;\n\nconst metadata = defineMetadata<\n {\n text: string\n textBoundByVModel: string\n select: string\n selectBoundByVModel: string\n checkbox: boolean\n checkboxBoundByVModel: boolean\n heading: never\n group: never\n },\n {\n description?: string\n options?: { key: string, value: string }[]\n fullWidth?: boolean\n disabled?: boolean\n hidden?: boolean\n },\n /**\n * Free to decide what attributes you want to pass internally between your templates.\n * You can add any attribute to a <slot /> and then it will be accessible in props.slotProps.\n */\n {\n hideLabel?: boolean\n /** Example on how to keep track of the levels */\n level?: number\n /** Helps identifying that we're below a choice field, so if we're rendering an array we can adjust our layout */\n belowChoiceField?: boolean\n hidden?: boolean\n },\n {\n showOptionalInsteadOfRequired?: boolean\n }\n>();\n</script>\n\n<template>\n <DynamicFormTemplate :metadata-configuration=\"metadata\">\n <template #heading=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, canAddItems, addItem, canRemoveItems, removeItem, slotProps }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"mt-4\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <h3 v-if=\"label\" class=\"flex text-xl font-bold gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n <IconButton v-if=\"canRemoveItems\" icon=\"minus\" tabindex=\"-1\" color=\"red\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" @click=\"removeItem\" />\n </h3>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n </div>\n </template>\n\n <template #heading-array>\n <!-- Don't show any extra elements for the heading -->\n <slot />\n </template>\n\n <template #default-choice=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, slotProps, settings: { showOptionalInsteadOfRequired } }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span class=\"flex gap-2 items-center\" :class=\"{ 'text-gray-500': disabled }\">\n {{ label }}\n <span v-if=\"required && !showOptionalInsteadOfRequired\" class=\"text-red-500 dark:text-rose-400\">*</span>\n <span v-if=\"!required && showOptionalInsteadOfRequired\" class=\"text-sm text-gray-400\">(optional)</span>\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" :below-choice-field=\"true\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n </template>\n\n <template #default-array=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, addItem, settings: { showOptionalInsteadOfRequired } }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <label :for=\"`${fieldMetadata.path}[0]`\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\" class=\"flex gap-2 items-center\">\n {{ label }}\n <span v-if=\"required && !showOptionalInsteadOfRequired\" class=\"text-red-500 dark:text-rose-400\">*</span>\n <span v-if=\"!required && showOptionalInsteadOfRequired\" class=\"text-sm text-gray-400\">(optional)</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n </label>\n <slot :hide-label=\"true\" />\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n </template>\n\n <template #default=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canRemoveItems, removeItem, slotProps, settings: { showOptionalInsteadOfRequired } }\">\n <div v-if=\"!fieldMetadata.hidden\" class=\"flex flex-col gap-2\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <label v-if=\"!slotProps?.hideLabel\" :for=\"fieldMetadata.path\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\" class=\"flex gap-1 items-center\">\n {{ label }}\n <span v-if=\"required && !showOptionalInsteadOfRequired\" class=\"text-red-500 dark:text-rose-400\">*</span>\n <span v-if=\"!required && showOptionalInsteadOfRequired\" class=\"text-sm text-gray-400\">(optional)</span>\n </label>\n <div class=\"flex gap-2 items-center\">\n <div class=\"flex flex-col grow\">\n <slot />\n </div>\n <IconButton :class=\"{ invisible: !canRemoveItems }\" icon=\"minus\" tabindex=\"-1\" color=\"red\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" @click=\"removeItem\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <slot name=\"attributes\" />\n </template>\n\n <template #group-array=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, addItem, slotProps, settings: { showOptionalInsteadOfRequired } }\">\n <template v-if=\"fieldMetadata.hidden\" />\n <!-- In case we're below a choice field, the first array item is not automatically added, so show a label with buttons -->\n <div v-else-if=\"slotProps?.belowChoiceField\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span class=\"flex gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <span v-if=\"required && !showOptionalInsteadOfRequired\" class=\"text-red-500 dark:text-rose-400\">*</span>\n <span v-if=\"!required && showOptionalInsteadOfRequired\" class=\"text-sm text-gray-400\">(optional)</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <!-- In case we show an input directly, show a label and buttons -->\n <slot v-else />\n </template>\n\n <template #group=\"{ fieldMetadata, fieldContext: { errorMessage, label }, disabled, required, canAddItems, canRemoveItems, addItem, removeItem, slotProps, settings: { showOptionalInsteadOfRequired } }\">\n <!-- In case of a grouped field we render the field differently -->\n <div v-if=\"!fieldMetadata.hidden\" :class=\"{ 'md:col-span-2': fieldMetadata.fullWidth }\">\n <span v-if=\"!slotProps?.hideLabel\" class=\"flex gap-2 items-center mb-2\" :class=\"{ 'text-gray-500': fieldMetadata.disabled || disabled }\">\n {{ label }}\n <span v-if=\"required && !showOptionalInsteadOfRequired\" class=\"text-red-500 dark:text-rose-400\">*</span>\n <span v-if=\"!required && showOptionalInsteadOfRequired\" class=\"text-sm text-gray-400\">(optional)</span>\n <IconButton v-if=\"canAddItems\" icon=\"plus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-add-button`\" @click=\"addItem\" />\n <IconButton v-if=\"canRemoveItems\" icon=\"minus\" tabindex=\"-1\" :data-testid=\"`${fieldMetadata.path}-remove-button`\" color=\"red\" @click=\"removeItem\" />\n </span>\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 ms-6\">\n <slot :level=\"(slotProps?.level ?? 0) + 1\" />\n </div>\n <pre class=\"text-sm whitespace-pre-wrap\">{{ fieldMetadata.description }}</pre>\n <span\n v-if=\"errorMessage.value\"\n class=\"text-red-600 text-sm\"\n :data-testid=\"`${fieldMetadata.path}-error-message`\"\n >{{ errorMessage.value }}</span>\n </div>\n <slot name=\"attributes\" />\n </template>\n\n <template #select-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <select\n :id=\"fieldMetadata.path\"\n :value=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @change=\"handleChange\"\n @blur=\"handleBlur\"\n >\n <option v-for=\"{ key: optionKey, value: optionValue } in fieldMetadata.options\" :key=\"optionKey\" :value=\"optionKey\">\n {{ optionValue }}\n </option>\n </select>\n </template>\n\n <template #selectBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <select\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n <option v-for=\"{ key: optionKey, value: optionValue } in fieldMetadata.options\" :key=\"optionKey\" :value=\"optionKey\">\n {{ optionValue }}\n </option>\n </select>\n </template>\n\n <template #checkbox-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n :checked=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"checkbox\"\n class=\"h-6 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @change=\"handleChange(($event.target as HTMLInputElement).checked)\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #checkboxBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"checkbox\"\n class=\"h-6 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #textBoundByVModel-input=\"{ fieldMetadata, fieldContext: { value, handleBlur }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n v-model=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"text\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @blur=\"handleBlur\"\n >\n </template>\n\n <template #default-input=\"{ fieldMetadata, fieldContext: { value, handleBlur, handleChange }, disabled }\">\n <input\n :id=\"fieldMetadata.path\"\n :value=\"value.value\"\n :disabled=\"fieldMetadata.disabled || disabled\"\n type=\"text\"\n class=\"h-9 bg-gray-100 border-gray-200 border rounded px-3 text-sm\"\n @input=\"handleChange\"\n @blur=\"handleBlur\"\n >\n </template>\n </DynamicFormTemplate>\n</template>\n","<script setup lang=\"ts\">\nimport type { GenericObject } from 'vee-validate';\n\nimport type { DynamicFormSettings, Metadata } from './TestFormTemplate.vue';\nimport { computed, ref } from 'vue';\nimport { checkTreeHasValue } from '@/utils/checkTreeHasValue';\nimport { mapEachMetadataItem } from '@/utils/mapEachMetadataItem';\nimport DynamicForm from '../components/DynamicForm.vue';\nimport { useDynamicForm } from '../core/useDynamicForm';\nimport TestFormTemplate from './TestFormTemplate.vue';\n\nexport interface Props {\n metadata: Metadata[]\n settings?: DynamicFormSettings\n showDebugState?: boolean\n initialEdit?: boolean\n hideFieldsWithoutValue?: boolean\n initialValues?: GenericObject\n}\n\nconst { metadata, settings: _settings, initialEdit = true, hideFieldsWithoutValue = false, showDebugState = false, initialValues } = defineProps<Props>();\n\nconst { values, handleSubmit, errors, meta } = useDynamicForm({\n initialValues,\n});\nconst manualValues = ref();\nconst editMode = ref(initialEdit);\nconst isSubmitted = ref(false);\n\n// Add edit mode functionality to the form. In case we're not in edit mode, disable all items.\nconst metadataWithEdit = computed(() => metadata?.map(x => mapEachMetadataItem(x, (item) => {\n item.computedProps = item.computedProps ?? [];\n\n // Disable all fields when not in edit mode\n item.computedProps.push((thisField) => {\n if (!editMode.value)\n thisField.disabled = true;\n });\n\n if (hideFieldsWithoutValue) {\n // In view mode, hide fields that have no value\n item.computedProps.push((thisField, fieldValue) => {\n if (!editMode.value && !checkTreeHasValue(fieldValue.value))\n thisField.hidden = true;\n });\n\n // In view mode, hide a parent field when all of its children are hidden\n item.computedProps.push((thisField, _fieldValue, childFields) => {\n if (!editMode.value && childFields.value.length > 0 && childFields.value.every(c => c.hidden))\n thisField.hidden = true;\n });\n }\n\n return item;\n})));\n\nconst settings = computed(() => ({\n analytics: true,\n messages: {\n required: '{field} is required',\n minOccurs: 'At least {min} items required',\n choiceMinOccurs: 'The following fields need to occur at least {min} time(s): {field}',\n minLength: 'The minimum length of {field} is {length}',\n maxLength: 'The maximum length of {field} is {length}',\n length: '{field} must be exactly {length} characters',\n pattern: '{field} does not match the required pattern',\n minInclusive: '{field} must be at least {min}',\n maxInclusive: '{field} must be at most {max}',\n minExclusive: '{field} must be greater than {min}',\n maxExclusive: '{field} must be less than {max}',\n enumeration: '{field} must be one of the allowed values',\n whiteSpace: '{field} contains invalid whitespace (mode: {mode})',\n fractionDigits: '{field} may have at most {digits} decimal place(s)',\n totalDigits: '{field} may have at most {digits} significant digit(s)',\n },\n ...(_settings ?? {}),\n}));\n\nfunction submit(e?: Event) {\n handleSubmit(\n (_values) => {\n isSubmitted.value = true;\n editMode.value = false;\n },\n ({ errors: _errors }) => {\n isSubmitted.value = false;\n },\n )(e);\n};\n</script>\n\n<template>\n <form @submit.prevent=\"submit\">\n <div class=\"flex justify-end gap-2\">\n <button v-if=\"!editMode\" type=\"button\" class=\"cursor-pointer mt-4 bg-blue-500 text-white px-4 py-2 rounded\" data-testid=\"submit\" @click=\"editMode = true\">\n Edit\n </button>\n <button v-if=\"editMode\" type=\"submit\" class=\"cursor-pointer mt-4 bg-blue-500 text-white px-4 py-2 rounded\" data-testid=\"submit\">\n Submit\n </button>\n <button v-if=\"editMode\" type=\"button\" class=\"cursor-pointer mt-4 bg-gray-200 text-black px-4 py-2 rounded\" data-testid=\"cancel\" @click=\"editMode = false\">\n Cancel\n </button>\n </div>\n <div v-if=\"Object.values(errors).length\" data-testid=\"errors\" class=\"col-12 text-red-600\">\n Errors:\n <ul>\n <li v-for=\"(error, key) in errors\" :key=\"key\">\n <span v-html=\"error\" />\n </li>\n </ul>\n </div>\n <DynamicForm\n :template=\"TestFormTemplate\"\n :metadata=\"metadataWithEdit\"\n :settings\n @update:model-value=\"manualValues = $event\"\n />\n <span v-if=\"isSubmitted\" data-testid=\"isSubmitted\" />\n <pre v-if=\"showDebugState\" class=\"bg-gray-100 p-4 rounded-lg text-sm overflow-auto\">\nIsDirty: {{ meta.dirty }}\nPending: {{ meta.pending }}\nTouched: {{ meta.touched }}\nValid: {{ meta.valid }}\nSubmitted: {{ isSubmitted }}\n\n// form values:\n{{ JSON.stringify(values, null, 2) }}\n </pre>\n </form>\n</template>\n","import type { GenericObject } from 'vee-validate';\nimport type { DynamicFormSettings, Metadata } from '@/examples/TestFormTemplate.vue';\n\nimport { defineComponent, h, markRaw } from 'vue';\nimport TestForm from '@/examples/TestForm.vue';\n\nexport const defaultTestCase = createTestCase([{\n name: 'text',\n type: 'text',\n fieldOptions: { label: 'Text Input' },\n path: 'with.custom.structure',\n restriction: { maxLength: 10 },\n}]);\n\nexport const arrayTestCase = createTestCase([{\n fieldOptions: { label: 'Array Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Optional field (max 3)' }, minOccurs: 0, maxOccurs: 3 },\n { fieldOptions: { label: 'Required field (max 3)' }, maxOccurs: 3 },\n { fieldOptions: { label: '2 Fields required' }, minOccurs: 2, maxOccurs: 4 },\n { fieldOptions: { label: 'Section (2 sections required)' }, type: 'heading', minOccurs: 2, maxOccurs: 4, fullWidth: true, children: [\n { fieldOptions: { label: 'Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' }, type: 'select', options: [\n { key: 'option1', value: 'Option 1' },\n { key: 'option2', value: 'Option 2' },\n { key: 'option3', value: 'Option 3' },\n ] },\n { fieldOptions: { label: 'Nested field 3' }, type: 'checkbox' },\n ] },\n ],\n}]);\n\nexport const groupTestCase = createTestCase([{\n fieldOptions: { label: 'Grouped Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Required group' }, type: 'group', children: [\n { fieldOptions: { label: 'Required Nested field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Required Nested field 2' }, fullWidth: true },\n ] },\n { fieldOptions: { label: 'Optional group' }, type: 'group', minOccurs: 0, description: `The group is optional, therefore the children will only be required once 1 value is filled in.\n \nYou can test it by filling in one of the fields.`, children: [\n { fieldOptions: { label: 'Required Nested field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Required Nested field 2' }, fullWidth: true },\n ] },\n ],\n}, {\n fieldOptions: { label: 'Grouped Array Fields' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Required group' }, type: 'group', maxOccurs: 5, fullWidth: true, children: [\n { fieldOptions: { label: 'Required Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' } },\n ] },\n { fieldOptions: { label: 'Optional group' }, type: 'group', minOccurs: 0, maxOccurs: 5, fullWidth: true, children: [\n { fieldOptions: { label: 'Required Nested field 1' } },\n { fieldOptions: { label: 'Required Nested field 2' } },\n ] },\n ],\n}]);\n\nexport const choiceTestCase = createTestCase([\n {\n fieldOptions: { label: 'Choice Fields (minOccurs 1, maxOccurs 1)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Simple Choice Field' }, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' } },\n { fieldOptions: { label: 'Nested Field 2' } },\n ] },\n ],\n },\n {\n fieldOptions: { label: 'Choice Grouped Fields (minOccurs 1, maxOccurs 3)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Array Choice Field' }, type: 'group', maxOccurs: 3, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' }, type: 'group', children: [\n { fieldOptions: { label: 'Nested Child Field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Nested Child Field 2' }, fullWidth: true },\n ] },\n { fieldOptions: { label: 'Nested Field 2' }, type: 'group', children: [\n { fieldOptions: { label: 'Nested Child Field 1' }, fullWidth: true },\n { fieldOptions: { label: 'Nested Child Field 2' }, fullWidth: true },\n ] },\n ] },\n ],\n },\n {\n fieldOptions: { label: 'Choice Array Fields (minOccurs 1, maxOccurs 3)' },\n type: 'heading',\n children: [\n { fieldOptions: { label: 'Array Choice Field' }, type: 'group', maxOccurs: 3, fullWidth: true, description: `In a choice field, only 1 of the fields can be filled in.`, choice: [\n { fieldOptions: { label: 'Nested Field 1' }, maxOccurs: 3 },\n { fieldOptions: { label: 'Nested Field 2' }, maxOccurs: 3 },\n ] },\n ],\n },\n]);\n\nexport const childFieldsTestCase = createTestCase([\n {\n fieldOptions: { label: 'Personal Info' },\n type: 'heading',\n name: 'person',\n description: 'Only showing the fields that have a value. Click edit to change.',\n fullWidth: true,\n children: [\n { name: 'firstName', fieldOptions: { label: 'First Name' } },\n { name: 'lastName', fieldOptions: { label: 'Last Name' } },\n { name: 'email', fieldOptions: { label: 'Email' } },\n ],\n },\n {\n fieldOptions: { label: 'Address' },\n type: 'heading',\n name: 'address',\n fullWidth: true,\n children: [\n { name: 'street', fieldOptions: { label: 'Street' }, minOccurs: 0 },\n { name: 'city', fieldOptions: { label: 'City' }, minOccurs: 0 },\n { name: 'country', fieldOptions: { label: 'Country' }, minOccurs: 0 },\n ],\n },\n], undefined, {\n initialEdit: false,\n hideFieldsWithoutValue: true,\n initialValues: {\n person: {\n firstName: 'Jack',\n lastName: 'Smit',\n },\n },\n});\n\nexport const individualTestCase = createTestCase(\n [{\n name: 'items',\n type: 'text',\n fieldOptions: { label: 'Items' },\n maxOccurs: 3,\n attributes: [{ name: 'lang', type: 'text', minOccurs: 0 }],\n }],\n {\n // validateOnValueUpdate: false,\n // validateOnValueUpdateAfterSubmit: false,\n // validateWhenInError: true,\n // validateOnBlur: true,\n },\n);\n\nexport function createTestCase(\n metadata: Metadata[],\n settings?: DynamicFormSettings,\n testCaseConfig: {\n initialEdit?: boolean\n hideFieldsWithoutValue?: boolean\n initialValues?: GenericObject\n } = {},\n) {\n return markRaw(defineComponent({\n render: () => h(TestForm, { ...testCaseConfig, metadata, settings, showDebugState: true }),\n }));\n}\n"],"names":["_createElementBlock","__props","$emit","_openBlock","_hoisted_1","_cache","_createElementVNode","_hoisted_2","metadata","defineMetadata","_createBlock","DynamicFormTemplate","_unref","fieldMetadata","errorMessage","label","disabled","canAddItems","addItem","canRemoveItems","removeItem","slotProps","_normalizeClass","_createTextVNode","_toDisplayString","IconButton","_hoisted_3","_renderSlot","_ctx","_withCtx","required","showOptionalInsteadOfRequired","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_createVNode","_hoisted_19","_hoisted_20","_Fragment","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","value","handleBlur","handleChange","optionKey","optionValue","_hoisted_32","$event","_hoisted_34","_vModelSelect","_vModelCheckbox","_vModelText","values","handleSubmit","errors","meta","useDynamicForm","manualValues","ref","editMode","isSubmitted","metadataWithEdit","computed","x","mapEachMetadataItem","item","thisField","fieldValue","checkTreeHasValue","_fieldValue","childFields","c","settings","submit","e","_values","_errors","_renderList","error","key","DynamicForm","TestFormTemplate","defaultTestCase","createTestCase","arrayTestCase","groupTestCase","choiceTestCase","childFieldsTestCase","individualTestCase","testCaseConfig","markRaw","defineComponent","h","TestForm"],"mappings":"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"}