@josercl/form-maker 1.1.0-beta06 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,23 @@
1
+ import { inject } from 'vue';
2
+
3
+ const useFormClasses = () => {
4
+ const labelClass = inject('labelClass', null);
5
+ const inputClass = inject('inputClass', null);
6
+ const inputWrapperClass = inject('inputWrapperClass', null);
7
+ const inputGroupClass = inject('inputGroupClass', null);
8
+ const inputErrorClass = inject('inputErrorClass', null);
9
+ const errorClass = inject('errorClass', null);
10
+ const helpTextClass = inject('helpTextClass', null);
11
+
12
+ return {
13
+ labelClass,
14
+ inputClass,
15
+ inputWrapperClass,
16
+ inputGroupClass,
17
+ inputErrorClass,
18
+ errorClass,
19
+ helpTextClass,
20
+ };
21
+ };
22
+
23
+ export default useFormClasses;
@@ -0,0 +1,14 @@
1
+ import { computed } from 'vue';
2
+ import type {WritableComputedRef} from "vue";
3
+
4
+ type PropGetter<T> = () => T
5
+
6
+ type Emitter = (event: string, ...args: any[]) => void
7
+
8
+ export default function useVModel<T>(getter: PropGetter<T>, emit: Emitter, propName?: string): WritableComputedRef<T> {
9
+ const fixedPropName = propName ?? 'modelValue'
10
+ return computed({
11
+ get: () => getter(),
12
+ set: (value: T) => emit(`update:${fixedPropName}`, value),
13
+ });
14
+ }
@@ -1,21 +1,6 @@
1
- import {
2
- computed, h, ref, toRaw, watch
3
- } from 'vue';
1
+ import { ref, toRaw, watch } from 'vue';
4
2
 
5
- const setupVModel = (props, emit, propName = 'modelValue') => computed({
6
- get: () => props[propName],
7
- set: value => emit(`update:${propName}`, value),
8
- });
9
-
10
- export default setupVModel;
11
-
12
- export const simpleComponent = () => ({
13
- setup(props, { slots, attrs }) {
14
- return () => h('div', attrs, slots.default());
15
- },
16
- });
17
-
18
- export const useValidator = (propValue, rulesArr) => {
3
+ const useValidator = (propValue, rulesArr) => {
19
4
  const rules = toRaw(rulesArr);
20
5
  const error = ref(null);
21
6
 
@@ -39,3 +24,5 @@ export const useValidator = (propValue, rulesArr) => {
39
24
 
40
25
  return error;
41
26
  };
27
+
28
+ export default useValidator;
@@ -1,14 +1,14 @@
1
- import FormMakerComponent from './lib/components/FormMaker.vue';
2
- import FormMakerInput from './lib/components/FormMakerInput.vue';
3
- import CheckboxInput from './lib/components/inputs/CheckboxInput.vue';
4
- import FileInput from './lib/components/inputs/FileInput.vue';
5
- import FormMakerInputError from './lib/components/texts/FormMakerInputError.vue';
6
- import FormMakerInputHelp from './lib/components/texts/FormMakerInputHelp.vue';
7
- import FormMakerInputLabel from './lib/components/texts/FormMakerInputLabel.vue';
8
- import RadioInput from './lib/components/inputs/RadioInput.vue';
9
- import SelectInput from './lib/components/inputs/SelectInput.vue';
10
- import TextAreaInput from './lib/components/inputs/TextAreaInput.vue';
11
- import BasicInput from './lib/components/inputs/BasicInput.vue';
1
+ import FormMakerComponent from './components/FormMaker.vue';
2
+ import FormMakerInput from './components/FormMakerInput.vue';
3
+ import CheckboxInput from './components/inputs/CheckboxInput.vue';
4
+ import FileInput from './components/inputs/FileInput.vue';
5
+ import FormMakerInputError from './components/SimpleComponent';
6
+ import FormMakerInputHelp from './components/SimpleComponent';
7
+ import FormMakerInputLabel from './components/texts/FormMakerInputLabel.vue';
8
+ import RadioInput from './components/inputs/RadioInput.vue';
9
+ import SelectInput from './components/inputs/SelectInput.vue';
10
+ import TextAreaInput from './components/inputs/TextAreaInput.vue';
11
+ import BasicInput from './components/inputs/BasicInput.vue';
12
12
 
13
13
  const defaultOptions = {
14
14
  classes: {
package/lib/model.d.ts ADDED
@@ -0,0 +1,48 @@
1
+ import type {InputHTMLAttributes} from "vue";
2
+
3
+ export interface InputType {
4
+ id?: string | null
5
+ name: string
6
+ type?: string | null
7
+ label?: string | null
8
+ columnClass?: string | null
9
+ }
10
+
11
+ export interface FormMakerProps {
12
+ loading?: boolean
13
+ hasActions?: boolean
14
+ modelValue: Record<string, any>
15
+ fields: InputType[][],
16
+ hideDivider?: boolean
17
+ rowClass?: string | null
18
+ columnClass?: string | null
19
+ labelClass?: string | null
20
+ inputGroupClass?: string | null
21
+ inputWrapperClass?: string | null
22
+ inputErrorClass?: string | null
23
+ inputClass?: string | null
24
+ errorClass?: string | null
25
+ helpTextClass?: string | null
26
+ submitButtonClass?: string | null
27
+ submitButtonText?: string | null
28
+ }
29
+
30
+ export interface FormMakerInputProps extends /* @vue-ignore */ InputHTMLAttributes{
31
+ loading?: boolean | undefined
32
+ modelValue: any,
33
+ error?: string | undefined
34
+ helpText?: string | undefined
35
+ label?: string | undefined
36
+ type?: string,
37
+ rules?: RuleValidator[]
38
+ }
39
+
40
+ export interface SelectOption {
41
+ label: string
42
+ value: any
43
+ }
44
+
45
+ export interface RuleValidator {
46
+ message: string
47
+ validator: (val: any) => boolean
48
+ }
package/package.json CHANGED
@@ -1,46 +1,60 @@
1
1
  {
2
2
  "name": "@josercl/form-maker",
3
- "version": "1.1.0-beta06",
3
+ "version": "1.3.0",
4
+ "type": "module",
4
5
  "description": "Form generator using vue 3",
5
6
  "author": "Jose Carrero <josercl@gmail.com>",
7
+ "main": "./dist/index.umd.cjs",
8
+ "module": "./dist/index.js",
9
+ "files": [
10
+ "dist",
11
+ "lib"
12
+ ],
13
+ "exports": {
14
+ ".": {
15
+ "import": "./dist/index.js",
16
+ "require": "./dist/index.umd.cjs"
17
+ }
18
+ },
19
+ "homepage": "https://josercl.gitlab.io/form-maker",
6
20
  "scripts": {
7
- "docs": "vite -c docs.config.js dev --port 9090",
8
21
  "dev": "vite -c dev.config.js dev",
9
- "build": "vite build",
22
+ "docs": "vite -c docs.config.js dev --port 9090",
23
+ "build": "run-p type-check build-only",
10
24
  "build-docs": "vite -c docs.config.js build",
11
25
  "preview": "vite -c docs.config.js preview --port 5050",
12
- "lint": "eslint --ext .vue,.js lib/ docs/ dev/ index.js --fix"
26
+ "build-only": "vite build",
27
+ "type-check": "vue-tsc --noEmit -p tsconfig.app.json --composite false",
28
+ "lint": "eslint --ext .vue,.js,.ts lib/ docs/ dev/ --fix"
13
29
  },
14
- "main": "./index.js",
15
- "files": [
16
- "index.js",
17
- "lib/**",
18
- "umd/*.js"
19
- ],
20
- "homepage": "https://josercl.gitlab.io/form-maker",
21
30
  "dependencies": {
22
- "vue": "^3.2.31"
31
+ "vue": "^3.3.4"
23
32
  },
24
33
  "devDependencies": {
25
- "@babel/core": "^7.17.5",
26
- "@babel/eslint-parser": "^7.17.0",
27
34
  "@fortawesome/fontawesome-svg-core": "^1.2.32",
28
35
  "@fortawesome/free-brands-svg-icons": "^5.15.1",
29
36
  "@fortawesome/free-regular-svg-icons": "^5.15.1",
30
37
  "@fortawesome/vue-fontawesome": "^3.0.0-2",
31
- "@tailwindcss/forms": "^0.4.0",
32
- "@tailwindcss/typography": "^0.5.2",
33
- "@vitejs/plugin-vue": "^2.2.2",
34
- "@vue/eslint-config-airbnb": "^6.0.0",
35
- "autoprefixer": "^10.4.2",
36
- "cssnano": "^5.1.14",
37
- "eslint": "^8.10.0",
38
- "eslint-plugin-vue": "^8.5.0",
38
+ "@rushstack/eslint-patch": "^1.2.0",
39
+ "@tailwindcss/forms": "^0.5.4",
40
+ "@tailwindcss/typography": "^0.5.9",
41
+ "@tsconfig/node18": "^2.0.1",
42
+ "@types/node": "^18.16.17",
43
+ "@vitejs/plugin-vue": "^4.2.3",
44
+ "@vue/eslint-config-typescript": "^11.0.3",
45
+ "@vue/tsconfig": "^0.4.0",
46
+ "autoprefixer": "^10.4.14",
47
+ "eslint": "^8.39.0",
48
+ "eslint-plugin-vue": "^9.11.0",
39
49
  "highlight.js": "^10.2.1",
40
- "postcss": "^8.4.7",
41
- "tailwindcss": "^3.0.23",
42
- "vite": "^2.8.4",
43
- "vue-router": "^4.0.12"
50
+ "npm-run-all": "^4.1.5",
51
+ "postcss": "^8.4.26",
52
+ "rollup-plugin-typescript2": "^0.35.0",
53
+ "tailwindcss": "^3.3.3",
54
+ "typescript": "~5.0.4",
55
+ "vite": "^4.3.9",
56
+ "vue-router": "^4.2.2",
57
+ "vue-tsc": "^1.6.5"
44
58
  },
45
59
  "keywords": [
46
60
  "vue 3",
@@ -1,37 +0,0 @@
1
- import { inject } from 'vue';
2
-
3
- export const injectFormClasses = () => {
4
- const labelClass = inject('labelClass', null);
5
- const inputClass = inject('inputClass', null);
6
- const inputWrapperClass = inject('inputWrapperClass', null);
7
- const inputGroupClass = inject('inputGroupClass', null);
8
- const inputErrorClass = inject('inputErrorClass', null);
9
- const errorClass = inject('errorClass', null);
10
- const helpTextClass = inject('helpTextClass', null);
11
-
12
- return {
13
- labelClass,
14
- inputClass,
15
- inputWrapperClass,
16
- inputGroupClass,
17
- inputErrorClass,
18
- errorClass,
19
- helpTextClass,
20
- };
21
- };
22
-
23
- export const FormInputMixin = {
24
- emits: [ 'update:modelValue' ],
25
- props: {
26
- loading: { type: Boolean, default: false },
27
- disabled: { type: Boolean, default: false },
28
- modelValue: { default: null },
29
- error: { type: String, default: null },
30
- helpText: { type: String, default: null },
31
- id: { type: String, default: null },
32
- label: { type: String, default: null },
33
- name: { type: String, default: null },
34
- placeholder: { type: String, default: null },
35
- type: { type: String, default: 'text' },
36
- },
37
- };
@@ -1,5 +0,0 @@
1
- <script>
2
- import { simpleComponent } from '../../utils.js';
3
-
4
- export default simpleComponent();
5
- </script>
@@ -1,5 +0,0 @@
1
- <script>
2
- import { simpleComponent } from '../../utils.js';
3
-
4
- export default simpleComponent();
5
- </script>
package/umd/index.umd.js DELETED
@@ -1 +0,0 @@
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])})}}});