@josercl/form-maker 1.1.0-beta03 → 1.1.0-beta05

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
@@ -1,10 +1,15 @@
1
1
  # Form-Maker
2
2
 
3
3
  <img src="https://badgen.net/gitlab/license/josercl/form-maker">
4
- <a href="https://v3.vuejs.org/" target="_blank"><img src="https://badgen.net/badge/vue/v3.0.0?color=green"></a>
4
+ <a href="https://vuejs.org/" target="_blank"><img src="https://badgen.net/badge/vue/v3.0.0?color=green"></a>
5
5
  <a href="https://www.npmjs.com/package/@josercl/form-maker" target="_blank"><img src="https://badgen.net/npm/v/@josercl/form-maker/?color=red&icon=npm&label"></a>
6
6
  <a href="https://www.npmjs.com/package/@josercl/form-maker" target="_blank"><img src="https://badgen.net/npm/dt/@josercl/form-maker"></a>
7
7
 
8
+ <p>
9
+ <img src="https://badgen.net/gitlab/release/josercl/form-maker">
10
+ <img src="https://badgen.net/gitlab/last-commit/josercl/form-maker">
11
+ </p>
12
+
8
13
  ## Project setup
9
14
  ```shell
10
15
  npm install @josercl/form-maker
@@ -1,12 +1,16 @@
1
1
  <script setup>
2
- import setupVModel from '../utils';
3
- import {
4
- FormInputMixin,
5
- injectFormClasses,
6
- getFormInputComputeds
7
- } from './inputs/FormInputMixin';
2
+ import { computed } from 'vue';
3
+ import setupVModel, { useValidator } from '../utils';
8
4
 
9
- const props = defineProps(FormInputMixin.props);
5
+ import { FormInputMixin, injectFormClasses } from './inputs/FormInputMixin';
6
+
7
+ const props = defineProps({
8
+ ...FormInputMixin.props,
9
+ rules: {
10
+ type: Array,
11
+ default: () => ([]),
12
+ },
13
+ });
10
14
  const emit = defineEmits(FormInputMixin.emits);
11
15
 
12
16
  const value = setupVModel(props, emit);
@@ -21,11 +25,20 @@ const {
21
25
  helpTextClass,
22
26
  } = injectFormClasses();
23
27
 
24
- const {
25
- hasErrors,
26
- hasLabel,
27
- hasHelpText,
28
- } = getFormInputComputeds(props);
28
+ const hasLabel = computed(() => Boolean(props.label));
29
+ const hasHelpText = computed(() => Boolean(props.helpText));
30
+
31
+ const validationError = useValidator(value, props.rules); // ref(null);
32
+
33
+ const hasErrors = computed(() => Boolean(props.error) || Boolean(validationError.value));
34
+
35
+ const realError = computed(() => {
36
+ if (props.error) {
37
+ return props.error;
38
+ }
39
+ return validationError.value;
40
+ });
41
+
29
42
  </script>
30
43
  <script>
31
44
  export default {
@@ -73,8 +86,14 @@ export default {
73
86
  v-if="hasErrors"
74
87
  :class="errorClass"
75
88
  >
76
- {{ error }}
89
+ {{ realError }}
77
90
  </form-maker-error>
91
+ <rule-evaluator
92
+ v-if="rules.length"
93
+ :rules="rules"
94
+ :value="modelValue"
95
+ v-model="validationError"
96
+ />
78
97
  </slot>
79
98
  </div>
80
99
  </template>
@@ -1,4 +1,4 @@
1
- import { computed, toRefs, inject } from 'vue';
1
+ import { inject } from 'vue';
2
2
 
3
3
  export const injectFormClasses = () => {
4
4
  const labelClass = inject('labelClass', null);
@@ -20,20 +20,6 @@ export const injectFormClasses = () => {
20
20
  };
21
21
  };
22
22
 
23
- export const getFormInputComputeds = props => {
24
- const { label, error, helpText } = toRefs(props);
25
-
26
- const hasErrors = computed(() => Boolean(error.value));
27
- const hasLabel = computed(() => Boolean(label.value));
28
- const hasHelpText = computed(() => Boolean(helpText.value));
29
-
30
- return {
31
- hasErrors,
32
- hasLabel,
33
- hasHelpText,
34
- };
35
- };
36
-
37
23
  export const FormInputMixin = {
38
24
  emits: [ 'update:modelValue' ],
39
25
  props: {
@@ -30,8 +30,6 @@ const fixedOptions = computed(() => props.options.map(o => {
30
30
  value: o,
31
31
  };
32
32
  }));
33
-
34
- console.log(fixedOptions.value);
35
33
  </script>
36
34
 
37
35
  <template>
package/lib/utils.js CHANGED
@@ -1,4 +1,6 @@
1
- import { computed, h } from 'vue';
1
+ import {
2
+ computed, h, ref, toRaw, watch
3
+ } from 'vue';
2
4
 
3
5
  const setupVModel = (props, emit, propName = 'modelValue') => computed({
4
6
  get: () => props[propName],
@@ -12,3 +14,28 @@ export const simpleComponent = () => ({
12
14
  return () => h('div', attrs, slots.default());
13
15
  },
14
16
  });
17
+
18
+ export const useValidator = (propValue, rulesArr) => {
19
+ const rules = toRaw(rulesArr);
20
+ const error = ref(null);
21
+
22
+ watch(
23
+ propValue,
24
+ (newVal, oldVal) => {
25
+ error.value = null;
26
+ if (newVal === oldVal) return;
27
+
28
+ for (let i = 0; i < rules.length; i += 1) {
29
+ const rule = rules[i];
30
+ const isValid = rule.validator(newVal);
31
+ if (!isValid) {
32
+ error.value = rule.message;
33
+ break;
34
+ }
35
+ }
36
+ },
37
+ { immediate: true }
38
+ );
39
+
40
+ return error;
41
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@josercl/form-maker",
3
- "version": "1.1.0-beta03",
3
+ "version": "1.1.0-beta05",
4
4
  "description": "Form generator using vue 3",
5
5
  "author": "Jose Carrero <josercl@gmail.com>",
6
6
  "scripts": {
@@ -11,6 +11,7 @@
11
11
  "preview": "vite -c docs.config.js preview --port 5050",
12
12
  "lint": "eslint --ext .vue,.js lib/ docs/ dev/ index.js --fix"
13
13
  },
14
+ "main": "./index.js",
14
15
  "files": [
15
16
  "index.js",
16
17
  "lib/**",
package/umd/index.umd.js CHANGED
@@ -1 +1 @@
1
- var ie=Object.defineProperty,me=Object.defineProperties;var ce=Object.getOwnPropertyDescriptors;var G=Object.getOwnPropertySymbols;var de=Object.prototype.hasOwnProperty,ue=Object.prototype.propertyIsEnumerable;var L=(e,m,k)=>m in e?ie(e,m,{enumerable:!0,configurable:!0,writable:!0,value:k}):e[m]=k,C=(e,m)=>{for(var k in m||(m={}))de.call(m,k)&&L(e,k,m[k]);if(G)for(var k of G(m))ue.call(m,k)&&L(e,k,m[k]);return e},V=(e,m)=>me(e,ce(m));(function(e,m){typeof exports=="object"&&typeof module!="undefined"?module.exports=m(require("vue")):typeof define=="function"&&define.amd?define(["vue"],m):(e=typeof globalThis!="undefined"?globalThis:e||self,e.FormMaker=m(e.Vue))})(this,function(e){"use strict";const m=["onSubmit"],k=e.createTextVNode(" Loading... "),R={key:0},z=["disabled"],P={props:{loading:{type:Boolean,default:!1},hasActions:{type:Boolean,default:!0},modelValue:{type:Object,default:()=>({})},fields:{type:Array,default:()=>[]},hideDivider:{type:Boolean,default:!1},rowClass:{type:String,default:null},columnClass:{type:String,default:null},labelClass:{type:String,default:null},inputGroupClass:{type:String,default:null},inputWrapperClass:{type:String,default:null},inputErrorClass:{type:String,default:null},inputClass:{type:String,default:null},errorClass:{type:String,default:null},helpTextClass:{type:String,default:null},submitButtonClass:{type:String,default:null},submitButtonText:{type:String,default:"Submit"}},emits:["submit","update:modelValue"],setup(r,{emit:o}){const l=r,t=()=>o("submit"),s=e.computed(()=>l.fields.length>0?l.fields.map(p=>{let $=p;return Array.isArray(p)||($=[p]),$.map(g=>g.id?g:V(C({},g),{id:`formMaker_${new Date().getTime()}_${g.name}`}))}):Object.keys(l.modelValue).map(p=>[{name:p,label:p,id:`formMaker_${p}`}])),{rowClass:a,columnClass:n,labelClass:B,inputGroupClass:u,inputWrapperClass:b,inputErrorClass:h,inputClass:i,errorClass:y,helpTextClass:_,submitButtonClass:c,modelValue:w}=e.toRefs(l);e.provide("labelClass",B.value||e.inject("form-label")),e.provide("inputGroupClass",u.value||e.inject("input-group")),e.provide("inputWrapperClass",b.value||e.inject("input-wrapper")),e.provide("inputErrorClass",h.value||e.inject("input-error")),e.provide("inputClass",i.value||e.inject("input")),e.provide("errorClass",y.value||e.inject("error")),e.provide("helpTextClass",_.value||e.inject("help-text"));const F=a.value||e.inject("form-row"),D=n.value||e.inject("form-column"),O=c.value||e.inject("submit-button"),N=p=>{const $=p.split(".");let g=w.value;for(let E=0;E<$.length-1;E+=1){const j=g[$[E]];if(!j)break;g=j}return g},x=p=>{const $=p.split(".");return $[$.length-1]};return(p,$)=>{const g=e.resolveComponent("form-maker-input");return e.openBlock(),e.createElementBlock("form",{class:"form-maker",onSubmit:e.withModifiers(t,["prevent"])},[r.loading?e.renderSlot(p.$slots,"loading",{key:0},()=>[k]):e.createCommentVNode("",!0),e.renderSlot(p.$slots,"default",{},()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s),(E,j)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(e.unref(F)),key:`fieldRow_${j}`},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E,(S,ae)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(D),S.columnClass]),key:`field_${j}_${ae}`},[e.renderSlot(p.$slots,`${S.name}`,{field:S},()=>[e.createVNode(g,e.mergeProps({modelValue:N(S.name)[x(S.name)],"onUpdate:modelValue":pe=>N(S.name)[x(S.name)]=pe},S),null,16,["modelValue","onUpdate:modelValue"])])],2))),128))],2))),128))]),e.renderSlot(p.$slots,"extra"),e.renderSlot(p.$slots,"divider",{},()=>[r.hasActions&&!r.hideDivider?(e.openBlock(),e.createElementBlock("hr",R)):e.createCommentVNode("",!0)]),r.hasActions?e.renderSlot(p.$slots,"actions",{key:1},()=>[e.renderSlot(p.$slots,"submit-button",{},()=>[e.createElementVNode("button",{class:e.normalizeClass(e.unref(O)),disabled:r.loading,type:"submit"},e.toDisplayString(r.submitButtonText),11,z)]),e.renderSlot(p.$slots,"extra-buttons")]):e.createCommentVNode("",!0)],40,m)}}},T=(r,o,l="modelValue")=>e.computed({get:()=>r[l],set:t=>o(`update:${l}`,t)}),M=()=>({setup(r,{slots:o,attrs:l}){return()=>e.h("div",l,o.default())}}),U=()=>{const r=e.inject("labelClass",null),o=e.inject("inputClass",null),l=e.inject("inputWrapperClass",null),t=e.inject("inputGroupClass",null),s=e.inject("inputErrorClass",null),a=e.inject("errorClass",null),n=e.inject("helpTextClass",null);return{labelClass:r,inputClass:o,inputWrapperClass:l,inputGroupClass:t,inputErrorClass:s,errorClass:a,helpTextClass:n}},W=r=>{const{label:o,error:l,helpText:t}=e.toRefs(r),s=e.computed(()=>Boolean(l.value)),a=e.computed(()=>Boolean(o.value)),n=e.computed(()=>Boolean(t.value));return{hasErrors:s,hasLabel:a,hasHelpText:n}},d={emits:["update:modelValue"],props:{loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},modelValue:{default:null},error:{type:String,default:null},helpText:{type:String,default:null},id:{type:String,default:null},label:{type:String,default:null},name:{type:String,default:null},placeholder:{type:String,default:null},type:{type:String,default:"text"}}},I=Object.assign({inheritAttrs:!1},{props:d.props,emits:d.emits,setup(r,{emit:o}){const l=r,t=T(l,o),{labelClass:s,inputClass:a,inputWrapperClass:n,inputGroupClass:B,inputErrorClass:u,errorClass:b,helpTextClass:h}=U(),{hasErrors:i,hasLabel:y,hasHelpText:_}=W(l);return(c,w)=>{const F=e.resolveComponent("form-maker-label"),D=e.resolveComponent("form-maker-help"),O=e.resolveComponent("form-maker-error");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(i)&&e.unref(u),e.unref(n)])},[c.type!=="checkbox"?e.renderSlot(c.$slots,"label",{key:0},()=>[e.unref(y)?(e.openBlock(),e.createBlock(F,{key:0,id:c.id,class:e.normalizeClass(e.unref(s))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.label),1)]),_:1},8,["id","class"])):e.createCommentVNode("",!0)]):e.createCommentVNode("",!0),e.renderSlot(c.$slots,"default",{},()=>[e.createElementVNode("div",{class:e.normalizeClass([e.unref(B),e.unref(i)&&e.unref(u)])},[e.renderSlot(c.$slots,"before"),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(`form-maker-input-${c.type}`),e.mergeProps({modelValue:e.unref(t),"onUpdate:modelValue":w[0]||(w[0]=N=>e.isRef(t)?t.value=N:null)},C(C({},c.$props),c.$attrs),{class:[c.type!=="checkbox"&&e.unref(a),e.unref(i)&&e.unref(u)],label:c.label}),null,16,["modelValue","class","label"])),e.renderSlot(c.$slots,"after")],2)]),e.renderSlot(c.$slots,"help",{},()=>[e.unref(_)?(e.openBlock(),e.createBlock(D,{key:0,class:e.normalizeClass(e.unref(h))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.helpText),1)]),_:1},8,["class"])):e.createCommentVNode("",!0)]),e.renderSlot(c.$slots,"errors",{},()=>[e.unref(i)?(e.openBlock(),e.createBlock(O,{key:0,class:e.normalizeClass(e.unref(b))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.error),1)]),_:1},8,["class"])):e.createCommentVNode("",!0)])],2)}}}),H=["checked","value","onClick"],q={props:V(C({},d.props),{options:{type:Array,default:()=>[]}}),emits:d.emits,setup(r,{emit:o}){const l=r,{options:t,label:s}=e.toRefs(l),a=e.computed(()=>t.value.length===0),n=e.computed(()=>l.modelValue),B=e.computed(()=>(Array.isArray(n.value)?n.value:[n.value]).filter(i=>!!i)),u=e.computed(()=>a.value?[{label:s.value,value:!0}]:t.value),b=h=>{let i=[...B.value];i.indexOf(h)===-1?i.push(h):i=i.filter(y=>y!==h),a.value?o("update:modelValue",i.length>0):o("update:modelValue",i)};return(h,i)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(u),(y,_)=>(e.openBlock(),e.createElementBlock("div",{key:`option_${_}`},[e.createElementVNode("label",null,[e.createElementVNode("input",e.mergeProps(h.$props,{checked:e.unref(B).indexOf(y.value)!==-1,value:y.value,type:"checkbox",onClick:()=>b(y.value)}),null,16,H),e.createTextVNode(" "+e.toDisplayString(y.label),1)])]))),128))}},J={props:d.props,emits:d.emits,setup(r,{emit:o}){const l=t=>{if(t.target.files.length){const s=t.target.files[0];o("update:modelValue",s)}};return(t,s)=>(e.openBlock(),e.createElementBlock("input",e.mergeProps(t.$props,{type:"file",onChange:l}),null,16))}},K=M(),Q=M(),X={props:{id:{type:String,default:null}},setup(r,{slots:o,attrs:l}){return()=>e.h("label",V(C({},l),{for:r.id}),o.default())}},Y=["checked","value"],Z={props:V(C({},d.props),{options:{type:Array,default:()=>[]}}),emits:d.emits,setup(r,{emit:o}){const l=t=>o("update:modelValue",t.target.value);return(t,s)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.options,(a,n)=>(e.openBlock(),e.createElementBlock("div",{key:`option_${n}`},[e.createElementVNode("label",null,[e.createElementVNode("input",e.mergeProps(t.$props,{checked:a.value===t.modelValue,value:a.value,type:"radio",onChange:l}),null,16,Y),e.createTextVNode(" "+e.toDisplayString(a.label),1)])]))),128))}},v=["id","disabled","name","placeholder"],ee=["label"],te=["value"],le=["value"],re={props:V(C({},d.props),{options:{type:Array,default:()=>[]},optionGroups:{type:Object,default:()=>({})}}),emits:d.emits,setup(r,{emit:o}){const l=r,t=T(l,o),s=Object.keys(l.optionGroups).length>0,a=e.computed(()=>l.options.map(n=>typeof n=="object"?n:{label:n,value:n}));return console.log(a.value),(n,B)=>e.withDirectives((e.openBlock(),e.createElementBlock("select",{id:n.id,"onUpdate:modelValue":B[0]||(B[0]=u=>e.isRef(t)?t.value=u:null),disabled:n.disabled,name:n.name,placeholder:n.placeholder},[s?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(r.optionGroups,(u,b)=>(e.openBlock(),e.createElementBlock("optgroup",{key:`optGroup_${b}`,label:b},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u,(h,i)=>(e.openBlock(),e.createElementBlock("option",{key:`option_${i}`,value:i},e.toDisplayString(h),9,te))),128))],8,ee))),128)):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(e.unref(a),(u,b)=>(e.openBlock(),e.createElementBlock("option",{key:`option_${b}`,value:u.value},e.toDisplayString(u.label),9,le))),128))],8,v)),[[e.vModelSelect,e.unref(t)]])}},oe=["id","disabled","name","placeholder"],ne={props:d.props,emits:d.emits,setup(r,{emit:o}){const t=T(r,o);return(s,a)=>e.withDirectives((e.openBlock(),e.createElementBlock("textarea",{id:s.id,"onUpdate:modelValue":a[0]||(a[0]=n=>e.isRef(t)?t.value=n:null),disabled:s.disabled,name:s.name,placeholder:s.placeholder},null,8,oe)),[[e.vModelText,e.unref(t)]])}},se=["type"],f={props:d.props,emits:d.emits,setup(r,{emit:o}){const t=T(r,o);return(s,a)=>e.withDirectives((e.openBlock(),e.createElementBlock("input",e.mergeProps({"onUpdate:modelValue":a[0]||(a[0]=n=>e.isRef(t)?t.value=n:null),type:s.type},s.$props),null,16,se)),[[e.vModelDynamic,e.unref(t)]])}},A={classes:{"form-row":"form-maker-row","form-column":"form-maker-column","form-label":"form-maker-label","input-group":"form-maker-input-group","input-wrapper":"form-maker-input-wrapper","input-error":"form-maker-input-error",input:"form-maker-input",error:"form-maker-error","help-text":"form-maker-help-text","submit-button":"form-maker-submit"},components:{"form-maker-input-color":f,"form-maker-input-date":f,"form-maker-input-email":f,"form-maker-input-month":f,"form-maker-input-number":f,"form-maker-input-password":f,"form-maker-input-search":f,"form-maker-input-tel":f,"form-maker-input-time":f,"form-maker-input-text":f,"form-maker-input-url":f,"form-maker-input-week":f,"form-maker-input-range":f,"form-maker-input-file":J,"form-maker-input-textarea":ne,"form-maker-input-select":re,"form-maker-input-checkbox":q,"form-maker-input-radio":Z,"form-maker-label":X,"form-maker-help":Q,"form-maker-error":K}};return{install:(r,o={})=>{const l={classes:C(C({},A.classes),o.classes),components:C(C({},A.components),o.components)};r.component("FormMaker",P),r.component("FormMakerInput",I),Object.keys(l.classes).forEach(t=>{r.provide(t,l.classes[t])}),Object.keys(l.components).forEach(t=>{r.component(t,l.components[t])})}}});
1
+ var pe=Object.defineProperty,me=Object.defineProperties;var ce=Object.getOwnPropertyDescriptors;var R=Object.getOwnPropertySymbols;var de=Object.prototype.hasOwnProperty,ue=Object.prototype.propertyIsEnumerable;var x=(e,p,h)=>p in e?pe(e,p,{enumerable:!0,configurable:!0,writable:!0,value:h}):e[p]=h,C=(e,p)=>{for(var h in p||(p={}))de.call(p,h)&&x(e,h,p[h]);if(R)for(var h of R(p))ue.call(p,h)&&x(e,h,p[h]);return e},_=(e,p)=>me(e,ce(p));(function(e,p){typeof exports=="object"&&typeof module!="undefined"?module.exports=p(require("vue")):typeof define=="function"&&define.amd?define(["vue"],p):(e=typeof globalThis!="undefined"?globalThis:e||self,e.FormMaker=p(e.Vue))})(this,function(e){"use strict";const p=["onSubmit"],h=e.createTextVNode(" Loading... "),L={key:0},z=["disabled"],P={props:{loading:{type:Boolean,default:!1},hasActions:{type:Boolean,default:!0},modelValue:{type:Object,default:()=>({})},fields:{type:Array,default:()=>[]},hideDivider:{type:Boolean,default:!1},rowClass:{type:String,default:null},columnClass:{type:String,default:null},labelClass:{type:String,default:null},inputGroupClass:{type:String,default:null},inputWrapperClass:{type:String,default:null},inputErrorClass:{type:String,default:null},inputClass:{type:String,default:null},errorClass:{type:String,default:null},helpTextClass:{type:String,default:null},submitButtonClass:{type:String,default:null},submitButtonText:{type:String,default:"Submit"}},emits:["submit","update:modelValue"],setup(r,{emit:o}){const l=r,t=()=>o("submit"),s=e.computed(()=>l.fields.length>0?l.fields.map(i=>{let k=i;return Array.isArray(i)||(k=[i]),k.map($=>$.id?$:_(C({},$),{id:`formMaker_${new Date().getTime()}_${$.name}`}))}):Object.keys(l.modelValue).map(i=>[{name:i,label:i,id:`formMaker_${i}`}])),{rowClass:a,columnClass:n,labelClass:y,inputGroupClass:d,inputWrapperClass:g,inputErrorClass:b,inputClass:c,errorClass:B,helpTextClass:V,submitButtonClass:E,modelValue:O}=e.toRefs(l);e.provide("labelClass",y.value||e.inject("form-label")),e.provide("inputGroupClass",d.value||e.inject("input-group")),e.provide("inputWrapperClass",g.value||e.inject("input-wrapper")),e.provide("inputErrorClass",b.value||e.inject("input-error")),e.provide("inputClass",c.value||e.inject("input")),e.provide("errorClass",B.value||e.inject("error")),e.provide("helpTextClass",V.value||e.inject("help-text"));const m=a.value||e.inject("form-row"),j=n.value||e.inject("form-column"),A=E.value||e.inject("submit-button"),D=i=>{const k=i.split(".");let $=O.value;for(let T=0;T<k.length-1;T+=1){const w=$[k[T]];if(!w)break;$=w}return $},F=i=>{const k=i.split(".");return k[k.length-1]};return(i,k)=>{const $=e.resolveComponent("form-maker-input");return e.openBlock(),e.createElementBlock("form",{class:"form-maker",onSubmit:e.withModifiers(t,["prevent"])},[r.loading?e.renderSlot(i.$slots,"loading",{key:0},()=>[h]):e.createCommentVNode("",!0),e.renderSlot(i.$slots,"default",{},()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s),(T,w)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(e.unref(m)),key:`fieldRow_${w}`},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T,(S,ae)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(j),S.columnClass]),key:`field_${w}_${ae}`},[e.renderSlot(i.$slots,`${S.name}`,{field:S},()=>[e.createVNode($,e.mergeProps({modelValue:D(S.name)[F(S.name)],"onUpdate:modelValue":ie=>D(S.name)[F(S.name)]=ie},S),null,16,["modelValue","onUpdate:modelValue"])])],2))),128))],2))),128))]),e.renderSlot(i.$slots,"extra"),e.renderSlot(i.$slots,"divider",{},()=>[r.hasActions&&!r.hideDivider?(e.openBlock(),e.createElementBlock("hr",L)):e.createCommentVNode("",!0)]),r.hasActions?e.renderSlot(i.$slots,"actions",{key:1},()=>[e.renderSlot(i.$slots,"submit-button",{},()=>[e.createElementVNode("button",{class:e.normalizeClass(e.unref(A)),disabled:r.loading,type:"submit"},e.toDisplayString(r.submitButtonText),11,z)]),e.renderSlot(i.$slots,"extra-buttons")]):e.createCommentVNode("",!0)],40,p)}}},N=(r,o,l="modelValue")=>e.computed({get:()=>r[l],set:t=>o(`update:${l}`,t)}),M=()=>({setup(r,{slots:o,attrs:l}){return()=>e.h("div",l,o.default())}}),U=(r,o)=>{const l=e.toRaw(o),t=e.ref(null);return e.watch(r,(s,a)=>{if(t.value=null,s!==a)for(let n=0;n<l.length;n+=1){const y=l[n];if(!y.validator(s)){t.value=y.message;break}}},{immediate:!0}),t},W=()=>{const r=e.inject("labelClass",null),o=e.inject("inputClass",null),l=e.inject("inputWrapperClass",null),t=e.inject("inputGroupClass",null),s=e.inject("inputErrorClass",null),a=e.inject("errorClass",null),n=e.inject("helpTextClass",null);return{labelClass:r,inputClass:o,inputWrapperClass:l,inputGroupClass:t,inputErrorClass:s,errorClass:a,helpTextClass:n}},u={emits:["update:modelValue"],props:{loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},modelValue:{default:null},error:{type:String,default:null},helpText:{type:String,default:null},id:{type:String,default:null},label:{type:String,default:null},name:{type:String,default:null},placeholder:{type:String,default:null},type:{type:String,default:"text"}}},I=Object.assign({inheritAttrs:!1},{props:_(C({},u.props),{rules:{type:Array,default:()=>[]}}),emits:u.emits,setup(r,{emit:o}){const l=r,t=N(l,o),{labelClass:s,inputClass:a,inputWrapperClass:n,inputGroupClass:y,inputErrorClass:d,errorClass:g,helpTextClass:b}=W(),c=e.computed(()=>Boolean(l.label)),B=e.computed(()=>Boolean(l.helpText)),V=U(t,l.rules),E=e.computed(()=>Boolean(l.error)||Boolean(V.value)),O=e.computed(()=>l.error?l.error:V.value);return(m,j)=>{const A=e.resolveComponent("form-maker-label"),D=e.resolveComponent("form-maker-help"),F=e.resolveComponent("form-maker-error"),i=e.resolveComponent("rule-evaluator");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(E)&&e.unref(d),e.unref(n)])},[m.type!=="checkbox"?e.renderSlot(m.$slots,"label",{key:0},()=>[e.unref(c)?(e.openBlock(),e.createBlock(A,{key:0,id:m.id,class:e.normalizeClass(e.unref(s))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(m.label),1)]),_:1},8,["id","class"])):e.createCommentVNode("",!0)]):e.createCommentVNode("",!0),e.renderSlot(m.$slots,"default",{},()=>[e.createElementVNode("div",{class:e.normalizeClass([e.unref(y),e.unref(E)&&e.unref(d)])},[e.renderSlot(m.$slots,"before"),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(`form-maker-input-${m.type}`),e.mergeProps({modelValue:e.unref(t),"onUpdate:modelValue":j[0]||(j[0]=k=>e.isRef(t)?t.value=k:null)},C(C({},m.$props),m.$attrs),{class:[m.type!=="checkbox"&&e.unref(a),e.unref(E)&&e.unref(d)],label:m.label}),null,16,["modelValue","class","label"])),e.renderSlot(m.$slots,"after")],2)]),e.renderSlot(m.$slots,"help",{},()=>[e.unref(B)?(e.openBlock(),e.createBlock(D,{key:0,class:e.normalizeClass(e.unref(b))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(m.helpText),1)]),_:1},8,["class"])):e.createCommentVNode("",!0)]),e.renderSlot(m.$slots,"errors",{},()=>[e.unref(E)?(e.openBlock(),e.createBlock(F,{key:0,class:e.normalizeClass(e.unref(g))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(O)),1)]),_:1},8,["class"])):e.createCommentVNode("",!0),r.rules.length?(e.openBlock(),e.createBlock(i,{key:1,rules:r.rules,value:m.modelValue,modelValue:e.unref(V),"onUpdate:modelValue":j[1]||(j[1]=k=>e.isRef(V)?V.value=k:null)},null,8,["rules","value","modelValue"])):e.createCommentVNode("",!0)])],2)}}}),q=["checked","value","onClick"],H={props:_(C({},u.props),{options:{type:Array,default:()=>[]}}),emits:u.emits,setup(r,{emit:o}){const l=r,{options:t,label:s}=e.toRefs(l),a=e.computed(()=>t.value.length===0),n=e.computed(()=>l.modelValue),y=e.computed(()=>(Array.isArray(n.value)?n.value:[n.value]).filter(c=>!!c)),d=e.computed(()=>a.value?[{label:s.value,value:!0}]:t.value),g=b=>{let c=[...y.value];c.indexOf(b)===-1?c.push(b):c=c.filter(B=>B!==b),a.value?o("update:modelValue",c.length>0):o("update:modelValue",c)};return(b,c)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(d),(B,V)=>(e.openBlock(),e.createElementBlock("div",{key:`option_${V}`},[e.createElementVNode("label",null,[e.createElementVNode("input",e.mergeProps(b.$props,{checked:e.unref(y).indexOf(B.value)!==-1,value:B.value,type:"checkbox",onClick:()=>g(B.value)}),null,16,q),e.createTextVNode(" "+e.toDisplayString(B.label),1)])]))),128))}},J={props:u.props,emits:u.emits,setup(r,{emit:o}){const l=t=>{if(t.target.files.length){const s=t.target.files[0];o("update:modelValue",s)}};return(t,s)=>(e.openBlock(),e.createElementBlock("input",e.mergeProps(t.$props,{type:"file",onChange:l}),null,16))}},K=M(),Q=M(),X={props:{id:{type:String,default:null}},setup(r,{slots:o,attrs:l}){return()=>e.h("label",_(C({},l),{for:r.id}),o.default())}},Y=["checked","value"],Z={props:_(C({},u.props),{options:{type:Array,default:()=>[]}}),emits:u.emits,setup(r,{emit:o}){const l=t=>o("update:modelValue",t.target.value);return(t,s)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.options,(a,n)=>(e.openBlock(),e.createElementBlock("div",{key:`option_${n}`},[e.createElementVNode("label",null,[e.createElementVNode("input",e.mergeProps(t.$props,{checked:a.value===t.modelValue,value:a.value,type:"radio",onChange:l}),null,16,Y),e.createTextVNode(" "+e.toDisplayString(a.label),1)])]))),128))}},v=["id","disabled","name","placeholder"],ee=["label"],te=["value"],le=["value"],re={props:_(C({},u.props),{options:{type:Array,default:()=>[]},optionGroups:{type:Object,default:()=>({})}}),emits:u.emits,setup(r,{emit:o}){const l=r,t=N(l,o),s=Object.keys(l.optionGroups).length>0,a=e.computed(()=>l.options.map(n=>typeof n=="object"?n:{label:n,value:n}));return(n,y)=>e.withDirectives((e.openBlock(),e.createElementBlock("select",{id:n.id,"onUpdate:modelValue":y[0]||(y[0]=d=>e.isRef(t)?t.value=d:null),disabled:n.disabled,name:n.name,placeholder:n.placeholder},[s?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(r.optionGroups,(d,g)=>(e.openBlock(),e.createElementBlock("optgroup",{key:`optGroup_${g}`,label:g},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d,(b,c)=>(e.openBlock(),e.createElementBlock("option",{key:`option_${c}`,value:c},e.toDisplayString(b),9,te))),128))],8,ee))),128)):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(e.unref(a),(d,g)=>(e.openBlock(),e.createElementBlock("option",{key:`option_${g}`,value:d.value},e.toDisplayString(d.label),9,le))),128))],8,v)),[[e.vModelSelect,e.unref(t)]])}},oe=["id","disabled","name","placeholder"],ne={props:u.props,emits:u.emits,setup(r,{emit:o}){const t=N(r,o);return(s,a)=>e.withDirectives((e.openBlock(),e.createElementBlock("textarea",{id:s.id,"onUpdate:modelValue":a[0]||(a[0]=n=>e.isRef(t)?t.value=n:null),disabled:s.disabled,name:s.name,placeholder:s.placeholder},null,8,oe)),[[e.vModelText,e.unref(t)]])}},se=["type"],f={props:u.props,emits:u.emits,setup(r,{emit:o}){const t=N(r,o);return(s,a)=>e.withDirectives((e.openBlock(),e.createElementBlock("input",e.mergeProps({"onUpdate:modelValue":a[0]||(a[0]=n=>e.isRef(t)?t.value=n:null),type:s.type},s.$props),null,16,se)),[[e.vModelDynamic,e.unref(t)]])}},G={classes:{"form-row":"form-maker-row","form-column":"form-maker-column","form-label":"form-maker-label","input-group":"form-maker-input-group","input-wrapper":"form-maker-input-wrapper","input-error":"form-maker-input-error",input:"form-maker-input",error:"form-maker-error","help-text":"form-maker-help-text","submit-button":"form-maker-submit"},components:{"form-maker-input-color":f,"form-maker-input-date":f,"form-maker-input-email":f,"form-maker-input-month":f,"form-maker-input-number":f,"form-maker-input-password":f,"form-maker-input-search":f,"form-maker-input-tel":f,"form-maker-input-time":f,"form-maker-input-text":f,"form-maker-input-url":f,"form-maker-input-week":f,"form-maker-input-range":f,"form-maker-input-file":J,"form-maker-input-textarea":ne,"form-maker-input-select":re,"form-maker-input-checkbox":H,"form-maker-input-radio":Z,"form-maker-label":X,"form-maker-help":Q,"form-maker-error":K}};return{install:(r,o={})=>{const l={classes:C(C({},G.classes),o.classes),components:C(C({},G.components),o.components)};r.component("FormMaker",P),r.component("FormMakerInput",I),Object.keys(l.classes).forEach(t=>{r.provide(t,l.classes[t])}),Object.keys(l.components).forEach(t=>{r.component(t,l.components[t])})}}});