{"version":3,"sources":["webpack:///../../../src/components/VForm/VForm.ts"],"names":["mixins","BindsAttrs","RegistrableProvide","extend","name","provide","form","this","inheritAttrs","props","disabled","Boolean","lazyValidation","readonly","value","data","inputs","watchers","errorBag","watch","handler","val","errors","Object","values","includes","$emit","deep","immediate","methods","watchInput","input","watcher","$watch","$set","_uid","valid","shouldValidate","hasOwnProperty","validate","filter","length","reset","forEach","resetErrorBag","setTimeout","t","resetValidation","register","push","unregister","found","find","i","unwatch","$delete","render","h","staticClass","attrs","novalidate","attrs$","on","submit","e","$slots"],"mappings":"o9BAoBeA,gBACbC,IACAC,YAAmB,SAEnBC,OAAO,CACPC,KAAM,SAENC,QAAO,WACL,MAAO,CAAEC,KAAMC,OAGjBC,cAAaA,EAEbC,MAAO,CACLC,SAAUC,QACVC,eAAgBD,QAChBE,SAAUF,QACVG,MAAOH,SAGTI,KAAM,iBAAO,CACXC,OAAQ,GACRC,SAAU,GACVC,SAAU,KAGZC,MAAO,CACLD,SAAU,CACRE,QAAO,SAAEC,GACP,IAAMC,EAASC,OAAOC,OAAOH,GAAKI,UAASA,GAE3ClB,KAAKmB,MAAM,SAAUJ,IAEvBK,MAAKA,EACLC,WAAUA,IAIdC,QAAS,CACPC,WAAU,SAAEC,GAAU,WACdC,EAAW,SAAAD,GACf,OAAOA,EAAME,OAAO,qBAAaZ,GAC/B,EAAKa,KAAK,EAAKhB,SAAUa,EAAMI,KAAMd,KACpC,CAAEO,WAAUA,KAGXX,EAAqB,CACzBkB,KAAMJ,EAAMI,KACZC,MAAO,aACPC,eAAgB,cAiBlB,OAdI9B,KAAKK,eAEPK,EAASoB,eAAiBN,EAAME,OAAO,2BAAmBZ,GACnDA,IAGD,EAAKH,SAASoB,eAAeP,EAAMI,QAEvClB,EAASmB,MAAQJ,EAAQD,QAG3Bd,EAASmB,MAAQJ,EAAQD,GAGpBd,GAGTsB,SAAQ,WACN,OAAqE,IAA9DhC,KAAKS,OAAOwB,QAAOA,SAAAT,GAAK,OAAKA,EAAMQ,UAASA,MAAOE,QAG5DC,MAAK,WACHnC,KAAKS,OAAO2B,SAAQA,SAAAZ,GAAK,OAAIA,EAAMW,WACnCnC,KAAKqC,iBAEPA,cAAa,sBACPrC,KAAKK,gBAEPiC,YAAWA,WACTC,EAAK5B,SAAW,KACf,IAIP6B,gBAAe,WACbxC,KAAKS,OAAO2B,SAAQA,SAAAZ,GAAK,OAAIA,EAAMgB,qBACnCxC,KAAKqC,iBAEPI,SAAQ,SAAEjB,GACRxB,KAAKS,OAAOiC,KAAKlB,GACjBxB,KAAKU,SAASgC,KAAK1C,KAAKuB,WAAWC,KAErCmB,WAAU,SAAEnB,GACV,IAAMoB,EAAQ5C,KAAKS,OAAOoC,MAAKA,SAAAC,GAAC,OAAIA,EAAElB,OAASJ,EAAMI,QAErD,GAAKgB,EAAL,CAEA,IAAMG,EAAU/C,KAAKU,SAASmC,MAAKA,SAAAC,GAAC,OAAIA,EAAElB,OAASgB,EAAMhB,QACrDmB,IACFA,EAAQlB,QACRkB,EAAQjB,kBAGV9B,KAAKU,SAAWV,KAAKU,SAASuB,QAAOA,SAAAa,GAAC,OAAIA,EAAElB,OAASgB,EAAMhB,QAC3D5B,KAAKS,OAAST,KAAKS,OAAOwB,QAAOA,SAAAa,GAAC,OAAIA,EAAElB,OAASgB,EAAMhB,QACvD5B,KAAKgD,QAAQhD,KAAKW,SAAUiC,EAAMhB,SAItCqB,OAAM,SAAEC,GAAC,WACP,OAAOA,EAAE,OAAQ,CACfC,YAAa,SACbC,MAAO,EAAF,CACHC,YAAWA,GACRrD,KAAKsD,QAEVC,GAAI,CACFC,OAAS,SAAAC,GAAD,OAAc,EAAKtC,MAAM,SAAUsC,MAE5CzD,KAAK0D,OAAL","file":"chunk-2d0cc074.f3472b3ad8818d9858e4.js","sourcesContent":["// Components\nimport VInput from '../VInput/VInput'\n\n// Mixins\nimport mixins from '../../util/mixins'\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport { provide as RegistrableProvide } from '../../mixins/registrable'\n\n// Helpers\nimport { VNode } from 'vue'\n\ntype ErrorBag = Record\ntype VInputInstance = InstanceType\ntype Watchers = {\n _uid: number\n valid: () => void\n shouldValidate: () => void\n}\n\n/* @vue/component */\nexport default mixins(\n BindsAttrs,\n RegistrableProvide('form')\n /* @vue/component */\n).extend({\n name: 'v-form',\n\n provide (): object {\n return { form: this }\n },\n\n inheritAttrs: false,\n\n props: {\n disabled: Boolean,\n lazyValidation: Boolean,\n readonly: Boolean,\n value: Boolean,\n },\n\n data: () => ({\n inputs: [] as VInputInstance[],\n watchers: [] as Watchers[],\n errorBag: {} as ErrorBag,\n }),\n\n watch: {\n errorBag: {\n handler (val) {\n const errors = Object.values(val).includes(true)\n\n this.$emit('input', !errors)\n },\n deep: true,\n immediate: true,\n },\n },\n\n methods: {\n watchInput (input: any): Watchers {\n const watcher = (input: any): (() => void) => {\n return input.$watch('hasError', (val: boolean) => {\n this.$set(this.errorBag, input._uid, val)\n }, { immediate: true })\n }\n\n const watchers: Watchers = {\n _uid: input._uid,\n valid: () => {},\n shouldValidate: () => {},\n }\n\n if (this.lazyValidation) {\n // Only start watching inputs if we need to\n watchers.shouldValidate = input.$watch('shouldValidate', (val: boolean) => {\n if (!val) return\n\n // Only watch if we're not already doing it\n if (this.errorBag.hasOwnProperty(input._uid)) return\n\n watchers.valid = watcher(input)\n })\n } else {\n watchers.valid = watcher(input)\n }\n\n return watchers\n },\n /** @public */\n validate (): boolean {\n return this.inputs.filter(input => !input.validate(true)).length === 0\n },\n /** @public */\n reset (): void {\n this.inputs.forEach(input => input.reset())\n this.resetErrorBag()\n },\n resetErrorBag () {\n if (this.lazyValidation) {\n // Account for timeout in validatable\n setTimeout(() => {\n this.errorBag = {}\n }, 0)\n }\n },\n /** @public */\n resetValidation () {\n this.inputs.forEach(input => input.resetValidation())\n this.resetErrorBag()\n },\n register (input: VInputInstance) {\n this.inputs.push(input)\n this.watchers.push(this.watchInput(input))\n },\n unregister (input: VInputInstance) {\n const found = this.inputs.find(i => i._uid === input._uid)\n\n if (!found) return\n\n const unwatch = this.watchers.find(i => i._uid === found._uid)\n if (unwatch) {\n unwatch.valid()\n unwatch.shouldValidate()\n }\n\n this.watchers = this.watchers.filter(i => i._uid !== found._uid)\n this.inputs = this.inputs.filter(i => i._uid !== found._uid)\n this.$delete(this.errorBag, found._uid)\n },\n },\n\n render (h): VNode {\n return h('form', {\n staticClass: 'v-form',\n attrs: {\n novalidate: true,\n ...this.attrs$,\n },\n on: {\n submit: (e: Event) => this.$emit('submit', e),\n },\n }, this.$slots.default)\n },\n})\n"],"sourceRoot":""}