diff --git a/release/formsy-react.js b/release/formsy-react.js index e8f18ef..7b5bbea 100644 --- a/release/formsy-react.js +++ b/release/formsy-react.js @@ -1,2 +1,2 @@ -!function(t,i){"object"==typeof exports&&"object"==typeof module?module.exports=i(require("react")):"function"==typeof define&&define.amd?define(["react"],i):"object"==typeof exports?exports.Formsy=i(require("react")):t.Formsy=i(t.react)}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var n=e[r]={exports:{},id:r,loaded:!1};return t[r].call(n.exports,n,n.exports,i),n.loaded=!0,n.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){(function(i){"use strict";var r=Object.assign||function(t){for(var i=1;i0&&this.setInputValidationErrors(this.props.validationErrors);var t=this.inputs.map(function(t){return t.props.name});a.arraysDiffer(this.prevInputNames,t)&&this.validateForm()},reset:function(t){this.setFormPristine(!0),this.resetModel(t)},submit:function(t){t&&t.preventDefault(),this.setFormPristine(!1);var i=this.updateModel();i=this.mapModel(i),this.props.onSubmit(i,this.resetModel,this.updateInputsWithError),this.state.isValid?this.props.onValidSubmit(i,this.resetModel,this.updateInputsWithError):this.props.onInvalidSubmit(i,this.resetModel,this.updateInputsWithError)},mapModel:function(t){return this.props.mapping?this.props.mapping(t):o(Object.keys(t).reduce(function(i,e){for(var r=e.split("."),n=i;r.length;){var s=r.shift();n=n[s]=r.length?n[s]||{}:t[e]}return i},{}))},updateModel:function(){return this.inputs.reduce(function(t,i){var e=i.props.name;return t[e]=i.state._value,t},{})},resetModel:function(t){this.inputs.forEach(function(i){var e=i.props.name;t&&t[e]?i.setValue(t[e]):i.resetValue()}),this.validateForm()},setInputValidationErrors:function(t){this.inputs.forEach(function(i){var e=i.props.name,r=[{_isValid:!(e in t),_validationError:"string"==typeof t[e]?[t[e]]:t[e]}];i.setState.apply(i,r)})},isChanged:function(){return!a.isSame(this.getPristineValues(),this.getCurrentValues())},getPristineValues:function(){return this.inputs.reduce(function(t,i){var e=i.props.name;return t[e]=i.props.value,t},{})},updateInputsWithError:function(t){var i=this;Object.keys(t).forEach(function(e,r){var n=a.find(i.inputs,function(t){return t.props.name===e});if(!n)throw new Error("You are trying to update an input that does not exist. Verify errors object with input names. "+JSON.stringify(t));var s=[{_isValid:i.props.preventExternalInvalidation||!1,_externalError:"string"==typeof t[e]?[t[e]]:t[e]}];n.setState.apply(n,s)})},isFormDisabled:function(){return this.props.disabled},getCurrentValues:function(){return this.inputs.reduce(function(t,i){var e=i.props.name;return t[e]=i.state._value,t},{})},setFormPristine:function(t){this.setState({_formSubmitted:!t}),this.inputs.forEach(function(i,e){i.setState({_formSubmitted:!t,_isPristine:t})})},validate:function(t){this.state.canChange&&this.props.onChange(this.getCurrentValues(),this.isChanged());var i=this.runValidation(t);t.setState({_isValid:i.isValid,_isRequired:i.isRequired,_validationError:i.error,_externalError:null},this.validateForm)},runValidation:function(t,i){var e=this.getCurrentValues(),r=t.props.validationErrors,n=t.props.validationError;i=2===arguments.length?i:t.state._value;var s=this.runRules(i,e,t._validations),u=this.runRules(i,e,t._requiredValidations);"function"==typeof t.validate&&(s.failed=t.validate()?[]:["failed"]);var o=Object.keys(t._requiredValidations).length?!!u.success.length:!1,a=!(s.failed.length||this.props.validationErrors&&this.props.validationErrors[t.props.name]);return{isRequired:o,isValid:o?!1:a,error:function(){if(a&&!o)return c;if(s.errors.length)return s.errors;if(this.props.validationErrors&&this.props.validationErrors[t.props.name])return"string"==typeof this.props.validationErrors[t.props.name]?[this.props.validationErrors[t.props.name]]:this.props.validationErrors[t.props.name];if(o){var i=r[u.success[0]];return i?[i]:null}return s.failed.length?s.failed.map(function(t){return r[t]?r[t]:n}).filter(function(t,i,e){return e.indexOf(t)===i}):void 0}.call(this)}},runRules:function(t,i,e){var r={errors:[],failed:[],success:[]};return Object.keys(e).length&&Object.keys(e).forEach(function(n){if(u[n]&&"function"==typeof e[n])throw new Error("Formsy does not allow you to override default validations: "+n);if(!u[n]&&"function"!=typeof e[n])throw new Error("Formsy does not have the validation rule: "+n);if("function"==typeof e[n]){var s=e[n](i,t);return void("string"==typeof s?(r.errors.push(s),r.failed.push(n)):s||r.failed.push(n))}if("function"!=typeof e[n]){var s=u[n](i,t,e[n]);return void("string"==typeof s?(r.errors.push(s),r.failed.push(n)):s?r.success.push(n):r.failed.push(n))}return r.success.push(n)}),r},validateForm:function(){var t=this,i=function(){var t=this.inputs.every(function(t){return t.state._isValid});this.setState({isValid:t}),t?this.props.onValid():this.props.onInvalid(),this.setState({canChange:!0})}.bind(this);this.inputs.forEach(function(e,r){var n=t.runValidation(e);n.isValid&&e.state._externalError&&(n.isValid=!1),e.setState({_isValid:n.isValid,_isRequired:n.isRequired,_validationError:n.error,_externalError:!n.isValid&&e.state._externalError?e.state._externalError:null},r===t.inputs.length-1?i:null)}),!this.inputs.length&&this.isMounted()&&this.setState({canChange:!0})},attachToForm:function(t){-1===this.inputs.indexOf(t)&&this.inputs.push(t),this.validate(t)},detachFromForm:function(t){var i=this.inputs.indexOf(t);-1!==i&&(this.inputs=this.inputs.slice(0,i).concat(this.inputs.slice(i+1))),this.validateForm()},render:function(){return n.createElement("form",r({},this.props,{onSubmit:this.submit}),this.props.children)}}),i.exports||i.module||i.define&&i.define.amd||(i.Formsy=s),t.exports=s}).call(i,function(){return this}())},function(i,e){i.exports=t},function(t,i,e){(function(i){"use strict";var r=e(3),n=i.React||e(1),s=function(t){return"string"==typeof t?t.split(/\,(?![^{\[]*[}\]])/g).reduce(function(t,i){var e=i.split(":"),r=e.shift();if(e=e.map(function(t){try{return JSON.parse(t)}catch(i){return t}}),e.length>1)throw new Error("Formsy does not support multiple args on string validations. Use object format of validations instead.");return t[r]=e.length?e[0]:!0,t},{}):t||{}};t.exports={getInitialState:function(){return{_value:this.props.value,_isRequired:!1,_isValid:!0,_isPristine:!0,_pristineValue:this.props.value,_validationError:[],_externalError:null,_formSubmitted:!1}},contextTypes:{formsy:n.PropTypes.object},getDefaultProps:function(){return{validationError:"",validationErrors:{}}},componentWillMount:function(){var t=function(){this.setValidations(this.props.validations,this.props.required),this.context.formsy.attachToForm(this)}.bind(this);if(!this.props.name)throw new Error("Form Input requires a name property when used");t()},componentWillReceiveProps:function(t){this.setValidations(t.validations,t.required)},componentDidUpdate:function(t){r.isSame(this.props.value,t.value)||this.setValue(this.props.value),r.isSame(this.props.validations,t.validations)&&r.isSame(this.props.required,t.required)||this.context.formsy.validate(this)},componentWillUnmount:function(){this.context.formsy.detachFromForm(this)},setValidations:function(t,i){this._validations=s(t)||{},this._requiredValidations=i===!0?{isDefaultRequiredValue:!0}:s(i)},setValue:function(t){this.setState({_value:t,_isPristine:!1},function(){this.context.formsy.validate(this)}.bind(this))},resetValue:function(){this.setState({_value:this.state._pristineValue,_isPristine:!0},function(){this.context.formsy.validate(this)})},getValue:function(){return this.state._value},hasValue:function(){return""!==this.state._value},getErrorMessage:function(){var t=this.getErrorMessages();return t.length?t[0]:null},getErrorMessages:function(){return!this.isValid()||this.showRequired()?this.state._externalError||this.state._validationError||[]:[]},isFormDisabled:function(){return this.context.formsy.isFormDisabled()},isValid:function(){return this.state._isValid},isPristine:function(){return this.state._isPristine},isFormSubmitted:function(){return this.state._formSubmitted},isRequired:function(){return!!this.props.required},showRequired:function(){return this.state._isRequired},showError:function(){return!this.showRequired()&&!this.isValid()},isValidValue:function(t){return this.context.formsy.isValidValue.call(null,this,t)}}}).call(i,function(){return this}())},function(t,i){"use strict";t.exports={arraysDiffer:function(t,i){var e=!1;return t.length!==i.length?e=!0:t.forEach(function(t,r){this.isSame(t,i[r])||(e=!0)},this),e},objectsDiffer:function(t,i){var e=!1;return Object.keys(t).length!==Object.keys(i).length?e=!0:Object.keys(t).forEach(function(r){this.isSame(t[r],i[r])||(e=!0)},this),e},isSame:function(t,i){return typeof t!=typeof i?!1:Array.isArray(t)?!this.arraysDiffer(t,i):"object"==typeof t&&null!==t&&null!==i?!this.objectsDiffer(t,i):t===i},find:function(t,i){for(var e=0,r=t.length;r>e;e++){var n=t[e];if(i(n))return n}return null}}},function(t,i,e){(function(i){"use strict";var r=Object.assign||function(t){for(var i=1;i=n}};t.exports=n},function(t,i){t.exports=function(t){return Object.keys(t).reduce(function(i,e){var r=e.match(/[^\[]*/i),n=e.match(/\[.*?\]/g)||[];n=[r[0]].concat(n).map(function(t){return t.replace(/\[|\]/g,"")});for(var s=i;n.length;){var u=n.shift();u in s?s=s[u]:(s[u]=n.length?isNaN(n[0])?{}:[]:t[e],s=s[u])}return i},{})}}])}); +!function(t,i){"object"==typeof exports&&"object"==typeof module?module.exports=i(require("react")):"function"==typeof define&&define.amd?define(["react"],i):"object"==typeof exports?exports.Formsy=i(require("react")):t.Formsy=i(t.react)}(this,function(t){return function(t){function i(r){if(e[r])return e[r].exports;var n=e[r]={exports:{},id:r,loaded:!1};return t[r].call(n.exports,n,n.exports,i),n.loaded=!0,n.exports}var e={};return i.m=t,i.c=e,i.p="",i(0)}([function(t,i,e){(function(i){"use strict";var r=Object.assign||function(t){for(var i=1;i0&&this.setInputValidationErrors(this.props.validationErrors);var t=this.inputs.map(function(t){return t.props.name});a.arraysDiffer(this.prevInputNames,t)&&this.validateForm()},reset:function(t){this.setFormPristine(!0),this.resetModel(t)},submit:function(t){t&&t.preventDefault(),this.setFormPristine(!1);var i=this.getModel();i=this.mapModel(i),this.props.onSubmit(i,this.resetModel,this.updateInputsWithError),this.state.isValid?this.props.onValidSubmit(i,this.resetModel,this.updateInputsWithError):this.props.onInvalidSubmit(i,this.resetModel,this.updateInputsWithError)},mapModel:function(t){return this.props.mapping?this.props.mapping(t):o(Object.keys(t).reduce(function(i,e){for(var r=e.split("."),n=i;r.length;){var s=r.shift();n=n[s]=r.length?n[s]||{}:t[e]}return i},{}))},getModel:function(){return this.inputs.reduce(function(t,i){var e=i.props.name;return t[e]=i.state._value,t},{})},resetModel:function(t){this.inputs.forEach(function(i){var e=i.props.name;t&&t[e]?i.setValue(t[e]):i.resetValue()}),this.validateForm()},setInputValidationErrors:function(t){this.inputs.forEach(function(i){var e=i.props.name,r=[{_isValid:!(e in t),_validationError:"string"==typeof t[e]?[t[e]]:t[e]}];i.setState.apply(i,r)})},isChanged:function(){return!a.isSame(this.getPristineValues(),this.getCurrentValues())},getPristineValues:function(){return this.inputs.reduce(function(t,i){var e=i.props.name;return t[e]=i.props.value,t},{})},updateInputsWithError:function(t){var i=this;Object.keys(t).forEach(function(e,r){var n=a.find(i.inputs,function(t){return t.props.name===e});if(!n)throw new Error("You are trying to update an input that does not exist. Verify errors object with input names. "+JSON.stringify(t));var s=[{_isValid:i.props.preventExternalInvalidation||!1,_externalError:"string"==typeof t[e]?[t[e]]:t[e]}];n.setState.apply(n,s)})},isFormDisabled:function(){return this.props.disabled},getCurrentValues:function(){return this.inputs.reduce(function(t,i){var e=i.props.name;return t[e]=i.state._value,t},{})},setFormPristine:function(t){this.setState({_formSubmitted:!t}),this.inputs.forEach(function(i,e){i.setState({_formSubmitted:!t,_isPristine:t})})},validate:function(t){this.state.canChange&&this.props.onChange(this.getCurrentValues(),this.isChanged());var i=this.runValidation(t);t.setState({_isValid:i.isValid,_isRequired:i.isRequired,_validationError:i.error,_externalError:null},this.validateForm)},runValidation:function(t,i){var e=this.getCurrentValues(),r=t.props.validationErrors,n=t.props.validationError;i=2===arguments.length?i:t.state._value;var s=this.runRules(i,e,t._validations),u=this.runRules(i,e,t._requiredValidations);"function"==typeof t.validate&&(s.failed=t.validate()?[]:["failed"]);var o=Object.keys(t._requiredValidations).length?!!u.success.length:!1,a=!(s.failed.length||this.props.validationErrors&&this.props.validationErrors[t.props.name]);return{isRequired:o,isValid:o?!1:a,error:function(){if(a&&!o)return c;if(s.errors.length)return s.errors;if(this.props.validationErrors&&this.props.validationErrors[t.props.name])return"string"==typeof this.props.validationErrors[t.props.name]?[this.props.validationErrors[t.props.name]]:this.props.validationErrors[t.props.name];if(o){var i=r[u.success[0]];return i?[i]:null}return s.failed.length?s.failed.map(function(t){return r[t]?r[t]:n}).filter(function(t,i,e){return e.indexOf(t)===i}):void 0}.call(this)}},runRules:function(t,i,e){var r={errors:[],failed:[],success:[]};return Object.keys(e).length&&Object.keys(e).forEach(function(n){if(u[n]&&"function"==typeof e[n])throw new Error("Formsy does not allow you to override default validations: "+n);if(!u[n]&&"function"!=typeof e[n])throw new Error("Formsy does not have the validation rule: "+n);if("function"==typeof e[n]){var s=e[n](i,t);return void("string"==typeof s?(r.errors.push(s),r.failed.push(n)):s||r.failed.push(n))}if("function"!=typeof e[n]){var s=u[n](i,t,e[n]);return void("string"==typeof s?(r.errors.push(s),r.failed.push(n)):s?r.success.push(n):r.failed.push(n))}return r.success.push(n)}),r},validateForm:function(){var t=this,i=function(){var t=this.inputs.every(function(t){return t.state._isValid});this.setState({isValid:t}),t?this.props.onValid():this.props.onInvalid(),this.setState({canChange:!0})}.bind(this);this.inputs.forEach(function(e,r){var n=t.runValidation(e);n.isValid&&e.state._externalError&&(n.isValid=!1),e.setState({_isValid:n.isValid,_isRequired:n.isRequired,_validationError:n.error,_externalError:!n.isValid&&e.state._externalError?e.state._externalError:null},r===t.inputs.length-1?i:null)}),!this.inputs.length&&this.isMounted()&&this.setState({canChange:!0})},attachToForm:function(t){-1===this.inputs.indexOf(t)&&this.inputs.push(t),this.validate(t)},detachFromForm:function(t){var i=this.inputs.indexOf(t);-1!==i&&(this.inputs=this.inputs.slice(0,i).concat(this.inputs.slice(i+1))),this.validateForm()},render:function(){return n.createElement("form",r({},this.props,{onSubmit:this.submit}),this.props.children)}}),i.exports||i.module||i.define&&i.define.amd||(i.Formsy=s),t.exports=s}).call(i,function(){return this}())},function(i,e){i.exports=t},function(t,i,e){(function(i){"use strict";var r=e(3),n=i.React||e(1),s=function(t){return"string"==typeof t?t.split(/\,(?![^{\[]*[}\]])/g).reduce(function(t,i){var e=i.split(":"),r=e.shift();if(e=e.map(function(t){try{return JSON.parse(t)}catch(i){return t}}),e.length>1)throw new Error("Formsy does not support multiple args on string validations. Use object format of validations instead.");return t[r]=e.length?e[0]:!0,t},{}):t||{}};t.exports={getInitialState:function(){return{_value:this.props.value,_isRequired:!1,_isValid:!0,_isPristine:!0,_pristineValue:this.props.value,_validationError:[],_externalError:null,_formSubmitted:!1}},contextTypes:{formsy:n.PropTypes.object},getDefaultProps:function(){return{validationError:"",validationErrors:{}}},componentWillMount:function(){var t=function(){this.setValidations(this.props.validations,this.props.required),this.context.formsy.attachToForm(this)}.bind(this);if(!this.props.name)throw new Error("Form Input requires a name property when used");t()},componentWillReceiveProps:function(t){this.setValidations(t.validations,t.required)},componentDidUpdate:function(t){r.isSame(this.props.value,t.value)||this.setValue(this.props.value),r.isSame(this.props.validations,t.validations)&&r.isSame(this.props.required,t.required)||this.context.formsy.validate(this)},componentWillUnmount:function(){this.context.formsy.detachFromForm(this)},setValidations:function(t,i){this._validations=s(t)||{},this._requiredValidations=i===!0?{isDefaultRequiredValue:!0}:s(i)},setValue:function(t){this.setState({_value:t,_isPristine:!1},function(){this.context.formsy.validate(this)}.bind(this))},resetValue:function(){this.setState({_value:this.state._pristineValue,_isPristine:!0},function(){this.context.formsy.validate(this)})},getValue:function(){return this.state._value},hasValue:function(){return""!==this.state._value},getErrorMessage:function(){var t=this.getErrorMessages();return t.length?t[0]:null},getErrorMessages:function(){return!this.isValid()||this.showRequired()?this.state._externalError||this.state._validationError||[]:[]},isFormDisabled:function(){return this.context.formsy.isFormDisabled()},isValid:function(){return this.state._isValid},isPristine:function(){return this.state._isPristine},isFormSubmitted:function(){return this.state._formSubmitted},isRequired:function(){return!!this.props.required},showRequired:function(){return this.state._isRequired},showError:function(){return!this.showRequired()&&!this.isValid()},isValidValue:function(t){return this.context.formsy.isValidValue.call(null,this,t)}}}).call(i,function(){return this}())},function(t,i){"use strict";t.exports={arraysDiffer:function(t,i){var e=!1;return t.length!==i.length?e=!0:t.forEach(function(t,r){this.isSame(t,i[r])||(e=!0)},this),e},objectsDiffer:function(t,i){var e=!1;return Object.keys(t).length!==Object.keys(i).length?e=!0:Object.keys(t).forEach(function(r){this.isSame(t[r],i[r])||(e=!0)},this),e},isSame:function(t,i){return typeof t!=typeof i?!1:Array.isArray(t)?!this.arraysDiffer(t,i):"object"==typeof t&&null!==t&&null!==i?!this.objectsDiffer(t,i):t===i},find:function(t,i){for(var e=0,r=t.length;r>e;e++){var n=t[e];if(i(n))return n}return null}}},function(t,i,e){(function(i){"use strict";var r=Object.assign||function(t){for(var i=1;i=n}};t.exports=n},function(t,i){t.exports=function(t){return Object.keys(t).reduce(function(i,e){var r=e.match(/[^\[]*/i),n=e.match(/\[.*?\]/g)||[];n=[r[0]].concat(n).map(function(t){return t.replace(/\[|\]/g,"")});for(var s=i;n.length;){var u=n.shift();u in s?s=s[u]:(s[u]=n.length?isNaN(n[0])?{}:[]:t[e],s=s[u])}return i},{})}}])}); //# sourceMappingURL=formsy-react.js.map \ No newline at end of file diff --git a/release/formsy-react.js.map b/release/formsy-react.js.map index f685667..e457c34 100644 --- a/release/formsy-react.js.map +++ b/release/formsy-react.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///formsy-react.js","webpack:///webpack/bootstrap 023d21f460c38cad7d13","webpack:///D:/Dev/git/React/formsy-react/src/main.js","webpack:///external \"react\"","webpack:///D:/Dev/git/React/formsy-react/src/Mixin.js","webpack:///D:/Dev/git/React/formsy-react/src/utils.js","webpack:///D:/Dev/git/React/formsy-react/src/Decorator.js","webpack:///D:/Dev/git/React/formsy-react/src/HOC.js","webpack:///D:/Dev/git/React/formsy-react/src/validationRules.js","webpack:///./~/form-data-to-object/index.js"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_1__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","global","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","React","Formsy","validationRules","formDataToObject","utils","Mixin","HOC","Decorator","options","emptyArray","defaults","passedOptions","addValidationRule","name","func","Form","createClass","displayName","getInitialState","isValid","isSubmitting","canChange","getDefaultProps","onSuccess","onError","onSubmit","onValidSubmit","onInvalidSubmit","onSubmitted","onValid","onInvalid","onChange","validationErrors","preventExternalInvalidation","childContextTypes","formsy","PropTypes","object","getChildContext","_this","attachToForm","detachFromForm","validate","isFormDisabled","isValidValue","component","value","runValidation","componentWillMount","inputs","componentDidMount","validateForm","componentWillUpdate","prevInputNames","map","props","componentDidUpdate","keys","setInputValidationErrors","newInputNames","arraysDiffer","reset","data","setFormPristine","resetModel","submit","event","preventDefault","model","updateModel","mapModel","updateInputsWithError","state","mapping","reduce","mappedModel","keyArray","split","base","currentKey","shift","_value","forEach","setValue","resetValue","errors","args","_isValid","_validationError","setState","apply","isChanged","isSame","getPristineValues","getCurrentValues","_this2","index","find","Error","JSON","stringify","_externalError","disabled","isPristine","_formSubmitted","_isPristine","validation","_isRequired","isRequired","error","currentValues","validationError","validationResults","runRules","_validations","requiredResults","_requiredValidations","failed","success","filter","x","pos","arr","indexOf","validations","results","validationMethod","push","_this3","onValidationComplete","allIsValid","every","bind","isMounted","componentPos","slice","concat","render","createElement","children","convertValidationsToObject","validateMethod","arg","parse","e","_pristineValue","contextTypes","configure","setValidations","required","context","componentWillReceiveProps","nextProps","prevProps","componentWillUnmount","isDefaultRequiredValue","getValue","hasValue","getErrorMessage","messages","getErrorMessages","showRequired","isFormSubmitted","showError","a","b","isDifferent","item","objectsDiffer","Array","isArray","collection","fn","l","Component","mixins","_isExisty","undefined","isEmpty","values","isExisty","matchRegexp","regexp","test","isUndefined","isEmptyString","isEmail","isUrl","isTrue","isFalse","isNumeric","isAlpha","isAlphanumeric","isInt","isFloat","isWords","isSpecialWords","isLength","equals","eql","equalsField","field","maxLength","minLength","output","parentKey","match","paths","replace","currentPath","pathKey","isNaN"],"mappings":"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","file":"formsy-react.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Formsy\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"Formsy\"] = factory(root[\"react\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Formsy\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"Formsy\"] = factory(root[\"react\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar React = global.React || __webpack_require__(1);\n\tvar Formsy = {};\n\tvar validationRules = __webpack_require__(6);\n\tvar formDataToObject = __webpack_require__(7);\n\tvar utils = __webpack_require__(3);\n\tvar Mixin = __webpack_require__(2);\n\tvar HOC = __webpack_require__(5);\n\tvar Decorator = __webpack_require__(4);\n\tvar options = {};\n\tvar emptyArray = [];\n\t\n\tFormsy.Mixin = Mixin;\n\tFormsy.HOC = HOC;\n\tFormsy.Decorator = Decorator;\n\t\n\tFormsy.defaults = function (passedOptions) {\n\t options = passedOptions;\n\t};\n\t\n\tFormsy.addValidationRule = function (name, func) {\n\t validationRules[name] = func;\n\t};\n\t\n\tFormsy.Form = React.createClass({\n\t displayName: 'Formsy',\n\t getInitialState: function getInitialState() {\n\t return {\n\t isValid: true,\n\t isSubmitting: false,\n\t canChange: false\n\t };\n\t },\n\t getDefaultProps: function getDefaultProps() {\n\t return {\n\t onSuccess: function onSuccess() {},\n\t onError: function onError() {},\n\t onSubmit: function onSubmit() {},\n\t onValidSubmit: function onValidSubmit() {},\n\t onInvalidSubmit: function onInvalidSubmit() {},\n\t onSubmitted: function onSubmitted() {},\n\t onValid: function onValid() {},\n\t onInvalid: function onInvalid() {},\n\t onChange: function onChange() {},\n\t validationErrors: null,\n\t preventExternalInvalidation: false\n\t };\n\t },\n\t\n\t childContextTypes: {\n\t formsy: React.PropTypes.object\n\t },\n\t getChildContext: function getChildContext() {\n\t var _this = this;\n\t\n\t return {\n\t formsy: {\n\t attachToForm: this.attachToForm,\n\t detachFromForm: this.detachFromForm,\n\t validate: this.validate,\n\t isFormDisabled: this.isFormDisabled,\n\t isValidValue: function isValidValue(component, value) {\n\t return _this.runValidation(component, value).isValid;\n\t }\n\t }\n\t };\n\t },\n\t\n\t // Add a map to store the inputs of the form, a model to store\n\t // the values of the form and register child inputs\n\t componentWillMount: function componentWillMount() {\n\t this.inputs = [];\n\t },\n\t\n\t componentDidMount: function componentDidMount() {\n\t this.validateForm();\n\t },\n\t\n\t componentWillUpdate: function componentWillUpdate() {\n\t // Keep a reference to input names before form updates,\n\t // to check if inputs has changed after render\n\t this.prevInputNames = this.inputs.map(function (component) {\n\t return component.props.name;\n\t });\n\t },\n\t\n\t componentDidUpdate: function componentDidUpdate() {\n\t\n\t if (this.props.validationErrors && typeof this.props.validationErrors === 'object' && Object.keys(this.props.validationErrors).length > 0) {\n\t this.setInputValidationErrors(this.props.validationErrors);\n\t }\n\t\n\t var newInputNames = this.inputs.map(function (component) {\n\t return component.props.name;\n\t });\n\t if (utils.arraysDiffer(this.prevInputNames, newInputNames)) {\n\t this.validateForm();\n\t }\n\t },\n\t\n\t // Allow resetting to specified data\n\t reset: function reset(data) {\n\t this.setFormPristine(true);\n\t this.resetModel(data);\n\t },\n\t\n\t // Update model, submit to url prop and send the model\n\t submit: function submit(event) {\n\t\n\t event && event.preventDefault();\n\t\n\t // Trigger form as not pristine.\n\t // If any inputs have not been touched yet this will make them dirty\n\t // so validation becomes visible (if based on isPristine)\n\t this.setFormPristine(false);\n\t var model = this.updateModel();\n\t model = this.mapModel(model);\n\t this.props.onSubmit(model, this.resetModel, this.updateInputsWithError);\n\t this.state.isValid ? this.props.onValidSubmit(model, this.resetModel, this.updateInputsWithError) : this.props.onInvalidSubmit(model, this.resetModel, this.updateInputsWithError);\n\t },\n\t\n\t mapModel: function mapModel(model) {\n\t\n\t if (this.props.mapping) {\n\t return this.props.mapping(model);\n\t } else {\n\t return formDataToObject(Object.keys(model).reduce(function (mappedModel, key) {\n\t\n\t var keyArray = key.split('.');\n\t var base = mappedModel;\n\t while (keyArray.length) {\n\t var currentKey = keyArray.shift();\n\t base = base[currentKey] = keyArray.length ? base[currentKey] || {} : model[key];\n\t }\n\t\n\t return mappedModel;\n\t }, {}));\n\t }\n\t },\n\t\n\t // Goes through all registered components and\n\t // updates the model values\n\t updateModel: function updateModel() {\n\t return this.inputs.reduce(function (model, component) {\n\t var name = component.props.name;\n\t model[name] = component.state._value;\n\t return model;\n\t }, {});\n\t },\n\t\n\t // Reset each key in the model to the original / initial / specified value\n\t resetModel: function resetModel(data) {\n\t this.inputs.forEach(function (component) {\n\t var name = component.props.name;\n\t if (data && data[name]) {\n\t component.setValue(data[name]);\n\t } else {\n\t component.resetValue();\n\t }\n\t });\n\t this.validateForm();\n\t },\n\t\n\t setInputValidationErrors: function setInputValidationErrors(errors) {\n\t this.inputs.forEach(function (component) {\n\t var name = component.props.name;\n\t var args = [{\n\t _isValid: !(name in errors),\n\t _validationError: typeof errors[name] === 'string' ? [errors[name]] : errors[name]\n\t }];\n\t component.setState.apply(component, args);\n\t });\n\t },\n\t\n\t // Checks if the values have changed from their initial value\n\t isChanged: function isChanged() {\n\t return !utils.isSame(this.getPristineValues(), this.getCurrentValues());\n\t },\n\t\n\t getPristineValues: function getPristineValues() {\n\t return this.inputs.reduce(function (data, component) {\n\t var name = component.props.name;\n\t data[name] = component.props.value;\n\t return data;\n\t }, {});\n\t },\n\t\n\t // Go through errors from server and grab the components\n\t // stored in the inputs map. Change their state to invalid\n\t // and set the serverError message\n\t updateInputsWithError: function updateInputsWithError(errors) {\n\t var _this2 = this;\n\t\n\t Object.keys(errors).forEach(function (name, index) {\n\t var component = utils.find(_this2.inputs, function (component) {\n\t return component.props.name === name;\n\t });\n\t if (!component) {\n\t throw new Error('You are trying to update an input that does not exist. ' + 'Verify errors object with input names. ' + JSON.stringify(errors));\n\t }\n\t var args = [{\n\t _isValid: _this2.props.preventExternalInvalidation || false,\n\t _externalError: typeof errors[name] === 'string' ? [errors[name]] : errors[name]\n\t }];\n\t component.setState.apply(component, args);\n\t });\n\t },\n\t\n\t isFormDisabled: function isFormDisabled() {\n\t return this.props.disabled;\n\t },\n\t\n\t getCurrentValues: function getCurrentValues() {\n\t return this.inputs.reduce(function (data, component) {\n\t var name = component.props.name;\n\t data[name] = component.state._value;\n\t return data;\n\t }, {});\n\t },\n\t\n\t setFormPristine: function setFormPristine(isPristine) {\n\t this.setState({\n\t _formSubmitted: !isPristine\n\t });\n\t\n\t // Iterate through each component and set it as pristine\n\t // or \"dirty\".\n\t this.inputs.forEach(function (component, index) {\n\t component.setState({\n\t _formSubmitted: !isPristine,\n\t _isPristine: isPristine\n\t });\n\t });\n\t },\n\t\n\t // Use the binded values and the actual input value to\n\t // validate the input and set its state. Then check the\n\t // state of the form itself\n\t validate: function validate(component) {\n\t\n\t // Trigger onChange\n\t if (this.state.canChange) {\n\t this.props.onChange(this.getCurrentValues(), this.isChanged());\n\t }\n\t\n\t var validation = this.runValidation(component);\n\t // Run through the validations, split them up and call\n\t // the validator IF there is a value or it is required\n\t component.setState({\n\t _isValid: validation.isValid,\n\t _isRequired: validation.isRequired,\n\t _validationError: validation.error,\n\t _externalError: null\n\t }, this.validateForm);\n\t },\n\t\n\t // Checks validation on current value or a passed value\n\t runValidation: function runValidation(component, value) {\n\t\n\t var currentValues = this.getCurrentValues();\n\t var validationErrors = component.props.validationErrors;\n\t var validationError = component.props.validationError;\n\t value = arguments.length === 2 ? value : component.state._value;\n\t\n\t var validationResults = this.runRules(value, currentValues, component._validations);\n\t var requiredResults = this.runRules(value, currentValues, component._requiredValidations);\n\t\n\t // the component defines an explicit validate function\n\t if (typeof component.validate === \"function\") {\n\t validationResults.failed = component.validate() ? [] : ['failed'];\n\t }\n\t\n\t var isRequired = Object.keys(component._requiredValidations).length ? !!requiredResults.success.length : false;\n\t var isValid = !validationResults.failed.length && !(this.props.validationErrors && this.props.validationErrors[component.props.name]);\n\t\n\t return {\n\t isRequired: isRequired,\n\t isValid: isRequired ? false : isValid,\n\t error: (function () {\n\t\n\t if (isValid && !isRequired) {\n\t return emptyArray;\n\t }\n\t\n\t if (validationResults.errors.length) {\n\t return validationResults.errors;\n\t }\n\t\n\t if (this.props.validationErrors && this.props.validationErrors[component.props.name]) {\n\t return typeof this.props.validationErrors[component.props.name] === 'string' ? [this.props.validationErrors[component.props.name]] : this.props.validationErrors[component.props.name];\n\t }\n\t\n\t if (isRequired) {\n\t var error = validationErrors[requiredResults.success[0]];\n\t return error ? [error] : null;\n\t }\n\t\n\t if (validationResults.failed.length) {\n\t return validationResults.failed.map(function (failed) {\n\t return validationErrors[failed] ? validationErrors[failed] : validationError;\n\t }).filter(function (x, pos, arr) {\n\t // Remove duplicates\n\t return arr.indexOf(x) === pos;\n\t });\n\t }\n\t }).call(this)\n\t };\n\t },\n\t\n\t runRules: function runRules(value, currentValues, validations) {\n\t\n\t var results = {\n\t errors: [],\n\t failed: [],\n\t success: []\n\t };\n\t if (Object.keys(validations).length) {\n\t Object.keys(validations).forEach(function (validationMethod) {\n\t\n\t if (validationRules[validationMethod] && typeof validations[validationMethod] === 'function') {\n\t throw new Error('Formsy does not allow you to override default validations: ' + validationMethod);\n\t }\n\t\n\t if (!validationRules[validationMethod] && typeof validations[validationMethod] !== 'function') {\n\t throw new Error('Formsy does not have the validation rule: ' + validationMethod);\n\t }\n\t\n\t if (typeof validations[validationMethod] === 'function') {\n\t var validation = validations[validationMethod](currentValues, value);\n\t if (typeof validation === 'string') {\n\t results.errors.push(validation);\n\t results.failed.push(validationMethod);\n\t } else if (!validation) {\n\t results.failed.push(validationMethod);\n\t }\n\t return;\n\t } else if (typeof validations[validationMethod] !== 'function') {\n\t var validation = validationRules[validationMethod](currentValues, value, validations[validationMethod]);\n\t if (typeof validation === 'string') {\n\t results.errors.push(validation);\n\t results.failed.push(validationMethod);\n\t } else if (!validation) {\n\t results.failed.push(validationMethod);\n\t } else {\n\t results.success.push(validationMethod);\n\t }\n\t return;\n\t }\n\t\n\t return results.success.push(validationMethod);\n\t });\n\t }\n\t\n\t return results;\n\t },\n\t\n\t // Validate the form by going through all child input components\n\t // and check their state\n\t validateForm: function validateForm() {\n\t var _this3 = this;\n\t\n\t // We need a callback as we are validating all inputs again. This will\n\t // run when the last component has set its state\n\t var onValidationComplete = (function () {\n\t var allIsValid = this.inputs.every(function (component) {\n\t return component.state._isValid;\n\t });\n\t\n\t this.setState({\n\t isValid: allIsValid\n\t });\n\t\n\t if (allIsValid) {\n\t this.props.onValid();\n\t } else {\n\t this.props.onInvalid();\n\t }\n\t\n\t // Tell the form that it can start to trigger change events\n\t this.setState({\n\t canChange: true\n\t });\n\t }).bind(this);\n\t\n\t // Run validation again in case affected by other inputs. The\n\t // last component validated will run the onValidationComplete callback\n\t this.inputs.forEach(function (component, index) {\n\t var validation = _this3.runValidation(component);\n\t if (validation.isValid && component.state._externalError) {\n\t validation.isValid = false;\n\t }\n\t component.setState({\n\t _isValid: validation.isValid,\n\t _isRequired: validation.isRequired,\n\t _validationError: validation.error,\n\t _externalError: !validation.isValid && component.state._externalError ? component.state._externalError : null\n\t }, index === _this3.inputs.length - 1 ? onValidationComplete : null);\n\t });\n\t\n\t // If there are no inputs, set state where form is ready to trigger\n\t // change event. New inputs might be added later\n\t if (!this.inputs.length && this.isMounted()) {\n\t this.setState({\n\t canChange: true\n\t });\n\t }\n\t },\n\t\n\t // Method put on each input component to register\n\t // itself to the form\n\t attachToForm: function attachToForm(component) {\n\t\n\t if (this.inputs.indexOf(component) === -1) {\n\t this.inputs.push(component);\n\t }\n\t\n\t this.validate(component);\n\t },\n\t\n\t // Method put on each input component to unregister\n\t // itself from the form\n\t detachFromForm: function detachFromForm(component) {\n\t var componentPos = this.inputs.indexOf(component);\n\t\n\t if (componentPos !== -1) {\n\t this.inputs = this.inputs.slice(0, componentPos).concat(this.inputs.slice(componentPos + 1));\n\t }\n\t\n\t this.validateForm();\n\t },\n\t render: function render() {\n\t\n\t return React.createElement(\n\t 'form',\n\t _extends({}, this.props, { onSubmit: this.submit }),\n\t this.props.children\n\t );\n\t }\n\t});\n\t\n\tif (!global.exports && !global.module && (!global.define || !global.define.amd)) {\n\t global.Formsy = Formsy;\n\t}\n\t\n\tmodule.exports = Formsy;\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\tvar React = global.React || __webpack_require__(1);\n\t\n\tvar convertValidationsToObject = function convertValidationsToObject(validations) {\n\t\n\t if (typeof validations === 'string') {\n\t\n\t return validations.split(/\\,(?![^{\\[]*[}\\]])/g).reduce(function (validations, validation) {\n\t var args = validation.split(':');\n\t var validateMethod = args.shift();\n\t\n\t args = args.map(function (arg) {\n\t try {\n\t return JSON.parse(arg);\n\t } catch (e) {\n\t return arg; // It is a string if it can not parse it\n\t }\n\t });\n\t\n\t if (args.length > 1) {\n\t throw new Error('Formsy does not support multiple args on string validations. Use object format of validations instead.');\n\t }\n\t\n\t validations[validateMethod] = args.length ? args[0] : true;\n\t return validations;\n\t }, {});\n\t }\n\t\n\t return validations || {};\n\t};\n\t\n\tmodule.exports = {\n\t getInitialState: function getInitialState() {\n\t return {\n\t _value: this.props.value,\n\t _isRequired: false,\n\t _isValid: true,\n\t _isPristine: true,\n\t _pristineValue: this.props.value,\n\t _validationError: [],\n\t _externalError: null,\n\t _formSubmitted: false\n\t };\n\t },\n\t contextTypes: {\n\t formsy: React.PropTypes.object // What about required?\n\t },\n\t getDefaultProps: function getDefaultProps() {\n\t return {\n\t validationError: '',\n\t validationErrors: {}\n\t };\n\t },\n\t\n\t componentWillMount: function componentWillMount() {\n\t var configure = (function () {\n\t this.setValidations(this.props.validations, this.props.required);\n\t\n\t // Pass a function instead?\n\t this.context.formsy.attachToForm(this);\n\t //this.props._attachToForm(this);\n\t }).bind(this);\n\t\n\t if (!this.props.name) {\n\t throw new Error('Form Input requires a name property when used');\n\t }\n\t\n\t /*\r\n\t if (!this.props._attachToForm) {\r\n\t return setTimeout(function () {\r\n\t if (!this.isMounted()) return;\r\n\t if (!this.props._attachToForm) {\r\n\t throw new Error('Form Mixin requires component to be nested in a Form');\r\n\t }\r\n\t configure();\r\n\t }.bind(this), 0);\r\n\t }\r\n\t */\n\t configure();\n\t },\n\t\n\t // We have to make the validate method is kept when new props are added\n\t componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\n\t this.setValidations(nextProps.validations, nextProps.required);\n\t },\n\t\n\t componentDidUpdate: function componentDidUpdate(prevProps) {\n\t\n\t // If the value passed has changed, set it. If value is not passed it will\n\t // internally update, and this will never run\n\t if (!utils.isSame(this.props.value, prevProps.value)) {\n\t this.setValue(this.props.value);\n\t }\n\t\n\t // If validations or required is changed, run a new validation\n\t if (!utils.isSame(this.props.validations, prevProps.validations) || !utils.isSame(this.props.required, prevProps.required)) {\n\t this.context.formsy.validate(this);\n\t }\n\t },\n\t\n\t // Detach it when component unmounts\n\t componentWillUnmount: function componentWillUnmount() {\n\t this.context.formsy.detachFromForm(this);\n\t //this.props._detachFromForm(this);\n\t },\n\t\n\t setValidations: function setValidations(validations, required) {\n\t\n\t // Add validations to the store itself as the props object can not be modified\n\t this._validations = convertValidationsToObject(validations) || {};\n\t this._requiredValidations = required === true ? { isDefaultRequiredValue: true } : convertValidationsToObject(required);\n\t },\n\t\n\t // We validate after the value has been set\n\t setValue: function setValue(value) {\n\t this.setState({\n\t _value: value,\n\t _isPristine: false\n\t }, (function () {\n\t this.context.formsy.validate(this);\n\t //this.props._validate(this);\n\t }).bind(this));\n\t },\n\t resetValue: function resetValue() {\n\t this.setState({\n\t _value: this.state._pristineValue,\n\t _isPristine: true\n\t }, function () {\n\t this.context.formsy.validate(this);\n\t //this.props._validate(this);\n\t });\n\t },\n\t getValue: function getValue() {\n\t return this.state._value;\n\t },\n\t hasValue: function hasValue() {\n\t return this.state._value !== '';\n\t },\n\t getErrorMessage: function getErrorMessage() {\n\t var messages = this.getErrorMessages();\n\t return messages.length ? messages[0] : null;\n\t },\n\t getErrorMessages: function getErrorMessages() {\n\t return !this.isValid() || this.showRequired() ? this.state._externalError || this.state._validationError || [] : [];\n\t },\n\t isFormDisabled: function isFormDisabled() {\n\t return this.context.formsy.isFormDisabled();\n\t //return this.props._isFormDisabled();\n\t },\n\t isValid: function isValid() {\n\t return this.state._isValid;\n\t },\n\t isPristine: function isPristine() {\n\t return this.state._isPristine;\n\t },\n\t isFormSubmitted: function isFormSubmitted() {\n\t return this.state._formSubmitted;\n\t },\n\t isRequired: function isRequired() {\n\t return !!this.props.required;\n\t },\n\t showRequired: function showRequired() {\n\t return this.state._isRequired;\n\t },\n\t showError: function showError() {\n\t return !this.showRequired() && !this.isValid();\n\t },\n\t isValidValue: function isValidValue(value) {\n\t return this.context.formsy.isValidValue.call(null, this, value);\n\t //return this.props._isValidValue.call(null, this, value);\n\t }\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = {\n\t arraysDiffer: function arraysDiffer(a, b) {\n\t var isDifferent = false;\n\t if (a.length !== b.length) {\n\t isDifferent = true;\n\t } else {\n\t a.forEach(function (item, index) {\n\t if (!this.isSame(item, b[index])) {\n\t isDifferent = true;\n\t }\n\t }, this);\n\t }\n\t return isDifferent;\n\t },\n\t\n\t objectsDiffer: function objectsDiffer(a, b) {\n\t var isDifferent = false;\n\t if (Object.keys(a).length !== Object.keys(b).length) {\n\t isDifferent = true;\n\t } else {\n\t Object.keys(a).forEach(function (key) {\n\t if (!this.isSame(a[key], b[key])) {\n\t isDifferent = true;\n\t }\n\t }, this);\n\t }\n\t return isDifferent;\n\t },\n\t\n\t isSame: function isSame(a, b) {\n\t if (typeof a !== typeof b) {\n\t return false;\n\t } else if (Array.isArray(a)) {\n\t return !this.arraysDiffer(a, b);\n\t } else if (typeof a === 'object' && a !== null && b !== null) {\n\t return !this.objectsDiffer(a, b);\n\t }\n\t\n\t return a === b;\n\t },\n\t\n\t find: function find(collection, fn) {\n\t for (var i = 0, l = collection.length; i < l; i++) {\n\t var item = collection[i];\n\t if (fn(item)) {\n\t return item;\n\t }\n\t }\n\t return null;\n\t }\n\t};\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar React = global.React || __webpack_require__(1);\n\tvar Mixin = __webpack_require__(2);\n\tmodule.exports = function () {\n\t return function (Component) {\n\t return React.createClass({\n\t mixins: [Mixin],\n\t render: function render() {\n\t return React.createElement(Component, _extends({\n\t setValidations: this.setValidations,\n\t setValue: this.setValue,\n\t resetValue: this.resetValue,\n\t getValue: this.getValue,\n\t hasValue: this.hasValue,\n\t getErrorMessage: this.getErrorMessage,\n\t getErrorMessages: this.getErrorMessages,\n\t isFormDisabled: this.isFormDisabled,\n\t isValid: this.isValid,\n\t isPristine: this.isPristine,\n\t isFormSubmitted: this.isFormSubmitted,\n\t isRequired: this.isRequired,\n\t showRequired: this.showRequired,\n\t showError: this.showError,\n\t isValidValue: this.isValidValue\n\t }, this.props));\n\t }\n\t });\n\t };\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar React = global.React || __webpack_require__(1);\n\tvar Mixin = __webpack_require__(2);\n\tmodule.exports = function (Component) {\n\t return React.createClass({\n\t mixins: [Mixin],\n\t render: function render() {\n\t return React.createElement(Component, _extends({\n\t setValidations: this.setValidations,\n\t setValue: this.setValue,\n\t resetValue: this.resetValue,\n\t getValue: this.getValue,\n\t hasValue: this.hasValue,\n\t getErrorMessage: this.getErrorMessage,\n\t getErrorMessages: this.getErrorMessages,\n\t isFormDisabled: this.isFormDisabled,\n\t isValid: this.isValid,\n\t isPristine: this.isPristine,\n\t isFormSubmitted: this.isFormSubmitted,\n\t isRequired: this.isRequired,\n\t showRequired: this.showRequired,\n\t showError: this.showError,\n\t isValidValue: this.isValidValue\n\t }, this.props));\n\t }\n\t });\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tvar _isExisty = function _isExisty(value) {\n\t return value !== null && value !== undefined;\n\t};\n\t\n\tvar isEmpty = function isEmpty(value) {\n\t return value === '';\n\t};\n\t\n\tvar validations = {\n\t isDefaultRequiredValue: function isDefaultRequiredValue(values, value) {\n\t return value === undefined || value === '';\n\t },\n\t isExisty: function isExisty(values, value) {\n\t return _isExisty(value);\n\t },\n\t matchRegexp: function matchRegexp(values, value, regexp) {\n\t return !_isExisty(value) || isEmpty(value) || regexp.test(value);\n\t },\n\t isUndefined: function isUndefined(values, value) {\n\t return value === undefined;\n\t },\n\t isEmptyString: function isEmptyString(values, value) {\n\t return isEmpty(value);\n\t },\n\t isEmail: function isEmail(values, value) {\n\t return validations.matchRegexp(values, value, /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i);\n\t },\n\t isUrl: function isUrl(values, value) {\n\t return validations.matchRegexp(values, value, /^(https?|s?ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i);\n\t },\n\t isTrue: function isTrue(values, value) {\n\t return value === true;\n\t },\n\t isFalse: function isFalse(values, value) {\n\t return value === false;\n\t },\n\t isNumeric: function isNumeric(values, value) {\n\t if (typeof value === 'number') {\n\t return true;\n\t }\n\t return validations.matchRegexp(values, value, /^[-+]?(?:\\d*[.])?\\d+$/);\n\t },\n\t isAlpha: function isAlpha(values, value) {\n\t return validations.matchRegexp(values, value, /^[A-Z]+$/i);\n\t },\n\t isAlphanumeric: function isAlphanumeric(values, value) {\n\t return validations.matchRegexp(values, value, /^[0-9A-Z]+$/i);\n\t },\n\t isInt: function isInt(values, value) {\n\t return validations.matchRegexp(values, value, /^(?:[-+]?(?:0|[1-9]\\d*))$/);\n\t },\n\t isFloat: function isFloat(values, value) {\n\t return validations.matchRegexp(values, value, /^(?:[-+]?(?:\\d+))?(?:\\.\\d*)?(?:[eE][\\+\\-]?(?:\\d+))?$/);\n\t },\n\t isWords: function isWords(values, value) {\n\t return validations.matchRegexp(values, value, /^[A-Z\\s]+$/i);\n\t },\n\t isSpecialWords: function isSpecialWords(values, value) {\n\t return validations.matchRegexp(values, value, /^[A-Z\\s\\u00C0-\\u017F]+$/i);\n\t },\n\t isLength: function isLength(values, value, length) {\n\t return !_isExisty(value) || isEmpty(value) || value.length === length;\n\t },\n\t equals: function equals(values, value, eql) {\n\t return !_isExisty(value) || isEmpty(value) || value == eql;\n\t },\n\t equalsField: function equalsField(values, value, field) {\n\t return value == values[field];\n\t },\n\t maxLength: function maxLength(values, value, length) {\n\t return !_isExisty(value) || value.length <= length;\n\t },\n\t minLength: function minLength(values, value, length) {\n\t return !_isExisty(value) || isEmpty(value) || value.length >= length;\n\t }\n\t};\n\t\n\tmodule.exports = validations;\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function (source) {\n\t\n\t\n\t // \"foo[0]\"\n\t return Object.keys(source).reduce(function (output, key) {\n\t\n\t var parentKey = key.match(/[^\\[]*/i);\n\t var paths = key.match(/\\[.*?\\]/g) || [];\n\t paths = [parentKey[0]].concat(paths).map(function (key) {\n\t return key.replace(/\\[|\\]/g, '');\n\t });\n\t\n\t var currentPath = output;\n\t while (paths.length) {\n\t\n\t var pathKey = paths.shift();\n\t\n\t if (pathKey in currentPath) {\n\t currentPath = currentPath[pathKey];\n\t } else {\n\t currentPath[pathKey] = paths.length ? isNaN(paths[0]) ? {} : [] : source[key];\n\t currentPath = currentPath[pathKey];\n\t }\n\t\n\t }\n\t\n\t return output;\n\t\n\t }, {});\n\t\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** formsy-react.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 023d21f460c38cad7d13\n **/","var React = global.React || require('react');\nvar Formsy = {};\nvar validationRules = require('./validationRules.js');\nvar formDataToObject = require('form-data-to-object');\nvar utils = require('./utils.js');\nvar Mixin = require('./Mixin.js');\nvar HOC = require('./HOC.js');\nvar Decorator = require('./Decorator.js');\nvar options = {};\nvar emptyArray = [];\n\nFormsy.Mixin = Mixin;\nFormsy.HOC = HOC;\nFormsy.Decorator = Decorator;\n\nFormsy.defaults = function (passedOptions) {\n options = passedOptions;\n};\n\nFormsy.addValidationRule = function (name, func) {\n validationRules[name] = func;\n};\n\nFormsy.Form = React.createClass({\n displayName: 'Formsy',\n getInitialState: function () {\n return {\n isValid: true,\n isSubmitting: false,\n canChange: false\n };\n },\n getDefaultProps: function () {\n return {\n onSuccess: function () {},\n onError: function () {},\n onSubmit: function () {},\n onValidSubmit: function () {},\n onInvalidSubmit: function () {},\n onSubmitted: function () {},\n onValid: function () {},\n onInvalid: function () {},\n onChange: function () {},\n validationErrors: null,\n preventExternalInvalidation: false\n };\n },\n\n childContextTypes: {\n formsy: React.PropTypes.object\n },\n getChildContext: function () {\n return {\n formsy: {\n attachToForm: this.attachToForm,\n detachFromForm: this.detachFromForm,\n validate: this.validate,\n isFormDisabled: this.isFormDisabled,\n isValidValue: (component, value) => {\n return this.runValidation(component, value).isValid;\n }\n }\n }\n },\n\n // Add a map to store the inputs of the form, a model to store\n // the values of the form and register child inputs\n componentWillMount: function () {\n this.inputs = [];\n },\n\n componentDidMount: function () {\n this.validateForm();\n },\n\n componentWillUpdate: function () {\n // Keep a reference to input names before form updates,\n // to check if inputs has changed after render\n this.prevInputNames = this.inputs.map(component => component.props.name);\n },\n\n componentDidUpdate: function () {\n\n if (this.props.validationErrors && typeof this.props.validationErrors === 'object' && Object.keys(this.props.validationErrors).length > 0) {\n this.setInputValidationErrors(this.props.validationErrors);\n }\n\n var newInputNames = this.inputs.map(component => component.props.name);\n if (utils.arraysDiffer(this.prevInputNames, newInputNames)) {\n this.validateForm();\n }\n\n },\n\n // Allow resetting to specified data\n reset: function (data) {\n this.setFormPristine(true);\n this.resetModel(data);\n },\n\n // Update model, submit to url prop and send the model\n submit: function (event) {\n\n event && event.preventDefault();\n\n // Trigger form as not pristine.\n // If any inputs have not been touched yet this will make them dirty\n // so validation becomes visible (if based on isPristine)\n this.setFormPristine(false);\n var model = this.updateModel();\n model = this.mapModel(model);\n this.props.onSubmit(model, this.resetModel, this.updateInputsWithError);\n this.state.isValid ? this.props.onValidSubmit(model, this.resetModel, this.updateInputsWithError) : this.props.onInvalidSubmit(model, this.resetModel, this.updateInputsWithError);\n\n },\n\n mapModel: function (model) {\n\n if (this.props.mapping) {\n return this.props.mapping(model)\n } else {\n return formDataToObject(Object.keys(model).reduce((mappedModel, key) => {\n\n var keyArray = key.split('.');\n var base = mappedModel;\n while (keyArray.length) {\n var currentKey = keyArray.shift();\n base = (base[currentKey] = keyArray.length ? base[currentKey] || {} : model[key]);\n }\n\n return mappedModel;\n\n }, {}));\n }\n },\n\n // Goes through all registered components and\n // updates the model values\n updateModel: function () {\n return this.inputs.reduce((model, component) => {\n var name = component.props.name;\n model[name] = component.state._value;\n return model;\n }, {});\n },\n\n // Reset each key in the model to the original / initial / specified value\n resetModel: function (data) {\n this.inputs.forEach(component => {\n var name = component.props.name;\n if (data && data[name]) {\n component.setValue(data[name]);\n } else {\n component.resetValue();\n }\n });\n this.validateForm();\n },\n\n setInputValidationErrors: function (errors) {\n this.inputs.forEach(component => {\n var name = component.props.name;\n var args = [{\n _isValid: !(name in errors),\n _validationError: typeof errors[name] === 'string' ? [errors[name]] : errors[name]\n }];\n component.setState.apply(component, args);\n });\n },\n\n // Checks if the values have changed from their initial value\n isChanged: function() {\n return !utils.isSame(this.getPristineValues(), this.getCurrentValues());\n },\n\n getPristineValues: function() {\n return this.inputs.reduce((data, component) => {\n var name = component.props.name;\n data[name] = component.props.value;\n return data;\n }, {});\n },\n\n // Go through errors from server and grab the components\n // stored in the inputs map. Change their state to invalid\n // and set the serverError message\n updateInputsWithError: function (errors) {\n Object.keys(errors).forEach((name, index) => {\n var component = utils.find(this.inputs, component => component.props.name === name);\n if (!component) {\n throw new Error('You are trying to update an input that does not exist. ' +\n 'Verify errors object with input names. ' + JSON.stringify(errors));\n }\n var args = [{\n _isValid: this.props.preventExternalInvalidation || false,\n _externalError: typeof errors[name] === 'string' ? [errors[name]] : errors[name]\n }];\n component.setState.apply(component, args);\n });\n },\n\n isFormDisabled: function () {\n return this.props.disabled;\n },\n\n getCurrentValues: function () {\n return this.inputs.reduce((data, component) => {\n var name = component.props.name;\n data[name] = component.state._value;\n return data;\n }, {});\n },\n\n setFormPristine: function (isPristine) {\n this.setState({\n _formSubmitted: !isPristine\n });\n\n // Iterate through each component and set it as pristine\n // or \"dirty\".\n this.inputs.forEach((component, index) => {\n component.setState({\n _formSubmitted: !isPristine,\n _isPristine: isPristine\n });\n });\n },\n\n // Use the binded values and the actual input value to\n // validate the input and set its state. Then check the\n // state of the form itself\n validate: function (component) {\n\n // Trigger onChange\n if (this.state.canChange) {\n this.props.onChange(this.getCurrentValues(), this.isChanged());\n }\n\n var validation = this.runValidation(component);\n // Run through the validations, split them up and call\n // the validator IF there is a value or it is required\n component.setState({\n _isValid: validation.isValid,\n _isRequired: validation.isRequired,\n _validationError: validation.error,\n _externalError: null\n }, this.validateForm);\n\n },\n\n // Checks validation on current value or a passed value\n runValidation: function (component, value) {\n\n var currentValues = this.getCurrentValues();\n var validationErrors = component.props.validationErrors;\n var validationError = component.props.validationError;\n value = arguments.length === 2 ? value : component.state._value;\n\n var validationResults = this.runRules(value, currentValues, component._validations);\n var requiredResults = this.runRules(value, currentValues, component._requiredValidations);\n\n // the component defines an explicit validate function\n if (typeof component.validate === \"function\") {\n validationResults.failed = component.validate() ? [] : ['failed'];\n }\n\n var isRequired = Object.keys(component._requiredValidations).length ? !!requiredResults.success.length : false;\n var isValid = !validationResults.failed.length && !(this.props.validationErrors && this.props.validationErrors[component.props.name]);\n\n return {\n isRequired: isRequired,\n isValid: isRequired ? false : isValid,\n error: (function () {\n\n if (isValid && !isRequired) {\n return emptyArray;\n }\n\n if (validationResults.errors.length) {\n return validationResults.errors;\n }\n\n if (this.props.validationErrors && this.props.validationErrors[component.props.name]) {\n return typeof this.props.validationErrors[component.props.name] === 'string' ? [this.props.validationErrors[component.props.name]] : this.props.validationErrors[component.props.name];\n }\n\n if (isRequired) {\n var error = validationErrors[requiredResults.success[0]];\n return error ? [error] : null;\n }\n\n if (validationResults.failed.length) {\n return validationResults.failed.map(function(failed) {\n return validationErrors[failed] ? validationErrors[failed] : validationError;\n }).filter(function(x, pos, arr) {\n // Remove duplicates\n return arr.indexOf(x) === pos;\n });\n }\n\n }.call(this))\n };\n\n },\n\n runRules: function (value, currentValues, validations) {\n\n var results = {\n errors: [],\n failed: [],\n success: []\n };\n if (Object.keys(validations).length) {\n Object.keys(validations).forEach(function (validationMethod) {\n\n if (validationRules[validationMethod] && typeof validations[validationMethod] === 'function') {\n throw new Error('Formsy does not allow you to override default validations: ' + validationMethod);\n }\n\n if (!validationRules[validationMethod] && typeof validations[validationMethod] !== 'function') {\n throw new Error('Formsy does not have the validation rule: ' + validationMethod);\n }\n\n if (typeof validations[validationMethod] === 'function') {\n var validation = validations[validationMethod](currentValues, value);\n if (typeof validation === 'string') {\n results.errors.push(validation);\n results.failed.push(validationMethod);\n } else if (!validation) {\n results.failed.push(validationMethod);\n }\n return;\n\n } else if (typeof validations[validationMethod] !== 'function') {\n var validation = validationRules[validationMethod](currentValues, value, validations[validationMethod]);\n if (typeof validation === 'string') {\n results.errors.push(validation);\n results.failed.push(validationMethod);\n } else if (!validation) {\n results.failed.push(validationMethod);\n } else {\n results.success.push(validationMethod);\n }\n return;\n\n }\n\n return results.success.push(validationMethod);\n\n });\n }\n\n return results;\n\n },\n\n // Validate the form by going through all child input components\n // and check their state\n validateForm: function () {\n\n // We need a callback as we are validating all inputs again. This will\n // run when the last component has set its state\n var onValidationComplete = function () {\n var allIsValid = this.inputs.every(component => {\n return component.state._isValid;\n });\n\n this.setState({\n isValid: allIsValid\n });\n\n if (allIsValid) {\n this.props.onValid();\n } else {\n this.props.onInvalid();\n }\n\n // Tell the form that it can start to trigger change events\n this.setState({\n canChange: true\n });\n\n }.bind(this);\n\n // Run validation again in case affected by other inputs. The\n // last component validated will run the onValidationComplete callback\n this.inputs.forEach((component, index) => {\n var validation = this.runValidation(component);\n if (validation.isValid && component.state._externalError) {\n validation.isValid = false;\n }\n component.setState({\n _isValid: validation.isValid,\n _isRequired: validation.isRequired,\n _validationError: validation.error,\n _externalError: !validation.isValid && component.state._externalError ? component.state._externalError : null\n }, index === this.inputs.length - 1 ? onValidationComplete : null);\n });\n\n // If there are no inputs, set state where form is ready to trigger\n // change event. New inputs might be added later\n if (!this.inputs.length && this.isMounted()) {\n this.setState({\n canChange: true\n });\n }\n },\n\n // Method put on each input component to register\n // itself to the form\n attachToForm: function (component) {\n\n if (this.inputs.indexOf(component) === -1) {\n this.inputs.push(component);\n }\n\n this.validate(component);\n },\n\n // Method put on each input component to unregister\n // itself from the form\n detachFromForm: function (component) {\n var componentPos = this.inputs.indexOf(component);\n\n if (componentPos !== -1) {\n this.inputs = this.inputs.slice(0, componentPos)\n .concat(this.inputs.slice(componentPos + 1));\n }\n\n this.validateForm();\n },\n render: function () {\n\n return (\n
\n {this.props.children}\n
\n );\n\n }\n});\n\nif (!global.exports && !global.module && (!global.define || !global.define.amd)) {\n global.Formsy = Formsy;\n}\n\nmodule.exports = Formsy;\n\n\n\n/** WEBPACK FOOTER **\n ** D:/Dev/git/React/formsy-react/src/main.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"react\"\n ** module id = 1\n ** module chunks = 0\n **/","var utils = require('./utils.js');\r\nvar React = global.React || require('react');\r\n\r\nvar convertValidationsToObject = function (validations) {\r\n\r\n if (typeof validations === 'string') {\r\n\r\n return validations.split(/\\,(?![^{\\[]*[}\\]])/g).reduce(function (validations, validation) {\r\n var args = validation.split(':');\r\n var validateMethod = args.shift();\r\n\r\n args = args.map(function (arg) {\r\n try {\r\n return JSON.parse(arg);\r\n } catch (e) {\r\n return arg; // It is a string if it can not parse it\r\n }\r\n });\r\n\r\n if (args.length > 1) {\r\n throw new Error('Formsy does not support multiple args on string validations. Use object format of validations instead.');\r\n }\r\n\r\n validations[validateMethod] = args.length ? args[0] : true;\r\n return validations;\r\n }, {});\r\n\r\n }\r\n\r\n return validations || {};\r\n};\r\n\r\nmodule.exports = {\r\n getInitialState: function () {\r\n return {\r\n _value: this.props.value,\r\n _isRequired: false,\r\n _isValid: true,\r\n _isPristine: true,\r\n _pristineValue: this.props.value,\r\n _validationError: [],\r\n _externalError: null,\r\n _formSubmitted: false\r\n };\r\n },\r\n contextTypes: {\r\n formsy: React.PropTypes.object // What about required?\r\n },\r\n getDefaultProps: function () {\r\n return {\r\n validationError: '',\r\n validationErrors: {}\r\n };\r\n },\r\n\r\n componentWillMount: function () {\r\n var configure = function () {\r\n this.setValidations(this.props.validations, this.props.required);\r\n\r\n // Pass a function instead?\r\n this.context.formsy.attachToForm(this);\r\n //this.props._attachToForm(this);\r\n }.bind(this);\r\n\r\n if (!this.props.name) {\r\n throw new Error('Form Input requires a name property when used');\r\n }\r\n\r\n /*\r\n if (!this.props._attachToForm) {\r\n return setTimeout(function () {\r\n if (!this.isMounted()) return;\r\n if (!this.props._attachToForm) {\r\n throw new Error('Form Mixin requires component to be nested in a Form');\r\n }\r\n configure();\r\n }.bind(this), 0);\r\n }\r\n */\r\n configure();\r\n },\r\n\r\n // We have to make the validate method is kept when new props are added\r\n componentWillReceiveProps: function (nextProps) {\r\n this.setValidations(nextProps.validations, nextProps.required);\r\n\r\n },\r\n\r\n componentDidUpdate: function (prevProps) {\r\n\r\n // If the value passed has changed, set it. If value is not passed it will\r\n // internally update, and this will never run\r\n if (!utils.isSame(this.props.value, prevProps.value)) {\r\n this.setValue(this.props.value);\r\n }\r\n\r\n // If validations or required is changed, run a new validation\r\n if (!utils.isSame(this.props.validations, prevProps.validations) || !utils.isSame(this.props.required, prevProps.required)) {\r\n this.context.formsy.validate(this);\r\n }\r\n },\r\n\r\n // Detach it when component unmounts\r\n componentWillUnmount: function () {\r\n this.context.formsy.detachFromForm(this);\r\n //this.props._detachFromForm(this);\r\n },\r\n\r\n setValidations: function (validations, required) {\r\n\r\n // Add validations to the store itself as the props object can not be modified\r\n this._validations = convertValidationsToObject(validations) || {};\r\n this._requiredValidations = required === true ? {isDefaultRequiredValue: true} : convertValidationsToObject(required);\r\n\r\n },\r\n\r\n // We validate after the value has been set\r\n setValue: function (value) {\r\n this.setState({\r\n _value: value,\r\n _isPristine: false\r\n }, function () {\r\n this.context.formsy.validate(this);\r\n //this.props._validate(this);\r\n }.bind(this));\r\n },\r\n resetValue: function () {\r\n this.setState({\r\n _value: this.state._pristineValue,\r\n _isPristine: true\r\n }, function () {\r\n this.context.formsy.validate(this);\r\n //this.props._validate(this);\r\n });\r\n },\r\n getValue: function () {\r\n return this.state._value;\r\n },\r\n hasValue: function () {\r\n return this.state._value !== '';\r\n },\r\n getErrorMessage: function () {\r\n var messages = this.getErrorMessages();\r\n return messages.length ? messages[0] : null;\r\n },\r\n getErrorMessages: function () {\r\n return !this.isValid() || this.showRequired() ? (this.state._externalError || this.state._validationError || []) : [];\r\n },\r\n isFormDisabled: function () {\r\n return this.context.formsy.isFormDisabled();\r\n //return this.props._isFormDisabled();\r\n },\r\n isValid: function () {\r\n return this.state._isValid;\r\n },\r\n isPristine: function () {\r\n return this.state._isPristine;\r\n },\r\n isFormSubmitted: function () {\r\n return this.state._formSubmitted;\r\n },\r\n isRequired: function () {\r\n return !!this.props.required;\r\n },\r\n showRequired: function () {\r\n return this.state._isRequired;\r\n },\r\n showError: function () {\r\n return !this.showRequired() && !this.isValid();\r\n },\r\n isValidValue: function (value) {\r\n return this.context.formsy.isValidValue.call(null, this, value);\r\n //return this.props._isValidValue.call(null, this, value);\r\n }\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** D:/Dev/git/React/formsy-react/src/Mixin.js\n **/","module.exports = {\n arraysDiffer: function (a, b) {\n var isDifferent = false;\n if (a.length !== b.length) {\n isDifferent = true;\n } else {\n a.forEach(function (item, index) {\n if (!this.isSame(item, b[index])) {\n isDifferent = true;\n }\n }, this);\n }\n return isDifferent;\n },\n\n objectsDiffer: function (a, b) {\n var isDifferent = false;\n if (Object.keys(a).length !== Object.keys(b).length) {\n isDifferent = true;\n } else {\n Object.keys(a).forEach(function (key) {\n if (!this.isSame(a[key], b[key])) {\n isDifferent = true;\n }\n }, this);\n }\n return isDifferent;\n },\n\n isSame: function (a, b) {\n if (typeof a !== typeof b) {\n return false;\n } else if (Array.isArray(a)) {\n return !this.arraysDiffer(a, b);\n } else if (typeof a === 'object' && a !== null && b !== null) {\n return !this.objectsDiffer(a, b);\n }\n\n return a === b;\n },\n\n find: function (collection, fn) {\n for (var i = 0, l = collection.length; i < l; i++) {\n var item = collection[i];\n if (fn(item)) {\n return item;\n }\n }\n return null;\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** D:/Dev/git/React/formsy-react/src/utils.js\n **/","var React = global.React || require('react');\r\nvar Mixin = require('./Mixin.js');\r\nmodule.exports = function () {\r\n return function (Component) {\r\n return React.createClass({\r\n mixins: [Mixin],\r\n render: function () {\r\n return React.createElement(Component, {\r\n setValidations: this.setValidations,\r\n setValue: this.setValue,\r\n resetValue: this.resetValue,\r\n getValue: this.getValue,\r\n hasValue: this.hasValue,\r\n getErrorMessage: this.getErrorMessage,\r\n getErrorMessages: this.getErrorMessages,\r\n isFormDisabled: this.isFormDisabled,\r\n isValid: this.isValid,\r\n isPristine: this.isPristine,\r\n isFormSubmitted: this.isFormSubmitted,\r\n isRequired: this.isRequired,\r\n showRequired: this.showRequired,\r\n showError: this.showError,\r\n isValidValue: this.isValidValue,\r\n ...this.props\r\n });\r\n }\r\n });\r\n };\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** D:/Dev/git/React/formsy-react/src/Decorator.js\n **/","var React = global.React || require('react');\r\nvar Mixin = require('./Mixin.js');\r\nmodule.exports = function (Component) {\r\n return React.createClass({\r\n mixins: [Mixin],\r\n render: function () {\r\n return React.createElement(Component, {\r\n setValidations: this.setValidations,\r\n setValue: this.setValue,\r\n resetValue: this.resetValue,\r\n getValue: this.getValue,\r\n hasValue: this.hasValue,\r\n getErrorMessage: this.getErrorMessage,\r\n getErrorMessages: this.getErrorMessages,\r\n isFormDisabled: this.isFormDisabled,\r\n isValid: this.isValid,\r\n isPristine: this.isPristine,\r\n isFormSubmitted: this.isFormSubmitted,\r\n isRequired: this.isRequired,\r\n showRequired: this.showRequired,\r\n showError: this.showError,\r\n isValidValue: this.isValidValue,\r\n ...this.props\r\n });\r\n }\r\n });\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** D:/Dev/git/React/formsy-react/src/HOC.js\n **/","var isExisty = function (value) {\r\n return value !== null && value !== undefined;\r\n};\r\n\r\nvar isEmpty = function (value) {\r\n return value === '';\r\n};\r\n\r\nvar validations = {\r\n isDefaultRequiredValue: function (values, value) {\r\n return value === undefined || value === '';\r\n },\r\n isExisty: function (values, value) {\r\n return isExisty(value);\r\n },\r\n matchRegexp: function (values, value, regexp) {\r\n return !isExisty(value) || isEmpty(value) || regexp.test(value);\r\n },\r\n isUndefined: function (values, value) {\r\n return value === undefined;\r\n },\r\n isEmptyString: function (values, value) {\r\n return isEmpty(value);\r\n },\r\n isEmail: function (values, value) {\r\n return validations.matchRegexp(values, value, /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i);\r\n },\r\n isUrl: function (values, value) {\r\n return validations.matchRegexp(values, value, /^(https?|s?ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i);\r\n },\r\n isTrue: function (values, value) {\r\n return value === true;\r\n },\r\n isFalse: function (values, value) {\r\n return value === false;\r\n },\r\n isNumeric: function (values, value) {\r\n if (typeof value === 'number') {\r\n return true;\r\n }\r\n return validations.matchRegexp(values, value, /^[-+]?(?:\\d*[.])?\\d+$/);\r\n },\r\n isAlpha: function (values, value) {\r\n return validations.matchRegexp(values, value, /^[A-Z]+$/i);\r\n },\r\n isAlphanumeric: function (values, value) {\r\n return validations.matchRegexp(values, value, /^[0-9A-Z]+$/i);\r\n },\r\n isInt: function (values, value) {\r\n return validations.matchRegexp(values, value, /^(?:[-+]?(?:0|[1-9]\\d*))$/);\r\n },\r\n isFloat: function (values, value) {\r\n return validations.matchRegexp(values, value, /^(?:[-+]?(?:\\d+))?(?:\\.\\d*)?(?:[eE][\\+\\-]?(?:\\d+))?$/);\r\n },\r\n isWords: function (values, value) {\r\n return validations.matchRegexp(values, value, /^[A-Z\\s]+$/i);\r\n },\r\n isSpecialWords: function (values, value) {\r\n return validations.matchRegexp(values, value, /^[A-Z\\s\\u00C0-\\u017F]+$/i);\r\n },\r\n isLength: function (values, value, length) {\r\n return !isExisty(value) || isEmpty(value) || value.length === length;\r\n },\r\n equals: function (values, value, eql) {\r\n return !isExisty(value) || isEmpty(value) || value == eql;\r\n },\r\n equalsField: function (values, value, field) {\r\n return value == values[field];\r\n },\r\n maxLength: function (values, value, length) {\r\n return !isExisty(value) || value.length <= length;\r\n },\r\n minLength: function (values, value, length) {\r\n return !isExisty(value) || isEmpty(value) || value.length >= length;\r\n }\r\n};\r\n\r\nmodule.exports = validations;\r\n\n\n\n/** WEBPACK FOOTER **\n ** D:/Dev/git/React/formsy-react/src/validationRules.js\n **/","module.exports = function (source) {\n\n\n // \"foo[0]\"\n return Object.keys(source).reduce(function (output, key) {\n\n var parentKey = key.match(/[^\\[]*/i);\n var paths = key.match(/\\[.*?\\]/g) || [];\n paths = [parentKey[0]].concat(paths).map(function (key) {\n return key.replace(/\\[|\\]/g, '');\n });\n\n var currentPath = output;\n while (paths.length) {\n\n var pathKey = paths.shift();\n\n if (pathKey in currentPath) {\n currentPath = currentPath[pathKey];\n } else {\n currentPath[pathKey] = paths.length ? isNaN(paths[0]) ? {} : [] : source[key];\n currentPath = currentPath[pathKey];\n }\n\n }\n\n return output;\n\n }, {});\n\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/form-data-to-object/index.js\n ** module id = 7\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///formsy-react.js","webpack:///webpack/bootstrap 30ccc24acaae9840edd4","webpack:///D:/Dev/git/React/formsy-react/src/main.js","webpack:///external \"react\"","webpack:///D:/Dev/git/React/formsy-react/src/Mixin.js","webpack:///D:/Dev/git/React/formsy-react/src/utils.js","webpack:///D:/Dev/git/React/formsy-react/src/Decorator.js","webpack:///D:/Dev/git/React/formsy-react/src/HOC.js","webpack:///D:/Dev/git/React/formsy-react/src/validationRules.js","webpack:///./~/form-data-to-object/index.js"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_1__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","global","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","React","Formsy","validationRules","formDataToObject","utils","Mixin","HOC","Decorator","options","emptyArray","defaults","passedOptions","addValidationRule","name","func","Form","createClass","displayName","getInitialState","isValid","isSubmitting","canChange","getDefaultProps","onSuccess","onError","onSubmit","onValidSubmit","onInvalidSubmit","onSubmitted","onValid","onInvalid","onChange","validationErrors","preventExternalInvalidation","childContextTypes","formsy","PropTypes","object","getChildContext","_this","attachToForm","detachFromForm","validate","isFormDisabled","isValidValue","component","value","runValidation","componentWillMount","inputs","componentDidMount","validateForm","componentWillUpdate","prevInputNames","map","props","componentDidUpdate","keys","setInputValidationErrors","newInputNames","arraysDiffer","reset","data","setFormPristine","resetModel","submit","event","preventDefault","model","getModel","mapModel","updateInputsWithError","state","mapping","reduce","mappedModel","keyArray","split","base","currentKey","shift","_value","forEach","setValue","resetValue","errors","args","_isValid","_validationError","setState","apply","isChanged","isSame","getPristineValues","getCurrentValues","_this2","index","find","Error","JSON","stringify","_externalError","disabled","isPristine","_formSubmitted","_isPristine","validation","_isRequired","isRequired","error","currentValues","validationError","validationResults","runRules","_validations","requiredResults","_requiredValidations","failed","success","filter","x","pos","arr","indexOf","validations","results","validationMethod","push","_this3","onValidationComplete","allIsValid","every","bind","isMounted","componentPos","slice","concat","render","createElement","children","convertValidationsToObject","validateMethod","arg","parse","e","_pristineValue","contextTypes","configure","setValidations","required","context","componentWillReceiveProps","nextProps","prevProps","componentWillUnmount","isDefaultRequiredValue","getValue","hasValue","getErrorMessage","messages","getErrorMessages","showRequired","isFormSubmitted","showError","a","b","isDifferent","item","objectsDiffer","Array","isArray","collection","fn","l","Component","mixins","_isExisty","undefined","isEmpty","values","isExisty","matchRegexp","regexp","test","isUndefined","isEmptyString","isEmail","isUrl","isTrue","isFalse","isNumeric","isAlpha","isAlphanumeric","isInt","isFloat","isWords","isSpecialWords","isLength","equals","eql","equalsField","field","maxLength","minLength","output","parentKey","match","paths","replace","currentPath","pathKey","isNaN"],"mappings":"CAAA,SAAAA,EAAAC,GACA,gBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,EAAAG,QAAA,UACA,kBAAAC,gBAAAC,IACAD,QAAA,SAAAJ,GACA,gBAAAC,SACAA,QAAA,OAAAD,EAAAG,QAAA,UAEAJ,EAAA,OAAAC,EAAAD,EAAA,QACCO,KAAA,SAAAC,GACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAT,OAGA,IAAAC,GAAAS,EAAAD,IACAT,WACAW,GAAAF,EACAG,QAAA,EAUA,OANAL,GAAAE,GAAAI,KAAAZ,EAAAD,QAAAC,IAAAD,QAAAQ,GAGAP,EAAAW,QAAA,EAGAX,EAAAD,QAvBA,GAAAU,KAqCA,OATAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,GAGAR,EAAA,KDgBM,SAASP,EAAQD,EAASQ,IAEH,SAASS,GAAS,YAE9C,IAAIC,GAAWC,OAAOC,QAAU,SAAUC,GAAU,IAAK,GAAIC,GAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,GAAIG,GAASF,UAAUD,EAAI,KAAK,GAAII,KAAOD,GAAcN,OAAOQ,UAAUC,eAAef,KAAKY,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,MAAOL,IE1DpPQ,EAAQZ,EAAOY,OAASrB,EAAQ,GAChCsB,KACAC,EAAkBvB,EAAQ,GAC1BwB,EAAmBxB,EAAQ,GAC3ByB,EAAQzB,EAAQ,GAChB0B,EAAQ1B,EAAQ,GAChB2B,EAAM3B,EAAQ,GACd4B,EAAY5B,EAAQ,GACpB6B,KACAC,IAEJR,GAAOI,MAAQA,EACfJ,EAAOK,IAAMA,EACbL,EAAOM,UAAYA,EAEnBN,EAAOS,SAAW,SAAUC,GAC1BH,EAAUG,GAGZV,EAAOW,kBAAoB,SAAUC,EAAMC,GACzCZ,EAAgBW,GAAQC,GAG1Bb,EAAOc,KAAOf,EAAMgB,aAClBC,YAAa,SACbC,gBAAiB,WACf,OACEC,SAAS,EACTC,cAAc,EACdC,WAAW,IAGfC,gBAAiB,WACf,OACEC,UAAW,aACXC,QAAS,aACTC,SAAU,aACVC,cAAe,aACfC,gBAAiB,aACjBC,YAAa,aACbC,QAAS,aACTC,UAAW,aACXC,SAAU,aACVC,iBAAkB,KAClBC,6BAA6B,IAIjCC,mBACEC,OAAQnC,EAAMoC,UAAUC,QAE1BC,gBAAiB,WF6Dd,GAAIC,GAAQ/D,IE5Db,QACE2D,QACEK,aAAchE,KAAKgE,aACnBC,eAAgBjE,KAAKiE,eACrBC,SAAUlE,KAAKkE,SACfC,eAAgBnE,KAAKmE,eACrBC,aAAc,SAACC,EAAWC,GACxB,MAAOP,GAAKQ,cAAcF,EAAWC,GAAO3B,YAQpD6B,mBAAoB,WAClBxE,KAAKyE,WAGPC,kBAAmB,WACjB1E,KAAK2E,gBAGPC,oBAAqB,WAGnB5E,KAAK6E,eAAiB7E,KAAKyE,OAAOK,IAAI,SAAAT,GF+DnC,ME/DgDA,GAAUU,MAAM1C,QAGrE2C,mBAAoB,WAEdhF,KAAK+E,MAAMvB,kBAA2D,gBAAhCxD,MAAK+E,MAAMvB,kBAAiC1C,OAAOmE,KAAKjF,KAAK+E,MAAMvB,kBAAkBrC,OAAS,GACtInB,KAAKkF,yBAAyBlF,KAAK+E,MAAMvB,iBAG3C,IAAI2B,GAAgBnF,KAAKyE,OAAOK,IAAI,SAAAT,GFiEjC,MEjE8CA,GAAUU,MAAM1C,MAC7DT,GAAMwD,aAAapF,KAAK6E,eAAgBM,IAC1CnF,KAAK2E,gBAMTU,MAAO,SAAUC,GACftF,KAAKuF,iBAAgB,GACrBvF,KAAKwF,WAAWF,IAIlBG,OAAQ,SAAUC,GAEhBA,GAASA,EAAMC,iBAKf3F,KAAKuF,iBAAgB,EACrB,IAAIK,GAAQ5F,KAAK6F,UACjBD,GAAQ5F,KAAK8F,SAASF,GACtB5F,KAAK+E,MAAM9B,SAAS2C,EAAO5F,KAAKwF,WAAYxF,KAAK+F,uBACjD/F,KAAKgG,MAAMrD,QAAU3C,KAAK+E,MAAM7B,cAAc0C,EAAO5F,KAAKwF,WAAYxF,KAAK+F,uBAAyB/F,KAAK+E,MAAM5B,gBAAgByC,EAAO5F,KAAKwF,WAAYxF,KAAK+F,wBAI9JD,SAAU,SAAUF,GAElB,MAAI5F,MAAK+E,MAAMkB,QACNjG,KAAK+E,MAAMkB,QAAQL,GAEnBjE,EAAiBb,OAAOmE,KAAKW,GAAOM,OAAO,SAACC,EAAa9E,GAI9D,IAFA,GAAI+E,GAAW/E,EAAIgF,MAAM,KACrBC,EAAOH,EACJC,EAASjF,QAAQ,CACtB,GAAIoF,GAAaH,EAASI,OAC1BF,GAAQA,EAAKC,GAAcH,EAASjF,OAASmF,EAAKC,OAAoBX,EAAMvE,GAG9E,MAAO8E,UAQbN,SAAU,WACR,MAAO7F,MAAKyE,OAAOyB,OAAO,SAACN,EAAOvB,GAChC,GAAIhC,GAAOgC,EAAUU,MAAM1C,IAE3B,OADAuD,GAAMvD,GAAQgC,EAAU2B,MAAMS,OACvBb,QAKXJ,WAAY,SAAUF,GACpBtF,KAAKyE,OAAOiC,QAAQ,SAAArC,GAClB,GAAIhC,GAAOgC,EAAUU,MAAM1C,IACvBiD,IAAQA,EAAKjD,GACfgC,EAAUsC,SAASrB,EAAKjD,IAExBgC,EAAUuC,eAGd5G,KAAK2E,gBAGPO,yBAA0B,SAAU2B,GAClC7G,KAAKyE,OAAOiC,QAAQ,SAAArC,GAClB,GAAIhC,GAAOgC,EAAUU,MAAM1C,KACvByE,IACFC,WAAY1E,IAAQwE,IACpBG,iBAA0C,gBAAjBH,GAAOxE,IAAsBwE,EAAOxE,IAASwE,EAAOxE,IAE/EgC,GAAU4C,SAASC,MAAM7C,EAAWyC,MAKxCK,UAAW,WACT,OAAQvF,EAAMwF,OAAOpH,KAAKqH,oBAAqBrH,KAAKsH,qBAGrDD,kBAAmB,WAClB,MAAOrH,MAAKyE,OAAOyB,OAAO,SAACZ,EAAMjB,GAC/B,GAAIhC,GAAOgC,EAAUU,MAAM1C,IAE3B,OADAiD,GAAKjD,GAAQgC,EAAUU,MAAMT,MACtBgB,QAOXS,sBAAuB,SAAUc,GFgE9B,GAAIU,GAASvH,IE/Ddc,QAAOmE,KAAK4B,GAAQH,QAAQ,SAACrE,EAAMmF,GACjC,GAAInD,GAAYzC,EAAM6F,KAAKF,EAAK9C,OAAQ,SAAAJ,GFkErC,MElEkDA,GAAUU,MAAM1C,OAASA,GAC9E,KAAKgC,EACH,KAAM,IAAIqD,OAAM,iGAC8BC,KAAKC,UAAUf,GAE/D,IAAIC,KACFC,SAAUQ,EAAKxC,MAAMtB,8BAA+B,EACpDoE,eAAwC,gBAAjBhB,GAAOxE,IAAsBwE,EAAOxE,IAASwE,EAAOxE,IAE7EgC,GAAU4C,SAASC,MAAM7C,EAAWyC,MAIxC3C,eAAgB,WACd,MAAOnE,MAAK+E,MAAM+C,UAGpBR,iBAAkB,WAChB,MAAOtH,MAAKyE,OAAOyB,OAAO,SAACZ,EAAMjB,GAC/B,GAAIhC,GAAOgC,EAAUU,MAAM1C,IAE3B,OADAiD,GAAKjD,GAAQgC,EAAU2B,MAAMS,OACtBnB,QAIXC,gBAAiB,SAAUwC,GACzB/H,KAAKiH,UACHe,gBAAiBD,IAKnB/H,KAAKyE,OAAOiC,QAAQ,SAACrC,EAAWmD,GAC9BnD,EAAU4C,UACRe,gBAAiBD,EACjBE,YAAaF,OAQnB7D,SAAU,SAAUG,GAGdrE,KAAKgG,MAAMnD,WACb7C,KAAK+E,MAAMxB,SAASvD,KAAKsH,mBAAoBtH,KAAKmH,YAGpD,IAAIe,GAAalI,KAAKuE,cAAcF,EAGpCA,GAAU4C,UACRF,SAAUmB,EAAWvF,QACrBwF,YAAaD,EAAWE,WACxBpB,iBAAkBkB,EAAWG,MAC7BR,eAAgB,MACf7H,KAAK2E,eAKVJ,cAAe,SAAUF,EAAWC,GAElC,GAAIgE,GAAgBtI,KAAKsH,mBACrB9D,EAAmBa,EAAUU,MAAMvB,iBACnC+E,EAAkBlE,EAAUU,MAAMwD,eACtCjE,GAA6B,IAArBpD,UAAUC,OAAemD,EAAQD,EAAU2B,MAAMS,MAEzD,IAAI+B,GAAoBxI,KAAKyI,SAASnE,EAAOgE,EAAejE,EAAUqE,cAClEC,EAAkB3I,KAAKyI,SAASnE,EAAOgE,EAAejE,EAAUuE,qBAGlC,mBAAvBvE,GAAUH,WACnBsE,EAAkBK,OAASxE,EAAUH,eAAmB,UAG1D,IAAIkE,GAAatH,OAAOmE,KAAKZ,EAAUuE,sBAAsBzH,SAAWwH,EAAgBG,QAAQ3H,QAAS,EACrGwB,IAAW6F,EAAkBK,OAAO1H,QAAYnB,KAAK+E,MAAMvB,kBAAoBxD,KAAK+E,MAAMvB,iBAAiBa,EAAUU,MAAM1C,MAE/H,QACE+F,WAAYA,EACZzF,QAASyF,GAAa,EAAQzF,EAC9B0F,MAAQ,WAEN,GAAI1F,IAAYyF,EACd,MAAOnG,EAGT,IAAIuG,EAAkB3B,OAAO1F,OAC3B,MAAOqH,GAAkB3B,MAG3B,IAAI7G,KAAK+E,MAAMvB,kBAAoBxD,KAAK+E,MAAMvB,iBAAiBa,EAAUU,MAAM1C,MAC7E,MAAoE,gBAAtDrC,MAAK+E,MAAMvB,iBAAiBa,EAAUU,MAAM1C,OAAsBrC,KAAK+E,MAAMvB,iBAAiBa,EAAUU,MAAM1C,OAASrC,KAAK+E,MAAMvB,iBAAiBa,EAAUU,MAAM1C,KAGnL,IAAI+F,EAAY,CACd,GAAIC,GAAQ7E,EAAiBmF,EAAgBG,QAAQ,GACrD,OAAOT,IAASA,GAAS,KAG3B,MAAIG,GAAkBK,OAAO1H,OACpBqH,EAAkBK,OAAO/D,IAAI,SAAS+D,GAC3C,MAAOrF,GAAiBqF,GAAUrF,EAAiBqF,GAAUN,IAC5DQ,OAAO,SAASC,EAAGC,EAAKC,GAEzB,MAAOA,GAAIC,QAAQH,KAAOC,IAL9B,QASAzI,KAAKR,QAKXyI,SAAU,SAAUnE,EAAOgE,EAAec,GAExC,GAAIC,IACFxC,UACAgC,UACAC,WA0CF,OAxCIhI,QAAOmE,KAAKmE,GAAajI,QAC3BL,OAAOmE,KAAKmE,GAAa1C,QAAQ,SAAU4C,GAEzC,GAAI5H,EAAgB4H,IAA8D,kBAAlCF,GAAYE,GAC1D,KAAM,IAAI5B,OAAM,8DAAgE4B,EAGlF,KAAK5H,EAAgB4H,IAA8D,kBAAlCF,GAAYE,GAC3D,KAAM,IAAI5B,OAAM,6CAA+C4B,EAGjE,IAA6C,kBAAlCF,GAAYE,GAAkC,CACvD,GAAIpB,GAAakB,EAAYE,GAAkBhB,EAAehE,EAO9D,aAN0B,gBAAf4D,IACTmB,EAAQxC,OAAO0C,KAAKrB,GACpBmB,EAAQR,OAAOU,KAAKD,IACVpB,GACVmB,EAAQR,OAAOU,KAAKD,IAIjB,GAA6C,kBAAlCF,GAAYE,GAAkC,CAC9D,GAAIpB,GAAaxG,EAAgB4H,GAAkBhB,EAAehE,EAAO8E,EAAYE,GASrF,aAR0B,gBAAfpB,IACTmB,EAAQxC,OAAO0C,KAAKrB,GACpBmB,EAAQR,OAAOU,KAAKD,IACVpB,EAGVmB,EAAQP,QAAQS,KAAKD,GAFrBD,EAAQR,OAAOU,KAAKD,IAQxB,MAAOD,GAAQP,QAAQS,KAAKD,KAKzBD,GAMT1E,aAAc,WF4DX,GAAI6E,GAASxJ,KExDVyJ,EAAuB,WACzB,GAAIC,GAAa1J,KAAKyE,OAAOkF,MAAM,SAAAtF,GACjC,MAAOA,GAAU2B,MAAMe,UAGzB/G,MAAKiH,UACHtE,QAAS+G,IAGPA,EACF1J,KAAK+E,MAAM1B,UAEXrD,KAAK+E,MAAMzB,YAIbtD,KAAKiH,UACHpE,WAAW,KAGb+G,KAAK5J,KAIPA,MAAKyE,OAAOiC,QAAQ,SAACrC,EAAWmD,GAC9B,GAAIU,GAAasB,EAAKjF,cAAcF,EAChC6D,GAAWvF,SAAW0B,EAAU2B,MAAM6B,iBACxCK,EAAWvF,SAAU,GAEvB0B,EAAU4C,UACRF,SAAUmB,EAAWvF,QACrBwF,YAAaD,EAAWE,WACxBpB,iBAAkBkB,EAAWG,MAC7BR,gBAAiBK,EAAWvF,SAAW0B,EAAU2B,MAAM6B,eAAiBxD,EAAU2B,MAAM6B,eAAiB,MACxGL,IAAUgC,EAAK/E,OAAOtD,OAAS,EAAIsI,EAAuB,SAK1DzJ,KAAKyE,OAAOtD,QAAUnB,KAAK6J,aAC9B7J,KAAKiH,UACHpE,WAAW,KAOjBmB,aAAc,SAAUK,GAEiB,KAAnCrE,KAAKyE,OAAO0E,QAAQ9E,IACtBrE,KAAKyE,OAAO8E,KAAKlF,GAGnBrE,KAAKkE,SAASG,IAKhBJ,eAAgB,SAAUI,GACxB,GAAIyF,GAAe9J,KAAKyE,OAAO0E,QAAQ9E,EAElB,MAAjByF,IACF9J,KAAKyE,OAASzE,KAAKyE,OAAOsF,MAAM,EAAGD,GAChCE,OAAOhK,KAAKyE,OAAOsF,MAAMD,EAAe,KAG7C9J,KAAK2E,gBAEPsF,OAAQ,WAEN,MACEzI,GAAA0I,cF0DC,OACArJ,KE3DSb,KAAK+E,OAAO9B,SAAUjD,KAAKyF,SAClCzF,KAAK+E,MAAMoF,aAOfvJ,EAAOjB,SAAYiB,EAAOhB,QAAYgB,EAAOd,QAAWc,EAAOd,OAAOC,MACzEa,EAAOa,OAASA,GAGlB7B,EAAOD,QAAU8B,IF0DajB,KAAKb,EAAU,WAAa,MAAOK,WAI3D,SAASJ,EAAQD,GG5fvBC,EAAAD,QAAAM,GHkgBM,SAASL,EAAQD,EAASQ,IAEH,SAASS,GAAS,YIpgB/C,IAAIgB,GAAQzB,EAAQ,GAChBqB,EAAQZ,EAAOY,OAASrB,EAAQ,GAEhCiK,EAA6B,SAAUhB,GAEzC,MAA2B,gBAAhBA,GAEFA,EAAY/C,MAAM,uBAAuBH,OAAO,SAAUkD,EAAalB,GAC5E,GAAIpB,GAAOoB,EAAW7B,MAAM,KACxBgE,EAAiBvD,EAAKN,OAU1B,IARAM,EAAOA,EAAKhC,IAAI,SAAUwF,GACxB,IACE,MAAO3C,MAAK4C,MAAMD,GAClB,MAAOE,GACP,MAAOF,MAIPxD,EAAK3F,OAAS,EAChB,KAAM,IAAIuG,OAAM,yGAIlB,OADA0B,GAAYiB,GAAkBvD,EAAK3F,OAAS2F,EAAK,IAAK,EAC/CsC,OAKJA,MAGTxJ,GAAOD,SACL+C,gBAAiB,WACf,OACE+D,OAAQzG,KAAK+E,MAAMT,MACnB6D,aAAa,EACbpB,UAAU,EACVkB,aAAa,EACbwC,eAAgBzK,KAAK+E,MAAMT,MAC3B0C,oBACAa,eAAgB,KAChBG,gBAAgB,IAGpB0C,cACE/G,OAAQnC,EAAMoC,UAAUC,QAE1Bf,gBAAiB,WACf,OACEyF,gBAAiB,GACjB/E,sBAIJgB,mBAAoB,WAClB,GAAImG,GAAY,WACd3K,KAAK4K,eAAe5K,KAAK+E,MAAMqE,YAAapJ,KAAK+E,MAAM8F,UAGvD7K,KAAK8K,QAAQnH,OAAOK,aAAahE,OAEjC4J,KAAK5J,KAEP,KAAKA,KAAK+E,MAAM1C,KACd,KAAM,IAAIqF,OAAM,gDAclBiD,MAIFI,0BAA2B,SAAUC,GACnChL,KAAK4K,eAAeI,EAAU5B,YAAa4B,EAAUH,WAIvD7F,mBAAoB,SAAUiG,GAIvBrJ,EAAMwF,OAAOpH,KAAK+E,MAAMT,MAAO2G,EAAU3G,QAC5CtE,KAAK2G,SAAS3G,KAAK+E,MAAMT,OAItB1C,EAAMwF,OAAOpH,KAAK+E,MAAMqE,YAAa6B,EAAU7B,cAAiBxH,EAAMwF,OAAOpH,KAAK+E,MAAM8F,SAAUI,EAAUJ,WAC/G7K,KAAK8K,QAAQnH,OAAOO,SAASlE,OAKjCkL,qBAAsB,WACpBlL,KAAK8K,QAAQnH,OAAOM,eAAejE,OAIrC4K,eAAgB,SAAUxB,EAAayB,GAGrC7K,KAAK0I,aAAe0B,EAA2BhB,OAC/CpJ,KAAK4I,qBAAuBiC,KAAa,GAAQM,wBAAwB,GAAQf,EAA2BS,IAK9GlE,SAAU,SAAUrC,GAClBtE,KAAKiH,UACHR,OAAQnC,EACR2D,aAAa,GACZ,WACDjI,KAAK8K,QAAQnH,OAAOO,SAASlE,OAE7B4J,KAAK5J,QAET4G,WAAY,WACV5G,KAAKiH,UACHR,OAAQzG,KAAKgG,MAAMyE,eACnBxC,aAAa,GACZ,WACDjI,KAAK8K,QAAQnH,OAAOO,SAASlE,SAIjCoL,SAAU,WACR,MAAOpL,MAAKgG,MAAMS,QAEpB4E,SAAU,WACR,MAA6B,KAAtBrL,KAAKgG,MAAMS,QAEpB6E,gBAAiB,WACf,GAAIC,GAAWvL,KAAKwL,kBACpB,OAAOD,GAASpK,OAASoK,EAAS,GAAK,MAEzCC,iBAAkB,WAChB,OAAQxL,KAAK2C,WAAa3C,KAAKyL,eAAkBzL,KAAKgG,MAAM6B,gBAAkB7H,KAAKgG,MAAMgB,yBAE3F7C,eAAgB,WACd,MAAOnE,MAAK8K,QAAQnH,OAAOQ,kBAG7BxB,QAAS,WACP,MAAO3C,MAAKgG,MAAMe,UAEpBgB,WAAY,WACV,MAAO/H,MAAKgG,MAAMiC,aAEpByD,gBAAiB,WACf,MAAO1L,MAAKgG,MAAMgC,gBAEpBI,WAAY,WACV,QAASpI,KAAK+E,MAAM8F,UAEtBY,aAAc,WACZ,MAAOzL,MAAKgG,MAAMmC,aAEpBwD,UAAW,WACT,OAAQ3L,KAAKyL,iBAAmBzL,KAAK2C,WAEvCyB,aAAc,SAAUE,GACtB,MAAOtE,MAAK8K,QAAQnH,OAAOS,aAAa5D,KAAK,KAAMR,KAAMsE,OJugB/B9D,KAAKb,EAAU,WAAa,MAAOK,WAI3D,SAASJ,EAAQD,GAEtB,YKxrBDC,GAAOD,SACLyF,aAAc,SAAUwG,EAAGC,GACzB,GAAIC,IAAc,CAUlB,OATIF,GAAEzK,SAAW0K,EAAE1K,OACjB2K,GAAc,EAEdF,EAAElF,QAAQ,SAAUqF,EAAMvE,GACnBxH,KAAKoH,OAAO2E,EAAMF,EAAErE,MACvBsE,GAAc,IAEf9L,MAEE8L,GAGTE,cAAe,SAAUJ,EAAGC,GAC1B,GAAIC,IAAc,CAUlB,OATIhL,QAAOmE,KAAK2G,GAAGzK,SAAWL,OAAOmE,KAAK4G,GAAG1K,OAC3C2K,GAAc,EAEdhL,OAAOmE,KAAK2G,GAAGlF,QAAQ,SAAUrF,GAC1BrB,KAAKoH,OAAOwE,EAAEvK,GAAMwK,EAAExK,MACzByK,GAAc,IAEf9L,MAEE8L,GAGT1E,OAAQ,SAAUwE,EAAGC,GACnB,aAAWD,UAAaC,IACf,EACEI,MAAMC,QAAQN,IACf5L,KAAKoF,aAAawG,EAAGC,GACP,gBAAND,IAAwB,OAANA,GAAoB,OAANC,GACxC7L,KAAKgM,cAAcJ,EAAGC,GAGzBD,IAAMC,GAGfpE,KAAM,SAAU0E,EAAYC,GAC1B,IAAK,GAAInL,GAAI,EAAGoL,EAAIF,EAAWhL,OAAYkL,EAAJpL,EAAOA,IAAK,CACjD,GAAI8K,GAAOI,EAAWlL,EACtB,IAAImL,EAAGL,GACL,MAAOA,GAGX,MAAO,SLgsBL,SAASnM,EAAQD,EAASQ,IAEH,SAASS,GAAS,YAE9C,IAAIC,GAAWC,OAAOC,QAAU,SAAUC,GAAU,IAAK,GAAIC,GAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,GAAIG,GAASF,UAAUD,EAAI,KAAK,GAAII,KAAOD,GAAcN,OAAOQ,UAAUC,eAAef,KAAKY,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,MAAOL,IMpvBpPQ,EAAQZ,EAAOY,OAASrB,EAAQ,GAChC0B,EAAQ1B,EAAQ,EACpBP,GAAOD,QAAU,WACf,MAAO,UAAU2M,GACf,MAAO9K,GAAMgB,aACX+J,QAAS1K,GACToI,OAAQ,WACN,MAAOzI,GAAM0I,cAAcoC,EAASzL,GAClC+J,eAAgB5K,KAAK4K,eACrBjE,SAAU3G,KAAK2G,SACfC,WAAY5G,KAAK4G,WACjBwE,SAAUpL,KAAKoL,SACfC,SAAUrL,KAAKqL,SACfC,gBAAiBtL,KAAKsL,gBACtBE,iBAAkBxL,KAAKwL,iBACvBrH,eAAgBnE,KAAKmE,eACrBxB,QAAS3C,KAAK2C,QACdoF,WAAY/H,KAAK+H,WACjB2D,gBAAiB1L,KAAK0L,gBACtBtD,WAAYpI,KAAKoI,WACjBqD,aAAczL,KAAKyL,aACnBE,UAAW3L,KAAK2L,UAChBvH,aAAcpE,KAAKoE,cAChBpE,KAAK+E,eN2vBYvE,KAAKb,EAAU,WAAa,MAAOK,WAI3D,SAASJ,EAAQD,EAASQ,IAEH,SAASS,GAAS,YAE9C,IAAIC,GAAWC,OAAOC,QAAU,SAAUC,GAAU,IAAK,GAAIC,GAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,GAAIG,GAASF,UAAUD,EAAI,KAAK,GAAII,KAAOD,GAAcN,OAAOQ,UAAUC,eAAef,KAAKY,EAAQC,KAAQL,EAAOK,GAAOD,EAAOC,IAAY,MAAOL,IO1xBpPQ,EAAQZ,EAAOY,OAASrB,EAAQ,GAChC0B,EAAQ1B,EAAQ,EACpBP,GAAOD,QAAU,SAAU2M,GACzB,MAAO9K,GAAMgB,aACX+J,QAAS1K,GACToI,OAAQ,WACN,MAAOzI,GAAM0I,cAAcoC,EAASzL,GAClC+J,eAAgB5K,KAAK4K,eACrBjE,SAAU3G,KAAK2G,SACfC,WAAY5G,KAAK4G,WACjBwE,SAAUpL,KAAKoL,SACfC,SAAUrL,KAAKqL,SACfC,gBAAiBtL,KAAKsL,gBACtBE,iBAAkBxL,KAAKwL,iBACvBrH,eAAgBnE,KAAKmE,eACrBxB,QAAS3C,KAAK2C,QACdoF,WAAY/H,KAAK+H,WACjB2D,gBAAiB1L,KAAK0L,gBACtBtD,WAAYpI,KAAKoI,WACjBqD,aAAczL,KAAKyL,aACnBE,UAAW3L,KAAK2L,UAChBvH,aAAcpE,KAAKoE,cAChBpE,KAAK+E,cPgyBcvE,KAAKb,EAAU,WAAa,MAAOK,WAI3D,SAASJ,EAAQD,GAEtB,YQ5zBD,IAAI6M,GAAW,SAAUlI,GACvB,MAAiB,QAAVA,GAA4BmI,SAAVnI,GAGvBoI,EAAU,SAAUpI,GACtB,MAAiB,KAAVA,GAGL8E,GACF+B,uBAAwB,SAAUwB,EAAQrI,GACxC,MAAiBmI,UAAVnI,GAAiC,KAAVA,GAEhCsI,SAAU,SAAUD,EAAQrI,GAC1B,MAAOkI,GAASlI,IAElBuI,YAAa,SAAUF,EAAQrI,EAAOwI,GACpC,OAAQN,EAASlI,IAAUoI,EAAQpI,IAAUwI,EAAOC,KAAKzI,IAE3D0I,YAAa,SAAUL,EAAQrI,GAC7B,MAAiBmI,UAAVnI,GAET2I,cAAe,SAAUN,EAAQrI,GAC/B,MAAOoI,GAAQpI,IAEjB4I,QAAS,SAAUP,EAAQrI,GACzB,MAAO8E,GAAYyD,YAAYF,EAAQrI,EAAO,44BAEhD6I,MAAO,SAAUR,EAAQrI,GACvB,MAAO8E,GAAYyD,YAAYF,EAAQrI,EAAO,yqCAEhD8I,OAAQ,SAAUT,EAAQrI,GACxB,MAAOA,MAAU,GAEnB+I,QAAS,SAAUV,EAAQrI,GACzB,MAAOA,MAAU,GAEnBgJ,UAAW,SAAUX,EAAQrI,GAC3B,MAAqB,gBAAVA,IACF,EAEF8E,EAAYyD,YAAYF,EAAQrI,EAAO,0BAEhDiJ,QAAS,SAAUZ,EAAQrI,GACzB,MAAO8E,GAAYyD,YAAYF,EAAQrI,EAAO,cAEhDkJ,eAAgB,SAAUb,EAAQrI,GAChC,MAAO8E,GAAYyD,YAAYF,EAAQrI,EAAO,iBAEhDmJ,MAAO,SAAUd,EAAQrI,GACvB,MAAO8E,GAAYyD,YAAYF,EAAQrI,EAAO,8BAEhDoJ,QAAS,SAAUf,EAAQrI,GACzB,MAAO8E,GAAYyD,YAAYF,EAAQrI,EAAO,yDAEhDqJ,QAAS,SAAUhB,EAAQrI,GACzB,MAAO8E,GAAYyD,YAAYF,EAAQrI,EAAO,gBAEhDsJ,eAAgB,SAAUjB,EAAQrI,GAChC,MAAO8E,GAAYyD,YAAYF,EAAQrI,EAAO,6BAEhDuJ,SAAU,SAAUlB,EAAQrI,EAAOnD,GACjC,OAAQqL,EAASlI,IAAUoI,EAAQpI,IAAUA,EAAMnD,SAAWA,GAEhE2M,OAAQ,SAAUnB,EAAQrI,EAAOyJ,GAC/B,OAAQvB,EAASlI,IAAUoI,EAAQpI,IAAUA,GAASyJ,GAExDC,YAAa,SAAUrB,EAAQrI,EAAO2J,GACpC,MAAO3J,IAASqI,EAAOsB,IAEzBC,UAAW,SAAUvB,EAAQrI,EAAOnD,GAClC,OAAQqL,EAASlI,IAAUA,EAAMnD,QAAUA,GAE7CgN,UAAW,SAAUxB,EAAQrI,EAAOnD,GAClC,OAAQqL,EAASlI,IAAUoI,EAAQpI,IAAUA,EAAMnD,QAAUA,GAIjEvB,GAAOD,QAAUyJ,GRk0BX,SAASxJ,EAAQD,GS/4BvBC,EAAAD,QAAA,SAAAyB,GAIA,MAAAN,QAAAmE,KAAA7D,GAAA8E,OAAA,SAAAkI,EAAA/M,GAEA,GAAAgN,GAAAhN,EAAAiN,MAAA,WACAC,EAAAlN,EAAAiN,MAAA,eACAC,IAAAF,EAAA,IAAArE,OAAAuE,GAAAzJ,IAAA,SAAAzD,GACA,MAAAA,GAAAmN,QAAA,cAIA,KADA,GAAAC,GAAAL,EACAG,EAAApN,QAAA,CAEA,GAAAuN,GAAAH,EAAA/H,OAEAkI,KAAAD,GACAA,IAAAC,IAEAD,EAAAC,GAAAH,EAAApN,OAAAwN,MAAAJ,EAAA,UAAkEnN,EAAAC,GAClEoN,IAAAC,IAKA,MAAAN","file":"formsy-react.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Formsy\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"Formsy\"] = factory(root[\"react\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Formsy\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"Formsy\"] = factory(root[\"react\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar React = global.React || __webpack_require__(1);\n\tvar Formsy = {};\n\tvar validationRules = __webpack_require__(6);\n\tvar formDataToObject = __webpack_require__(7);\n\tvar utils = __webpack_require__(3);\n\tvar Mixin = __webpack_require__(2);\n\tvar HOC = __webpack_require__(5);\n\tvar Decorator = __webpack_require__(4);\n\tvar options = {};\n\tvar emptyArray = [];\n\t\n\tFormsy.Mixin = Mixin;\n\tFormsy.HOC = HOC;\n\tFormsy.Decorator = Decorator;\n\t\n\tFormsy.defaults = function (passedOptions) {\n\t options = passedOptions;\n\t};\n\t\n\tFormsy.addValidationRule = function (name, func) {\n\t validationRules[name] = func;\n\t};\n\t\n\tFormsy.Form = React.createClass({\n\t displayName: 'Formsy',\n\t getInitialState: function getInitialState() {\n\t return {\n\t isValid: true,\n\t isSubmitting: false,\n\t canChange: false\n\t };\n\t },\n\t getDefaultProps: function getDefaultProps() {\n\t return {\n\t onSuccess: function onSuccess() {},\n\t onError: function onError() {},\n\t onSubmit: function onSubmit() {},\n\t onValidSubmit: function onValidSubmit() {},\n\t onInvalidSubmit: function onInvalidSubmit() {},\n\t onSubmitted: function onSubmitted() {},\n\t onValid: function onValid() {},\n\t onInvalid: function onInvalid() {},\n\t onChange: function onChange() {},\n\t validationErrors: null,\n\t preventExternalInvalidation: false\n\t };\n\t },\n\t\n\t childContextTypes: {\n\t formsy: React.PropTypes.object\n\t },\n\t getChildContext: function getChildContext() {\n\t var _this = this;\n\t\n\t return {\n\t formsy: {\n\t attachToForm: this.attachToForm,\n\t detachFromForm: this.detachFromForm,\n\t validate: this.validate,\n\t isFormDisabled: this.isFormDisabled,\n\t isValidValue: function isValidValue(component, value) {\n\t return _this.runValidation(component, value).isValid;\n\t }\n\t }\n\t };\n\t },\n\t\n\t // Add a map to store the inputs of the form, a model to store\n\t // the values of the form and register child inputs\n\t componentWillMount: function componentWillMount() {\n\t this.inputs = [];\n\t },\n\t\n\t componentDidMount: function componentDidMount() {\n\t this.validateForm();\n\t },\n\t\n\t componentWillUpdate: function componentWillUpdate() {\n\t // Keep a reference to input names before form updates,\n\t // to check if inputs has changed after render\n\t this.prevInputNames = this.inputs.map(function (component) {\n\t return component.props.name;\n\t });\n\t },\n\t\n\t componentDidUpdate: function componentDidUpdate() {\n\t\n\t if (this.props.validationErrors && typeof this.props.validationErrors === 'object' && Object.keys(this.props.validationErrors).length > 0) {\n\t this.setInputValidationErrors(this.props.validationErrors);\n\t }\n\t\n\t var newInputNames = this.inputs.map(function (component) {\n\t return component.props.name;\n\t });\n\t if (utils.arraysDiffer(this.prevInputNames, newInputNames)) {\n\t this.validateForm();\n\t }\n\t },\n\t\n\t // Allow resetting to specified data\n\t reset: function reset(data) {\n\t this.setFormPristine(true);\n\t this.resetModel(data);\n\t },\n\t\n\t // Update model, submit to url prop and send the model\n\t submit: function submit(event) {\n\t\n\t event && event.preventDefault();\n\t\n\t // Trigger form as not pristine.\n\t // If any inputs have not been touched yet this will make them dirty\n\t // so validation becomes visible (if based on isPristine)\n\t this.setFormPristine(false);\n\t var model = this.getModel();\n\t model = this.mapModel(model);\n\t this.props.onSubmit(model, this.resetModel, this.updateInputsWithError);\n\t this.state.isValid ? this.props.onValidSubmit(model, this.resetModel, this.updateInputsWithError) : this.props.onInvalidSubmit(model, this.resetModel, this.updateInputsWithError);\n\t },\n\t\n\t mapModel: function mapModel(model) {\n\t\n\t if (this.props.mapping) {\n\t return this.props.mapping(model);\n\t } else {\n\t return formDataToObject(Object.keys(model).reduce(function (mappedModel, key) {\n\t\n\t var keyArray = key.split('.');\n\t var base = mappedModel;\n\t while (keyArray.length) {\n\t var currentKey = keyArray.shift();\n\t base = base[currentKey] = keyArray.length ? base[currentKey] || {} : model[key];\n\t }\n\t\n\t return mappedModel;\n\t }, {}));\n\t }\n\t },\n\t\n\t // Goes through all registered components and\n\t // updates the model values\n\t getModel: function getModel() {\n\t return this.inputs.reduce(function (model, component) {\n\t var name = component.props.name;\n\t model[name] = component.state._value;\n\t return model;\n\t }, {});\n\t },\n\t\n\t // Reset each key in the model to the original / initial / specified value\n\t resetModel: function resetModel(data) {\n\t this.inputs.forEach(function (component) {\n\t var name = component.props.name;\n\t if (data && data[name]) {\n\t component.setValue(data[name]);\n\t } else {\n\t component.resetValue();\n\t }\n\t });\n\t this.validateForm();\n\t },\n\t\n\t setInputValidationErrors: function setInputValidationErrors(errors) {\n\t this.inputs.forEach(function (component) {\n\t var name = component.props.name;\n\t var args = [{\n\t _isValid: !(name in errors),\n\t _validationError: typeof errors[name] === 'string' ? [errors[name]] : errors[name]\n\t }];\n\t component.setState.apply(component, args);\n\t });\n\t },\n\t\n\t // Checks if the values have changed from their initial value\n\t isChanged: function isChanged() {\n\t return !utils.isSame(this.getPristineValues(), this.getCurrentValues());\n\t },\n\t\n\t getPristineValues: function getPristineValues() {\n\t return this.inputs.reduce(function (data, component) {\n\t var name = component.props.name;\n\t data[name] = component.props.value;\n\t return data;\n\t }, {});\n\t },\n\t\n\t // Go through errors from server and grab the components\n\t // stored in the inputs map. Change their state to invalid\n\t // and set the serverError message\n\t updateInputsWithError: function updateInputsWithError(errors) {\n\t var _this2 = this;\n\t\n\t Object.keys(errors).forEach(function (name, index) {\n\t var component = utils.find(_this2.inputs, function (component) {\n\t return component.props.name === name;\n\t });\n\t if (!component) {\n\t throw new Error('You are trying to update an input that does not exist. ' + 'Verify errors object with input names. ' + JSON.stringify(errors));\n\t }\n\t var args = [{\n\t _isValid: _this2.props.preventExternalInvalidation || false,\n\t _externalError: typeof errors[name] === 'string' ? [errors[name]] : errors[name]\n\t }];\n\t component.setState.apply(component, args);\n\t });\n\t },\n\t\n\t isFormDisabled: function isFormDisabled() {\n\t return this.props.disabled;\n\t },\n\t\n\t getCurrentValues: function getCurrentValues() {\n\t return this.inputs.reduce(function (data, component) {\n\t var name = component.props.name;\n\t data[name] = component.state._value;\n\t return data;\n\t }, {});\n\t },\n\t\n\t setFormPristine: function setFormPristine(isPristine) {\n\t this.setState({\n\t _formSubmitted: !isPristine\n\t });\n\t\n\t // Iterate through each component and set it as pristine\n\t // or \"dirty\".\n\t this.inputs.forEach(function (component, index) {\n\t component.setState({\n\t _formSubmitted: !isPristine,\n\t _isPristine: isPristine\n\t });\n\t });\n\t },\n\t\n\t // Use the binded values and the actual input value to\n\t // validate the input and set its state. Then check the\n\t // state of the form itself\n\t validate: function validate(component) {\n\t\n\t // Trigger onChange\n\t if (this.state.canChange) {\n\t this.props.onChange(this.getCurrentValues(), this.isChanged());\n\t }\n\t\n\t var validation = this.runValidation(component);\n\t // Run through the validations, split them up and call\n\t // the validator IF there is a value or it is required\n\t component.setState({\n\t _isValid: validation.isValid,\n\t _isRequired: validation.isRequired,\n\t _validationError: validation.error,\n\t _externalError: null\n\t }, this.validateForm);\n\t },\n\t\n\t // Checks validation on current value or a passed value\n\t runValidation: function runValidation(component, value) {\n\t\n\t var currentValues = this.getCurrentValues();\n\t var validationErrors = component.props.validationErrors;\n\t var validationError = component.props.validationError;\n\t value = arguments.length === 2 ? value : component.state._value;\n\t\n\t var validationResults = this.runRules(value, currentValues, component._validations);\n\t var requiredResults = this.runRules(value, currentValues, component._requiredValidations);\n\t\n\t // the component defines an explicit validate function\n\t if (typeof component.validate === \"function\") {\n\t validationResults.failed = component.validate() ? [] : ['failed'];\n\t }\n\t\n\t var isRequired = Object.keys(component._requiredValidations).length ? !!requiredResults.success.length : false;\n\t var isValid = !validationResults.failed.length && !(this.props.validationErrors && this.props.validationErrors[component.props.name]);\n\t\n\t return {\n\t isRequired: isRequired,\n\t isValid: isRequired ? false : isValid,\n\t error: (function () {\n\t\n\t if (isValid && !isRequired) {\n\t return emptyArray;\n\t }\n\t\n\t if (validationResults.errors.length) {\n\t return validationResults.errors;\n\t }\n\t\n\t if (this.props.validationErrors && this.props.validationErrors[component.props.name]) {\n\t return typeof this.props.validationErrors[component.props.name] === 'string' ? [this.props.validationErrors[component.props.name]] : this.props.validationErrors[component.props.name];\n\t }\n\t\n\t if (isRequired) {\n\t var error = validationErrors[requiredResults.success[0]];\n\t return error ? [error] : null;\n\t }\n\t\n\t if (validationResults.failed.length) {\n\t return validationResults.failed.map(function (failed) {\n\t return validationErrors[failed] ? validationErrors[failed] : validationError;\n\t }).filter(function (x, pos, arr) {\n\t // Remove duplicates\n\t return arr.indexOf(x) === pos;\n\t });\n\t }\n\t }).call(this)\n\t };\n\t },\n\t\n\t runRules: function runRules(value, currentValues, validations) {\n\t\n\t var results = {\n\t errors: [],\n\t failed: [],\n\t success: []\n\t };\n\t if (Object.keys(validations).length) {\n\t Object.keys(validations).forEach(function (validationMethod) {\n\t\n\t if (validationRules[validationMethod] && typeof validations[validationMethod] === 'function') {\n\t throw new Error('Formsy does not allow you to override default validations: ' + validationMethod);\n\t }\n\t\n\t if (!validationRules[validationMethod] && typeof validations[validationMethod] !== 'function') {\n\t throw new Error('Formsy does not have the validation rule: ' + validationMethod);\n\t }\n\t\n\t if (typeof validations[validationMethod] === 'function') {\n\t var validation = validations[validationMethod](currentValues, value);\n\t if (typeof validation === 'string') {\n\t results.errors.push(validation);\n\t results.failed.push(validationMethod);\n\t } else if (!validation) {\n\t results.failed.push(validationMethod);\n\t }\n\t return;\n\t } else if (typeof validations[validationMethod] !== 'function') {\n\t var validation = validationRules[validationMethod](currentValues, value, validations[validationMethod]);\n\t if (typeof validation === 'string') {\n\t results.errors.push(validation);\n\t results.failed.push(validationMethod);\n\t } else if (!validation) {\n\t results.failed.push(validationMethod);\n\t } else {\n\t results.success.push(validationMethod);\n\t }\n\t return;\n\t }\n\t\n\t return results.success.push(validationMethod);\n\t });\n\t }\n\t\n\t return results;\n\t },\n\t\n\t // Validate the form by going through all child input components\n\t // and check their state\n\t validateForm: function validateForm() {\n\t var _this3 = this;\n\t\n\t // We need a callback as we are validating all inputs again. This will\n\t // run when the last component has set its state\n\t var onValidationComplete = (function () {\n\t var allIsValid = this.inputs.every(function (component) {\n\t return component.state._isValid;\n\t });\n\t\n\t this.setState({\n\t isValid: allIsValid\n\t });\n\t\n\t if (allIsValid) {\n\t this.props.onValid();\n\t } else {\n\t this.props.onInvalid();\n\t }\n\t\n\t // Tell the form that it can start to trigger change events\n\t this.setState({\n\t canChange: true\n\t });\n\t }).bind(this);\n\t\n\t // Run validation again in case affected by other inputs. The\n\t // last component validated will run the onValidationComplete callback\n\t this.inputs.forEach(function (component, index) {\n\t var validation = _this3.runValidation(component);\n\t if (validation.isValid && component.state._externalError) {\n\t validation.isValid = false;\n\t }\n\t component.setState({\n\t _isValid: validation.isValid,\n\t _isRequired: validation.isRequired,\n\t _validationError: validation.error,\n\t _externalError: !validation.isValid && component.state._externalError ? component.state._externalError : null\n\t }, index === _this3.inputs.length - 1 ? onValidationComplete : null);\n\t });\n\t\n\t // If there are no inputs, set state where form is ready to trigger\n\t // change event. New inputs might be added later\n\t if (!this.inputs.length && this.isMounted()) {\n\t this.setState({\n\t canChange: true\n\t });\n\t }\n\t },\n\t\n\t // Method put on each input component to register\n\t // itself to the form\n\t attachToForm: function attachToForm(component) {\n\t\n\t if (this.inputs.indexOf(component) === -1) {\n\t this.inputs.push(component);\n\t }\n\t\n\t this.validate(component);\n\t },\n\t\n\t // Method put on each input component to unregister\n\t // itself from the form\n\t detachFromForm: function detachFromForm(component) {\n\t var componentPos = this.inputs.indexOf(component);\n\t\n\t if (componentPos !== -1) {\n\t this.inputs = this.inputs.slice(0, componentPos).concat(this.inputs.slice(componentPos + 1));\n\t }\n\t\n\t this.validateForm();\n\t },\n\t render: function render() {\n\t\n\t return React.createElement(\n\t 'form',\n\t _extends({}, this.props, { onSubmit: this.submit }),\n\t this.props.children\n\t );\n\t }\n\t});\n\t\n\tif (!global.exports && !global.module && (!global.define || !global.define.amd)) {\n\t global.Formsy = Formsy;\n\t}\n\t\n\tmodule.exports = Formsy;\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tvar utils = __webpack_require__(3);\n\tvar React = global.React || __webpack_require__(1);\n\t\n\tvar convertValidationsToObject = function convertValidationsToObject(validations) {\n\t\n\t if (typeof validations === 'string') {\n\t\n\t return validations.split(/\\,(?![^{\\[]*[}\\]])/g).reduce(function (validations, validation) {\n\t var args = validation.split(':');\n\t var validateMethod = args.shift();\n\t\n\t args = args.map(function (arg) {\n\t try {\n\t return JSON.parse(arg);\n\t } catch (e) {\n\t return arg; // It is a string if it can not parse it\n\t }\n\t });\n\t\n\t if (args.length > 1) {\n\t throw new Error('Formsy does not support multiple args on string validations. Use object format of validations instead.');\n\t }\n\t\n\t validations[validateMethod] = args.length ? args[0] : true;\n\t return validations;\n\t }, {});\n\t }\n\t\n\t return validations || {};\n\t};\n\t\n\tmodule.exports = {\n\t getInitialState: function getInitialState() {\n\t return {\n\t _value: this.props.value,\n\t _isRequired: false,\n\t _isValid: true,\n\t _isPristine: true,\n\t _pristineValue: this.props.value,\n\t _validationError: [],\n\t _externalError: null,\n\t _formSubmitted: false\n\t };\n\t },\n\t contextTypes: {\n\t formsy: React.PropTypes.object // What about required?\n\t },\n\t getDefaultProps: function getDefaultProps() {\n\t return {\n\t validationError: '',\n\t validationErrors: {}\n\t };\n\t },\n\t\n\t componentWillMount: function componentWillMount() {\n\t var configure = (function () {\n\t this.setValidations(this.props.validations, this.props.required);\n\t\n\t // Pass a function instead?\n\t this.context.formsy.attachToForm(this);\n\t //this.props._attachToForm(this);\n\t }).bind(this);\n\t\n\t if (!this.props.name) {\n\t throw new Error('Form Input requires a name property when used');\n\t }\n\t\n\t /*\r\n\t if (!this.props._attachToForm) {\r\n\t return setTimeout(function () {\r\n\t if (!this.isMounted()) return;\r\n\t if (!this.props._attachToForm) {\r\n\t throw new Error('Form Mixin requires component to be nested in a Form');\r\n\t }\r\n\t configure();\r\n\t }.bind(this), 0);\r\n\t }\r\n\t */\n\t configure();\n\t },\n\t\n\t // We have to make the validate method is kept when new props are added\n\t componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\n\t this.setValidations(nextProps.validations, nextProps.required);\n\t },\n\t\n\t componentDidUpdate: function componentDidUpdate(prevProps) {\n\t\n\t // If the value passed has changed, set it. If value is not passed it will\n\t // internally update, and this will never run\n\t if (!utils.isSame(this.props.value, prevProps.value)) {\n\t this.setValue(this.props.value);\n\t }\n\t\n\t // If validations or required is changed, run a new validation\n\t if (!utils.isSame(this.props.validations, prevProps.validations) || !utils.isSame(this.props.required, prevProps.required)) {\n\t this.context.formsy.validate(this);\n\t }\n\t },\n\t\n\t // Detach it when component unmounts\n\t componentWillUnmount: function componentWillUnmount() {\n\t this.context.formsy.detachFromForm(this);\n\t //this.props._detachFromForm(this);\n\t },\n\t\n\t setValidations: function setValidations(validations, required) {\n\t\n\t // Add validations to the store itself as the props object can not be modified\n\t this._validations = convertValidationsToObject(validations) || {};\n\t this._requiredValidations = required === true ? { isDefaultRequiredValue: true } : convertValidationsToObject(required);\n\t },\n\t\n\t // We validate after the value has been set\n\t setValue: function setValue(value) {\n\t this.setState({\n\t _value: value,\n\t _isPristine: false\n\t }, (function () {\n\t this.context.formsy.validate(this);\n\t //this.props._validate(this);\n\t }).bind(this));\n\t },\n\t resetValue: function resetValue() {\n\t this.setState({\n\t _value: this.state._pristineValue,\n\t _isPristine: true\n\t }, function () {\n\t this.context.formsy.validate(this);\n\t //this.props._validate(this);\n\t });\n\t },\n\t getValue: function getValue() {\n\t return this.state._value;\n\t },\n\t hasValue: function hasValue() {\n\t return this.state._value !== '';\n\t },\n\t getErrorMessage: function getErrorMessage() {\n\t var messages = this.getErrorMessages();\n\t return messages.length ? messages[0] : null;\n\t },\n\t getErrorMessages: function getErrorMessages() {\n\t return !this.isValid() || this.showRequired() ? this.state._externalError || this.state._validationError || [] : [];\n\t },\n\t isFormDisabled: function isFormDisabled() {\n\t return this.context.formsy.isFormDisabled();\n\t //return this.props._isFormDisabled();\n\t },\n\t isValid: function isValid() {\n\t return this.state._isValid;\n\t },\n\t isPristine: function isPristine() {\n\t return this.state._isPristine;\n\t },\n\t isFormSubmitted: function isFormSubmitted() {\n\t return this.state._formSubmitted;\n\t },\n\t isRequired: function isRequired() {\n\t return !!this.props.required;\n\t },\n\t showRequired: function showRequired() {\n\t return this.state._isRequired;\n\t },\n\t showError: function showError() {\n\t return !this.showRequired() && !this.isValid();\n\t },\n\t isValidValue: function isValidValue(value) {\n\t return this.context.formsy.isValidValue.call(null, this, value);\n\t //return this.props._isValidValue.call(null, this, value);\n\t }\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tmodule.exports = {\n\t arraysDiffer: function arraysDiffer(a, b) {\n\t var isDifferent = false;\n\t if (a.length !== b.length) {\n\t isDifferent = true;\n\t } else {\n\t a.forEach(function (item, index) {\n\t if (!this.isSame(item, b[index])) {\n\t isDifferent = true;\n\t }\n\t }, this);\n\t }\n\t return isDifferent;\n\t },\n\t\n\t objectsDiffer: function objectsDiffer(a, b) {\n\t var isDifferent = false;\n\t if (Object.keys(a).length !== Object.keys(b).length) {\n\t isDifferent = true;\n\t } else {\n\t Object.keys(a).forEach(function (key) {\n\t if (!this.isSame(a[key], b[key])) {\n\t isDifferent = true;\n\t }\n\t }, this);\n\t }\n\t return isDifferent;\n\t },\n\t\n\t isSame: function isSame(a, b) {\n\t if (typeof a !== typeof b) {\n\t return false;\n\t } else if (Array.isArray(a)) {\n\t return !this.arraysDiffer(a, b);\n\t } else if (typeof a === 'object' && a !== null && b !== null) {\n\t return !this.objectsDiffer(a, b);\n\t }\n\t\n\t return a === b;\n\t },\n\t\n\t find: function find(collection, fn) {\n\t for (var i = 0, l = collection.length; i < l; i++) {\n\t var item = collection[i];\n\t if (fn(item)) {\n\t return item;\n\t }\n\t }\n\t return null;\n\t }\n\t};\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar React = global.React || __webpack_require__(1);\n\tvar Mixin = __webpack_require__(2);\n\tmodule.exports = function () {\n\t return function (Component) {\n\t return React.createClass({\n\t mixins: [Mixin],\n\t render: function render() {\n\t return React.createElement(Component, _extends({\n\t setValidations: this.setValidations,\n\t setValue: this.setValue,\n\t resetValue: this.resetValue,\n\t getValue: this.getValue,\n\t hasValue: this.hasValue,\n\t getErrorMessage: this.getErrorMessage,\n\t getErrorMessages: this.getErrorMessages,\n\t isFormDisabled: this.isFormDisabled,\n\t isValid: this.isValid,\n\t isPristine: this.isPristine,\n\t isFormSubmitted: this.isFormSubmitted,\n\t isRequired: this.isRequired,\n\t showRequired: this.showRequired,\n\t showError: this.showError,\n\t isValidValue: this.isValidValue\n\t }, this.props));\n\t }\n\t });\n\t };\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar React = global.React || __webpack_require__(1);\n\tvar Mixin = __webpack_require__(2);\n\tmodule.exports = function (Component) {\n\t return React.createClass({\n\t mixins: [Mixin],\n\t render: function render() {\n\t return React.createElement(Component, _extends({\n\t setValidations: this.setValidations,\n\t setValue: this.setValue,\n\t resetValue: this.resetValue,\n\t getValue: this.getValue,\n\t hasValue: this.hasValue,\n\t getErrorMessage: this.getErrorMessage,\n\t getErrorMessages: this.getErrorMessages,\n\t isFormDisabled: this.isFormDisabled,\n\t isValid: this.isValid,\n\t isPristine: this.isPristine,\n\t isFormSubmitted: this.isFormSubmitted,\n\t isRequired: this.isRequired,\n\t showRequired: this.showRequired,\n\t showError: this.showError,\n\t isValidValue: this.isValidValue\n\t }, this.props));\n\t }\n\t });\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tvar _isExisty = function _isExisty(value) {\n\t return value !== null && value !== undefined;\n\t};\n\t\n\tvar isEmpty = function isEmpty(value) {\n\t return value === '';\n\t};\n\t\n\tvar validations = {\n\t isDefaultRequiredValue: function isDefaultRequiredValue(values, value) {\n\t return value === undefined || value === '';\n\t },\n\t isExisty: function isExisty(values, value) {\n\t return _isExisty(value);\n\t },\n\t matchRegexp: function matchRegexp(values, value, regexp) {\n\t return !_isExisty(value) || isEmpty(value) || regexp.test(value);\n\t },\n\t isUndefined: function isUndefined(values, value) {\n\t return value === undefined;\n\t },\n\t isEmptyString: function isEmptyString(values, value) {\n\t return isEmpty(value);\n\t },\n\t isEmail: function isEmail(values, value) {\n\t return validations.matchRegexp(values, value, /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i);\n\t },\n\t isUrl: function isUrl(values, value) {\n\t return validations.matchRegexp(values, value, /^(https?|s?ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i);\n\t },\n\t isTrue: function isTrue(values, value) {\n\t return value === true;\n\t },\n\t isFalse: function isFalse(values, value) {\n\t return value === false;\n\t },\n\t isNumeric: function isNumeric(values, value) {\n\t if (typeof value === 'number') {\n\t return true;\n\t }\n\t return validations.matchRegexp(values, value, /^[-+]?(?:\\d*[.])?\\d+$/);\n\t },\n\t isAlpha: function isAlpha(values, value) {\n\t return validations.matchRegexp(values, value, /^[A-Z]+$/i);\n\t },\n\t isAlphanumeric: function isAlphanumeric(values, value) {\n\t return validations.matchRegexp(values, value, /^[0-9A-Z]+$/i);\n\t },\n\t isInt: function isInt(values, value) {\n\t return validations.matchRegexp(values, value, /^(?:[-+]?(?:0|[1-9]\\d*))$/);\n\t },\n\t isFloat: function isFloat(values, value) {\n\t return validations.matchRegexp(values, value, /^(?:[-+]?(?:\\d+))?(?:\\.\\d*)?(?:[eE][\\+\\-]?(?:\\d+))?$/);\n\t },\n\t isWords: function isWords(values, value) {\n\t return validations.matchRegexp(values, value, /^[A-Z\\s]+$/i);\n\t },\n\t isSpecialWords: function isSpecialWords(values, value) {\n\t return validations.matchRegexp(values, value, /^[A-Z\\s\\u00C0-\\u017F]+$/i);\n\t },\n\t isLength: function isLength(values, value, length) {\n\t return !_isExisty(value) || isEmpty(value) || value.length === length;\n\t },\n\t equals: function equals(values, value, eql) {\n\t return !_isExisty(value) || isEmpty(value) || value == eql;\n\t },\n\t equalsField: function equalsField(values, value, field) {\n\t return value == values[field];\n\t },\n\t maxLength: function maxLength(values, value, length) {\n\t return !_isExisty(value) || value.length <= length;\n\t },\n\t minLength: function minLength(values, value, length) {\n\t return !_isExisty(value) || isEmpty(value) || value.length >= length;\n\t }\n\t};\n\t\n\tmodule.exports = validations;\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function (source) {\n\t\n\t\n\t // \"foo[0]\"\n\t return Object.keys(source).reduce(function (output, key) {\n\t\n\t var parentKey = key.match(/[^\\[]*/i);\n\t var paths = key.match(/\\[.*?\\]/g) || [];\n\t paths = [parentKey[0]].concat(paths).map(function (key) {\n\t return key.replace(/\\[|\\]/g, '');\n\t });\n\t\n\t var currentPath = output;\n\t while (paths.length) {\n\t\n\t var pathKey = paths.shift();\n\t\n\t if (pathKey in currentPath) {\n\t currentPath = currentPath[pathKey];\n\t } else {\n\t currentPath[pathKey] = paths.length ? isNaN(paths[0]) ? {} : [] : source[key];\n\t currentPath = currentPath[pathKey];\n\t }\n\t\n\t }\n\t\n\t return output;\n\t\n\t }, {});\n\t\n\t};\n\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** formsy-react.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 30ccc24acaae9840edd4\n **/","var React = global.React || require('react');\nvar Formsy = {};\nvar validationRules = require('./validationRules.js');\nvar formDataToObject = require('form-data-to-object');\nvar utils = require('./utils.js');\nvar Mixin = require('./Mixin.js');\nvar HOC = require('./HOC.js');\nvar Decorator = require('./Decorator.js');\nvar options = {};\nvar emptyArray = [];\n\nFormsy.Mixin = Mixin;\nFormsy.HOC = HOC;\nFormsy.Decorator = Decorator;\n\nFormsy.defaults = function (passedOptions) {\n options = passedOptions;\n};\n\nFormsy.addValidationRule = function (name, func) {\n validationRules[name] = func;\n};\n\nFormsy.Form = React.createClass({\n displayName: 'Formsy',\n getInitialState: function () {\n return {\n isValid: true,\n isSubmitting: false,\n canChange: false\n };\n },\n getDefaultProps: function () {\n return {\n onSuccess: function () {},\n onError: function () {},\n onSubmit: function () {},\n onValidSubmit: function () {},\n onInvalidSubmit: function () {},\n onSubmitted: function () {},\n onValid: function () {},\n onInvalid: function () {},\n onChange: function () {},\n validationErrors: null,\n preventExternalInvalidation: false\n };\n },\n\n childContextTypes: {\n formsy: React.PropTypes.object\n },\n getChildContext: function () {\n return {\n formsy: {\n attachToForm: this.attachToForm,\n detachFromForm: this.detachFromForm,\n validate: this.validate,\n isFormDisabled: this.isFormDisabled,\n isValidValue: (component, value) => {\n return this.runValidation(component, value).isValid;\n }\n }\n }\n },\n\n // Add a map to store the inputs of the form, a model to store\n // the values of the form and register child inputs\n componentWillMount: function () {\n this.inputs = [];\n },\n\n componentDidMount: function () {\n this.validateForm();\n },\n\n componentWillUpdate: function () {\n // Keep a reference to input names before form updates,\n // to check if inputs has changed after render\n this.prevInputNames = this.inputs.map(component => component.props.name);\n },\n\n componentDidUpdate: function () {\n\n if (this.props.validationErrors && typeof this.props.validationErrors === 'object' && Object.keys(this.props.validationErrors).length > 0) {\n this.setInputValidationErrors(this.props.validationErrors);\n }\n\n var newInputNames = this.inputs.map(component => component.props.name);\n if (utils.arraysDiffer(this.prevInputNames, newInputNames)) {\n this.validateForm();\n }\n\n },\n\n // Allow resetting to specified data\n reset: function (data) {\n this.setFormPristine(true);\n this.resetModel(data);\n },\n\n // Update model, submit to url prop and send the model\n submit: function (event) {\n\n event && event.preventDefault();\n\n // Trigger form as not pristine.\n // If any inputs have not been touched yet this will make them dirty\n // so validation becomes visible (if based on isPristine)\n this.setFormPristine(false);\n var model = this.getModel();\n model = this.mapModel(model);\n this.props.onSubmit(model, this.resetModel, this.updateInputsWithError);\n this.state.isValid ? this.props.onValidSubmit(model, this.resetModel, this.updateInputsWithError) : this.props.onInvalidSubmit(model, this.resetModel, this.updateInputsWithError);\n\n },\n\n mapModel: function (model) {\n\n if (this.props.mapping) {\n return this.props.mapping(model)\n } else {\n return formDataToObject(Object.keys(model).reduce((mappedModel, key) => {\n\n var keyArray = key.split('.');\n var base = mappedModel;\n while (keyArray.length) {\n var currentKey = keyArray.shift();\n base = (base[currentKey] = keyArray.length ? base[currentKey] || {} : model[key]);\n }\n\n return mappedModel;\n\n }, {}));\n }\n },\n\n // Goes through all registered components and\n // updates the model values\n getModel: function () {\n return this.inputs.reduce((model, component) => {\n var name = component.props.name;\n model[name] = component.state._value;\n return model;\n }, {});\n },\n\n // Reset each key in the model to the original / initial / specified value\n resetModel: function (data) {\n this.inputs.forEach(component => {\n var name = component.props.name;\n if (data && data[name]) {\n component.setValue(data[name]);\n } else {\n component.resetValue();\n }\n });\n this.validateForm();\n },\n\n setInputValidationErrors: function (errors) {\n this.inputs.forEach(component => {\n var name = component.props.name;\n var args = [{\n _isValid: !(name in errors),\n _validationError: typeof errors[name] === 'string' ? [errors[name]] : errors[name]\n }];\n component.setState.apply(component, args);\n });\n },\n\n // Checks if the values have changed from their initial value\n isChanged: function() {\n return !utils.isSame(this.getPristineValues(), this.getCurrentValues());\n },\n\n getPristineValues: function() {\n return this.inputs.reduce((data, component) => {\n var name = component.props.name;\n data[name] = component.props.value;\n return data;\n }, {});\n },\n\n // Go through errors from server and grab the components\n // stored in the inputs map. Change their state to invalid\n // and set the serverError message\n updateInputsWithError: function (errors) {\n Object.keys(errors).forEach((name, index) => {\n var component = utils.find(this.inputs, component => component.props.name === name);\n if (!component) {\n throw new Error('You are trying to update an input that does not exist. ' +\n 'Verify errors object with input names. ' + JSON.stringify(errors));\n }\n var args = [{\n _isValid: this.props.preventExternalInvalidation || false,\n _externalError: typeof errors[name] === 'string' ? [errors[name]] : errors[name]\n }];\n component.setState.apply(component, args);\n });\n },\n\n isFormDisabled: function () {\n return this.props.disabled;\n },\n\n getCurrentValues: function () {\n return this.inputs.reduce((data, component) => {\n var name = component.props.name;\n data[name] = component.state._value;\n return data;\n }, {});\n },\n\n setFormPristine: function (isPristine) {\n this.setState({\n _formSubmitted: !isPristine\n });\n\n // Iterate through each component and set it as pristine\n // or \"dirty\".\n this.inputs.forEach((component, index) => {\n component.setState({\n _formSubmitted: !isPristine,\n _isPristine: isPristine\n });\n });\n },\n\n // Use the binded values and the actual input value to\n // validate the input and set its state. Then check the\n // state of the form itself\n validate: function (component) {\n\n // Trigger onChange\n if (this.state.canChange) {\n this.props.onChange(this.getCurrentValues(), this.isChanged());\n }\n\n var validation = this.runValidation(component);\n // Run through the validations, split them up and call\n // the validator IF there is a value or it is required\n component.setState({\n _isValid: validation.isValid,\n _isRequired: validation.isRequired,\n _validationError: validation.error,\n _externalError: null\n }, this.validateForm);\n\n },\n\n // Checks validation on current value or a passed value\n runValidation: function (component, value) {\n\n var currentValues = this.getCurrentValues();\n var validationErrors = component.props.validationErrors;\n var validationError = component.props.validationError;\n value = arguments.length === 2 ? value : component.state._value;\n\n var validationResults = this.runRules(value, currentValues, component._validations);\n var requiredResults = this.runRules(value, currentValues, component._requiredValidations);\n\n // the component defines an explicit validate function\n if (typeof component.validate === \"function\") {\n validationResults.failed = component.validate() ? [] : ['failed'];\n }\n\n var isRequired = Object.keys(component._requiredValidations).length ? !!requiredResults.success.length : false;\n var isValid = !validationResults.failed.length && !(this.props.validationErrors && this.props.validationErrors[component.props.name]);\n\n return {\n isRequired: isRequired,\n isValid: isRequired ? false : isValid,\n error: (function () {\n\n if (isValid && !isRequired) {\n return emptyArray;\n }\n\n if (validationResults.errors.length) {\n return validationResults.errors;\n }\n\n if (this.props.validationErrors && this.props.validationErrors[component.props.name]) {\n return typeof this.props.validationErrors[component.props.name] === 'string' ? [this.props.validationErrors[component.props.name]] : this.props.validationErrors[component.props.name];\n }\n\n if (isRequired) {\n var error = validationErrors[requiredResults.success[0]];\n return error ? [error] : null;\n }\n\n if (validationResults.failed.length) {\n return validationResults.failed.map(function(failed) {\n return validationErrors[failed] ? validationErrors[failed] : validationError;\n }).filter(function(x, pos, arr) {\n // Remove duplicates\n return arr.indexOf(x) === pos;\n });\n }\n\n }.call(this))\n };\n\n },\n\n runRules: function (value, currentValues, validations) {\n\n var results = {\n errors: [],\n failed: [],\n success: []\n };\n if (Object.keys(validations).length) {\n Object.keys(validations).forEach(function (validationMethod) {\n\n if (validationRules[validationMethod] && typeof validations[validationMethod] === 'function') {\n throw new Error('Formsy does not allow you to override default validations: ' + validationMethod);\n }\n\n if (!validationRules[validationMethod] && typeof validations[validationMethod] !== 'function') {\n throw new Error('Formsy does not have the validation rule: ' + validationMethod);\n }\n\n if (typeof validations[validationMethod] === 'function') {\n var validation = validations[validationMethod](currentValues, value);\n if (typeof validation === 'string') {\n results.errors.push(validation);\n results.failed.push(validationMethod);\n } else if (!validation) {\n results.failed.push(validationMethod);\n }\n return;\n\n } else if (typeof validations[validationMethod] !== 'function') {\n var validation = validationRules[validationMethod](currentValues, value, validations[validationMethod]);\n if (typeof validation === 'string') {\n results.errors.push(validation);\n results.failed.push(validationMethod);\n } else if (!validation) {\n results.failed.push(validationMethod);\n } else {\n results.success.push(validationMethod);\n }\n return;\n\n }\n\n return results.success.push(validationMethod);\n\n });\n }\n\n return results;\n\n },\n\n // Validate the form by going through all child input components\n // and check their state\n validateForm: function () {\n\n // We need a callback as we are validating all inputs again. This will\n // run when the last component has set its state\n var onValidationComplete = function () {\n var allIsValid = this.inputs.every(component => {\n return component.state._isValid;\n });\n\n this.setState({\n isValid: allIsValid\n });\n\n if (allIsValid) {\n this.props.onValid();\n } else {\n this.props.onInvalid();\n }\n\n // Tell the form that it can start to trigger change events\n this.setState({\n canChange: true\n });\n\n }.bind(this);\n\n // Run validation again in case affected by other inputs. The\n // last component validated will run the onValidationComplete callback\n this.inputs.forEach((component, index) => {\n var validation = this.runValidation(component);\n if (validation.isValid && component.state._externalError) {\n validation.isValid = false;\n }\n component.setState({\n _isValid: validation.isValid,\n _isRequired: validation.isRequired,\n _validationError: validation.error,\n _externalError: !validation.isValid && component.state._externalError ? component.state._externalError : null\n }, index === this.inputs.length - 1 ? onValidationComplete : null);\n });\n\n // If there are no inputs, set state where form is ready to trigger\n // change event. New inputs might be added later\n if (!this.inputs.length && this.isMounted()) {\n this.setState({\n canChange: true\n });\n }\n },\n\n // Method put on each input component to register\n // itself to the form\n attachToForm: function (component) {\n\n if (this.inputs.indexOf(component) === -1) {\n this.inputs.push(component);\n }\n\n this.validate(component);\n },\n\n // Method put on each input component to unregister\n // itself from the form\n detachFromForm: function (component) {\n var componentPos = this.inputs.indexOf(component);\n\n if (componentPos !== -1) {\n this.inputs = this.inputs.slice(0, componentPos)\n .concat(this.inputs.slice(componentPos + 1));\n }\n\n this.validateForm();\n },\n render: function () {\n\n return (\n
\n {this.props.children}\n
\n );\n\n }\n});\n\nif (!global.exports && !global.module && (!global.define || !global.define.amd)) {\n global.Formsy = Formsy;\n}\n\nmodule.exports = Formsy;\n\n\n\n/** WEBPACK FOOTER **\n ** D:/Dev/git/React/formsy-react/src/main.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"react\"\n ** module id = 1\n ** module chunks = 0\n **/","var utils = require('./utils.js');\r\nvar React = global.React || require('react');\r\n\r\nvar convertValidationsToObject = function (validations) {\r\n\r\n if (typeof validations === 'string') {\r\n\r\n return validations.split(/\\,(?![^{\\[]*[}\\]])/g).reduce(function (validations, validation) {\r\n var args = validation.split(':');\r\n var validateMethod = args.shift();\r\n\r\n args = args.map(function (arg) {\r\n try {\r\n return JSON.parse(arg);\r\n } catch (e) {\r\n return arg; // It is a string if it can not parse it\r\n }\r\n });\r\n\r\n if (args.length > 1) {\r\n throw new Error('Formsy does not support multiple args on string validations. Use object format of validations instead.');\r\n }\r\n\r\n validations[validateMethod] = args.length ? args[0] : true;\r\n return validations;\r\n }, {});\r\n\r\n }\r\n\r\n return validations || {};\r\n};\r\n\r\nmodule.exports = {\r\n getInitialState: function () {\r\n return {\r\n _value: this.props.value,\r\n _isRequired: false,\r\n _isValid: true,\r\n _isPristine: true,\r\n _pristineValue: this.props.value,\r\n _validationError: [],\r\n _externalError: null,\r\n _formSubmitted: false\r\n };\r\n },\r\n contextTypes: {\r\n formsy: React.PropTypes.object // What about required?\r\n },\r\n getDefaultProps: function () {\r\n return {\r\n validationError: '',\r\n validationErrors: {}\r\n };\r\n },\r\n\r\n componentWillMount: function () {\r\n var configure = function () {\r\n this.setValidations(this.props.validations, this.props.required);\r\n\r\n // Pass a function instead?\r\n this.context.formsy.attachToForm(this);\r\n //this.props._attachToForm(this);\r\n }.bind(this);\r\n\r\n if (!this.props.name) {\r\n throw new Error('Form Input requires a name property when used');\r\n }\r\n\r\n /*\r\n if (!this.props._attachToForm) {\r\n return setTimeout(function () {\r\n if (!this.isMounted()) return;\r\n if (!this.props._attachToForm) {\r\n throw new Error('Form Mixin requires component to be nested in a Form');\r\n }\r\n configure();\r\n }.bind(this), 0);\r\n }\r\n */\r\n configure();\r\n },\r\n\r\n // We have to make the validate method is kept when new props are added\r\n componentWillReceiveProps: function (nextProps) {\r\n this.setValidations(nextProps.validations, nextProps.required);\r\n\r\n },\r\n\r\n componentDidUpdate: function (prevProps) {\r\n\r\n // If the value passed has changed, set it. If value is not passed it will\r\n // internally update, and this will never run\r\n if (!utils.isSame(this.props.value, prevProps.value)) {\r\n this.setValue(this.props.value);\r\n }\r\n\r\n // If validations or required is changed, run a new validation\r\n if (!utils.isSame(this.props.validations, prevProps.validations) || !utils.isSame(this.props.required, prevProps.required)) {\r\n this.context.formsy.validate(this);\r\n }\r\n },\r\n\r\n // Detach it when component unmounts\r\n componentWillUnmount: function () {\r\n this.context.formsy.detachFromForm(this);\r\n //this.props._detachFromForm(this);\r\n },\r\n\r\n setValidations: function (validations, required) {\r\n\r\n // Add validations to the store itself as the props object can not be modified\r\n this._validations = convertValidationsToObject(validations) || {};\r\n this._requiredValidations = required === true ? {isDefaultRequiredValue: true} : convertValidationsToObject(required);\r\n\r\n },\r\n\r\n // We validate after the value has been set\r\n setValue: function (value) {\r\n this.setState({\r\n _value: value,\r\n _isPristine: false\r\n }, function () {\r\n this.context.formsy.validate(this);\r\n //this.props._validate(this);\r\n }.bind(this));\r\n },\r\n resetValue: function () {\r\n this.setState({\r\n _value: this.state._pristineValue,\r\n _isPristine: true\r\n }, function () {\r\n this.context.formsy.validate(this);\r\n //this.props._validate(this);\r\n });\r\n },\r\n getValue: function () {\r\n return this.state._value;\r\n },\r\n hasValue: function () {\r\n return this.state._value !== '';\r\n },\r\n getErrorMessage: function () {\r\n var messages = this.getErrorMessages();\r\n return messages.length ? messages[0] : null;\r\n },\r\n getErrorMessages: function () {\r\n return !this.isValid() || this.showRequired() ? (this.state._externalError || this.state._validationError || []) : [];\r\n },\r\n isFormDisabled: function () {\r\n return this.context.formsy.isFormDisabled();\r\n //return this.props._isFormDisabled();\r\n },\r\n isValid: function () {\r\n return this.state._isValid;\r\n },\r\n isPristine: function () {\r\n return this.state._isPristine;\r\n },\r\n isFormSubmitted: function () {\r\n return this.state._formSubmitted;\r\n },\r\n isRequired: function () {\r\n return !!this.props.required;\r\n },\r\n showRequired: function () {\r\n return this.state._isRequired;\r\n },\r\n showError: function () {\r\n return !this.showRequired() && !this.isValid();\r\n },\r\n isValidValue: function (value) {\r\n return this.context.formsy.isValidValue.call(null, this, value);\r\n //return this.props._isValidValue.call(null, this, value);\r\n }\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** D:/Dev/git/React/formsy-react/src/Mixin.js\n **/","module.exports = {\n arraysDiffer: function (a, b) {\n var isDifferent = false;\n if (a.length !== b.length) {\n isDifferent = true;\n } else {\n a.forEach(function (item, index) {\n if (!this.isSame(item, b[index])) {\n isDifferent = true;\n }\n }, this);\n }\n return isDifferent;\n },\n\n objectsDiffer: function (a, b) {\n var isDifferent = false;\n if (Object.keys(a).length !== Object.keys(b).length) {\n isDifferent = true;\n } else {\n Object.keys(a).forEach(function (key) {\n if (!this.isSame(a[key], b[key])) {\n isDifferent = true;\n }\n }, this);\n }\n return isDifferent;\n },\n\n isSame: function (a, b) {\n if (typeof a !== typeof b) {\n return false;\n } else if (Array.isArray(a)) {\n return !this.arraysDiffer(a, b);\n } else if (typeof a === 'object' && a !== null && b !== null) {\n return !this.objectsDiffer(a, b);\n }\n\n return a === b;\n },\n\n find: function (collection, fn) {\n for (var i = 0, l = collection.length; i < l; i++) {\n var item = collection[i];\n if (fn(item)) {\n return item;\n }\n }\n return null;\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** D:/Dev/git/React/formsy-react/src/utils.js\n **/","var React = global.React || require('react');\r\nvar Mixin = require('./Mixin.js');\r\nmodule.exports = function () {\r\n return function (Component) {\r\n return React.createClass({\r\n mixins: [Mixin],\r\n render: function () {\r\n return React.createElement(Component, {\r\n setValidations: this.setValidations,\r\n setValue: this.setValue,\r\n resetValue: this.resetValue,\r\n getValue: this.getValue,\r\n hasValue: this.hasValue,\r\n getErrorMessage: this.getErrorMessage,\r\n getErrorMessages: this.getErrorMessages,\r\n isFormDisabled: this.isFormDisabled,\r\n isValid: this.isValid,\r\n isPristine: this.isPristine,\r\n isFormSubmitted: this.isFormSubmitted,\r\n isRequired: this.isRequired,\r\n showRequired: this.showRequired,\r\n showError: this.showError,\r\n isValidValue: this.isValidValue,\r\n ...this.props\r\n });\r\n }\r\n });\r\n };\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** D:/Dev/git/React/formsy-react/src/Decorator.js\n **/","var React = global.React || require('react');\r\nvar Mixin = require('./Mixin.js');\r\nmodule.exports = function (Component) {\r\n return React.createClass({\r\n mixins: [Mixin],\r\n render: function () {\r\n return React.createElement(Component, {\r\n setValidations: this.setValidations,\r\n setValue: this.setValue,\r\n resetValue: this.resetValue,\r\n getValue: this.getValue,\r\n hasValue: this.hasValue,\r\n getErrorMessage: this.getErrorMessage,\r\n getErrorMessages: this.getErrorMessages,\r\n isFormDisabled: this.isFormDisabled,\r\n isValid: this.isValid,\r\n isPristine: this.isPristine,\r\n isFormSubmitted: this.isFormSubmitted,\r\n isRequired: this.isRequired,\r\n showRequired: this.showRequired,\r\n showError: this.showError,\r\n isValidValue: this.isValidValue,\r\n ...this.props\r\n });\r\n }\r\n });\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** D:/Dev/git/React/formsy-react/src/HOC.js\n **/","var isExisty = function (value) {\r\n return value !== null && value !== undefined;\r\n};\r\n\r\nvar isEmpty = function (value) {\r\n return value === '';\r\n};\r\n\r\nvar validations = {\r\n isDefaultRequiredValue: function (values, value) {\r\n return value === undefined || value === '';\r\n },\r\n isExisty: function (values, value) {\r\n return isExisty(value);\r\n },\r\n matchRegexp: function (values, value, regexp) {\r\n return !isExisty(value) || isEmpty(value) || regexp.test(value);\r\n },\r\n isUndefined: function (values, value) {\r\n return value === undefined;\r\n },\r\n isEmptyString: function (values, value) {\r\n return isEmpty(value);\r\n },\r\n isEmail: function (values, value) {\r\n return validations.matchRegexp(values, value, /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i);\r\n },\r\n isUrl: function (values, value) {\r\n return validations.matchRegexp(values, value, /^(https?|s?ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i);\r\n },\r\n isTrue: function (values, value) {\r\n return value === true;\r\n },\r\n isFalse: function (values, value) {\r\n return value === false;\r\n },\r\n isNumeric: function (values, value) {\r\n if (typeof value === 'number') {\r\n return true;\r\n }\r\n return validations.matchRegexp(values, value, /^[-+]?(?:\\d*[.])?\\d+$/);\r\n },\r\n isAlpha: function (values, value) {\r\n return validations.matchRegexp(values, value, /^[A-Z]+$/i);\r\n },\r\n isAlphanumeric: function (values, value) {\r\n return validations.matchRegexp(values, value, /^[0-9A-Z]+$/i);\r\n },\r\n isInt: function (values, value) {\r\n return validations.matchRegexp(values, value, /^(?:[-+]?(?:0|[1-9]\\d*))$/);\r\n },\r\n isFloat: function (values, value) {\r\n return validations.matchRegexp(values, value, /^(?:[-+]?(?:\\d+))?(?:\\.\\d*)?(?:[eE][\\+\\-]?(?:\\d+))?$/);\r\n },\r\n isWords: function (values, value) {\r\n return validations.matchRegexp(values, value, /^[A-Z\\s]+$/i);\r\n },\r\n isSpecialWords: function (values, value) {\r\n return validations.matchRegexp(values, value, /^[A-Z\\s\\u00C0-\\u017F]+$/i);\r\n },\r\n isLength: function (values, value, length) {\r\n return !isExisty(value) || isEmpty(value) || value.length === length;\r\n },\r\n equals: function (values, value, eql) {\r\n return !isExisty(value) || isEmpty(value) || value == eql;\r\n },\r\n equalsField: function (values, value, field) {\r\n return value == values[field];\r\n },\r\n maxLength: function (values, value, length) {\r\n return !isExisty(value) || value.length <= length;\r\n },\r\n minLength: function (values, value, length) {\r\n return !isExisty(value) || isEmpty(value) || value.length >= length;\r\n }\r\n};\r\n\r\nmodule.exports = validations;\r\n\n\n\n/** WEBPACK FOOTER **\n ** D:/Dev/git/React/formsy-react/src/validationRules.js\n **/","module.exports = function (source) {\n\n\n // \"foo[0]\"\n return Object.keys(source).reduce(function (output, key) {\n\n var parentKey = key.match(/[^\\[]*/i);\n var paths = key.match(/\\[.*?\\]/g) || [];\n paths = [parentKey[0]].concat(paths).map(function (key) {\n return key.replace(/\\[|\\]/g, '');\n });\n\n var currentPath = output;\n while (paths.length) {\n\n var pathKey = paths.shift();\n\n if (pathKey in currentPath) {\n currentPath = currentPath[pathKey];\n } else {\n currentPath[pathKey] = paths.length ? isNaN(paths[0]) ? {} : [] : source[key];\n currentPath = currentPath[pathKey];\n }\n\n }\n\n return output;\n\n }, {});\n\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/form-data-to-object/index.js\n ** module id = 7\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/src/main.js b/src/main.js index 8f80571..5ed2ead 100644 --- a/src/main.js +++ b/src/main.js @@ -107,7 +107,7 @@ Formsy.Form = React.createClass({ // If any inputs have not been touched yet this will make them dirty // so validation becomes visible (if based on isPristine) this.setFormPristine(false); - var model = this.updateModel(); + var model = this.getModel(); model = this.mapModel(model); this.props.onSubmit(model, this.resetModel, this.updateInputsWithError); this.state.isValid ? this.props.onValidSubmit(model, this.resetModel, this.updateInputsWithError) : this.props.onInvalidSubmit(model, this.resetModel, this.updateInputsWithError); @@ -136,7 +136,7 @@ Formsy.Form = React.createClass({ // Goes through all registered components and // updates the model values - updateModel: function () { + getModel: function () { return this.inputs.reduce((model, component) => { var name = component.props.name; model[name] = component.state._value;