{"version":3,"sources":["webpack://portal-template/../informed/dist/esm/index.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","protoProps","staticProps","prototype","_defineProperty","obj","value","_extends","assign","arguments","source","hasOwnProperty","call","apply","this","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","_objectSpread2","forEach","getOwnPropertyDescriptors","defineProperties","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","_setPrototypeOf","p","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","_possibleConstructorReturn","self","ReferenceError","_assertThisInitialized","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Date","toString","e","_isNativeReflectConstruct","result","Super","NewTarget","constructor","_slicedToArray","arr","Array","isArray","_arrayWithHoles","Symbol","iterator","_arr","_n","_d","_e","undefined","_s","_i","next","done","err","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","iter","from","_iterableToArray","_nonIterableSpread","minLen","n","slice","name","test","len","arr2","module","debug","selectColor","namespace","colors","hash","charCodeAt","Math","abs","formatNodeArgs","args","config","useColors","c","color","prefix","concat","split","join","formatBrowserArgs","index","lastC","replace","match","splice","browserColors","createLogger","_len","_key","unshift","matches","namespaces","map","RegExp","some","regex","process","type","browser","__nwjs","exports","localStorage","getItem","error","DEBUG","formatArgs","loadBrowser","fn","debug$1","ldtoPath","path","String","Boolean","ldget","defaultValue","reduce","res","parentPath","ldhas","pPath","pathKey","parentObj","ldset","val","Number","isInteger","ldunset","found","pathToArrayElem","pathArray","ObjectMap","ldvalues","get","cleanup","pullOut","pulled","ldpullAt","every","JSON","stringify","FormRegisterContext","register","deregister","setValue","setTouched","setError","update","getField","expectRemoval","getInitialValue","getSavedValue","FormStateContext","FormApiContext","getFullField","getValues","getOptions","setInitialValue","getDerrivedValue","removeSavedState","GroupContext","ArrayFieldStateContext","ArrayFieldApiContext","ArrayFieldItemApiContext","ArrayFieldItemStateContext","MultistepStepContext","useFormApi","useContext","useStateWithGetter","initial","ref","useRef","mounted","_useState2","useState","state","setState","current","useEffect","getChildDisplayName","WrappedComponent","displayName","yupToFormErrors","yupError","errors","inner","set","message","_step","_iterator","allowArrayLike","it","F","s","_e2","f","normalCompletion","didErr","step","_e3","return","_createForOfIteratorHelper","validateYupSchema","schema","values","validateSync","abortEarly","yupToFormError","validateYupField","validateAjvSchema","validate","data","_ref","dataPath","keyword","params","missingProperty","uuidv4","r","random","computeFieldFromProperty","propertyName","property","uiControl","informedProps","inputProps","uiBefore","uiAfter","oneOf","items","schemaEnum","label","title","min","minimum","max","maximum","minLength","maxLength","pattern","subProperties","properties","id","field","componentType","options","option","_option$inputProps","_options","_options2","_option$inputProps2","computeFieldsFromSchema","onlyValidateSchema","_schema$properties","allOf","_schema$propertyOrder","propertyOrder","fields","sort","a","b","aIndex","bIndex","informedFormat","frmtr","offset","formatter","_char","Error","getFormatter","prefixLength","findIndex","v","suffixStart","reverse","formatted","chars","vIndex","start","matchIndex","mi","matching","matchingIndex","matcher","curChar","useIsomorphicLayoutEffect","window","document","createElement","useLayoutEffect","useCursorPosition","inputRef","_ref$maintainCursor","maintainCursor","_useStateWithGetter2","cursor","setCursor","getCursor","_useStateWithGetter4","cursorOffset","setCursorOffset","getCursorOffset","cursorLoc","setSelectionRange","useUpdateEffect","effect","deps","firstRef","isFirstMount","logger","initializeValue","mask","parser","initialize","initializeMask","format","parse","generateValidationFunction","validationFunc","validationSchema","required","validateRequired","generateOnChange","_ref2","fieldType","onChange","multiple","setter","selected","checked","generateOnBlur","_ref3","onBlur","generateValue","_ref4","maskedValue","generateFieldType","useField","fieldProps","userRef","asyncValidate","maskWithCursorOffset","initialValue","validateOnChange","validateOnBlur","validateOnMount","asyncValidateOnBlur","maskOnBlur","allowEmptyString","onValueChange","notify","keepState","shadow","formController","userRelevant","relevant","keepStateIfRelevant","_fieldProps$formatter","formatterDependencies","userProps","_useState","fieldId","updater","multistepContext","inMultistep","formApi","fieldApiRef","initialRenerRef","fieldObjectRef","valueTouched","getPristine","getDirty","getFormApi","initVal","initTouched","_useState3","_useState4","formInitialValue","savedState","touched","_useStateWithGetter","setVal","getTheVal","_useStateWithGetter3","setErr","getErr","_useStateWithGetter5","_useStateWithGetter6","setTouch","getTouch","_useState5","_useState6","setMaskedValue","maskedValueRef","initialValueRef","fieldRef","prevFieldRef","internalRef","_useCursorPosition","relevantFunc","rel","ff","_useStateWithGetter7","_useStateWithGetter8","isRelevant","setIsRelevant","getIsRelevant","multistepRelevant","checkRelevant","newRel","reset","getVal","_ref5","preventUpdate","getStep","formOptions","maskedVal","allowEmptyStrings","selectionStart","_res","_ref6","_ref7","fieldValidate","fieldAsyncValidate","fieldApi","getValue","getTouched","getError","getFieldState","dirty","pristine","fieldState","fullField","style","border","setTimeout","borderWidth","borderStyle","borderColor","borderImage","shouldUpdate","render","children","useMemo","changeHandler","blurHandler","hookedValue","informed","Component","asField","forwardRef","_useField","forwardedRef","logger$1","Text$1","_onChange","_onBlur","rest","background","htmlFor","TextArea$1","logger$2","Select$1","selectRef","disabled","Checkbox$1","Radio$1","radioGroupApi","radioGroupState","groupValue","groupOnChange","groupOnBlur","Consumer","RadioGroup","_Component","subClass","superClass","create","_inherits","_super","_this$props","Provider","groupContext","RadioGroup$1","logger$3","useArrayField","arrayFieldApiRef","fieldsById","Map","initialVals","initialValues","setInitialValues","getInitialValues","setKeys","getKeys","validateWithLength","onChangeHandler","fieldName","emitter","on","removeListener","swap","newKeys","console","warn","add","addWithInitialValue","newInitialValues","arrayFieldItemApi","remove","initVals","_remove","arrayFieldItemState","arrayFieldApi","resetKeys","arrayFieldState","wrappedUpdator","fld","_len2","_key2","useScopedApi","scope","buildScopedFormApi","useFormState","Relevant","when","ArrayField","ArrayFieldWrapper","_useArrayField","ArrayFieldItem","scopedApi","lastIndexOf","_formApi$getState","itemState","getState","initialRender","arrayFieldItemApiValue","arrayFieldItemStateValue","Items","FormComponents","components","fieldMap","comp","logger$4","FormFields","schemaField","ArrayField$1","conditional","subSchema","then","conditions","condition","defaultFieldMap","select","input","textarea","checkbox","radio","onClick","array","debug$2","noop","FormController","_this","subscriptions","ajv","allErrors","ajvValidate","compile","fieldsByName","fieldByName","onScreen","expectedRemovals","pulledOut","savedValues","invalid","submits","validating","submitting","dummyField","bind","getErrors","setStep","back","setCurrent","setFormError","submitForm","screenValid","keyDown","getFormState","setValues","resetField","fieldExists","validateField","validated","emit","touch","currentError","event","listeners","listener","Set","valid","component","Current","prevComponent","nextComponent","_this2","notifier","JSPAN","toNotify","empty","entries","_this3","has","_errors","validateFields","_errors2","keyCode","preventEnter","preventDefault","dontPreventDefault","_this4","alreadyRegistered","magicValue","size","expectedRemoval","includedKey","find","includes","isExpected","oldName","t","oldField","logger$5","FormProvider","formState","useForm","logger$6","getApi","apiRef","onReset","onSubmit","onSubmitFailure","formControllerOptions","setOptions","mount","setFormState","onResetHandler","onSubmitHandler","onValueHandler","onFailureHandler","debug$3","Form","renderProp","_useForm","onKeyDown"],"mappings":"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","file":"f74d91fd-259bd9000546318f10cf.js","sourcesContent":["import React, { useContext, useRef, useState, useEffect, useLayoutEffect, useMemo, Component } from 'react';\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e2) {\n throw _e2;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e3) {\n didErr = true;\n err = _e3;\n },\n f: function f() {\n try {\n if (!normalCompletion && it.return != null) it.return();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\nfunction createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n}\n\nvar debug = createCommonjsModule(function (module) {\n /**\n * \n * I stole most of this code from the debug lib\n * https://github.com/visionmedia/debug\n * \n * Just wanted it to be easy to debug without relying on the dependency!\n */\n\n /**\n \t* Selects a color for a debug namespace\n * @param {String} namespace The namespace string for the for the debug instance to be colored\n * @param {String} colors color pallette to choose from\n \t* @return {Number|String} An ANSI color code for the given namespace\n \t* @api private\n \t*/\n function selectColor(namespace, colors) {\n var hash = 0;\n\n for (var i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return colors[Math.abs(hash) % colors.length];\n }\n /**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\n\n function formatNodeArgs(args, config) {\n var name = config.namespace;\n\n if (config.useColors) {\n var c = config.color;\n var colorCode = \"\\x1B[3\" + (c < 8 ? c : '8;5;' + c);\n var prefix = \" \".concat(colorCode, \";1m\").concat(name, \" \\x1B[0m\");\n args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n } else {\n args[0] = name + ' ' + args[0];\n }\n }\n /**\n * Colorize log arguments if enabled.\n *\n */\n\n\n function formatBrowserArgs(args, config) {\n args[0] = (config.useColors ? '%c' : '') + config.namespace;\n\n if (!config.useColors) {\n return;\n }\n\n var c = 'color: ' + config.color; // The final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function (match) {\n if (match === '%%') {\n return;\n }\n\n index++;\n\n if (match === '%c') {\n // We only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n args.splice(lastC, 0, c);\n }\n\n var browserColors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];\n /**\n * Load `namespaces`.\n *\n * @return {String} returns the debug modes\n * @api private\n */\n\n function loadBrowser() {\n var namespaces;\n\n try {\n namespaces = localStorage.getItem('debug');\n } catch (error) {// Swallow\n // XXX (@Qix-) should we be logging these?\n } // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\n\n if (!namespaces && typeof process !== 'undefined' && 'env' in process) {\n namespaces = process.env.DEBUG;\n }\n\n return {\n namespaces: namespaces || '',\n colors: browserColors,\n useColors: true,\n formatArgs: formatBrowserArgs\n };\n }\n /**\n * Load `namespaces`.\n *\n * @return {String} returns the debug modes\n * @api private\n */\n\n\n function loadNode() {\n return {\n namespaces: process.env.DEBUG || '',\n colors: [6, 2, 3, 4, 5, 1],\n useColors: true,\n formatArgs: formatNodeArgs\n };\n }\n\n function createLogger() {\n var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var config = arguments.length > 1 ? arguments[1] : undefined;\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (prefix) {\n args.unshift(prefix);\n } // Create a namespace regex for each namespace\n\n\n var matches = config.namespaces.split(',').map(function (namespace) {\n // Remove wildcard and add to regex if wildcard\n if (namespace[namespace.length - 1] === '*') {\n return new RegExp('^' + namespace.slice(0, namespace.length - 1) + '.*' + '$');\n }\n\n return new RegExp('^' + namespace + '$');\n }); // Does the prefix match a namespace\n\n var match = matches.some(function (regex) {\n return regex.test(prefix);\n });\n var conf = {\n color: selectColor(prefix, config.colors),\n namespace: prefix,\n useColors: config.useColors\n };\n\n if (process.env.NODE_ENV !== 'production' && match) {\n var _console;\n\n config.formatArgs(args, conf);\n\n (_console = console).log.apply(_console, args);\n }\n };\n }\n\n function nodeLogger(prefix) {\n return createLogger(prefix, loadNode());\n }\n\n function browserLogger(prefix) {\n return createLogger(prefix, loadBrowser());\n }\n /**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\n\n if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n module.exports = browserLogger;\n } else {\n module.exports = nodeLogger;\n }\n});\nvar debug$1 = debug('informed:ObjMap' + '\\t');\n/* -------------------- toPath -------------------- */\n\nvar ldtoPath = function ldtoPath() {\n var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n return String.prototype.replace.call(path, /\\['(.+?)'\\]/g, '.$1').split(/[,[\\].]+?/).filter(Boolean);\n};\n/* --------------------- get --------------------- */\n\n\nvar ldget = function ldget(obj) {\n var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var defaultValue = arguments.length > 2 ? arguments[2] : undefined;\n var result = String.prototype.replace.call(path, /\\['(.+?)'\\]/g, '.$1').split(/[,[\\].]+?/).filter(Boolean).reduce(function (res, key) {\n return res !== null && res !== undefined ? res[key] : res;\n }, obj);\n return result === undefined || result === obj ? defaultValue : result;\n};\n/* --------------------- has --------------------- */\n// foo -->\n// foo.bar --> foo\n// foo.bar[3] --> foo.bar\n// foo.bar.baz[2].raz.taz[5].laz --> foo.bar.baz[2].raz.taz[5]\n\n\nvar parentPath = function parentPath(path) {\n return \".\".concat(path).replace(/(.*)[.[].*/, '$1').replace(/\\./, '');\n}; // foo --> foo\n// foo.bar --> bar\n// foo.bar[3] --> [3]\n// foo.bar.baz[2].raz.taz[5].laz --> laz\n\n\nvar pathKey = function pathKey(path) {\n return path.replace(parentPath(path), '').replace(/\\./, '');\n};\n\nvar ldhas = function ldhas(obj, path) {\n var pPath = parentPath(path);\n var key = pathKey(path); // If we have parent path then get the object at that location\n // .. otherwise its the root object\n\n var parentObj = pPath ? ldget(obj, pPath) : obj; // If its [3] turn key into 3\n\n return !!(parentObj && Object.hasOwnProperty.call(parentObj, key.replace(/\\[(.*)\\]/, '$1')));\n};\n/* --------------------- set --------------------- */\n\n\nvar ldset = function ldset(obj) {\n var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var val = arguments.length > 2 ? arguments[2] : undefined;\n String.prototype.replace.call(path, /\\['(.+?)'\\]/g, '.$1').split(/[,[\\].]+?/).filter(Boolean).reduce(function (res, key, i, arr) {\n //console.log('RES', res, 'Key', key, 'I', i, 'Arr', arr, 'OBJ', obj);\n // At the leaf set the value\n if (i === arr.length - 1) {\n res[key] = val;\n return res[key];\n } // Initialize to new array or object if needed\n\n\n if (res[key] === undefined) {\n if (Number.isInteger(+arr[i + 1])) {\n res[key] = [];\n } else {\n res[key] = {};\n }\n\n return res[key];\n } // Exception for if the value is changeing to an array\n\n\n if (Number.isInteger(+arr[i + 1]) && !Array.isArray(res[key])) {\n res[key] = [];\n } //TODO exception for if object ??\n // Otherwise keep whats there\n\n\n return res[key];\n }, obj);\n};\n/* --------------------- unset --------------------- */\n\n\nvar ldunset = function ldunset(obj) {\n var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var found = false;\n String.prototype.replace.call(path, /\\['(.+?)'\\]/g, '.$1').split(/[,[\\].]+?/).filter(Boolean).reduce(function (res, key, i, arr) {\n // Base case res is undefined\n if (res === undefined) {\n return res;\n } // At the leaf delete the value\n\n\n if (i === arr.length - 1) {\n delete res[key];\n found = true;\n return res[key];\n } // Otherwise keep going\n\n\n return res[key];\n }, obj);\n return found;\n};\n/* --------------------- pullAt --------------------- */\n\n\nvar ldpullAt = function ldpullAt(obj) {\n var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var pulled;\n String.prototype.replace.call(path, /\\['(.+?)'\\]/g, '.$1').split(/[,[\\].]+?/).filter(Boolean).reduce(function (res, key, i, arr) {\n // Base case res is undefined\n if (res === undefined) {\n return res;\n } // At the leaf delete the value\n\n\n if (i === arr.length - 1 && Array.isArray(res)) {\n // Pull out one value at index ( key )\n pulled = res.splice(key, 1);\n return res[key];\n } // Otherwise keep going\n\n\n return res[key];\n }, obj);\n return pulled;\n};\n/* --------------------- values --------------------- */\n\n\nvar ldvalues = function ldvalues() {\n var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var props = Object.keys(obj);\n return props.map(function (key) {\n return obj[key];\n });\n};\n\nvar pathToArrayElem = function pathToArrayElem(path) {\n var pathArray = ldtoPath(path);\n return Number.isInteger(+pathArray[pathArray.length - 1]);\n};\n\nvar ObjectMap = /*#__PURE__*/function () {\n function ObjectMap() {\n _classCallCheck(this, ObjectMap);\n }\n\n _createClass(ObjectMap, null, [{\n key: \"empty\",\n value: function empty(object) {\n return ldvalues(object).length === 0;\n }\n }, {\n key: \"get\",\n value: function get(object, path) {\n var val = ldget(object, path); //debug('GOT', path, val);\n\n return val;\n }\n }, {\n key: \"has\",\n value: function has(object, path) {\n return ldhas(object, path);\n }\n }, {\n key: \"set\",\n value: function set(object, path, value) {\n if (value !== undefined) {\n debug$1('SETTING', path, value);\n ldset(object, path, value);\n } else {\n // Setting things to undefined in informed is special!\n // so in this else statement we deal with that\n // If the path is to an array leaf then we want to set to undefined\n // Example:\n // path = 'foo.bar[2]'\n // foo.bar = [ 'baz', 'raz', 'taz' ]\n // setting taz to undefined ^^^\n if (pathToArrayElem(path) && ObjectMap.get(object, path) !== undefined) {\n debug$1('Special case SETTING', path, 'to undefined');\n ldset(object, path, undefined);\n var pathArray = ldtoPath(path);\n pathArray = pathArray.slice(0, pathArray.length - 1);\n cleanup(object, pathArray);\n } // Only delete the field if it needs to be deleted and its not a path to an array ( array leaf )\n // Example:\n // path = 'foo.bar'\n // foo.bar = 'baz'\n // removing foo.bar from the object completley\n else if (!pathToArrayElem(path) && ObjectMap.get(object, path) !== undefined) {\n debug$1('Special case REMOVING', path, 'from object completley');\n ObjectMap[\"delete\"](object, path);\n }\n }\n }\n }, {\n key: \"delete\",\n value: function _delete(object, path) {\n debug$1('DELETE', path); // Special case for arrays\n\n if (pathToArrayElem(path)) {\n debug$1('ARRAY', path); //ldunset(object, path);\n\n this.pullOut(object, path);\n } else {\n ldunset(object, path);\n }\n\n var pathArray = ldtoPath(path);\n pathArray = pathArray.slice(0, pathArray.length - 1);\n cleanup(object, pathArray);\n } // Very important ;)\n\n }, {\n key: \"pullOut\",\n value: function pullOut(object, path) {\n // Get the path to the array\n var pathArray = ldtoPath(path); // debug('PathArray1', pathArray);\n\n var index = pathArray[pathArray.length - 1];\n pathArray = pathArray.slice(0, pathArray.length - 1);\n debug$1('Pulling out:', pathArray, 'index', index); // Get the array\n\n var arr = ldget(object, pathArray);\n debug$1('Array', arr); // Pull out of array\n\n if (Array.isArray(arr)) {\n ldpullAt(arr, index);\n }\n\n cleanup(object, pathArray);\n }\n }]);\n\n return ObjectMap;\n}();\n\nfunction cleanup(obj, path) {\n // Base case no path left\n if (path.length === 0) {\n return;\n }\n\n var object = ldget(obj, path); // Clean up undefined from array\n // if (Array.isArray(object) && pull) {\n // ldpull(object, undefined);\n // }\n // Delete object if its empty\n\n if (Array.isArray(object) ? object.every(function (e) {\n return e == null;\n }) : JSON.stringify(object) === '{}') {\n ldunset(obj, path);\n } // Recur\n\n\n cleanup(obj, path.slice(0, path.length - 1));\n}\n\nvar FormRegisterContext = /*#__PURE__*/React.createContext({\n register: function register() {},\n deregister: function deregister() {},\n setValue: function setValue() {},\n setTouched: function setTouched() {},\n setError: function setError() {},\n update: function update() {},\n getField: function getField() {},\n expectRemoval: function expectRemoval() {},\n getInitialValue: function getInitialValue() {},\n getSavedValue: function getSavedValue() {}\n});\nvar FormStateContext = /*#__PURE__*/React.createContext({});\nvar FormApiContext = /*#__PURE__*/React.createContext({\n getFullField: function getFullField() {},\n getValues: function getValues() {},\n getOptions: function getOptions() {\n return {};\n },\n setInitialValue: function setInitialValue() {},\n getInitialValue: function getInitialValue() {},\n getDerrivedValue: function getDerrivedValue() {},\n getSavedValue: function getSavedValue() {},\n removeSavedState: function removeSavedState() {}\n});\nvar GroupContext = /*#__PURE__*/React.createContext();\nvar ArrayFieldStateContext = /*#__PURE__*/React.createContext();\nvar ArrayFieldApiContext = /*#__PURE__*/React.createContext();\nvar ArrayFieldItemApiContext = /*#__PURE__*/React.createContext();\nvar ArrayFieldItemStateContext = /*#__PURE__*/React.createContext();\nvar MultistepStateContext = /*#__PURE__*/React.createContext();\nvar MultistepApiContext = /*#__PURE__*/React.createContext();\nvar MultistepStepContext = /*#__PURE__*/React.createContext();\n\nfunction useFormApi() {\n var formApi = useContext(FormApiContext);\n return formApi;\n} // https://github.com/facebook/react/issues/14543\n\n\nfunction useStateWithGetter(initial) {\n var ref = useRef();\n var mounted = useRef(true);\n\n var _useState = useState(initial),\n _useState2 = _slicedToArray(_useState, 2),\n state = _useState2[0],\n setState = _useState2[1];\n\n ref.current = state;\n\n var set = function set(value) {\n ref.current = value;\n if (mounted.current) setState(value);\n };\n\n var get = function get() {\n return ref.current;\n };\n\n useEffect(function () {\n return function () {\n mounted.current = false;\n };\n }, []);\n return [state, set, get];\n}\n\nvar getChildDisplayName = function getChildDisplayName(WrappedComponent) {\n // fix for \"memo\" components\n if (WrappedComponent.type && WrappedComponent.type.name) {\n return WrappedComponent.type.name;\n }\n\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n};\n\nvar yupToFormErrors = function yupToFormErrors(yupError) {\n var errors = {};\n\n if (yupError.inner) {\n if (yupError.inner.length === 0) {\n // console.log(yupError.path);\n ObjectMap.set(errors, yupError.path, yupError.message);\n return;\n }\n\n var _iterator = _createForOfIteratorHelper(yupError.inner),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var err = _step.value;\n\n if (!ObjectMap.get(errors, err.path)) {\n // console.log(errors, err.path, err.message);\n ObjectMap.set(errors, err.path, err.message);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n return errors;\n};\n\nvar validateYupSchema = function validateYupSchema(schema, values) {\n try {\n schema.validateSync(values, {\n abortEarly: false\n });\n } catch (e) {\n var formErrors = yupToFormErrors(e);\n return formErrors;\n }\n};\n\nvar yupToFormError = function yupToFormError(yupError) {\n if (yupError.inner) {\n if (yupError.inner.length === 0) {\n return;\n }\n\n var err = yupError.inner[0];\n return err.message;\n }\n};\n\nvar validateYupField = function validateYupField(schema, value) {\n try {\n schema.validateSync(value, {\n abortEarly: false\n });\n } catch (e) {\n return yupToFormError(e);\n }\n};\n\nvar validateAjvSchema = function validateAjvSchema(validate, data) {\n validate(data);\n var errors = {};\n\n if (validate.errors) {\n validate.errors.forEach(function (_ref) {\n var message = _ref.message,\n dataPath = _ref.dataPath,\n keyword = _ref.keyword,\n params = _ref.params;\n var path = dataPath; // Special case for required\n\n if (keyword === 'required') {\n path = \"\".concat(path, \".\").concat(params.missingProperty);\n } // Get rid of leading dot\n\n\n path = path.replace('.', ''); // console.log('PATH', path, message);\n // TODO get message from informed if present\n\n ObjectMap.set(errors, path, message);\n });\n }\n\n return errors;\n}; // https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\n\n\nvar uuidv4 = function uuidv4() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0,\n v = c == 'x' ? r : r & 0x3 | 0x8;\n return v.toString(16);\n });\n};\n\nvar debounce = function debounce(func, wait) {\n var timeout;\n return function executedFunction() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var later = function later() {\n clearTimeout(timeout);\n func.apply(void 0, args);\n };\n\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n };\n};\n\nvar computeFieldFromProperty = function computeFieldFromProperty(propertyName, property, prefix) {\n var uiControl = property['ui:control'],\n informedProps = property['informed:props'],\n inputProps = property['input:props'],\n uiBefore = property['ui:before'],\n uiAfter = property['ui:after'],\n oneOf = property.oneOf,\n items = property.items,\n schemaEnum = property[\"enum\"],\n label = property.title,\n min = property.minimum,\n max = property.maximum,\n minLength = property.minLength,\n maxLength = property.maxLength,\n pattern = property.pattern,\n type = property.type,\n subProperties = property.properties; // Set Id if not passed\n\n var id = uuidv4();\n\n if (inputProps && inputProps.id) {\n id = inputProps.id;\n }\n\n var field = {\n componentType: uiControl,\n field: prefix ? \"\".concat(prefix, \".\").concat(propertyName) : propertyName,\n type: type,\n uiBefore: uiBefore,\n uiAfter: uiAfter,\n properties: type === 'object' ? subProperties : undefined,\n items: type === 'array' ? items : undefined,\n props: _objectSpread2(_objectSpread2({\n label: label,\n id: id,\n min: min,\n max: max,\n minLength: minLength,\n maxLength: maxLength,\n pattern: pattern\n }, informedProps), inputProps)\n };\n\n if (oneOf) {\n var options = property.oneOf.map(function (option) {\n var _option$inputProps = option['input:props'],\n inputProps = _option$inputProps === void 0 ? {} : _option$inputProps;\n return _objectSpread2({\n value: option[\"const\"],\n label: option.title\n }, inputProps);\n });\n field.props.options = options;\n }\n\n if (schemaEnum) {\n var _options = property[\"enum\"].map(function (val) {\n return {\n value: val,\n label: val\n };\n });\n\n field.props.options = _options;\n }\n\n if (items && items.oneOf) {\n var _options2 = items.oneOf.map(function (option) {\n var _option$inputProps2 = option['input:props'],\n inputProps = _option$inputProps2 === void 0 ? {} : _option$inputProps2;\n return _objectSpread2({\n value: option[\"const\"],\n label: option.title\n }, inputProps);\n });\n\n field.props.options = _options2;\n }\n\n return field;\n};\n\nvar computeFieldsFromSchema = function computeFieldsFromSchema(schema, onlyValidateSchema, prefix) {\n if (!schema || onlyValidateSchema) {\n return [];\n } // Grab properties and items off of schema\n\n\n var _schema$properties = schema.properties,\n properties = _schema$properties === void 0 ? {} : _schema$properties,\n allOf = schema.allOf,\n _schema$propertyOrder = schema.propertyOrder,\n propertyOrder = _schema$propertyOrder === void 0 ? [] : _schema$propertyOrder;\n\n if (Object.keys(properties).length > 0) {\n // Attempt to generate fields from properties\n var fields = Object.keys(properties).sort(function (a, b) {\n var aIndex = propertyOrder.indexOf(a);\n var bIndex = propertyOrder.indexOf(b);\n return (aIndex > -1 ? aIndex : propertyOrder.length + 1) - (bIndex > -1 ? bIndex : propertyOrder.length + 1);\n }).map(function (propertyName) {\n var property = properties[propertyName];\n var field = computeFieldFromProperty(propertyName, property, prefix);\n return field;\n }); // Check for all of ( we have conditionals )\n\n if (allOf) {\n fields.push({\n componentType: 'conditionals',\n // Each element of the \"allOf\" array is a conditional\n allOf: allOf\n });\n }\n\n return fields;\n }\n\n return [];\n}; // Examples\n// field = \"name\" ---> properties.name\n// field = \"brother.name\" ---> properties.brother.properties.name\n// field = \"brother.siblings[1].friend.name\" ---> properties.brother.properties.siblings.items[1].properties.friend.properties.name\n\n\nvar getSchemaPathFromJsonPath = function getSchemaPathFromJsonPath(jsonPath) {\n // Convert\n var schemaPath = jsonPath.replace(/\\./g, '.properties.').replace(/\\[/g, '.itmes['); // Add first properties\n\n schemaPath = \"properties.\".concat(schemaPath);\n return schemaPath;\n};\n/* -------------------------- Formatter ----------------------------- */\n\n\nvar getFormatter = function getFormatter(formatter, value) {\n // If mask is a string turn it into an array;\n if (typeof formatter === 'string') {\n return formatter.split('').map(function (_char) {\n if (_char === '#') {\n return /\\d/;\n }\n\n if (_char === '*') {\n return /[\\w]/;\n }\n\n return _char;\n });\n } // If mask is a function use it to genreate current mask\n\n\n if (typeof formatter === 'function') {\n return formatter(value);\n }\n\n if (Array.isArray(formatter)) {\n return formatter;\n } // Should never make it here throw\n\n\n throw new Error('Formatter must be string, array, or function');\n};\n\nvar matchingIndex = function matchingIndex(a, b) {\n var i = 0;\n var mi = -1;\n var matching = true; // a = \"+1 \"\n // b = \"+12\"\n\n while (matching && i < a.length) {\n if (a[i] == b[i]) {\n mi = i;\n } else {\n matching = false;\n }\n\n i = i + 1;\n }\n\n return mi;\n};\n\nvar informedFormat = function informedFormat(val, frmtr) {\n // console.log('Formatting', val);\n // Null check\n if (!val) {\n return {\n val: val,\n offset: 0\n };\n }\n\n var value = \"\".concat(val); // Generate formatter array\n\n var formatter = getFormatter(frmtr, value); // Start to fill in the array\n // Example: phone formatter\n // formatter =['+', '1', ' ', /\\d/, /\\d/, /\\d/, '-', /\\d/, /\\d/, /\\d/, '-', /\\d/, /\\d/, /\\d/, /\\d/]\n // value examples:\n // \"1231231234 ----> +1 123-123-1234\n // \"+\" \t\t\t\t ----> +\n // \"+1\" \t\t\t ----> +1\n // \"+2\"\t\t\t\t ----> +1 2\n // \"1\"\t\t\t\t ----> +1 1\n // \"1234\"\t\t\t ----> +1 123-4\n // \"123a\" ----> +1 123\n // Determine prefix length and suffix start\n\n var prefixLength = formatter.findIndex(function (v) {\n return typeof v != 'string';\n });\n\n var suffixStart = formatter.length - _toConsumableArray(formatter).reverse().findIndex(function (v) {\n return typeof v != 'string';\n }); // Formatted value\n\n\n var formatted = []; // The characters from the current value\n\n var chars = value.split(''); // To track the value index during itteration\n\n var vIndex = 0;\n var start = 0; // If the value matches part of the prefix take it out\n // Example prefix = \"+1 \" value = [\"+1 123-123-1234\", \"+12\", \"+2\"]\n\n var matchIndex = matchingIndex(formatter.slice(0, prefixLength), chars.slice(0, prefixLength)); // console.log('Matching index', matchIndex);\n\n if (matchIndex > -1) {\n //vIndex = prefixLength;\n vIndex = matchIndex + 1;\n formatted = formatted.concat(formatter.slice(0, matchIndex + 1));\n start = matchIndex + 1;\n } // Example prefix = \"+1 \" value=[\"1\", \"1234\"]\n\n\n if (matchIndex < 0) {\n // Start past the prefix\n formatted = formatted.concat(formatter.slice(0, prefixLength));\n start = prefixLength;\n } // console.log('start', start, formatted);\n\n\n for (var i = start; i < formatter.length; i++) {\n // Get current formatter location matcher\n var matcher = formatter[i]; // We get past the prefix if matcher is not a string\n\n if (vIndex != chars.length) {\n // Get the current value character\n var curChar = chars[vIndex]; // Special case for function\n\n if (typeof matcher === 'function') {\n formatted.push(matcher(curChar));\n vIndex = vIndex + 1;\n } else {\n // If type is string normal compare otherwise regex compare\n var match = typeof matcher === 'string' ? matcher === curChar : matcher.test(curChar); // If the current character of the value matches and matcher is a string\n // \"1\" === \"1\"\n\n if (match && typeof matcher === 'string') {\n formatted.push(matcher); //if( pastPrefix ){\n\n vIndex = vIndex + 1; //}\n } // If the current character does not match and matcher is a stirng\n // \"1\" != \"+\"\n else if (!match && typeof matcher === 'string') {\n // Special check for 123a ---> dont want \"+1 123-\"\n // Special check for 1234 ---> DO want \"+1 123-4\"\n if (vIndex != chars.length) formatted.push(matcher);\n } // If the current character matches and the matcher is not a string\n // /\\d/.test(\"2\")\n else if (match && typeof matcher != 'string') {\n formatted.push(curChar);\n vIndex = vIndex + 1;\n } // If the current character does NOT match and the matecer is regex\n // /\\d/.test(\"a\")\n else if (!match && typeof matcher != 'string') {\n // Throw out this value\n vIndex = vIndex + 1;\n i = i - 1;\n }\n }\n } else {\n // If mattcher is a string and we are at suffix keep going\n if (typeof matcher === 'string' && i >= suffixStart) {\n formatted.push(matcher);\n } else {\n // Otherwise we want to break out\n break;\n }\n }\n }\n\n return {\n value: formatted.join(''),\n offset: value ? formatted.length - value.length : 0\n };\n};\n/* --------------------------------------- createIntlNumberFormatter --------------------------------------- */\n\n\nvar createIntlNumberFormatter = function createIntlNumberFormatter(locale, opts) {\n var _numberFormatterWitho, _numberFormatterWitho2;\n\n var numberFormatter = new Intl.NumberFormat(locale, opts);\n var numberFormatterWithoutOpts = new Intl.NumberFormat(locale);\n var decimalChar = (_numberFormatterWitho = (_numberFormatterWitho2 = numberFormatterWithoutOpts.formatToParts(0.1).find(function (_ref2) {\n var type = _ref2.type;\n return type === 'decimal';\n })) === null || _numberFormatterWitho2 === void 0 ? void 0 : _numberFormatterWitho2.value) !== null && _numberFormatterWitho !== void 0 ? _numberFormatterWitho : '.';\n\n function isRegexEqual(x, y) {\n return x instanceof RegExp && y instanceof RegExp && x.source === y.source && x.global === y.global && x.ignoreCase === y.ignoreCase && x.multiline === y.multiline;\n }\n\n function findLastIndex(arr, predicate) {\n var l = arr.length; // eslint-disable-next-line no-plusplus\n\n while (l--) {\n if (predicate(arr[l])) return l;\n }\n\n return -1;\n }\n\n function insert(arr, index, value) {\n var nextArr = _toConsumableArray(arr);\n\n if (Array.isArray(value)) {\n nextArr.splice.apply(nextArr, [index, 0].concat(_toConsumableArray(value)));\n } else {\n nextArr.splice(index, 0, value);\n }\n\n return nextArr;\n }\n\n function stripNonNumeric(str) {\n return \"\".concat(str).replace(/\\D/g, '');\n }\n\n function toNumberString(str) {\n return \"\".concat(str).split(decimalChar).map(function (splitStr) {\n return stripNonNumeric(splitStr);\n }).join('.');\n }\n\n function toFloat(str) {\n if (typeof str === 'number') {\n return str;\n }\n\n var _float = parseFloat(toNumberString(str));\n\n return !Number.isNaN(_float) ? _float : undefined;\n }\n\n function mask(value) {\n var _float2 = toNumberString(value); // if (!float) {\n // return [];\n // }\n\n\n var fraction = \"\".concat(_float2).split('.')[1];\n var numberParts = numberFormatter.formatToParts(Number(_float2));\n\n if (fraction === '0') {\n numberParts.push({\n type: 'decimal',\n value: decimalChar\n }, {\n type: 'fraction',\n value: fraction\n });\n }\n\n var maskArray = numberParts.reduce(function (pv, _ref3) {\n var type = _ref3.type,\n partValue = _ref3.value;\n\n if (['decimal', 'fraction'].includes(type) && fraction == null) {\n return pv;\n }\n\n if (['integer', 'fraction'].includes(type)) {\n return [].concat(_toConsumableArray(pv), _toConsumableArray(partValue.split('').filter(function (_, index) {\n return type === 'fraction' ? index < fraction.length : true;\n }).map(function () {\n return /\\d/;\n })));\n }\n\n if (type === 'currency') {\n return [].concat(_toConsumableArray(pv), _toConsumableArray(partValue.split('')));\n }\n\n return [].concat(_toConsumableArray(pv), [partValue]);\n }, []);\n var lastDigitIndex = findLastIndex(maskArray, function (maskChar) {\n return isRegexEqual(maskChar, /\\d/);\n });\n\n if (maskArray.indexOf(decimalChar) === -1 && \"\".concat(value).indexOf(decimalChar) !== -1) {\n maskArray = insert(maskArray, lastDigitIndex + 1, [decimalChar, '[]']);\n lastDigitIndex += 2; // we want to insert a new number after the decimal\n }\n\n var endOfMask = maskArray.slice(lastDigitIndex + 1).join('');\n maskArray = [].concat(_toConsumableArray(maskArray.slice(0, lastDigitIndex + 1)), [endOfMask]);\n return maskArray;\n }\n\n var parser = function parser(value) {\n if (value == null) {\n return undefined;\n }\n\n return toFloat(value);\n };\n\n return {\n formatter: mask,\n parser: parser\n };\n};\n\nvar utils = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getChildDisplayName: getChildDisplayName,\n yupToFormErrors: yupToFormErrors,\n validateYupSchema: validateYupSchema,\n yupToFormError: yupToFormError,\n validateYupField: validateYupField,\n validateAjvSchema: validateAjvSchema,\n uuidv4: uuidv4,\n debounce: debounce,\n computeFieldFromProperty: computeFieldFromProperty,\n computeFieldsFromSchema: computeFieldsFromSchema,\n getSchemaPathFromJsonPath: getSchemaPathFromJsonPath,\n informedFormat: informedFormat,\n createIntlNumberFormatter: createIntlNumberFormatter\n}); // To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\n// @see https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;\n\nvar useCursorPosition = function useCursorPosition(_ref) {\n var value = _ref.value,\n inputRef = _ref.inputRef,\n _ref$maintainCursor = _ref.maintainCursor,\n maintainCursor = _ref$maintainCursor === void 0 ? true : _ref$maintainCursor;\n\n var _useStateWithGetter = useStateWithGetter(0),\n _useStateWithGetter2 = _slicedToArray(_useStateWithGetter, 3),\n cursor = _useStateWithGetter2[0],\n setCursor = _useStateWithGetter2[1],\n getCursor = _useStateWithGetter2[2];\n\n var _useStateWithGetter3 = useStateWithGetter(0),\n _useStateWithGetter4 = _slicedToArray(_useStateWithGetter3, 3),\n cursorOffset = _useStateWithGetter4[0],\n setCursorOffset = _useStateWithGetter4[1],\n getCursorOffset = _useStateWithGetter4[2];\n\n useIsomorphicLayoutEffect(function () {\n if (inputRef.current != null && getCursor()) {\n // inputRef.current.selectionEnd = getCursor() + getCursorOffset();\n var cursorLoc = getCursor() + getCursorOffset(); // Only offset if we need to\n\n if (getCursorOffset() != 0 && maintainCursor) {\n inputRef.current.setSelectionRange(cursorLoc + 1, cursorLoc + 1);\n } else if (maintainCursor) {\n inputRef.current.setSelectionRange(cursorLoc, cursorLoc);\n }\n }\n }, [value]);\n return {\n setCursorOffset: setCursorOffset,\n setCursor: setCursor,\n cursor: cursor,\n getCursor: getCursor,\n cursorOffset: cursorOffset\n };\n};\n/**\n *\n * Acts as a react useEffect that does not run on first render.\n *\n * @example\n * useUpdateEffect(()=>{...}, [foo])\n * 1st Render: NO CALL\n * foo changes: GETS CALLED\n *\n */\n\n\nvar useUpdateEffect = function useUpdateEffect(effect, deps) {\n var firstRef = useRef(true);\n var isFirstMount = firstRef.current;\n useEffect(function () {\n if (!isFirstMount) {\n return effect();\n } else {\n firstRef.current = false;\n }\n }, deps);\n};\n\nvar logger = debug('informed:useField' + '\\t'); // localStorage.debug = 'informed:.*' << HOW to enable debuging\n\nvar initializeValue = function initializeValue(value, mask, formatter, parser, initialize) {\n if (value != null) {\n // Call users initialize if it was passed\n if (initialize) {\n return initialize(value);\n } // Call mask if it was passed\n\n\n if (mask) {\n return mask(value);\n }\n\n if (formatter && !parser) {\n var res = informedFormat(value, formatter);\n return res.value;\n }\n\n return value;\n } // Not needed but called out specifically\n\n\n return undefined;\n};\n\nvar initializeMask = function initializeMask(value, format, parse, formatter) {\n // Call format and parse if they were passed\n if (format && parse) {\n return format(value);\n } // Call formatter\n\n\n if (formatter) {\n var res = informedFormat(value, formatter);\n return res.value;\n }\n\n return value;\n};\n\nvar generateValidationFunction = function generateValidationFunction(validationFunc, validationSchema, _ref) {\n var required = _ref.required; // We dont want a validation function if there was nothing passed\n\n if (validationFunc || validationSchema) {\n return function (val, values) {\n if (validationSchema) {\n return validateYupField(validationSchema, val);\n }\n\n if (validationFunc) {\n return validationFunc(val, values);\n }\n };\n }\n\n if (required) {\n return function (val) {\n return validateRequired(val, required);\n };\n }\n};\n\nvar generateOnChange = function generateOnChange(_ref2) {\n var fieldType = _ref2.fieldType,\n setValue = _ref2.setValue,\n onChange = _ref2.onChange,\n multiple = _ref2.multiple,\n ref = _ref2.ref;\n\n var setter = function setter(e) {\n return setValue(e);\n };\n\n if (fieldType === 'text' || fieldType === 'textArea' || fieldType === 'number') {\n setter = function setter(e) {\n return setValue(e.target.value, e);\n };\n }\n\n if (fieldType === 'select') {\n setter = function setter() {\n var selected = Array.from(ref.current).filter(function (option) {\n return option.selected;\n }).map(function (option) {\n return option.value;\n });\n setValue(multiple ? selected : selected[0] || '');\n };\n }\n\n if (fieldType === 'checkbox') {\n setter = function setter(e) {\n setValue(e.target.checked);\n\n if (onChange) {\n onChange(e);\n }\n };\n }\n\n return function (e) {\n setter(e);\n };\n};\n\nvar generateOnBlur = function generateOnBlur(_ref3) {\n var setTouched = _ref3.setTouched,\n onBlur = _ref3.onBlur;\n return function (e) {\n setTouched(true);\n\n if (onBlur) {\n onBlur(e);\n }\n };\n};\n\nvar generateValue = function generateValue(_ref4) {\n var fieldType = _ref4.fieldType,\n maskedValue = _ref4.maskedValue,\n multiple = _ref4.multiple,\n value = _ref4.value;\n\n switch (fieldType) {\n case 'text':\n case 'number':\n return !maskedValue && maskedValue !== 0 ? '' : maskedValue;\n\n case 'textArea':\n return !maskedValue ? '' : maskedValue;\n\n case 'select':\n return value || (multiple ? [] : '');\n\n case 'checkbox':\n return !!value;\n\n default:\n return value;\n }\n};\n\nvar generateFieldType = function generateFieldType(fieldType) {\n switch (fieldType) {\n case 'text':\n return fieldType;\n\n case 'number':\n return fieldType;\n\n case 'checkbox':\n return fieldType;\n\n default:\n return;\n }\n};\n\nvar validateRequired = function validateRequired(value, required) {\n if (required && (value == null || value === '')) {\n return typeof required === 'string' ? required : 'This field is required';\n }\n};\n\nfunction useField() {\n var fieldProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var userRef = arguments.length > 1 ? arguments[1] : undefined; // Pull props off of field props\n\n var field = fieldProps.field,\n validationFunc = fieldProps.validate,\n asyncValidate = fieldProps.asyncValidate,\n validationSchema = fieldProps.validationSchema,\n mask = fieldProps.mask,\n maskWithCursorOffset = fieldProps.maskWithCursorOffset,\n format = fieldProps.format,\n parse = fieldProps.parse,\n formatter = fieldProps.formatter,\n parser = fieldProps.parser,\n initialValue = fieldProps.initialValue,\n validateOnChange = fieldProps.validateOnChange,\n validateOnBlur = fieldProps.validateOnBlur,\n validateOnMount = fieldProps.validateOnMount,\n asyncValidateOnBlur = fieldProps.asyncValidateOnBlur,\n maskOnBlur = fieldProps.maskOnBlur,\n allowEmptyString = fieldProps.allowEmptyString,\n onValueChange = fieldProps.onValueChange,\n notify = fieldProps.notify,\n keepState = fieldProps.keepState,\n maintainCursor = fieldProps.maintainCursor,\n debug = fieldProps.debug,\n shadow = fieldProps.shadow,\n step = fieldProps.step,\n fieldType = fieldProps.fieldType,\n multiple = fieldProps.multiple,\n onChange = fieldProps.onChange,\n onBlur = fieldProps.onBlur,\n formController = fieldProps.formController,\n userRelevant = fieldProps.relevant,\n required = fieldProps.required,\n keepStateIfRelevant = fieldProps.keepStateIfRelevant,\n initialize = fieldProps.initialize,\n _fieldProps$formatter = fieldProps.formatterDependencies,\n formatterDependencies = _fieldProps$formatter === void 0 ? [] : _fieldProps$formatter,\n userProps = _objectWithoutProperties(fieldProps, [\"field\", \"validate\", \"asyncValidate\", \"validationSchema\", \"mask\", \"maskWithCursorOffset\", \"format\", \"parse\", \"formatter\", \"parser\", \"initialValue\", \"validateOnChange\", \"validateOnBlur\", \"validateOnMount\", \"asyncValidateOnBlur\", \"maskOnBlur\", \"allowEmptyString\", \"onValueChange\", \"notify\", \"keepState\", \"maintainCursor\", \"debug\", \"shadow\", \"step\", \"fieldType\", \"multiple\", \"onChange\", \"onBlur\", \"formController\", \"relevant\", \"required\", \"keepStateIfRelevant\", \"initialize\", \"formatterDependencies\"]); // Create ref to a field id\n\n\n var _useState = useState(uuidv4()),\n _useState2 = _slicedToArray(_useState, 1),\n fieldId = _useState2[0]; // Grab the form register context\n\n\n var updater = useContext(FormRegisterContext); // Grab multistepContext\n\n var multistepContext = useContext(MultistepStepContext);\n var inMultistep = multistepContext || keepStateIfRelevant; // Grab the form api\n\n var formApi = useFormApi(); // Create ref to fieldApi\n\n var fieldApiRef = useRef(); // Create initial render ref\n\n var initialRenerRef = useRef(true); // Create ref to fieldObject\n\n var fieldObjectRef = useRef(); // Create ref for pristine and dirty\n\n var valueTouched = useRef(false); // Getters for value ref\n\n var getPristine = function getPristine() {\n return !valueTouched.current;\n };\n\n var getDirty = function getDirty() {\n return valueTouched.current;\n }; // If the form Controller was passed in then use that instead\n\n\n if (formController) {\n updater = formController.updater;\n formApi = formController.getFormApi();\n } // Generate validation function\n\n\n var validate = generateValidationFunction(validationFunc, validationSchema, {\n required: required\n }); // Grab possible initial value from form\n\n var _useState3 = useState(function () {\n return updater.getInitialValue(field);\n }),\n _useState4 = _slicedToArray(_useState3, 1),\n formInitialValue = _useState4[0]; // We might have keep state so check for it!\n\n\n var savedState = updater.getSavedValue(field); // Create Initial Values\n\n var initVal;\n var initTouched; // We do these checks because initial value could be false or zero!!\n\n if ((keepState || inMultistep) && savedState) {\n logger(\"Setting field \".concat(name, \"'s kept state\"), savedState);\n initVal = savedState.value;\n initTouched = savedState.touched; // Remove the saved state\n\n formApi.removeSavedState(name);\n } else if (initialValue != undefined) {\n initVal = initialValue;\n } else {\n initVal = formInitialValue;\n } // Initialize state\n\n\n var _useStateWithGetter = useStateWithGetter(initializeValue(initVal, mask, formatter, parser, initialize)),\n _useStateWithGetter2 = _slicedToArray(_useStateWithGetter, 3),\n value = _useStateWithGetter2[0],\n setVal = _useStateWithGetter2[1],\n getTheVal = _useStateWithGetter2[2];\n\n var _useStateWithGetter3 = useStateWithGetter(validateOnMount ? validate(value) : undefined),\n _useStateWithGetter4 = _slicedToArray(_useStateWithGetter3, 3),\n error = _useStateWithGetter4[0],\n setErr = _useStateWithGetter4[1],\n getErr = _useStateWithGetter4[2];\n\n var _useStateWithGetter5 = useStateWithGetter(initTouched),\n _useStateWithGetter6 = _slicedToArray(_useStateWithGetter5, 3),\n touched = _useStateWithGetter6[0],\n setTouch = _useStateWithGetter6[1],\n getTouch = _useStateWithGetter6[2];\n\n var _useState5 = useState(function () {\n return initializeMask(value, format, parse, formatter);\n }),\n _useState6 = _slicedToArray(_useState5, 2),\n maskedValue = _useState6[0],\n setMaskedValue = _useState6[1];\n\n var maskedValueRef = useRef();\n maskedValueRef.current = maskedValue; // Create then update refs to props\n\n var initialValueRef = useRef(initialValue);\n var fieldRef = useRef(field);\n var prevFieldRef = useRef();\n initialValueRef.current = initialValue;\n fieldRef.current = field; // Create ref to input\n\n var internalRef = useRef(null);\n var ref = React.useMemo(function () {\n return userRef || internalRef;\n }, []); // Setup cursor position tracking\n\n var _useCursorPosition = useCursorPosition({\n value: value,\n inputRef: ref,\n maintainCursor: !!maintainCursor\n }),\n getCursor = _useCursorPosition.getCursor,\n setCursor = _useCursorPosition.setCursor,\n setCursorOffset = _useCursorPosition.setCursorOffset; // Default relevant function\n\n\n var relevantFunc = function relevantFunc() {\n return true;\n };\n\n var relevant = function relevant(params) {\n var rel = userRelevant || relevantFunc;\n var ff = formApi.getFullField(fieldRef.current) || fieldRef.current;\n var args = {\n path: ff,\n parentPath: ff.replace(/(.*)[.[].*/, '$1'),\n get: function get(values, path) {\n return ObjectMap.get(values, path);\n }\n };\n\n if (multistepContext && multistepContext.relevant) {\n return rel(params, args) && multistepContext.relevant(params, args);\n }\n\n return rel(params, args);\n };\n\n var _useStateWithGetter7 = useStateWithGetter(relevant(formApi.getValues())),\n _useStateWithGetter8 = _slicedToArray(_useStateWithGetter7, 3),\n isRelevant = _useStateWithGetter8[0],\n setIsRelevant = _useStateWithGetter8[1],\n getIsRelevant = _useStateWithGetter8[2];\n\n var multistepRelevant = function multistepRelevant(params) {\n if (multistepContext && multistepContext.relevant) {\n return multistepContext.relevant(params);\n }\n\n return true;\n };\n\n var checkRelevant = function checkRelevant() {\n var newRel = relevant(formApi.getValues());\n var curRel = getIsRelevant();\n\n if (newRel != curRel) {\n setIsRelevant(newRel);\n }\n\n return newRel;\n };\n\n useEffect(function () {\n // Reset if we dont have keep state and relevance changed.\n if (!isRelevant && !keepState) {\n fieldApiRef.current.reset();\n }\n }, [isRelevant]); // Special getter to support shadow fields\n\n var getVal = function getVal() {\n return shadow ? formApi.getDerrivedValue(field) : getTheVal();\n };\n /* ---------------------- Setters ---------------------- */\n // ---- Define set error ----\n\n\n var setError = function setError(val) {\n var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n preventUpdate = _ref5.preventUpdate; // For multistep forms always set error to undefined when not at that step\n\n\n if (step && formApi.getStep() < step) {\n logger(\"Setting \".concat(field, \"'s error to undefined as we are not at that step\"));\n setErr(undefined);\n updater.setError(fieldId, undefined, !preventUpdate);\n } else {\n logger(\"Setting \".concat(field, \"'s error to \").concat(val));\n setErr(val);\n updater.setError(fieldId, val, !preventUpdate);\n }\n }; // ---- Define set value ----\n\n\n var setValue = function setValue(v, e) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var val = v; // This value has now been modified\n\n valueTouched.current = true;\n logger(\"Setting \".concat(field, \" to \").concat(val)); // Set value may have been called externally\n // NOT from an inputs change event ( onChange )\n // Therefore, as a precausion, we call the initialize function to format it just in case\n\n if (initialize) {\n val = initialize(val);\n } // Get the most up to date options\n\n\n var formOptions = formApi.getOptions(); // Initialize maked value\n\n var maskedVal = val;\n\n if (val === '' && !allowEmptyString && !options.allowEmptyString && !formOptions.allowEmptyStrings) {\n val = undefined;\n } // Turn string into number for number fields\n\n\n if ((fieldProps.type === 'number' || fieldType === 'number') && val !== undefined) {\n val = +val;\n } // Remember Cursor position!\n\n\n if (e && e.target && e.target.selectionStart) {\n setCursor(e.target.selectionStart);\n } // Call mask if it was passed\n\n\n if (mask && !maskOnBlur) {\n maskedVal = mask(val, getCursor());\n val = mask(val, getCursor());\n } // Call maskWithCursorOffset if it was passed\n\n\n if (maskWithCursorOffset && !maskOnBlur) {\n var res = maskWithCursorOffset(val, getCursor());\n maskedVal = res.value;\n val = res.value;\n setCursorOffset(res.offset);\n } // Call format and parse if they were passed\n\n\n if (format && parse) {\n // Masked value only differs from value when format and parse are used\n val = parse(val);\n maskedVal = format(val);\n } // Call formatter and parser if passed\n\n\n if (formatter) {\n var _res = informedFormat(val, formatter);\n\n setCursorOffset(_res.offset);\n maskedVal = _res.value;\n val = maskedVal;\n } // // Only parse if parser was passed\n\n\n if (parser) {\n val = val != null ? parser(val) : val;\n } // We only need to call validate if the user gave us one\n // and they want us to validate on change && its not the initial validation\n\n\n if (validate && validateOnChange && !options.initial) {\n logger(\"Validating after change \".concat(field, \" \").concat(val));\n setError(validate(val, formApi.getValues()));\n } // Now we update the value\n\n\n setVal(val);\n setMaskedValue(maskedVal); // If the user passed in onValueChange then call it!\n\n if (onValueChange) {\n onValueChange(val);\n } // Call the updater\n\n\n updater.setValue(fieldId, val, !options.preventUpdate);\n };\n\n useUpdateEffect(function () {\n fieldApiRef.current.setValue(maskedValueRef.current);\n }, _toConsumableArray(formatterDependencies)); // ---- Define set touched ----\n\n var setTouched = function setTouched(val, reset) {\n var _ref6 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n preventUpdate = _ref6.preventUpdate;\n\n logger(\"Field \".concat(field, \" has been touched\")); // We only need to call validate if the user gave us one\n // and they want us to validate on blur\n\n if (validate && validateOnBlur && !reset && val) {\n logger(\"Validating after blur \".concat(field, \" \").concat(getVal()));\n setError(validate(getVal(), formApi.getValues()));\n } // Same for async\n\n\n if (asyncValidate && asyncValidateOnBlur && !reset && val) {\n logger(\"Validating async after blur \".concat(field, \" \").concat(getVal()));\n asyncValidate(getVal(), formApi.getValues());\n } // Call mask if it was passed\n\n\n if (mask && maskOnBlur) {\n // Generate the masked value from the current value\n var maskedVal = mask(getVal()); // Now we update the value\n\n setVal(maskedVal);\n setMaskedValue(maskedVal); // If the user passed in onValueChange then call it!\n\n if (onValueChange) {\n onValueChange(maskedVal);\n } // Call the updater\n\n\n updater.setValue(fieldId, maskedVal, !preventUpdate);\n } // Call maskWithCursorOffset if it was passed\n\n\n if (maskWithCursorOffset && maskOnBlur) {\n // Generate the mask and offset\n var res = maskWithCursorOffset(getVal()); // Set the offset\n\n setCursorOffset(res.offset); // Now we update the value\n\n setVal(res.value);\n setMaskedValue(res.value); // If the user passed in onValueChange then call it!\n\n if (onValueChange) {\n onValueChange(res.value);\n } // Call the updater\n\n\n updater.setValue(fieldId, res.value, !preventUpdate);\n } // Finally we set touched and call the updater\n\n\n setTouch(val);\n updater.setTouched(fieldId, val, !preventUpdate);\n }; // ---- Define reset ----\n\n\n var reset = function reset() {\n var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n preventUpdate = _ref7.preventUpdate;\n\n var initVal = initializeValue(initialValueRef.current || updater.getInitialValue(fieldRef.current), mask, formatter, parser, initialize); // TODO support numbers\n\n setValue(initVal, null, {\n initial: true,\n preventUpdate: preventUpdate\n }); // Setting somthing to undefined will remove it\n\n setError(validateOnMount ? validate(initVal) : undefined, {\n preventUpdate: preventUpdate\n });\n setTouched(undefined, true, {\n preventUpdate: preventUpdate\n }); // We are now at our initial state\n\n valueTouched.current = false;\n }; // ---- Define validate ----\n // Note: it takes values as an optimization for when\n // the form controller calls it ( dont need to generate all values )\n // over and over :)\n\n\n var fieldValidate = function fieldValidate(values) {\n if (validate) {\n logger(\"Field validating \".concat(field, \" \").concat(getVal()));\n setError(validate(getVal(), values || formApi.getValues()));\n }\n };\n\n var fieldAsyncValidate = function fieldAsyncValidate(values) {\n if (asyncValidate) {\n logger(\"Field async validating \".concat(field, \" \").concat(getVal()));\n asyncValidate(getVal(), values || formApi.getValues());\n }\n };\n /* ----------------- Field Api && State ----------------- */\n // Build the field api\n\n\n var fieldApi = {\n setValue: setValue,\n setTouched: setTouched,\n setError: setError,\n reset: reset,\n validate: fieldValidate,\n asyncValidate: fieldAsyncValidate,\n getValue: getVal,\n getTouched: getTouch,\n getError: getErr,\n getIsRelevant: getIsRelevant,\n getDirty: getDirty,\n getPristine: getPristine,\n getFieldState: function getFieldState() {\n return {\n value: getVal(),\n touched: getTouch(),\n dirty: getDirty(),\n pristine: getPristine()\n };\n },\n relevant: relevant,\n multistepRelevant: multistepRelevant,\n checkRelevant: checkRelevant\n };\n fieldApiRef.current = fieldApi; // Build the field state\n\n var fieldState = {\n value: value,\n error: error,\n touched: touched,\n maskedValue: maskedValue,\n isRelevant: isRelevant,\n dirty: valueTouched.current,\n pristine: !valueTouched.current\n }; // Create shadow state if this is a shadow field\n\n if (shadow) {\n fieldState = {\n error: error,\n touched: touched\n };\n }\n\n logger('Render', formApi.getFullField(field), fieldState); // We want to register and deregister this field\n\n useIsomorphicLayoutEffect(function () {\n var fullField = formApi.getFullField(fieldRef.current);\n logger('Register', fieldId, fieldRef.current);\n fieldObjectRef.current = {\n field: fullField,\n fieldId: fieldId,\n fieldApi: fieldApi,\n fieldState: fieldState,\n notify: notify,\n keepState: keepState,\n inMultistep: inMultistep,\n shadow: shadow\n };\n updater.register(fieldId, fieldObjectRef.current);\n return function () {\n var fullField = formApi.getFullField(fieldRef.current);\n logger('Deregister', fieldId, fullField);\n updater.deregister(fieldId);\n };\n }, []); // We want to let the controller know of changes on this field when specific props change\n\n useEffect(function () {\n var fullField = formApi.getFullField(field);\n\n if (initialRenerRef.current) {\n initialRenerRef.current = false;\n } else {\n logger('Update', field, inMultistep);\n fieldObjectRef.current.field = fullField;\n updater.update(fieldId, fieldObjectRef.current, prevFieldRef.current);\n }\n\n return function () {\n prevFieldRef.current = fullField;\n };\n }, [field]); // Maintain cursor position\n // useLayoutEffect(\n // () => {\n // if (maintainCursor && ref.current != null && getCursor())\n // ref.current.selectionEnd = getCursor() + getCursorOffset();\n // },\n // [value]\n // );\n // for debugging\n\n useIsomorphicLayoutEffect(function () {\n if (debug && ref) {\n ref.current.style.border = '5px solid orange';\n setTimeout(function () {\n ref.current.style.borderWidth = '2px';\n ref.current.style.borderStyle = 'inset';\n ref.current.style.borderColor = 'initial';\n ref.current.style.borderImage = 'initial';\n }, 500);\n }\n }); // This is an awesome optimization!!\n\n var shouldUpdate = [].concat(_toConsumableArray(Object.values(fieldState)), _toConsumableArray(Object.values(fieldProps)), _toConsumableArray(Object.values(userProps)));\n\n var render = function render(children) {\n return useMemo(function () {\n return isRelevant ? children : null;\n }, _toConsumableArray(shouldUpdate));\n }; // const render = children => {\n // // console.log('RENDER', field);\n // return isRelevant ? children : null;\n // };\n // Build some setub fields so users can easily intagrate without any hookup code\n\n\n var name = field;\n var changeHandler = generateOnChange({\n fieldType: fieldType,\n setValue: setValue,\n onChange: onChange,\n multiple: multiple,\n ref: ref\n });\n var blurHandler = generateOnBlur({\n setTouched: setTouched,\n onBlur: onBlur\n });\n var hookedValue = generateValue({\n fieldType: fieldType,\n maskedValue: maskedValue,\n multiple: multiple,\n value: value\n });\n var type = generateFieldType(fieldType);\n return {\n fieldState: fieldState,\n fieldApi: fieldApi,\n render: render,\n ref: ref,\n userProps: _objectSpread2(_objectSpread2({}, userProps), {}, {\n multiple: multiple,\n // WE NEED TO PUT THESE BACK!!\n onChange: onChange,\n // WE NEED TO PUT THESE BACK!!\n onBlur: onBlur,\n // WE NEED TO PUT THESE BACK!!\n // required // WE NEED TO PUT THESE BACK!!\n id: userProps.id || fieldId // If user did not pass id we pass fields id\n\n }),\n informed: _objectSpread2({\n name: name,\n multiple: multiple,\n onChange: changeHandler,\n onBlur: blurHandler,\n value: hookedValue,\n ref: ref,\n type: type,\n id: userProps.id || fieldId\n }, userProps)\n };\n}\n\nvar asField = function asField(Component) {\n var forwardRef = /*#__PURE__*/React.forwardRef(function (props, userRef) {\n var _useField = useField(props, userRef),\n fieldState = _useField.fieldState,\n fieldApi = _useField.fieldApi,\n render = _useField.render,\n ref = _useField.ref,\n userProps = _useField.userProps;\n\n return render( /*#__PURE__*/React.createElement(Component, _extends({\n fieldApi: fieldApi,\n fieldState: fieldState,\n field: props.field,\n forwardedRef: ref,\n debug: props.debug,\n type: props.type\n }, userProps)));\n });\n forwardRef.displayName = \"asField(\".concat(getChildDisplayName(Component), \")\");\n return forwardRef;\n};\n\nvar logger$1 = debug('informed:Text' + '\\t');\n\nvar Text = function Text(_ref) {\n var fieldApi = _ref.fieldApi,\n fieldState = _ref.fieldState,\n props = _objectWithoutProperties(_ref, [\"fieldApi\", \"fieldState\"]);\n\n var maskedValue = fieldState.maskedValue;\n var setValue = fieldApi.setValue,\n setTouched = fieldApi.setTouched;\n\n var _onChange = props.onChange,\n _onBlur = props.onBlur,\n field = props.field,\n initialValue = props.initialValue,\n forwardedRef = props.forwardedRef,\n debug = props.debug,\n label = props.label,\n title = props.title,\n id = props.id,\n rest = _objectWithoutProperties(props, [\"onChange\", \"onBlur\", \"field\", \"initialValue\", \"forwardedRef\", \"debug\", \"label\", \"title\", \"id\"]);\n\n logger$1('Render', field); // for debugging\n\n useIsomorphicLayoutEffect(function () {\n if (debug && forwardedRef) {\n forwardedRef.current.style.background = 'red';\n setTimeout(function () {\n forwardedRef.current.style.background = 'white';\n }, 500);\n }\n });\n return /*#__PURE__*/React.createElement(React.Fragment, null, label ? /*#__PURE__*/React.createElement(\"label\", {\n htmlFor: id\n }, \" \", label, \" \") : null, /*#__PURE__*/React.createElement(\"input\", _extends({}, rest, {\n id: id,\n name: field,\n ref: forwardedRef,\n value: !maskedValue && maskedValue !== 0 ? '' : maskedValue,\n onChange: function onChange(e) {\n setValue(e.target.value, e);\n\n if (_onChange) {\n _onChange(e);\n }\n },\n onBlur: function onBlur(e) {\n setTouched(true);\n\n if (_onBlur) {\n _onBlur(e);\n }\n }\n })));\n};\n\nvar Text$1 = asField(Text);\n\nvar TextArea = function TextArea(_ref) {\n var fieldApi = _ref.fieldApi,\n fieldState = _ref.fieldState,\n props = _objectWithoutProperties(_ref, [\"fieldApi\", \"fieldState\"]);\n\n var maskedValue = fieldState.maskedValue;\n var setValue = fieldApi.setValue,\n setTouched = fieldApi.setTouched;\n\n var _onChange = props.onChange,\n _onBlur = props.onBlur,\n field = props.field,\n initialValue = props.initialValue,\n forwardedRef = props.forwardedRef,\n debug = props.debug,\n label = props.label,\n id = props.id,\n rest = _objectWithoutProperties(props, [\"onChange\", \"onBlur\", \"field\", \"initialValue\", \"forwardedRef\", \"debug\", \"label\", \"id\"]); // for debugging\n\n\n useIsomorphicLayoutEffect(function () {\n if (debug && forwardedRef) {\n forwardedRef.current.style.background = 'red';\n setTimeout(function () {\n forwardedRef.current.style.background = 'white';\n }, 500);\n }\n });\n return /*#__PURE__*/React.createElement(React.Fragment, null, label ? /*#__PURE__*/React.createElement(\"label\", {\n htmlFor: id\n }, \" \", label, \" \") : null, /*#__PURE__*/React.createElement(\"textarea\", _extends({}, rest, {\n id: id,\n name: field,\n ref: forwardedRef,\n value: !maskedValue ? '' : maskedValue,\n onChange: function onChange(e) {\n setValue(e.target.value, e);\n\n if (_onChange) {\n _onChange(e);\n }\n },\n onBlur: function onBlur(e) {\n setTouched(true);\n\n if (_onBlur) {\n _onBlur(e);\n }\n }\n })));\n};\n\nvar TextArea$1 = asField(TextArea);\nvar logger$2 = debug('informed:Select' + '\\t');\n\nvar Select = function Select(_ref) {\n var fieldApi = _ref.fieldApi,\n fieldState = _ref.fieldState,\n props = _objectWithoutProperties(_ref, [\"fieldApi\", \"fieldState\"]);\n\n var value = fieldState.value;\n var setTouched = fieldApi.setTouched;\n\n var onChange = props.onChange,\n _onBlur = props.onBlur,\n field = props.field,\n initialValue = props.initialValue,\n options = props.options,\n children = props.children,\n forwardedRef = props.forwardedRef,\n debug = props.debug,\n multiple = props.multiple,\n label = props.label,\n id = props.id,\n rest = _objectWithoutProperties(props, [\"onChange\", \"onBlur\", \"field\", \"initialValue\", \"options\", \"children\", \"forwardedRef\", \"debug\", \"multiple\", \"label\", \"id\"]);\n\n var selectRef = useRef();\n\n var handleChange = function handleChange(e) {\n var selected = Array.from((forwardedRef || selectRef).current).filter(function (option) {\n return option.selected;\n }).map(function (option) {\n return option.value;\n });\n fieldApi.setValue(multiple ? selected : selected[0] || '');\n\n if (onChange && e) {\n onChange(e);\n }\n }; // for debugging\n\n\n useIsomorphicLayoutEffect(function () {\n if (debug && forwardedRef) {\n forwardedRef.current.style.background = 'red';\n setTimeout(function () {\n forwardedRef.current.style.background = 'white';\n }, 500);\n }\n });\n logger$2('Render', field, value);\n return /*#__PURE__*/React.createElement(React.Fragment, null, label ? /*#__PURE__*/React.createElement(\"label\", {\n htmlFor: id\n }, \" \", label, \" \") : null, /*#__PURE__*/React.createElement(\"select\", _extends({}, rest, {\n id: id,\n multiple: multiple,\n name: field,\n ref: forwardedRef || selectRef,\n value: value || (multiple ? [] : ''),\n onChange: handleChange,\n onBlur: function onBlur(e) {\n setTouched(true);\n\n if (_onBlur) {\n _onBlur(e);\n }\n }\n }), options ? options.map(function (option) {\n return /*#__PURE__*/React.createElement(\"option\", {\n key: option.value,\n value: option.value,\n disabled: option.disabled\n }, option.label);\n }) : children));\n};\n\nvar Select$1 = asField(Select);\n\nvar Checkbox = function Checkbox(_ref) {\n var fieldApi = _ref.fieldApi,\n fieldState = _ref.fieldState,\n props = _objectWithoutProperties(_ref, [\"fieldApi\", \"fieldState\"]);\n\n var value = fieldState.value;\n var setValue = fieldApi.setValue,\n setTouched = fieldApi.setTouched;\n\n var _onChange = props.onChange,\n _onBlur = props.onBlur,\n field = props.field,\n initialValue = props.initialValue,\n debug = props.debug,\n forwardedRef = props.forwardedRef,\n id = props.id,\n label = props.label,\n rest = _objectWithoutProperties(props, [\"onChange\", \"onBlur\", \"field\", \"initialValue\", \"debug\", \"forwardedRef\", \"id\", \"label\"]);\n\n return /*#__PURE__*/React.createElement(React.Fragment, null, label ? /*#__PURE__*/React.createElement(\"label\", {\n htmlFor: id\n }, \" \", label, \" \") : null, /*#__PURE__*/React.createElement(\"input\", _extends({}, rest, {\n id: id,\n name: field,\n ref: forwardedRef,\n checked: !!value,\n onChange: function onChange(e) {\n setValue(e.target.checked);\n\n if (_onChange) {\n _onChange(e);\n }\n },\n onBlur: function onBlur(e) {\n setTouched(true);\n\n if (_onBlur) {\n _onBlur(e);\n }\n },\n type: \"checkbox\"\n })));\n};\n\nvar Checkbox$1 = asField(Checkbox);\n\nvar withRadioGroup = function withRadioGroup(Component) {\n return /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(GroupContext.Consumer, null, function (_ref) {\n var radioGroupApi = _ref.radioGroupApi,\n radioGroupState = _ref.radioGroupState;\n return /*#__PURE__*/React.createElement(Component, _extends({\n radioGroupApi: radioGroupApi,\n radioGroupState: radioGroupState,\n ref: ref\n }, props));\n });\n });\n};\n\nvar Radio = function Radio(_ref) {\n var radioGroupApi = _ref.radioGroupApi,\n radioGroupState = _ref.radioGroupState,\n props = _objectWithoutProperties(_ref, [\"radioGroupApi\", \"radioGroupState\"]);\n\n var groupValue = radioGroupState.value;\n var setValue = radioGroupApi.setValue,\n setTouched = radioGroupApi.setTouched,\n groupOnChange = radioGroupApi.onChange,\n groupOnBlur = radioGroupApi.onBlur;\n\n var value = props.value,\n _onChange = props.onChange,\n _onBlur = props.onBlur,\n field = props.field,\n initialValue = props.initialValue,\n forwardedRef = props.forwardedRef,\n rest = _objectWithoutProperties(props, [\"value\", \"onChange\", \"onBlur\", \"field\", \"initialValue\", \"forwardedRef\"]);\n\n return /*#__PURE__*/React.createElement(\"input\", _extends({}, rest, {\n name: field,\n ref: forwardedRef,\n value: value,\n checked: groupValue === value,\n onChange: function onChange(e) {\n if (!e.target.checked) {\n return;\n }\n\n setValue(value);\n\n if (_onChange) {\n _onChange(e);\n }\n\n if (groupOnChange) {\n groupOnChange(e);\n }\n },\n onBlur: function onBlur(e) {\n setTouched(true);\n\n if (_onBlur) {\n _onBlur(e);\n }\n\n if (groupOnBlur) {\n groupOnBlur(e);\n }\n },\n type: \"radio\"\n }));\n};\n\nvar Radio$1 = withRadioGroup(Radio);\n\nvar RadioGroup = /*#__PURE__*/function (_Component) {\n _inherits(RadioGroup, _Component);\n\n var _super = _createSuper(RadioGroup);\n\n function RadioGroup() {\n _classCallCheck(this, RadioGroup);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(RadioGroup, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n options = _this$props.options,\n children = _this$props.children;\n return /*#__PURE__*/React.createElement(GroupContext.Provider, {\n value: this.groupContext\n }, options ? options.map(function (option) {\n return /*#__PURE__*/React.createElement(\"label\", {\n key: option.value\n }, option.label, \" \", /*#__PURE__*/React.createElement(Radio$1, {\n value: option.value\n }));\n }) : children);\n }\n }, {\n key: \"groupContext\",\n get: function get() {\n return {\n radioGroupApi: _objectSpread2(_objectSpread2({}, this.props.fieldApi), {}, {\n onChange: this.props.onChange,\n onBlur: this.props.onBlur\n }),\n radioGroupState: this.props.fieldState\n };\n }\n }]);\n\n return RadioGroup;\n}(Component);\n\nvar RadioGroup$1 = asField(RadioGroup);\n\nfunction useArrayFieldApi() {\n return useContext(ArrayFieldApiContext);\n}\n\nvar AddButton = function AddButton() {\n var _useArrayFieldApi = useArrayFieldApi(),\n add = _useArrayFieldApi.add;\n\n return /*#__PURE__*/React.createElement(\"button\", {\n onClick: function onClick() {\n add();\n },\n type: \"button\"\n }, \"Add\");\n};\n\nfunction useArrayFieldItemApi() {\n return useContext(ArrayFieldItemApiContext);\n}\n\nvar AddButton$1 = function AddButton() {\n var _useArrayFieldItemApi = useArrayFieldItemApi(),\n remove = _useArrayFieldItemApi.remove;\n\n return /*#__PURE__*/React.createElement(\"button\", {\n onClick: function onClick() {\n remove();\n },\n type: \"button\"\n }, \"Remove\");\n};\n\nvar logger$3 = debug('informed:useArrayField' + '\\t');\n\nvar useArrayField = function useArrayField(_ref) {\n var field = _ref.field,\n initialValue = _ref.initialValue,\n validate = _ref.validate,\n arrayFieldApiRef = _ref.arrayFieldApiRef,\n props = _objectWithoutProperties(_ref, [\"field\", \"initialValue\", \"validate\", \"arrayFieldApiRef\"]); // Reference to the form Api\n\n\n var formApi = useFormApi(); // Keep track of fields that belong to this array field\n\n var _useState = useState(new Map()),\n _useState2 = _slicedToArray(_useState, 1),\n fieldsById = _useState2[0]; // Grab the form register context\n\n\n var updater = useContext(FormRegisterContext); // May be scoped so get full field name!!\n\n var fullField = formApi.getFullField(field);\n var initialVals = updater.getInitialValue(field) || initialValue || []; // TODO throw error if initial value and its not array\n // If keep state was passed into the child inputs we need to maintain the length of\n // keys, in order to do so we grab the value from informeds api\n\n var keptValues = formApi.getSavedValue(fullField) && formApi.getSavedValue(fullField).value;\n\n var _useStateWithGetter = useStateWithGetter(keptValues || initialVals),\n _useStateWithGetter2 = _slicedToArray(_useStateWithGetter, 3),\n initialValues = _useStateWithGetter2[0],\n setInitialValues = _useStateWithGetter2[1],\n getInitialValues = _useStateWithGetter2[2];\n\n var initialKeys = initialValues ? initialValues.map(function () {\n return uuidv4();\n }) : [];\n\n var _useStateWithGetter3 = useStateWithGetter(initialKeys),\n _useStateWithGetter4 = _slicedToArray(_useStateWithGetter3, 3),\n keys = _useStateWithGetter4[0],\n setKeys = _useStateWithGetter4[1],\n getKeys = _useStateWithGetter4[2];\n\n var validateWithLength = useMemo(function () {\n return function (value, values) {\n var length = getKeys() == null ? 0 : getKeys().length;\n return validate ? validate(value, length, values) : undefined;\n };\n }); // Register shadow field\n\n var _useField = useField(_objectSpread2({\n field: field,\n validate: validate ? validateWithLength : undefined,\n shadow: true\n }, props)),\n fieldApi = _useField.fieldApi; // Register for events\n\n\n useIsomorphicLayoutEffect(function () {\n // Define event handler\n var onChangeHandler = function onChangeHandler(fieldName) {\n // Dont do anythign if we updated\n if (fieldName === fullField) {\n return;\n }\n\n logger$3(\"\".concat(fullField, \" changed\")); // determine if one of our array children triggered this change\n\n if (RegExp(\"\".concat(fullField, \"\\\\[[0-9]+\\\\]\")).test(fieldName)) {\n // If it was we need to call validate\n fieldApi.validate();\n }\n }; // Register for events\n\n\n formApi.emitter.on('value', onChangeHandler); // Unregister events\n\n return function () {\n formApi.emitter.removeListener('value', onChangeHandler);\n };\n }, [field]);\n\n var _remove = function remove(i) {\n // Notify form to expect removal on this field\n logger$3('EXPECTING REMOVAL OF', \"\".concat(field, \"[\").concat(i, \"] and \").concat(field, \"[\").concat(keys.length - 1, \"]\"));\n updater.expectRemoval(\"\".concat(field, \"[\").concat(i, \"]\"));\n updater.expectRemoval(\"\".concat(field, \"[\").concat(keys.length - 1, \"]\")); // Remove the key\n\n var newKeys = keys.slice(0, i).concat(keys.slice(i + 1, keys.length));\n setKeys(newKeys); // Remove the initial value ( user wanted to get rid of that input )\n\n var initVals = getInitialValues();\n var newInitialValues = initVals.slice(0, i).concat(initVals.slice(i + 1, initVals.length));\n setInitialValues(newInitialValues); //formApi.setInitialValue(field, newInitialValues);\n };\n\n var swap = function swap(a, b) {\n logger$3('Swapping', \"\".concat(field, \"[\").concat(a, \"] and \").concat(field, \"[\").concat(b, \"]\")); // Swap the keys\n\n var newKeys = _toConsumableArray(keys);\n\n if (keys[a] && keys[b]) {\n newKeys[a] = keys[b];\n newKeys[b] = keys[a];\n } else {\n // eslint-disable-next-line no-console\n console.warn(\"Attempted to swap \".concat(a, \" with \").concat(b, \" but one of them does not exist :(\"));\n }\n\n setKeys(newKeys);\n };\n\n var add = function add() {\n keys.push(uuidv4());\n setKeys(_toConsumableArray(keys));\n };\n\n var addWithInitialValue = function addWithInitialValue(initialValue) {\n keys.push(uuidv4());\n setKeys(_toConsumableArray(keys));\n\n var newInitialValues = _toConsumableArray(getInitialValues());\n\n newInitialValues[keys.length - 1] = initialValue;\n setInitialValues(newInitialValues);\n };\n\n var reset = function reset() {\n // When resetting we reset to the users initial value not the one tracked by this hook\n var initVals = updater.getInitialValue(field) || initialValue || []; // Set our initial values back to what the user set at beginning\n\n setInitialValues(initVals); // Build a new set of keys because everything is new !!!\n\n var resetKeys = initVals ? initVals.map(function () {\n return uuidv4();\n }) : []; // Finally set that shit !\n\n setKeys(resetKeys);\n };\n\n var fields = keys.map(function (key, i) {\n var arrayFieldItemApi = {\n remove: function remove() {\n return _remove(i);\n }\n };\n var arrayFieldItemState = {\n initialValue: initialValues && initialValues[i],\n key: key,\n field: \"\".concat(field, \"[\").concat(i, \"]\"),\n index: i\n };\n return _objectSpread2(_objectSpread2({\n arrayFieldItemApi: arrayFieldItemApi,\n arrayFieldItemState: arrayFieldItemState\n }, arrayFieldItemApi), arrayFieldItemState);\n });\n var arrayFieldApi = {\n add: add,\n swap: swap,\n addWithInitialValue: addWithInitialValue,\n reset: reset\n };\n\n if (arrayFieldApiRef) {\n arrayFieldApiRef.current = arrayFieldApi;\n }\n\n var arrayFieldState = {\n fields: fields,\n field: field\n }; // Wrap the updater to update array fields references\n\n var wrappedUpdator = _objectSpread2(_objectSpread2({}, updater), {}, {\n register: function register(id, fld) {\n fieldsById.set(id, fld);\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n updater.register.apply(updater, [id, fld].concat(args));\n },\n deregister: function deregister(id) {\n fieldsById[\"delete\"](id);\n\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n updater.deregister.apply(updater, [id].concat(args));\n },\n getInitialValue: function getInitialValue(fieldName) {\n // If we are getting initial value and its for this field return that\n if (RegExp(\"\".concat(fullField, \"\\\\[[0-9]+\\\\]\")).test(fieldName)) {\n var path = fieldName.replace(field, '');\n var v = ObjectMap.get(getInitialValues(), path);\n logger$3(\"Resetting \".concat(path, \" to \").concat(v));\n return v;\n }\n\n return updater.getInitialValue(fieldName);\n }\n });\n\n var render = function render(children) {\n return /*#__PURE__*/React.createElement(FormRegisterContext.Provider, {\n value: wrappedUpdator\n }, /*#__PURE__*/React.createElement(ArrayFieldApiContext.Provider, {\n value: arrayFieldApi\n }, /*#__PURE__*/React.createElement(ArrayFieldStateContext.Provider, {\n value: arrayFieldState\n }, children)));\n };\n\n return {\n render: render,\n add: add,\n swap: swap,\n addWithInitialValue: addWithInitialValue,\n fields: fields,\n arrayFieldState: arrayFieldState,\n arrayFieldApi: arrayFieldApi,\n field: field\n };\n};\n\nvar buildScopedFormApi = function buildScopedFormApi(scope, formApi) {\n return _objectSpread2(_objectSpread2({}, formApi), {}, {\n getValue: function getValue(field) {\n return formApi.getValue(\"\".concat(scope, \".\").concat(field));\n },\n getTouched: function getTouched(field) {\n return formApi.getTouched(\"\".concat(scope, \".\").concat(field));\n },\n getError: function getError(field) {\n return formApi.getError(\"\".concat(scope, \".\").concat(field));\n },\n setValue: function setValue(field, value) {\n return formApi.setValue(\"\".concat(scope, \".\").concat(field), value);\n },\n setTouched: function setTouched(field, value) {\n return formApi.setTouched(\"\".concat(scope, \".\").concat(field), value);\n },\n setError: function setError(field, value) {\n return formApi.setError(\"\".concat(scope, \".\").concat(field), value);\n },\n getInitialValue: function getInitialValue(field) {\n return formApi.getInitialValue(\"\".concat(scope, \".\").concat(field));\n },\n getSavedValue: function getSavedValue(field) {\n return formApi.getSavedValue(\"\".concat(scope, \".\").concat(field));\n },\n getFullField: function getFullField(field) {\n return \"\".concat(formApi.getFullField(scope), \".\").concat(field);\n }\n });\n};\n\nfunction useScopedApi(scope) {\n var formApi = useFormApi(); // VERY important to memoize the builder!\n\n var scopedFormApi = useMemo(function () {\n return buildScopedFormApi(scope, formApi);\n }, [scope]);\n return scopedFormApi;\n}\n\nfunction useFormState() {\n var formState = useContext(FormStateContext);\n return formState;\n}\n\nvar Relevant = function Relevant(_ref) {\n var when = _ref.when,\n children = _ref.children;\n var formState = useFormState();\n var isRelevant = when(formState);\n\n if (isRelevant) {\n return children;\n }\n\n return null;\n};\n\nvar ArrayField = function ArrayField(_ref) {\n var relevant = _ref.relevant,\n field = _ref.field,\n props = _objectWithoutProperties(_ref, [\"relevant\", \"field\"]); // Need to get formApi to have consistant interface for relevant function\n\n\n var formApi = useFormApi();\n\n if (relevant) {\n var ff = formApi.getFullField(field);\n var args = {\n path: ff,\n parentPath: ff.replace(/(.*)[.[].*/, '$1'),\n get: function get(values, path) {\n return ObjectMap.get(values, path);\n }\n };\n\n var when = function when(_ref2) {\n var values = _ref2.values;\n return relevant(values, args);\n };\n\n return /*#__PURE__*/React.createElement(Relevant, {\n when: when\n }, /*#__PURE__*/React.createElement(ArrayFieldWrapper, _extends({\n field: field\n }, props)));\n } else {\n return /*#__PURE__*/React.createElement(ArrayFieldWrapper, _extends({\n field: field\n }, props));\n }\n};\n\nvar ArrayFieldWrapper = function ArrayFieldWrapper(_ref3) {\n var children = _ref3.children,\n props = _objectWithoutProperties(_ref3, [\"children\"]);\n\n var _useArrayField = useArrayField(props),\n render = _useArrayField.render,\n arrayFieldState = _useArrayField.arrayFieldState,\n arrayFieldApi = _useArrayField.arrayFieldApi,\n field = _useArrayField.field;\n\n if (typeof children === 'function') {\n return render(children(_objectSpread2(_objectSpread2({\n field: field,\n arrayFieldApi: arrayFieldApi,\n arrayFieldState: arrayFieldState\n }, arrayFieldApi), arrayFieldState)));\n }\n\n return render(children);\n};\n\nvar ArrayFieldItem = function ArrayFieldItem(_ref4) {\n var arrayFieldItemState = _ref4.arrayFieldItemState,\n arrayFieldItemApi = _ref4.arrayFieldItemApi,\n children = _ref4.children; // Grab the form register context\n\n var updater = useContext(FormRegisterContext); // Grab the form state\n\n var formApi = useFormApi(); // A little trick I learned in nam to trigger rerender\n\n var _useState = useState(0),\n _useState2 = _slicedToArray(_useState, 2),\n state = _useState2[0],\n setState = _useState2[1]; // Keep track of fields that belong to this array field\n\n\n var _useState3 = useState(new Map()),\n _useState4 = _slicedToArray(_useState3, 1),\n fieldsById = _useState4[0]; // Get this items field\n\n\n var field = arrayFieldItemState.field; // Create scoped api\n\n var scopedApi = useScopedApi(field); // State generation function\n\n var getState = function getState() {\n var _formApi$getState = formApi.getState(),\n values = _formApi$getState.values,\n errors = _formApi$getState.errors,\n touched = _formApi$getState.touched; // Get this fields state\n\n\n var itemState = {\n values: ObjectMap.get(values, field),\n errors: ObjectMap.get(errors, field),\n touched: ObjectMap.get(touched, field)\n };\n return itemState;\n }; // Register for events for rerenders!\n\n\n useEffect(function () {\n // Define event handler\n var onChangeHandler = function onChangeHandler(fieldName) {\n // Example foo.bar.baz[3].baz >>>> foo.bar.baz[3]\n var magicValue = fieldName.slice(0, fieldName.lastIndexOf('[') != -1 ? fieldName.lastIndexOf(']') + 1 : fieldName.length); // This field updated so trigger rerender\n\n if (magicValue === field) {\n setState(Math.random());\n }\n }; // Register for events\n\n\n formApi.emitter.on('value', onChangeHandler); // Unregister events\n\n return function () {\n formApi.emitter.removeListener('value', onChangeHandler);\n };\n }, [field]); // Resets all fields in this item\n\n var reset = function reset() {\n fieldsById.forEach(function (fld) {\n fld.fieldApi.reset();\n });\n }; // Generate the item state\n\n\n var itemState = getState(); // Wrap the updater to update array fields references\n\n var wrappedUpdator = _objectSpread2(_objectSpread2({}, updater), {}, {\n register: function register(id, fld, initialRender) {\n fieldsById.set(id, fld);\n updater.register(id, fld, initialRender);\n },\n deregister: function deregister(id) {\n fieldsById[\"delete\"](id);\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n updater.deregister.apply(updater, [id].concat(args));\n }\n });\n\n var arrayFieldItemApiValue = _objectSpread2(_objectSpread2(_objectSpread2({}, arrayFieldItemApi), scopedApi), {}, {\n reset: reset\n });\n\n var arrayFieldItemStateValue = _objectSpread2(_objectSpread2({}, arrayFieldItemState), itemState);\n\n if (typeof children === 'function') {\n return /*#__PURE__*/React.createElement(FormRegisterContext.Provider, {\n value: wrappedUpdator\n }, /*#__PURE__*/React.createElement(ArrayFieldItemApiContext.Provider, {\n value: arrayFieldItemApiValue\n }, /*#__PURE__*/React.createElement(ArrayFieldItemStateContext.Provider, {\n value: arrayFieldItemStateValue\n }, children(_objectSpread2(_objectSpread2({\n arrayFieldItemApi: arrayFieldItemApiValue,\n arrayFieldItemState: arrayFieldItemStateValue\n }, arrayFieldItemApiValue), arrayFieldItemStateValue)))));\n }\n\n return /*#__PURE__*/React.createElement(FormRegisterContext.Provider, {\n value: wrappedUpdator\n }, /*#__PURE__*/React.createElement(ArrayFieldItemApiContext.Provider, {\n value: arrayFieldItemApiValue\n }, /*#__PURE__*/React.createElement(ArrayFieldItemStateContext.Provider, {\n value: arrayFieldItemStateValue\n }, children)));\n};\n\nArrayField.Items = function (_ref5) {\n var children = _ref5.children;\n\n var _useContext = useContext(ArrayFieldStateContext),\n fields = _useContext.fields;\n\n return fields.map(function (_ref6) {\n var arrayFieldItemState = _ref6.arrayFieldItemState,\n arrayFieldItemApi = _ref6.arrayFieldItemApi;\n var key = arrayFieldItemState.key;\n return /*#__PURE__*/React.createElement(ArrayFieldItem, {\n key: key,\n arrayFieldItemApi: arrayFieldItemApi,\n arrayFieldItemState: arrayFieldItemState\n }, children);\n });\n};\n\nvar FormComponents = function FormComponents(_ref) {\n var components = _ref.components; // Get the field map off the forms context\n\n var _useContext = useContext(FormRegisterContext),\n fieldMap = _useContext.fieldMap;\n\n if (!components) return null;\n return components.map(function (comp, i) {\n var componentType = comp['ui:control'];\n var Component = fieldMap[componentType];\n return /*#__PURE__*/React.createElement(Component, {\n key: \"ui-comp-\".concat(i)\n });\n });\n};\n\nvar logger$4 = debug('informed:FormFields' + '\\t');\n\nvar FormFields = function FormFields(_ref) {\n var schema = _ref.schema,\n prefix = _ref.prefix,\n onlyValidateSchema = _ref.onlyValidateSchema; // Get the field map off the forms context\n\n var _useContext = useContext(FormRegisterContext),\n fieldMap = _useContext.fieldMap; // Get fields from scheama\n\n\n var fields = useMemo(function () {\n var schemaFields = computeFieldsFromSchema(schema, onlyValidateSchema, prefix);\n var mapedFields = schemaFields.map(function (schemaField, i) {\n var field = schemaField.field,\n props = schemaField.props,\n type = schemaField.type,\n properties = schemaField.properties,\n items = schemaField.items,\n componentType = schemaField.componentType,\n uiBefore = schemaField.uiBefore,\n uiAfter = schemaField.uiAfter,\n allOf = schemaField.allOf;\n var Component = fieldMap[componentType]; // console.log('WTF', schemaField);\n\n logger$4('Rendering Field', field, schemaField); // Scope for nested\n\n if (!Component && type === 'object' && properties) {\n return /*#__PURE__*/React.createElement(FormFields, {\n schema: schemaField,\n prefix: field,\n key: \"ScheamField-\".concat(i)\n });\n } // Array field for array ( if none was provided use our default )\n\n\n if (!Component && type === 'array' && items) {\n return /*#__PURE__*/React.createElement(ArrayField$1, _extends({\n key: \"ScheamField-\".concat(i),\n field: field,\n items: items,\n uiBefore: uiBefore,\n uiAfter: uiAfter\n }, props));\n } // User created custom array field\n\n\n if (Component && componentType === 'array' && items && type === 'array') {\n return /*#__PURE__*/React.createElement(Component, _extends({\n key: \"ScheamField-\".concat(i),\n field: field,\n items: items,\n uiBefore: uiBefore,\n uiAfter: uiAfter\n }, props));\n } // For conditionals\n\n\n if (componentType === 'conditionals') {\n return allOf.map(function (conditional) {\n // Example then ( its a subschema )\n // then: {\n // properties: {\n // spouse: {\n // type: 'string',\n // title: 'Spouse name',\n // 'ui:control': 'input'\n // }\n // }\n // }\n var subSchema = conditional.then; // Turn the if into a when function for informed\n // Example if condition\n // if: {\n // properties: {\n // married: { const: 'yes' }\n // },\n // required: ['married']\n // },\n\n var conditions = conditional[\"if\"].properties;\n\n var when = function when(_ref2) {\n var values = _ref2.values; // Example key \"married, Example condition: \"{ const: 'yes' }\"\n\n return Object.keys(conditions).every(function (key) {\n var condition = conditions[key]; // values.married === 'yes'\n\n return values[key] === condition[\"const\"];\n });\n };\n\n return /*#__PURE__*/React.createElement(Relevant, {\n key: \"ScheamField-\".concat(i),\n when: when\n }, /*#__PURE__*/React.createElement(FormFields, {\n schema: subSchema\n }));\n });\n } // If no com ret null ( dont render )\n\n\n if (!Component) {\n return null;\n }\n\n return /*#__PURE__*/React.createElement(Component, _extends({\n key: \"ScheamField-\".concat(i),\n field: field\n }, props));\n });\n return mapedFields;\n }, [schema, prefix]);\n return fields;\n};\n\nvar ArrayField$1 = function ArrayField$1(_ref) {\n var field = _ref.field,\n items = _ref.items,\n uiBefore = _ref.uiBefore,\n uiAfter = _ref.uiAfter,\n props = _objectWithoutProperties(_ref, [\"field\", \"items\", \"uiBefore\", \"uiAfter\"]);\n\n return /*#__PURE__*/React.createElement(ArrayField, _extends({\n field: field\n }, props), /*#__PURE__*/React.createElement(FormComponents, {\n components: uiBefore\n }), /*#__PURE__*/React.createElement(ArrayField.Items, null, function (_ref2) {\n var field = _ref2.field;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FormComponents, {\n components: items['ui:before']\n }), /*#__PURE__*/React.createElement(FormFields, {\n schema: items,\n prefix: field\n }), /*#__PURE__*/React.createElement(FormComponents, {\n components: items['ui:after']\n }));\n }), /*#__PURE__*/React.createElement(FormComponents, {\n components: uiAfter\n }));\n};\n\nvar defaultFieldMap = {\n select: Select$1,\n input: Text$1,\n textarea: TextArea$1,\n checkbox: Checkbox$1,\n radio: RadioGroup$1,\n add: AddButton,\n remove: AddButton$1,\n array: ArrayField$1\n};\nvar debug$2 = debug('informed:Controller' + '\\t');\n\nvar isExpected = function isExpected(path, expectedRemovals) {\n var includedKey = Object.keys(expectedRemovals).find(function (key) {\n return path.includes(key);\n });\n if (!includedKey) return;\n var start = path.slice(0, includedKey.length);\n return start === includedKey;\n};\n\nvar noop = function noop() {};\n\nvar FormController = /*#__PURE__*/function () {\n function FormController() {\n var _this = this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, FormController);\n\n this.options = options; // Initialize listeners\n\n this.subscriptions = new Map();\n var ajv = options.ajv,\n schema = options.schema,\n fieldMap = options.fieldMap; // Create new ajv instance if passed\n\n this.ajv = ajv ? new ajv({\n allErrors: true\n }) : null;\n this.ajvValidate = ajv ? this.ajv.compile(schema) : null; // Add field map ( defaults to our field map )\n\n this.fieldMap = fieldMap || defaultFieldMap; // Map will store all fields by id\n // Key => uuid\n // Val => fieldObj\n // Why? so the form can control the fields!\n\n this.fieldsById = new Map(); // Map will store all fields by name\n // Key => fieldName - example: \"foo.bar[3].baz\"\n // Val => fieldObj\n // Why? so the form can control the fields!\n\n this.fieldsByName = {\n get: function get(name) {\n var fieldByName; // TODO speed this up maybe\n\n _this.fieldsById.forEach(function (value) {\n if (value && value.field === name) {\n fieldByName = value;\n }\n });\n\n return fieldByName;\n }\n }; // Map to store whos on the screen\n\n this.onScreen = {}; // Map to store fields being removed\n\n this.expectedRemovals = {};\n this.pulledOut = {}; // Map of saved values\n\n this.savedValues = {}; // Initialize the controller state\n\n this.state = {\n pristine: true,\n dirty: false,\n invalid: false,\n submits: 0,\n step: 0,\n validating: 0,\n submitting: false,\n values: {},\n errors: {},\n touched: {}\n }; // Initialize a dummy field ( see getField for example use )\n\n this.dummyField = {\n fieldApi: {\n setValue: noop,\n setTouched: noop,\n setError: noop,\n reset: noop,\n validate: noop,\n getValue: noop,\n getTouched: noop,\n getError: noop,\n getFieldState: noop,\n checkRelevant: noop,\n getPristine: noop,\n getDirty: noop\n }\n }; // Bind functions that will be called externally\n\n this.deregister = this.deregister.bind(this);\n this.register = this.register.bind(this);\n this.getValue = this.getValue.bind(this);\n this.getTouched = this.getTouched.bind(this);\n this.getError = this.getError.bind(this);\n this.getErrors = this.getErrors.bind(this);\n this.setValue = this.setValue.bind(this);\n this.getValues = this.getValues.bind(this);\n this.getStep = this.getStep.bind(this);\n this.setStep = this.setStep.bind(this);\n this.back = this.back.bind(this);\n this.next = this.next.bind(this);\n this.setCurrent = this.setCurrent.bind(this);\n this.setTouched = this.setTouched.bind(this);\n this.setError = this.setError.bind(this);\n this.setFormError = this.setFormError.bind(this);\n this.submitForm = this.submitForm.bind(this);\n this.reset = this.reset.bind(this);\n this.update = this.update.bind(this);\n this.validate = this.validate.bind(this);\n this.screenValid = this.screenValid.bind(this);\n this.keyDown = this.keyDown.bind(this);\n this.getField = this.getField.bind(this);\n this.getInitialValue = this.getInitialValue.bind(this);\n this.setInitialValue = this.setInitialValue.bind(this);\n this.getOptions = this.getOptions.bind(this);\n this.getFormState = this.getFormState.bind(this);\n this.expectRemoval = this.expectRemoval.bind(this);\n this.getSavedValue = this.getSavedValue.bind(this);\n this.removeSavedState = this.removeSavedState.bind(this);\n this.getDerrivedValue = this.getDerrivedValue.bind(this);\n this.setValues = this.setValues.bind(this);\n this.resetField = this.resetField.bind(this);\n this.fieldExists = this.fieldExists.bind(this);\n this.validateField = this.validateField.bind(this);\n this.notify = this.notify.bind(this);\n this.validating = this.validating.bind(this);\n this.validated = this.validated.bind(this);\n this.getDirty = this.getDirty.bind(this);\n this.getPristine = this.getPristine.bind(this);\n this.on = this.on.bind(this);\n this.emit = this.emit.bind(this);\n this.removeListener = this.removeListener.bind(this); // Updater will be used by fields to update and register\n\n this.updater = {\n register: this.register,\n deregister: this.deregister,\n getField: this.getField,\n update: this.update,\n fieldMap: this.fieldMap,\n setValue: function setValue(fieldId, value) {\n var emit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n var field = _this.fieldsById.get(fieldId);\n\n if (!field.shadow) {\n ObjectMap.set(_this.state.values, field.field, field.fieldApi.getValue());\n }\n\n if (!field.fieldApi.relevant(_this.state.values)) {\n ObjectMap[\"delete\"](_this.state.values, field.field);\n } // Cleanup phase to get rid of irrelevant fields\n // Also evaluate relevance on all fields\n\n\n _this.fieldsById.forEach(function (f) {\n // If a fields within an irrelivant step then remove it\n // Otherwise, check to see if its relevant and only remove if keep state is false\n var newRel = f.fieldApi.checkRelevant();\n\n if (!f.fieldApi.multistepRelevant(_this.state.values) || !newRel && !f.keepState) {\n ObjectMap[\"delete\"](_this.state.values, f.field);\n ObjectMap[\"delete\"](_this.state.touched, f.field);\n ObjectMap[\"delete\"](_this.state.errors, f.field);\n }\n });\n\n if (emit) {\n _this.emit('change');\n\n _this.emit('field', field.field);\n\n _this.emit('value', field.field, value);\n }\n },\n setTouched: function setTouched(fieldId, touch) {\n var emit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n var field = _this.fieldsById.get(fieldId);\n\n if (!field.shadow && field.fieldApi.getIsRelevant()) {\n ObjectMap.set(_this.state.touched, field.field, field.fieldApi.getTouched());\n } // Shadow values override unless undefined\n\n\n if (field.shadow && field.fieldApi.getError() != undefined && field.fieldApi.relevant(_this.state.values)) {\n ObjectMap.set(_this.state.touched, field.field, field.fieldApi.getTouched());\n }\n\n if (emit) {\n _this.emit('change');\n\n _this.emit('field', field.field); //this.emit('touch', field.field, touch);\n\n }\n },\n setError: function setError(fieldId, error) {\n var emit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n var field = _this.fieldsById.get(fieldId);\n\n if (!field.shadow && field.fieldApi.getIsRelevant()) {\n ObjectMap.set(_this.state.errors, field.field, field.fieldApi.getError());\n } // Shadow values override unless undefined\n\n\n var currentError = ObjectMap.get(_this.state.errors, field.field);\n\n if (field.shadow && field.fieldApi.getError() != undefined && field.fieldApi.relevant(_this.state.values)) {\n ObjectMap.set(_this.state.errors, field.field, field.fieldApi.getError());\n } // Special case for attempting to set shadow to undefiend\n else if (field.shadow && field.fieldApi.getError() === undefined && field.fieldApi.relevant(_this.state.values) && // TODO maybe check if object or array\n typeof currentError === 'string') {\n ObjectMap.set(_this.state.errors, field.field, field.fieldApi.getError());\n }\n\n if (emit) {\n _this.emit('change');\n\n _this.emit('field', field.field); //this.emit('error', field.field, error);\n\n }\n },\n expectRemoval: this.expectRemoval,\n getInitialValue: this.getInitialValue,\n getSavedValue: this.getSavedValue\n }; // Define the formApi\n\n this.formApi = {\n setValue: this.setValue,\n setTouched: this.setTouched,\n setError: this.setError,\n setFormError: this.setFormError,\n setValues: this.setValues,\n setInitialValue: this.setInitialValue,\n getValue: this.getValue,\n getTouched: this.getTouched,\n getError: this.getError,\n reset: this.reset,\n submitForm: this.submitForm,\n getState: this.getFormState,\n getValues: this.getValues,\n getFullField: this.getFullField,\n fieldExists: this.fieldExists,\n getInitialValue: this.getInitialValue,\n validate: this.validate,\n validateField: this.validateField,\n screenValid: this.screenValid,\n resetField: this.resetField,\n getOptions: this.getOptions,\n emitter: this,\n getSavedValue: this.getSavedValue,\n removeSavedState: this.removeSavedState,\n getDerrivedValue: this.getDerrivedValue,\n getStep: this.getStep,\n setStep: this.setStep,\n next: this.next,\n back: this.back,\n setCurrent: this.setCurrent,\n validated: this.validated,\n validating: this.validating,\n getDirty: this.getDirty,\n getPristine: this.getPristine,\n getField: this.getField\n };\n this.on('value', function (field) {\n // The forms values have changed so we want to clear form level error\n delete _this.state.error;\n\n _this.notify(field);\n });\n }\n /* -------------------------------- Event Emitter ------------------------------ */\n\n\n _createClass(FormController, [{\n key: \"emit\",\n value: function emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n } // Grab the set based on the event\n\n\n var listeners = this.subscriptions.get(event); // Only call if we have listeners on that event ( null check )\n\n if (listeners) {\n listeners.forEach(function (listener) {\n return listener.apply(void 0, args);\n });\n }\n }\n }, {\n key: \"on\",\n value: function on(event, listener) {\n // Singleton check\n if (!this.subscriptions.get(event)) {\n this.subscriptions.set(event, new Set());\n } // Add listener\n\n\n var listeners = this.subscriptions.get(event);\n listeners.add(listener);\n }\n }, {\n key: \"removeListener\",\n value: function removeListener(event, listener) {\n // Remove listener\n var listeners = this.subscriptions.get(event);\n listeners[\"delete\"](listener);\n }\n /* ---------------------------------- Setters ---------------------------------- */\n\n }, {\n key: \"setOptions\",\n value: function setOptions(options) {\n this.options = options;\n }\n }, {\n key: \"setValue\",\n value: function setValue(name, value, options) {\n this.getField(name).fieldApi.setValue(value, null, _objectSpread2({\n allowEmptyString: this.options.allowEmptyStrings\n }, options));\n }\n }, {\n key: \"setTouched\",\n value: function setTouched(name, value) {\n this.getField(name).fieldApi.setTouched(value);\n }\n }, {\n key: \"setError\",\n value: function setError(name, value) {\n this.getField(name).fieldApi.setError(value);\n }\n }, {\n key: \"setFormError\",\n value: function setFormError(value) {\n this.state.error = value;\n this.emit('change');\n }\n }, {\n key: \"validating\",\n value: function validating() {\n this.state.validating = this.state.validating + 1;\n this.emit('change');\n }\n }, {\n key: \"validated\",\n value: function validated(name, error) {\n // Decrement the validating\n this.state.validating = this.state.validating - 1; // Set the error if there is not already one ( sync error first )\n\n if (!this.getError(name)) {\n this.setError(name, error);\n } // If we are not still validating, and we were submitting, then submit form\n // If we are async validating then dont submit yet\n\n\n if (this.state.validating > 0) {\n this.emit('change');\n return;\n } // If we were submitting\n\n\n if (this.state.submitting) {\n // Check validity and perform submission if valid\n if (this.valid()) {\n debug$2('Submit', this.state);\n this.emit('submit');\n } else {\n debug$2('Submit', this.state);\n this.emit('failure');\n }\n\n this.state.submitting = false;\n }\n\n this.emit('change');\n }\n }, {\n key: \"setStep\",\n value: function setStep(value) {\n this.state.step = value;\n this.emit('change');\n }\n }, {\n key: \"setCurrent\",\n value: function setCurrent(component) {\n this.state.Current = component;\n this.emit('change');\n }\n }, {\n key: \"back\",\n value: function back(prevComponent) {\n this.state.step = this.state.step - 1;\n this.state.Current = prevComponent;\n this.emit('change');\n }\n }, {\n key: \"next\",\n value: function next(nextComponent) {\n // Validate the entire form\n this.validate(); // If fields on the screen ( currently rendered ) are valid move on\n\n if (this.screenValid()) {\n this.state.step = this.state.step + 1;\n this.state.Current = nextComponent;\n } // State will have changed\n\n\n this.emit('change');\n }\n }, {\n key: \"setInitialValue\",\n value: function setInitialValue(field, value) {\n ObjectMap.set(this.options.initialValues, field, value);\n }\n /* ---------------------------------- Getters ---------------------------------- */\n\n /**\n * Generate the external form state that will be exposed to the users\n *\n * @returns Form State\n */\n\n }, {\n key: \"getFormState\",\n value: function getFormState() {\n debug$2('Returning form state');\n return _objectSpread2(_objectSpread2({}, this.state), {}, {\n pristine: this.pristine(),\n dirty: this.dirty(),\n invalid: this.invalid()\n });\n }\n }, {\n key: \"getFormApi\",\n value: function getFormApi() {\n return this.formApi;\n }\n }, {\n key: \"getDerrivedValue\",\n value: function getDerrivedValue(name) {\n var values = this.getValues();\n return ObjectMap.get(values, name);\n }\n }, {\n key: \"getValue\",\n value: function getValue(name) {\n var value = this.getField(name).fieldApi.getValue();\n debug$2('Getting value for', name, value);\n return value;\n }\n }, {\n key: \"getTouched\",\n value: function getTouched(field) {\n var touched = this.getField(field).fieldApi.getTouched();\n debug$2('Getting touched for', field, touched);\n return touched;\n }\n }, {\n key: \"getError\",\n value: function getError(field) {\n var error = this.getField(field).fieldApi.getError();\n debug$2('Getting error for', field, error);\n return error;\n }\n }, {\n key: \"getDirty\",\n value: function getDirty(field) {\n var dirty = this.getField(field).fieldApi.getDirty();\n debug$2('Getting dirty for', field, dirty);\n return dirty;\n }\n }, {\n key: \"getPristine\",\n value: function getPristine(field) {\n var pristine = this.getField(field).fieldApi.getPristine();\n debug$2('Getting pristine for', field, pristine);\n return pristine;\n }\n }, {\n key: \"getValues\",\n value: function getValues() {\n debug$2('Gettings values');\n return this.state.values;\n }\n }, {\n key: \"getAllTouched\",\n value: function getAllTouched() {\n debug$2('Gettings touched');\n return this.state.touched;\n }\n }, {\n key: \"getErrors\",\n value: function getErrors() {\n debug$2('Gettings errors');\n return this.state.errors;\n }\n }, {\n key: \"getOptions\",\n value: function getOptions() {\n return this.options;\n }\n }, {\n key: \"getStep\",\n value: function getStep() {\n return this.state.step;\n }\n }, {\n key: \"getSavedValue\",\n value: function getSavedValue(name) {\n var field = this.fieldsByName.get(name);\n\n if (field && field.shadow) {\n return ObjectMap.get(this.savedValues, \"shadow-\".concat(name));\n }\n\n return ObjectMap.get(this.savedValues, name);\n }\n }, {\n key: \"removeSavedState\",\n value: function removeSavedState(name) {\n var field = this.fieldsByName.get(name);\n\n if (field && field.shadow) {\n return ObjectMap[\"delete\"](this.savedValues, \"shadow-\".concat(name));\n }\n\n return ObjectMap[\"delete\"](this.savedValues, name);\n }\n }, {\n key: \"getFullField\",\n value: function getFullField(field) {\n return field;\n }\n }, {\n key: \"getInitialValue\",\n value: function getInitialValue(field) {\n return ObjectMap.get(this.options.initialValues, field);\n }\n }, {\n key: \"getField\",\n value: function getField(name) {\n debug$2('Getting Field', name);\n var field = this.fieldsByName.get(name);\n\n if (!field) {\n // eslint-disable-next-line no-console\n console.warn(\"Attempting to get field \".concat(name, \" but it does not exist\")); // Prevent app from crashing\n\n return this.dummyField;\n }\n\n return field;\n } // Notify other fields\n\n }, {\n key: \"notify\",\n value: function notify(field) {\n var _this2 = this; // Example field - siblings[0].married\n // Get the notifier\n\n\n var notifier = this.getField(field); // If we have a list we must notify each one\n\n if (notifier && notifier.notify) {\n // Example: ['spouse']\n notifier.notify.forEach(function (fieldName) {\n // Get the field toNotify\n var JSPAN = \".\".concat(field);\n var path = \"\".concat(JSPAN.replace(/(.*)[.[].*/, '$1'), \".\").concat(fieldName).slice(1); // console.log('PATH', path);\n // Example path - siblings[0].spouse\n\n var toNotify = _this2.getField(path);\n\n if (toNotify) {\n debug$2('Notifying', toNotify.field);\n toNotify.fieldApi.validate();\n toNotify.fieldApi.checkRelevant();\n }\n });\n }\n }\n }, {\n key: \"validateField\",\n value: function validateField(field) {\n this.getField(field).fieldApi.validate();\n }\n }, {\n key: \"resetField\",\n value: function resetField(field) {\n this.getField(field).fieldApi.reset();\n }\n }, {\n key: \"fieldExists\",\n value: function fieldExists(field) {\n return this.fieldsByName.get(field) != null;\n }\n }, {\n key: \"valid\",\n value: function valid() {\n var errors = this.getErrors();\n return !!(ObjectMap.empty(errors) && !this.state.error);\n }\n }, {\n key: \"screenValid\",\n value: function screenValid() {\n // Return false if any of the fields on the screen are invalid\n var error = Object.entries(this.onScreen).some(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n field = _ref2[1];\n\n return field.fieldApi.getError();\n });\n return !error;\n }\n }, {\n key: \"invalid\",\n value: function invalid() {\n var errors = this.getErrors();\n return !!(!ObjectMap.empty(errors) || this.state.error);\n }\n }, {\n key: \"pristine\",\n value: function pristine() {\n // We are pristine if all our fields are pristine\n // const touched = this.getAllTouched();\n // const values = this.getValues();\n // return ObjectMap.empty(touched) && ObjectMap.empty(values);\n var pristine = true;\n this.fieldsById.forEach(function (field) {\n if (!field.fieldApi.getPristine()) {\n pristine = false;\n }\n });\n return pristine;\n }\n }, {\n key: \"dirty\",\n value: function dirty() {\n return !this.pristine();\n }\n }, {\n key: \"reset\",\n value: function reset() {\n debug$2('Resetting'); // So because all fields controll themselves and, \"inform\", this controller\n // of their changes, we need to literally itterate through all registered fields\n // and reset them. Not a big deal but very important to remember that you cant simply\n // reset this controllers state!\n\n this.fieldsById.forEach(function (field) {\n field.fieldApi.reset({\n preventUpdate: true\n });\n });\n this.emit('reset');\n this.emit('change');\n }\n }, {\n key: \"setValues\",\n value: function setValues(values) {\n debug$2('Setting values'); // So we because all fields controll themselves and, \"inform\", this controller\n // of their changes, we need to literally itterate through all registered fields\n // and set them. Not a big deal but very important to remember that you cant simply\n // set this controllers state!\n\n this.fieldsById.forEach(function (field) {\n // Initialize the values if it needs to be\n var value = ObjectMap.get(values, field.field);\n\n if (value !== undefined) {\n field.fieldApi.setValue(value, null, {\n preventUpdate: true\n });\n }\n });\n this.emit('change');\n }\n }, {\n key: \"validate\",\n value: function validate() {\n var _this3 = this;\n\n debug$2('Validating all fields');\n var values = this.getValues(); // Validate schema if needed\n\n if (this.options.validationSchema) {\n var errors = validateYupSchema(this.options.validationSchema, values); // So we because all fields controll themselves and, \"inform\", this controller\n // of their changes, we need to literally itterate through all registered fields\n // and set them. Not a big deal but very important to remember that you cant simply\n // set this controllers state!\n\n this.fieldsById.forEach(function (field) {\n // Check to see if there is an error to set\n // Note: we use has becuause value may be there but undefined\n if (ObjectMap.has(errors, field.field)) {\n var error = ObjectMap.get(errors, field.field); // If there is an error then set it\n\n _this3.setError(field.field, error);\n } else {\n // If we are doing schema validation then we need to clear out any old errors\n _this3.setError(field.field, undefined);\n }\n });\n } // Validate AJV schema if needed\n\n\n if (this.options.schema && this.options.ajv) {\n var _errors = validateAjvSchema(this.ajvValidate, values); // So we because all fields controll themselves and, \"inform\", this controller\n // of their changes, we need to literally itterate through all registered fields\n // and set them. Not a big deal but very important to remember that you cant simply\n // set this controllers state!\n\n\n this.fieldsById.forEach(function (field) {\n // Check to see if there is an error to set\n // Note: we use has becuause value may be there but undefined\n if (ObjectMap.has(_errors, field.field)) {\n var error = ObjectMap.get(_errors, field.field); // If there is an error then set it\n\n _this3.setError(field.field, error);\n } else {\n // If we are doing schema validation then we need to clear out any old errors\n _this3.setError(field.field, undefined);\n }\n });\n } // Itterate through and call validate on every field\n\n\n this.fieldsById.forEach(function (field) {\n field.fieldApi.validate(values); // Second param to prevent validation\n\n field.fieldApi.setTouched(true, true);\n }); // Call the form level validation if its present\n\n if (this.options.validate) {\n var res = this.options.validate(values);\n this.setFormError(res);\n } // Call the forms field level validation\n\n\n if (this.options.validateFields) {\n var _errors2 = this.options.validateFields(values); // So we because all fields controll themselves and, \"inform\", this controller\n // of their changes, we need to literally itterate through all registered fields\n // and set them. Not a big deal but very important to remember that you cant simply\n // set this controllers state!\n\n\n this.fieldsById.forEach(function (field) {\n // Check to see if there is an error to set\n // Note: we use has becuause value may be there but undefined\n if (ObjectMap.has(_errors2, field.field)) {\n var error = ObjectMap.get(_errors2, field.field); // If there is an error then set it\n\n _this3.setError(field.field, error);\n }\n });\n }\n }\n }, {\n key: \"asyncValidate\",\n value: function asyncValidate() {\n debug$2('Async Validating all fields');\n var values = this.getValues(); // Itterate through and call validate on every field\n\n this.fieldsById.forEach(function (field) {\n field.fieldApi.asyncValidate(values);\n });\n }\n }, {\n key: \"keyDown\",\n value: function keyDown(e) {\n // If preventEnter then return\n if (e.keyCode == 13 && this.options.preventEnter) {\n e.preventDefault(e);\n return false;\n }\n }\n }, {\n key: \"submitForm\",\n value: function submitForm(e) {\n // Incriment number of submit attempts\n this.state.submits = this.state.submits + 1;\n this.state.submitting = true;\n\n if (!this.options.dontPreventDefault && e) {\n // Prevent default browser form submission\n e.preventDefault(e);\n } // Validate the form\n\n\n this.validate(); // Emit a change\n\n this.emit('change'); // Trigger all async validations\n\n this.asyncValidate(); // If we are async validating then dont submit yet\n\n if (this.state.validating > 0) {\n return;\n } // Check validity and perform submission if valid\n\n\n if (this.valid()) {\n debug$2('Submit', this.state);\n this.emit('submit');\n } else {\n debug$2('Submit', this.state);\n this.emit('failure');\n }\n\n this.state.submitting = false;\n this.emit('change');\n }\n }, {\n key: \"mount\",\n value: function mount() {\n var _this4 = this;\n\n this.fieldsById.forEach(function (value) {\n _this4.emit('field', value.field);\n });\n }\n /* ---------------- Updater Functions (used by fields) ---------------- */\n // ADDED initialRender parameter because of react 16.13.0 warning that does not like\n // setting initial value during first render\n\n }, {\n key: \"register\",\n value: function register(id, field, initialRender) {\n var name = field.field,\n state = field.state;\n debug$2('Register ID:', id, 'Name:', name, state, 'Initial', initialRender); // Example foo.bar.baz[3].baz >>>> foo.bar.baz[3]\n\n var magicValue = name.slice(0, name.lastIndexOf('[') != -1 ? name.lastIndexOf(']') + 1 : name.length); // Field might be coming back after render remove old field\n\n var alreadyRegistered;\n this.fieldsById.forEach(function (value, key) {\n if (value && value.field === name) {\n alreadyRegistered = key;\n }\n });\n\n if ( //!this.expectedRemovals[magicValue] &&\n alreadyRegistered && (field.keepState || field.inMultistep)) {\n debug$2('Already Registered', name);\n this.fieldsById[\"delete\"](alreadyRegistered);\n } else if ( //!this.expectedRemovals[magicValue] &&\n alreadyRegistered && (!field.keepState || !field.inMultistep)) {\n // eslint-disable-next-line no-console\n console.warn('Check to make sure you have not registered two fields with the fieldName', name);\n }\n\n debug$2('Fields Registered', this.fieldsById.size); // The field is on the screen\n\n this.onScreen[id] = field; // Always register the field\n\n this.fieldsById.set(id, field); // Always clear out expected removals when a reregistering array field comes in\n\n debug$2('clearing expected removal', magicValue);\n delete this.expectedRemovals[magicValue];\n delete this.pulledOut[magicValue]; // The field is a shadow field ooo spooky so dont set anything\n\n if (field.shadow) {\n return;\n } // Update the forms state right away\n\n\n this.updater.setValue(id, field.fieldApi.getValue(), false);\n this.updater.setError(id, field.fieldApi.getError(), false);\n this.updater.setTouched(id, field.fieldApi.getTouched(), false); // We register field right away but dont want it to triger a rerender\n\n if (!initialRender) {\n this.emit('change');\n }\n\n this.emit('field', name);\n }\n }, {\n key: \"deregister\",\n value: function deregister(id) {\n var field = this.fieldsById.get(id);\n var name = field.field;\n debug$2('Deregister', id, name); // The field is off the screen\n\n delete this.onScreen[id]; // Example foo.bar.baz[3] --> foo.bar.baz[3].baz && foo.bar.baz[3].taz.raz[4].naz\n\n var expectedRemoval = isExpected(name, this.expectedRemovals); // Example foo.bar.baz[3].baz >>>> foo.bar.baz[3]\n\n var magicValue = name.slice(0, name.lastIndexOf('[') != -1 ? name.lastIndexOf(']') + 1 : name.length); // If the fields state is to be kept then save the value\n\n if ( // We are in a multistep or want to keep the state\n (field.keepState || field.inMultistep) && // We are NOT expected to be removed\n !expectedRemoval) {\n // TODO ?? Exception where the field is irrelivant AND keep state was not passed ??\n debug$2(\"Saving field \".concat(name, \"'s value\"), field.fieldApi.getFieldState());\n\n if (!field.shadow) {\n ObjectMap.set(this.savedValues, name, field.fieldApi.getFieldState());\n } else {\n // We are shadow field and will store this value in the shadows\n ObjectMap.set(this.savedValues, \"shadow-\".concat(name), field.fieldApi.getFieldState());\n }\n } // Remove if its an expected removal OR we dont have keep state\n\n\n if ( // This field was expected to be removed\n expectedRemoval || // This field does not have keepstate and is NOT within a multistep\n !field.keepState && !field.inMultistep || // If field is in multistep then we would always keep due to field.inMultistep\n // BUT.. we need to also check if the field is irrelivant\n // because if it gets unmounted, even if its part of a multistep, we want to remove\n // the field completley, unless keep state was passed.\n !field.fieldApi.getIsRelevant() && !field.keepState) {\n // Remove the field completley\n debug$2('Removing field', name);\n this.fieldsById[\"delete\"](id); // Clean up state only if its not expected removal, otherwise we will just pull it out\n\n if (!expectedRemoval) {\n ObjectMap[\"delete\"](this.state.values, name);\n ObjectMap[\"delete\"](this.state.touched, name);\n ObjectMap[\"delete\"](this.state.errors, name);\n\n if (!field.shadow) {\n ObjectMap[\"delete\"](this.savedValues, name);\n } else {\n ObjectMap[\"delete\"](this.savedValues, \"shadow-\".concat(name));\n }\n } // If we expected this removal then pullOut\n\n\n if (expectedRemoval && this.pulledOut[magicValue]) {\n debug$2('Pulling out', name, 'with magic value', magicValue);\n ObjectMap.pullOut(this.state.values, magicValue);\n ObjectMap.pullOut(this.state.touched, magicValue);\n ObjectMap.pullOut(this.state.errors, magicValue);\n ObjectMap.pullOut(this.savedValues, magicValue); // console.log('Pull1', this.state.values);\n // console.log('Pull2', this.savedValues);\n\n delete this.pulledOut[magicValue];\n }\n }\n\n this.emit('change');\n }\n }, {\n key: \"expectRemoval\",\n value: function expectRemoval(name) {\n debug$2('Expecting removal of', name);\n this.expectedRemovals[name] = true;\n this.pulledOut[name] = true;\n }\n }, {\n key: \"update\",\n value: function update(id, field, oldName) {\n debug$2('Update', id, field.field, oldName, field.fieldState.value); // Update the error touched and values of this field\n\n var value = field.fieldApi.getValue();\n var error = field.fieldApi.getError();\n var t = field.fieldApi.getTouched(); // Clear the old value out\n\n var oldField = this.fieldsByName.get(oldName); // Only clear if we had an old name ( our name changed )\n // %% the oldField is gone!\n\n if (oldName && !oldField) {\n // Setting nothing sets to undefined and does NOT pull out\n ObjectMap.set(this.state.values, oldName);\n ObjectMap.set(this.state.errors, oldName);\n ObjectMap.set(this.state.touched, oldName);\n } // Set the value\n\n\n ObjectMap.set(this.state.values, field.field, value);\n ObjectMap.set(this.state.errors, field.field, error);\n ObjectMap.set(this.state.touched, field.field, t);\n this.emit('change');\n }\n }]);\n\n return FormController;\n}();\n\nvar logger$5 = debug('informed:FormProvider' + '\\t\\t');\n\nvar FormProvider = function FormProvider(_ref) {\n var children = _ref.children,\n formApi = _ref.formApi,\n formController = _ref.formController,\n formState = _ref.formState,\n rest = _objectWithoutProperties(_ref, [\"children\", \"formApi\", \"formController\", \"formState\"]);\n\n logger$5('Render FormProvider');\n\n if (formApi) {\n logger$5('Render FormProvider with given values');\n /* --- Create Provider with given values and render Content --- */\n\n return /*#__PURE__*/React.createElement(FormRegisterContext.Provider, {\n value: formController.updater\n }, /*#__PURE__*/React.createElement(FormApiContext.Provider, {\n value: formApi\n }, /*#__PURE__*/React.createElement(FormStateContext.Provider, {\n value: formState\n }, children)));\n }\n\n logger$5('Render FormProvider with generated values');\n /* --- User did not pass values so create them --- */\n\n var value = useForm(rest);\n return /*#__PURE__*/React.createElement(FormRegisterContext.Provider, {\n value: value.formController.updater\n }, /*#__PURE__*/React.createElement(FormApiContext.Provider, {\n value: value.formApi\n }, /*#__PURE__*/React.createElement(FormStateContext.Provider, {\n value: value.formState\n }, children)));\n};\n\nvar logger$6 = debug('informed:useForm' + '\\t\\t');\n\nvar useForm = function useForm(_ref) {\n var dontPreventDefault = _ref.dontPreventDefault,\n initialValues = _ref.initialValues,\n validate = _ref.validate,\n validateFields = _ref.validateFields,\n allowEmptyStrings = _ref.allowEmptyStrings,\n preventEnter = _ref.preventEnter,\n getApi = _ref.getApi,\n apiRef = _ref.apiRef,\n onChange = _ref.onChange,\n onReset = _ref.onReset,\n onSubmit = _ref.onSubmit,\n onValueChange = _ref.onValueChange,\n onSubmitFailure = _ref.onSubmitFailure,\n validationSchema = _ref.validationSchema,\n schema = _ref.schema,\n ajv = _ref.ajv,\n fieldMap = _ref.fieldMap,\n onlyValidateSchema = _ref.onlyValidateSchema,\n userProps = _objectWithoutProperties(_ref, [\"dontPreventDefault\", \"initialValues\", \"validate\", \"validateFields\", \"allowEmptyStrings\", \"preventEnter\", \"getApi\", \"apiRef\", \"onChange\", \"onReset\", \"onSubmit\", \"onValueChange\", \"onSubmitFailure\", \"validationSchema\", \"schema\", \"ajv\", \"fieldMap\", \"onlyValidateSchema\"]);\n\n logger$6('Render useForm'); // Generate form controller options\n\n var formControllerOptions = useMemo(function () {\n return {\n dontPreventDefault: dontPreventDefault,\n initialValues: initialValues,\n validate: validate,\n validateFields: validateFields,\n allowEmptyStrings: allowEmptyStrings,\n preventEnter: preventEnter,\n validationSchema: validationSchema,\n schema: schema,\n ajv: ajv,\n fieldMap: fieldMap\n };\n }, [dontPreventDefault, initialValues, validate, validateFields, allowEmptyStrings, preventEnter, validationSchema, schema, ajv, fieldMap]); // Create form controller\n\n var _useState = useState(function () {\n return new FormController(formControllerOptions);\n }),\n _useState2 = _slicedToArray(_useState, 1),\n formController = _useState2[0]; // Update the options when they change\n\n\n useEffect(function () {\n formController.setOptions(formControllerOptions);\n }, [formControllerOptions]);\n useIsomorphicLayoutEffect(function () {\n formController.mount();\n }, []); // Form state will be used to trigger rerenders\n\n var _useState3 = useState(function () {\n return formController.getFormState();\n }),\n _useState4 = _slicedToArray(_useState3, 2),\n formState = _useState4[0],\n setFormState = _useState4[1]; // Register for events\n\n\n useIsomorphicLayoutEffect(function () {\n var onChangeHandler = function onChangeHandler() {\n return onChange && onChange(formController.getFormState());\n };\n\n var onResetHandler = function onResetHandler() {\n return onReset && onReset();\n };\n\n var onSubmitHandler = function onSubmitHandler() {\n return onSubmit && onSubmit(formController.getFormState().values);\n };\n\n var onValueHandler = function onValueHandler() {\n return onValueChange && onValueChange(formController.getFormState().values);\n };\n\n var onFailureHandler = function onFailureHandler() {\n return onSubmitFailure && onSubmitFailure(formController.getFormState().errors);\n }; // Register for events\n\n\n formController.on('change', onChangeHandler);\n formController.on('reset', onResetHandler);\n formController.on('submit', onSubmitHandler);\n formController.on('value', onValueHandler);\n formController.on('failure', onFailureHandler); // Unregister events\n\n return function () {\n formController.removeListener('change', onChangeHandler);\n formController.removeListener('reset', onResetHandler);\n formController.removeListener('submit', onSubmitHandler);\n formController.removeListener('value', onValueHandler);\n formController.removeListener('failure', onFailureHandler);\n };\n }, [onChange, onReset, onSubmit, onValueChange, onSubmitFailure]); // Initialize code like constructor but not muhahah\n\n useState(function () {\n // Update the form state to trigger rerender!\n var onChangeHandlerRerender = function onChangeHandlerRerender() {\n logger$6('Setting form state');\n setFormState(formController.getFormState());\n }; // const debounced = debounce(onChangeHandlerRerender, 250);\n\n\n formController.on('change', onChangeHandlerRerender); // Give access to api outside\n\n if (getApi) {\n getApi(formController.getFormApi());\n }\n\n if (apiRef) {\n apiRef.current = formController.getFormApi();\n }\n }); // We dont want this to happen on every render so thats why useState is used here\n\n var _useState5 = useState(function () {\n return formController.getFormApi();\n }),\n _useState6 = _slicedToArray(_useState5, 1),\n formApi = _useState6[0]; // TODO technically speaking this can be unsafe as there is circular dependency\n // between form provider and useForm.. Its ok because anyone that in theory\n // Uses a form provider and a use form hook themselves will never call the render\n // function created here... that being said I will look into fixing that warning\n // at some point :)\n\n\n var render = function render(children) {\n return /*#__PURE__*/React.createElement(FormProvider, {\n formApi: formApi,\n formState: formState,\n formController: formController\n }, /*#__PURE__*/React.createElement(React.Fragment, null, !children ? /*#__PURE__*/React.createElement(FormFields, {\n schema: schema,\n onlyValidateSchema: onlyValidateSchema\n }) : children));\n };\n\n return {\n formApi: formApi,\n formState: formState,\n formController: formController,\n render: render,\n userProps: userProps\n };\n};\n\nvar debug$3 = debug('informed:Form' + '\\t\\t');\n\nvar Form = function Form(_ref) {\n var children = _ref.children,\n renderProp = _ref.render,\n component = _ref.component,\n rest = _objectWithoutProperties(_ref, [\"children\", \"render\", \"component\"]);\n\n debug$3('Render FORM');\n\n var _useForm = useForm(rest),\n formApi = _useForm.formApi,\n formController = _useForm.formController,\n formState = _useForm.formState,\n render = _useForm.render,\n userProps = _useForm.userProps;\n\n var getContent = function getContent() {\n var props = {\n formState: formState,\n formApi: formApi\n };\n\n if (component) {\n return /*#__PURE__*/React.createElement(component, props, children);\n }\n\n if (renderProp) {\n return renderProp(props);\n }\n\n if (typeof children === 'function') {\n return children(props);\n }\n\n return children;\n };\n /* --- Render Content --- */\n\n\n return render( /*#__PURE__*/React.createElement(\"form\", _extends({}, userProps, {\n onReset: formController.reset,\n onSubmit: formController.submitForm,\n onKeyDown: formController.keyDown\n }), getContent()));\n};\n\nvar buildScopedFormApi$1 = function buildScopedFormApi(scope, formApi) {\n return _objectSpread2(_objectSpread2({}, formApi), {}, {\n getValue: function getValue(field) {\n return formApi.getValue(\"\".concat(scope, \".\").concat(field));\n },\n getTouched: function getTouched(field) {\n return formApi.getTouched(\"\".concat(scope, \".\").concat(field));\n },\n getError: function getError(field) {\n return formApi.getError(\"\".concat(scope, \".\").concat(field));\n },\n setValue: function setValue(field, value) {\n return formApi.setValue(\"\".concat(scope, \".\").concat(field), value);\n },\n setTouched: function setTouched(field, value) {\n return formApi.setTouched(\"\".concat(scope, \".\").concat(field), value);\n },\n setError: function setError(field, value) {\n return formApi.setError(\"\".concat(scope, \".\").concat(field), value);\n },\n getInitialValue: function getInitialValue(field) {\n return formApi.getInitialValue(\"\".concat(scope, \".\").concat(field));\n },\n getFullField: function getFullField(field) {\n return \"\".concat(formApi.getFullField(scope), \".\").concat(field);\n }\n });\n};\n\nvar buildScopedRegister = function buildScopedRegister(scope, formRegister) {\n var _register = formRegister.register,\n _deregister = formRegister.deregister,\n _setValue = formRegister.setValue,\n _setTouched = formRegister.setTouched,\n _setError = formRegister.setError,\n _update = formRegister.update,\n _getField = formRegister.getField,\n _expectRemoval = formRegister.expectRemoval,\n _getInitialValue = formRegister.getInitialValue,\n fieldMap = formRegister.fieldMap,\n _getSavedValue = formRegister.getSavedValue;\n return {\n register: function register(field) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return _register.apply(void 0, [\"\".concat(scope, \".\").concat(field)].concat(args));\n },\n deregister: function deregister(field) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return _deregister.apply(void 0, [\"\".concat(scope, \".\").concat(field)].concat(args));\n },\n update: function update(field) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n return _update.apply(void 0, [\"\".concat(scope, \".\").concat(field)].concat(args));\n },\n setValue: function setValue(field) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n return _setValue.apply(void 0, [\"\".concat(scope, \".\").concat(field)].concat(args));\n },\n setTouched: function setTouched(field) {\n for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n\n return _setTouched.apply(void 0, [\"\".concat(scope, \".\").concat(field)].concat(args));\n },\n setError: function setError(field) {\n for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n args[_key6 - 1] = arguments[_key6];\n }\n\n return _setError.apply(void 0, [\"\".concat(scope, \".\").concat(field)].concat(args));\n },\n getField: function getField(field) {\n for (var _len7 = arguments.length, args = new Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {\n args[_key7 - 1] = arguments[_key7];\n }\n\n return _getField.apply(void 0, [\"\".concat(scope, \".\").concat(field)].concat(args));\n },\n expectRemoval: function expectRemoval(field) {\n for (var _len8 = arguments.length, args = new Array(_len8 > 1 ? _len8 - 1 : 0), _key8 = 1; _key8 < _len8; _key8++) {\n args[_key8 - 1] = arguments[_key8];\n }\n\n return _expectRemoval.apply(void 0, [\"\".concat(scope, \".\").concat(field)].concat(args));\n },\n getInitialValue: function getInitialValue(field) {\n return _getInitialValue(\"\".concat(scope, \".\").concat(field));\n },\n getSavedValue: function getSavedValue(field) {\n return _getSavedValue(\"\".concat(scope, \".\").concat(field));\n },\n fieldMap: fieldMap\n };\n};\n\nvar Scope = function Scope(_ref) {\n var scope = _ref.scope,\n children = _ref.children;\n var formRegister = useContext(FormRegisterContext);\n var formApi = useFormApi();\n var formState = useFormState(); // VERY important to memoize the builders!\n\n var scopedFormApi = useMemo(function () {\n return buildScopedFormApi$1(scope, formApi);\n }, [scope]);\n var scopedRegister = useMemo(function () {\n return buildScopedRegister(scope, formRegister);\n }, [scope]);\n return /*#__PURE__*/React.createElement(FormRegisterContext.Provider, {\n value: scopedRegister\n }, /*#__PURE__*/React.createElement(FormApiContext.Provider, {\n value: scopedFormApi\n }, /*#__PURE__*/React.createElement(FormStateContext.Provider, {\n value: formState\n }, children)));\n};\n\nvar FormState = function FormState(props) {\n var formState = useFormState();\n var displayState = {};\n\n if (Object.keys(props).length > 0) {\n Object.keys(props).forEach(function (key) {\n displayState[key] = formState[key];\n });\n } else {\n displayState = formState;\n }\n\n var _displayState = displayState,\n pristine = _displayState.pristine,\n dirty = _displayState.dirty,\n invalid = _displayState.invalid,\n values = _displayState.values,\n errors = _displayState.errors,\n touched = _displayState.touched,\n validating = _displayState.validating,\n submitting = _displayState.submitting;\n return /*#__PURE__*/React.createElement(\"pre\", null, /*#__PURE__*/React.createElement(\"code\", null, JSON.stringify({\n pristine: pristine,\n dirty: dirty,\n invalid: invalid,\n values: values,\n errors: errors,\n touched: touched,\n validating: validating,\n submitting: submitting\n }, null, 2)));\n};\n\nvar useMultistep = function useMultistep(_ref) {\n var initialStep = _ref.initialStep,\n multistepApiRef = _ref.multistepApiRef; // Get the formApi\n\n var _useFormApi = useFormApi(),\n getValues = _useFormApi.getValues,\n validate = _useFormApi.validate,\n screenValid = _useFormApi.screenValid; // Track our steps by name\n\n\n var _useState = useState(new Map()),\n _useState2 = _slicedToArray(_useState, 1),\n stepsByName = _useState2[0]; // Track number of steps\n\n\n var nSteps = useRef(0); // Define our state\n\n var _useStateWithGetter = useStateWithGetter({\n current: initialStep,\n steps: [],\n goal: null\n }),\n _useStateWithGetter2 = _slicedToArray(_useStateWithGetter, 3),\n multistepState = _useStateWithGetter2[0],\n setMultistepState = _useStateWithGetter2[1],\n getMultistepState = _useStateWithGetter2[2]; // Define our api\n\n\n var _useState3 = useState(function () {\n var getCurrentStep = function getCurrentStep() {\n // Get the current state\n var _getMultistepState = getMultistepState(),\n current = _getMultistepState.current; // Get the current step\n\n\n var currentStep = stepsByName.get(current); // Return it\n\n return currentStep;\n };\n\n var api = {\n // Gets the whole state\n getState: function getState() {\n return getMultistepState();\n },\n // Gets just the current\n getCurrentStep: getCurrentStep,\n // Gets that step\n getStep: function getStep(name) {\n return stepsByName.get(name);\n },\n // gets the current number of steps\n getNumberOfSteps: function getNumberOfSteps() {\n return stepsByName.size;\n },\n // Goes to next step\n next: function next() {\n // Validate the entire form\n validate(); // If fields on the screen ( currently rendered ) are valid move on\n\n if (screenValid()) {\n // Get the current step\n var _getCurrentStep = getCurrentStep(),\n getNext = _getCurrentStep.getNext;\n\n var next = getNext(); // Determine what the next step should be\n\n var nextStep = typeof next === 'function' ? next(getValues()) : next; // Determine if it has a next\n\n if (nextStep) {\n setMultistepState(function (prev) {\n return _objectSpread2(_objectSpread2({}, prev), {}, {\n current: nextStep\n });\n });\n }\n }\n },\n // Goes to previous step\n back: function back() {\n // Get the current step\n var _getCurrentStep2 = getCurrentStep(),\n getPrevious = _getCurrentStep2.getPrevious;\n\n var previous = getPrevious(); // Determine what the previous step should be\n\n var previousStep = typeof previous === 'function' ? previous(getValues()) : previous; // Determine if it has a previous\n\n if (previousStep) {\n setMultistepState(function (prev) {\n return _objectSpread2(_objectSpread2({}, prev), {}, {\n current: previousStep\n });\n });\n }\n },\n // Goes to specified step\n setCurrent: function setCurrent(stp) {\n if (stp) {\n var goalIndex = stepsByName.get(stp).index; // console.log(\n // 'GOAL INDEX',\n // goalIndex,\n // 'STPINDEX',\n // getCurrentStep().index\n // );\n\n if (goalIndex < getCurrentStep().index) {\n setMultistepState(function (prev) {\n return _objectSpread2(_objectSpread2({}, prev), {}, {\n current: stp,\n goal: null\n });\n });\n } else {\n setMultistepState(function (prev) {\n return _objectSpread2(_objectSpread2({}, prev), {}, {\n // current: stp,\n goal: stp\n });\n });\n }\n }\n },\n // Registers the step\n register: function register(name, step, initial) {\n if (initial) {\n nSteps.current = nSteps.current + 1;\n stepsByName.set(name, _objectSpread2(_objectSpread2({}, step), {}, {\n index: nSteps.current\n }));\n } else {\n setMultistepState(function (prev) {\n return _objectSpread2(_objectSpread2({}, prev), {}, {\n steps: Array.from(stepsByName.keys())\n });\n });\n }\n },\n // Deregisters the step\n deregister: function deregister(name) {\n stepsByName[\"delete\"](name);\n nSteps.current = nSteps.current - 1;\n setMultistepState(function (prev) {\n return _objectSpread2(_objectSpread2({}, prev), {}, {\n steps: Array.from(stepsByName.keys())\n });\n });\n }\n };\n\n if (multistepApiRef) {\n multistepApiRef.current = api;\n }\n\n return api;\n }),\n _useState4 = _slicedToArray(_useState3, 1),\n multistepApi = _useState4[0]; // Render funtion that will provide state and api\n\n\n var render = function render(children) {\n return /*#__PURE__*/React.createElement(MultistepApiContext.Provider, {\n value: multistepApi\n }, /*#__PURE__*/React.createElement(MultistepStateContext.Provider, {\n value: multistepState\n }, children));\n };\n\n return _objectSpread2(_objectSpread2(_objectSpread2({}, multistepApi), multistepState), {}, {\n render: render\n });\n};\n\nfunction useMultistepState() {\n return useContext(MultistepStateContext);\n}\n\nfunction useMultistepApi() {\n return useContext(MultistepApiContext);\n}\n\nvar useMultistepStep = function useMultistepStep(_ref) {\n var step = _ref.step,\n next = _ref.next,\n previous = _ref.previous,\n relevant = _ref.relevant;\n\n var _useFormState = useFormState(),\n values = _useFormState.values;\n\n var _useMultistepState = useMultistepState(),\n current = _useMultistepState.current,\n goal = _useMultistepState.goal;\n\n var _useMultistepApi = useMultistepApi(),\n register = _useMultistepApi.register,\n deregister = _useMultistepApi.deregister,\n goToNext = _useMultistepApi.next;\n\n var isCurrent = step === current;\n var isRelevant = relevant ? relevant(values) : true;\n var nextRef = useRef(next);\n var prevRef = useRef(previous);\n var relevantRef = useRef();\n nextRef.current = next;\n prevRef.current = previous;\n relevantRef.current = relevant;\n useState(function () {\n register(step, {\n name: step,\n getNext: function getNext() {\n return nextRef.current;\n },\n getPrevious: function getPrevious() {\n return prevRef.current;\n }\n }, true);\n });\n useEffect(function () {\n register(step, {\n name: step,\n getNext: function getNext() {\n return nextRef.current;\n },\n getPrevious: function getPrevious() {\n return prevRef.current;\n }\n });\n return function () {\n deregister(step);\n };\n }, [step]);\n useEffect(function () {\n // if we are NOT at the goal go to the next step\n if (goal && isCurrent && goal !== step) {\n // console.log('GOAL', goal, 'STEP', step, 'INDEX', getStep(step).index);\n // console.log('GOING TO NEXT STEP');\n goToNext();\n }\n }, [goal, isCurrent]);\n\n var render = function render(children) {\n return /*#__PURE__*/React.createElement(MultistepStepContext.Provider, {\n value: {\n relevant: function relevant(params) {\n return relevantRef.current ? relevantRef.current(params) : true;\n },\n multistep: true\n }\n }, isCurrent && isRelevant ? children : null);\n };\n\n return {\n isCurrent: isCurrent,\n isRelevant: isRelevant,\n step: step,\n render: render\n };\n};\n\nfunction Multistep(_ref) {\n var children = _ref.children,\n props = _objectWithoutProperties(_ref, [\"children\"]);\n\n var _useMultistep = useMultistep(props),\n render = _useMultistep.render,\n context = _objectWithoutProperties(_useMultistep, [\"render\"]);\n\n if (typeof children === 'function') {\n return render(children(context));\n }\n\n return render(children);\n}\n\nMultistep.Step = function MultistepStep(_ref2) {\n var children = _ref2.children,\n props = _objectWithoutProperties(_ref2, [\"children\"]);\n\n var _useMultistepStep = useMultistepStep(props),\n render = _useMultistepStep.render;\n\n return render(children);\n};\n\nvar FormField = function FormField(_ref) {\n var field = _ref.field; // Get the field map off the forms context\n\n var _useContext = useContext(FormRegisterContext),\n fieldMap = _useContext.fieldMap; // Grab the form api ( we need it to get the actual field name because might be in scope )\n\n\n var _useFormApi = useFormApi(),\n getFullField = _useFormApi.getFullField,\n getOptions = _useFormApi.getOptions; // Grab the full field\n\n\n var fullField = getFullField(field); // Grap the schema\n\n var _getOptions = getOptions(),\n schema = _getOptions.schema; // First find property from the schema via the path to that field\n // Examples\n // field = \"name\" ---> properties.name\n // field = \"brother.name\" ---> properties.brother.properties.name\n // field = \"brother.siblings[1].friend.name\" ---> properties.brother.properties.siblings.items[1].properties.friend.properties.name\n\n\n var path = getSchemaPathFromJsonPath(fullField);\n var property = ObjectMap.get(schema, path); // If property was not found return null\n\n if (!property) {\n return null;\n } // Next compute the field from property\n\n\n var schemaField = computeFieldFromProperty(field, property);\n var props = schemaField.props,\n componentType = schemaField.componentType;\n var Component = fieldMap[componentType];\n return /*#__PURE__*/React.createElement(Component, _extends({\n field: field\n }, props));\n};\n\nvar SchemaFields = function SchemaFields() {\n var _useFormApi = useFormApi(),\n getOptions = _useFormApi.getOptions; // Grap the schema\n\n\n var _getOptions = getOptions(),\n schema = _getOptions.schema;\n\n return /*#__PURE__*/React.createElement(FormFields, {\n schema: schema\n });\n};\n\nvar withFormApi = function withFormApi(Component) {\n return /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(FormApiContext.Consumer, null, function (formApi) {\n return /*#__PURE__*/React.createElement(Component, _extends({\n formApi: formApi,\n ref: ref\n }, props));\n });\n });\n};\n\nvar withFormState = function withFormState(Component) {\n return /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(FormStateContext.Consumer, null, function (formState) {\n return /*#__PURE__*/React.createElement(Component, _extends({\n formState: formState,\n ref: ref\n }, props));\n });\n });\n}; // eslint-disable-next-line no-unused-vars\n\n\nvar buildFieldApi = function buildFieldApi(formApi, field) {\n return {\n // TODO refactor to use field api from updater.. need to make sure this\n // will be stable\n getValue: function getValue() {\n return formApi.getValue(field);\n },\n setValue: function setValue(value) {\n return formApi.setValue(field, value);\n },\n getTouched: function getTouched() {\n return formApi.getTouched(field);\n },\n setTouched: function setTouched(value) {\n return formApi.setTouched(field, value);\n },\n getError: function getError() {\n return formApi.getError(field);\n },\n setError: function setError(value) {\n return formApi.setError(field, value);\n },\n reset: function reset() {\n return formApi.resetField(field);\n },\n validate: function validate() {\n return formApi.validateField(field);\n },\n exists: function exists() {\n return formApi.fieldExists(field);\n },\n getDirty: function getDirty() {\n return formApi.getDirty(field);\n },\n getPristine: function getPristine() {\n return formApi.getPristine(field);\n },\n getFieldState: function getFieldState() {\n return formApi.getField(field).fieldApi.getFieldState();\n }\n };\n};\n\nfunction useFieldApi(field) {\n var formApi = useFormApi();\n var fieldApi = useMemo(function () {\n return buildFieldApi(formApi, field);\n }, [field]);\n return fieldApi;\n}\n\nfunction useFieldState(name) {\n var fieldApi = useFieldApi(name);\n var formApi = useFormApi();\n\n var _React$useState = React.useState(),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n updateState = _React$useState2[1];\n\n var forceUpdate = React.useCallback(function () {\n return updateState({});\n }, []);\n useIsomorphicLayoutEffect(function () {\n var listener = function listener(target) {\n if (target === name) {\n forceUpdate();\n }\n };\n\n formApi.emitter.on('field', listener);\n return function () {\n formApi.emitter.removeListener('field', listener);\n };\n }, []);\n useIsomorphicLayoutEffect(function () {\n forceUpdate();\n }, []); // useEffect(() => {\n // forceUpdate();\n // }, []);\n\n return fieldApi.getFieldState() || {};\n}\n\nvar withFieldState = function withFieldState(field) {\n return function (Component) {\n return function (props) {\n var fieldState = useFieldState(field);\n return /*#__PURE__*/React.createElement(Component, _extends({\n fieldState: fieldState\n }, props));\n };\n };\n};\n\nvar withFieldApi = function withFieldApi(field) {\n return function (Component) {\n return function (props) {\n var fieldApi = useFieldApi(field);\n return /*#__PURE__*/React.createElement(Component, _extends({\n fieldApi: fieldApi\n }, props));\n };\n };\n};\n\nvar Option = function Option(_ref) {\n var value = _ref.value,\n forwardedRef = _ref.forwardedRef,\n children = _ref.children,\n rest = _objectWithoutProperties(_ref, [\"value\", \"forwardedRef\", \"children\"]);\n\n return /*#__PURE__*/React.createElement(\"option\", _extends({\n ref: forwardedRef,\n value: value,\n key: value\n }, rest), children);\n};\n\nvar Input = Text$1;\nexport { ArrayField, Checkbox as BasicCheckbox, Radio as BasicRadio, RadioGroup as BasicRadioGroup, Select as BasicSelect, Text as BasicText, TextArea as BasicTextArea, Checkbox$1 as Checkbox, Form, FormComponents, FormField, FormFields, FormProvider, FormState, Input, Multistep, Option, Radio$1 as Radio, RadioGroup$1 as RadioGroup, Relevant, SchemaFields, Scope, Select$1 as Select, Text$1 as Text, TextArea$1 as TextArea, asField, useArrayField, useArrayFieldApi, useArrayFieldItemApi, useCursorPosition, useField, useFieldApi, useFieldState, useForm, useFormApi, useFormState, useMultistepApi, useMultistepState, utils, withFieldApi, withFieldState, withFormApi, withFormState, withRadioGroup };"],"sourceRoot":""}