UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 8.03 kB
{"version":3,"file":"form.vue2.cjs","sources":["../../../components/form/form.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Row } from '@/components/row'\n\nimport { computed, provide, reactive } from 'vue'\n\nimport { createSizeProp, emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { formProps } from './props'\nimport { FORM_ACTIONS, FORM_FIELDS, FORM_PROPS, labelAligns, submitMethods } from './symbol'\n\nimport type { FieldOptions } from './symbol'\n\ndefineOptions({ name: 'Form', inheritAttrs: true })\n\nconst _props = defineProps(formProps)\nconst props = useProps('form', _props, {\n method: {\n default: 'post',\n validator: value => submitMethods.includes(value),\n },\n action: null,\n model: {\n default: () => ({}),\n static: true,\n },\n rules: () => ({}),\n labelWidth: 'auto',\n labelAlign: {\n default: 'right',\n validator: value => labelAligns.includes(value),\n },\n allRequired: false,\n labelSuffix: '',\n hideAsterisk: false,\n validateAll: false,\n hideLabel: false,\n disabled: false,\n loading: false,\n size: createSizeProp(),\n inline: false,\n gap: [8, 0],\n justify: 'start',\n align: 'top',\n})\n\nconst nh = useNameHelper('form')\nconst fieldSet: Set<FieldOptions> = reactive(new Set<any>())\n\nconst className = computed(() => {\n return [\n nh.b(),\n nh.bs('vars'),\n nh.bm(`label-${props.labelAlign}`),\n {\n [nh.bm('inherit')]: props.inherit,\n [nh.bm('disabled')]: props.disabled,\n [nh.bm('loading')]: props.loading,\n [nh.bm(props.size)]: props.size !== 'default',\n [nh.bm('inline')]: props.inline,\n },\n ]\n})\nconst labelWidth = computed(() => {\n return Math.max(...Array.from(fieldSet).map(field => field.labelWidth.value))\n})\n\nprovide(FORM_PROPS, props)\nprovide(FORM_FIELDS, fieldSet)\nprovide(FORM_ACTIONS, {\n getLabelWidth,\n validate,\n validateFields,\n reset,\n resetFields,\n clearError,\n clearFieldsError,\n})\n\ndefineExpose({\n validate,\n validateFields,\n reset,\n resetFields,\n clearError,\n clearFieldsError,\n})\n\nfunction getLabelWidth() {\n if (typeof props.labelWidth === 'number') {\n return props.labelWidth\n }\n\n return labelWidth.value\n}\n\nfunction getPropMap() {\n const propMap: Record<string, FieldOptions> = {}\n\n for (const field of fieldSet) {\n if (field.prop.value) {\n propMap[field.prop.value] = field\n }\n }\n\n return propMap\n}\n\nfunction validate() {\n return validateItems(fieldSet)\n}\n\nfunction validateFields(props: string | string[]) {\n if (!Array.isArray(props)) {\n props = [props]\n }\n\n const propMap = getPropMap()\n const fields = new Set<FieldOptions>()\n\n props.forEach(prop => {\n if (propMap[prop]) {\n fields.add(propMap[prop])\n }\n })\n\n return validateItems(fields)\n}\n\nfunction validateItems(items: Set<FieldOptions>) {\n const validations: Promise<string[] | null>[] = []\n\n items.forEach(item => {\n validations.push(item.validate())\n })\n\n return new Promise<string[]>(resolve => {\n Promise.all(validations).then(errors => {\n resolve(errors.flat().filter(Boolean) as string[])\n })\n })\n}\n\nfunction reset() {\n fieldSet.forEach(field => {\n field.reset()\n })\n}\n\nfunction resetFields(props: string | string[]) {\n if (!Array.isArray(props)) {\n props = [props]\n }\n\n const propMap = getPropMap()\n\n props.forEach(prop => {\n if (propMap[prop]) {\n propMap[prop].reset()\n }\n })\n}\n\nfunction clearError() {\n fieldSet.forEach(field => {\n field.clearError()\n })\n}\n\nfunction clearFieldsError(props: string | string[]) {\n if (!Array.isArray(props)) {\n props = [props]\n }\n\n const propMap = getPropMap()\n\n props.forEach(prop => {\n if (propMap[prop]) {\n propMap[prop].clearError()\n }\n })\n}\n\nfunction handleSubmit(event: SubmitEvent) {\n event.stopPropagation()\n\n if (!props.action) {\n event.preventDefault()\n }\n\n emitEvent(props.onSubmit, event)\n}\n</script>\n\n<template>\n <Row\n v-bind=\"$attrs\"\n :class=\"className\"\n :inherit=\"props.inherit\"\n tag=\"form\"\n :method=\"props.action && props.method\"\n :action=\"props.action\"\n :gap=\"props.gap\"\n :justify=\"props.justify\"\n :align=\"props.align\"\n :column-flex=\"undefined\"\n @submit=\"handleSubmit\"\n @reset.prevent.stop\n >\n <slot></slot>\n </Row>\n</template>\n"],"names":["_props","__props","props","useProps","value","submitMethods","labelAligns","createSizeProp","nh","useNameHelper","fieldSet","reactive","className","computed","labelWidth","field","provide","FORM_PROPS","FORM_FIELDS","FORM_ACTIONS","getLabelWidth","validate","validateFields","reset","resetFields","clearError","clearFieldsError","__expose","getPropMap","propMap","validateItems","fields","prop","items","validations","item","resolve","errors","handleSubmit","event","emitEvent","_createBlock","_unref","Row","_mergeProps","_ctx","_renderSlot"],"mappings":"wRAaA,MAAMA,EAASC,EACTC,EAAQC,EAAAA,SAAS,OAAQH,EAAQ,CACrC,OAAQ,CACN,QAAS,OACT,UAAWI,GAASC,EAAc,cAAA,SAASD,CAAK,CAClD,EACA,OAAQ,KACR,MAAO,CACL,QAAS,KAAO,CAAA,GAChB,OAAQ,EACV,EACA,MAAO,KAAO,CAAA,GACd,WAAY,OACZ,WAAY,CACV,QAAS,QACT,UAAWA,GAASE,EAAY,YAAA,SAASF,CAAK,CAChD,EACA,YAAa,GACb,YAAa,GACb,aAAc,GACd,YAAa,GACb,UAAW,GACX,SAAU,GACV,QAAS,GACT,KAAMG,EAAAA,eAAe,EACrB,OAAQ,GACR,IAAK,CAAC,EAAG,CAAC,EACV,QAAS,QACT,MAAO,KAAA,CACR,EAEKC,EAAKC,gBAAc,MAAM,EACzBC,EAA8BC,EAAAA,SAAa,IAAA,GAAU,EAErDC,EAAYC,EAAAA,SAAS,IAClB,CACLL,EAAG,EAAE,EACLA,EAAG,GAAG,MAAM,EACZA,EAAG,GAAG,SAASN,EAAM,UAAU,EAAE,EACjC,CACE,CAACM,EAAG,GAAG,SAAS,CAAC,EAAGN,EAAM,QAC1B,CAACM,EAAG,GAAG,UAAU,CAAC,EAAGN,EAAM,SAC3B,CAACM,EAAG,GAAG,SAAS,CAAC,EAAGN,EAAM,QAC1B,CAACM,EAAG,GAAGN,EAAM,IAAI,CAAC,EAAGA,EAAM,OAAS,UACpC,CAACM,EAAG,GAAG,QAAQ,CAAC,EAAGN,EAAM,MAAA,CAE7B,CACD,EACKY,EAAaD,EAAAA,SAAS,IACnB,KAAK,IAAI,GAAG,MAAM,KAAKH,CAAQ,EAAE,IAAaK,GAAAA,EAAM,WAAW,KAAK,CAAC,CAC7E,EAEDC,EAAA,QAAQC,aAAYf,CAAK,EACzBc,EAAA,QAAQE,cAAaR,CAAQ,EAC7BM,EAAAA,QAAQG,EAAAA,aAAc,CACpB,cAAAC,EACA,SAAAC,EACA,eAAAC,EACA,MAAAC,EACA,YAAAC,EACA,WAAAC,EACA,iBAAAC,CAAA,CACD,EAEYC,EAAA,CACX,SAAAN,EACA,eAAAC,EACA,MAAAC,EACA,YAAAC,EACA,WAAAC,EACA,iBAAAC,CAAA,CACD,EAED,SAASN,GAAgB,CACnB,OAAA,OAAOlB,EAAM,YAAe,SACvBA,EAAM,WAGRY,EAAW,KAAA,CAGpB,SAASc,GAAa,CACpB,MAAMC,EAAwC,CAAC,EAE/C,UAAWd,KAASL,EACdK,EAAM,KAAK,QACLc,EAAAd,EAAM,KAAK,KAAK,EAAIA,GAIzB,OAAAc,CAAA,CAGT,SAASR,GAAW,CAClB,OAAOS,EAAcpB,CAAQ,CAAA,CAG/B,SAASY,EAAepB,EAA0B,CAC3C,MAAM,QAAQA,CAAK,IACtBA,EAAQ,CAACA,CAAK,GAGhB,MAAM2B,EAAUD,EAAW,EACrBG,MAAa,IAEnB7B,OAAAA,EAAM,QAAgB8B,GAAA,CAChBH,EAAQG,CAAI,GACPD,EAAA,IAAIF,EAAQG,CAAI,CAAC,CAC1B,CACD,EAEMF,EAAcC,CAAM,CAAA,CAG7B,SAASD,EAAcG,EAA0B,CAC/C,MAAMC,EAA0C,CAAC,EAEjD,OAAAD,EAAM,QAAgBE,GAAA,CACRD,EAAA,KAAKC,EAAK,UAAU,CAAA,CACjC,EAEM,IAAI,QAA6BC,GAAA,CACtC,QAAQ,IAAIF,CAAW,EAAE,KAAeG,GAAA,CACtCD,EAAQC,EAAO,KAAO,EAAA,OAAO,OAAO,CAAa,CAAA,CAClD,CAAA,CACF,CAAA,CAGH,SAASd,GAAQ,CACfb,EAAS,QAAiBK,GAAA,CACxBA,EAAM,MAAM,CAAA,CACb,CAAA,CAGH,SAASS,EAAYtB,EAA0B,CACxC,MAAM,QAAQA,CAAK,IACtBA,EAAQ,CAACA,CAAK,GAGhB,MAAM2B,EAAUD,EAAW,EAE3B1B,EAAM,QAAgB8B,GAAA,CAChBH,EAAQG,CAAI,GACNH,EAAAG,CAAI,EAAE,MAAM,CACtB,CACD,CAAA,CAGH,SAASP,GAAa,CACpBf,EAAS,QAAiBK,GAAA,CACxBA,EAAM,WAAW,CAAA,CAClB,CAAA,CAGH,SAASW,EAAiBxB,EAA0B,CAC7C,MAAM,QAAQA,CAAK,IACtBA,EAAQ,CAACA,CAAK,GAGhB,MAAM2B,EAAUD,EAAW,EAE3B1B,EAAM,QAAgB8B,GAAA,CAChBH,EAAQG,CAAI,GACNH,EAAAG,CAAI,EAAE,WAAW,CAC3B,CACD,CAAA,CAGH,SAASM,EAAaC,EAAoB,CACxCA,EAAM,gBAAgB,EAEjBrC,EAAM,QACTqC,EAAM,eAAe,EAGbC,YAAAtC,EAAM,SAAUqC,CAAK,CAAA,6BAK/BE,EAAAA,YAeMC,EAAA,MAAAC,CAAA,EAfNC,EAAA,WAeMC,EAdU,OAAA,CACb,MAAOjC,EAAS,MAChB,QAAS8B,EAAAA,MAAKxC,CAAA,EAAC,QAChB,IAAI,OACH,OAAQwC,EAAK,MAAAxC,CAAA,EAAC,QAAUwC,EAAA,MAAAxC,CAAA,EAAM,OAC9B,OAAQwC,EAAAA,MAAKxC,CAAA,EAAC,OACd,IAAKwC,EAAAA,MAAKxC,CAAA,EAAC,IACX,QAASwC,EAAAA,MAAKxC,CAAA,EAAC,QACf,MAAOwC,EAAAA,MAAKxC,CAAA,EAAC,MACb,cAAa,OACb,SAAQoC,EACR,oCAAD,IAAmB,CAAA,EAAA,CAAA,UAAA,MAAA,CAAA,EAAA,sBAEnB,IAAa,CAAbQ,aAAaD,EAAA,OAAA,SAAA,CAAA"}