vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
3 lines (2 loc) • 2.63 kB
JavaScript
;const t=require("vue");require("../row/index.cjs");const u=require("@vexip-ui/config"),F=require("./props.cjs"),l=require("./symbol.cjs"),q=require("../row/row.cjs"),_=t.defineComponent({name:"Form",inheritAttrs:!0,__name:"form",props:F.formProps,setup(v,{expose:A}){const y=v,r=u.useProps("form",y,{method:{default:"post",validator:e=>l.submitMethods.includes(e)},action:null,model:{default:()=>({}),static:!0},rules:()=>({}),labelWidth:"auto",labelAlign:{default:"right",validator:e=>l.labelAligns.includes(e)},allRequired:!1,labelSuffix:"",hideAsterisk:!1,validateAll:!1,hideLabel:!1,disabled:!1,loading:!1,size:u.createSizeProp(),inline:!1,gap:[8,0],justify:"start",align:"top"}),n=u.useNameHelper("form"),o=t.reactive(new Set),E=t.computed(()=>[n.b(),n.bs("vars"),n.bm(`label-${r.labelAlign}`),{[n.bm("inherit")]:r.inherit,[n.bm("disabled")]:r.disabled,[n.bm("loading")]:r.loading,[n.bm(r.size)]:r.size!=="default",[n.bm("inline")]:r.inline}]),S=t.computed(()=>Math.max(...Array.from(o).map(e=>e.labelWidth.value)));t.provide(l.FORM_PROPS,r),t.provide(l.FORM_FIELDS,o),t.provide(l.FORM_ACTIONS,{getLabelWidth:M,validate:c,validateFields:d,reset:h,resetFields:p,clearError:b,clearFieldsError:g}),A({validate:c,validateFields:d,reset:h,resetFields:p,clearError:b,clearFieldsError:g});function M(){return typeof r.labelWidth=="number"?r.labelWidth:S.value}function f(){const e={};for(const i of o)i.prop.value&&(e[i.prop.value]=i);return e}function c(){return m(o)}function d(e){Array.isArray(e)||(e=[e]);const i=f(),a=new Set;return e.forEach(s=>{i[s]&&a.add(i[s])}),m(a)}function m(e){const i=[];return e.forEach(a=>{i.push(a.validate())}),new Promise(a=>{Promise.all(i).then(s=>{a(s.flat().filter(Boolean))})})}function h(){o.forEach(e=>{e.reset()})}function p(e){Array.isArray(e)||(e=[e]);const i=f();e.forEach(a=>{i[a]&&i[a].reset()})}function b(){o.forEach(e=>{e.clearError()})}function g(e){Array.isArray(e)||(e=[e]);const i=f();e.forEach(a=>{i[a]&&i[a].clearError()})}function P(e){e.stopPropagation(),r.action||e.preventDefault(),u.emitEvent(r.onSubmit,e)}return(e,i)=>(t.openBlock(),t.createBlock(t.unref(q),t.mergeProps(e.$attrs,{class:E.value,inherit:t.unref(r).inherit,tag:"form",method:t.unref(r).action&&t.unref(r).method,action:t.unref(r).action,gap:t.unref(r).gap,justify:t.unref(r).justify,align:t.unref(r).align,"column-flex":void 0,onSubmit:P,onReset:i[0]||(i[0]=t.withModifiers(()=>{},["prevent","stop"]))}),{default:t.withCtx(()=>[t.renderSlot(e.$slots,"default")]),_:3},16,["class","inherit","method","action","gap","justify","align"]))}});module.exports=_;
//# sourceMappingURL=form.vue2.cjs.map