{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///dist/formly.min.js","webpack:///webpack/bootstrap 93515443539cea44613d","webpack:///./index.js","webpack:///./index.js?6161","webpack:///./angular-fix/index.js","webpack:///./angular-fix/index.js?60ee","webpack:///./other/utils.js","webpack:///./other/utils.js?62c7","webpack:///./other/docsBaseUrl.js","webpack:///external {\"root\":\"apiCheck\",\"amd\":\"api-check\",\"commonjs2\":\"api-check\",\"commonjs\":\"api-check\"}","webpack:///./directives/formly-custom-validation.js","webpack:///./directives/formly-custom-validation.js?a313","webpack:///./directives/formly-field.js","webpack:///./directives/formly-field.js?c40a","webpack:///./directives/formly-focus.js","webpack:///./directives/formly-focus.js?4bcb","webpack:///./directives/formly-form.js","webpack:///./directives/formly-form.js?dce2","webpack:///./index.common.js","webpack:///./index.common.js?a2fa","webpack:///./providers/formlyApiCheck.js","webpack:///./providers/formlyApiCheck.js?2d75","webpack:///./providers/formlyConfig.js","webpack:///./providers/formlyConfig.js?5569","webpack:///./providers/formlyUsability.js","webpack:///./providers/formlyUsability.js?9de0","webpack:///./providers/formlyValidationMessages.js","webpack:///./providers/formlyValidationMessages.js?2827","webpack:///./run/formlyCustomTags.js","webpack:///./run/formlyCustomTags.js?ac0c","webpack:///./run/formlyNgModelAttrsManipulator.js","webpack:///./run/formlyNgModelAttrsManipulator.js?4b30","webpack:///./services/formlyUtil.js","webpack:///./services/formlyUtil.js?5184","webpack:///./services/formlyWarn.js","webpack:///./services/formlyWarn.js?4316","webpack:///external \"angular\""],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_4__","__WEBPACK_EXTERNAL_MODULE_18__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","Object","defineProperty","value","_indexCommon","_indexCommon2","angular","version","window","formlyEval","scope","expression","$modelValue","$viewValue","extraLocals","_angularFix2","isFunction","$eval","extend","getFieldId","formId","options","index","type","template","templateUrl","key","join","reverseDeepMerge","dest","forEach","arguments","src","val","prop","isDefined","objAndSameType","copy","obj1","obj2","isObject","getPrototypeOf","findByNodeName","el","nodeName","element","toUpperCase","children","i","length","node","arrayify","isArray","extendFunction","_len","fns","Array","_key","args","fn","apply","extendArray","primary","secondary","property","item","indexOf","push","startsWith","str","search","isString","substring","contains","_angularFix","formlyCustomValidation","formlyUtil","restrict","link","attrs","ctrl","addValidatorToPipeline","isAsync","validator","name","setupMessage","useNewValidatorsApi","setupWithValidators","setupWithParsers","message","opts","validation","messages","validatorCollection","modelValue","viewValue","inFlightValidator","undefined","$parsers","unshift","isValid","$pending","then","$setValidity","keys","hasOwnProperty","validators","bind","asyncValidators","$inject","_toConsumableArray","arr","arr2","from","formlyField","$http","$q","$compile","$templateCache","$interpolate","formlyConfig","formlyApiCheck","formlyUsability","formlyWarn","FormlyFieldController","$scope","$timeout","$parse","$controller","formlyValidationMessages","runExpressions","field","currentValue","valueGetterSetter","expressionProperties","setter","assign","promise","when","newVal","model","simplifyLife","originalModel","extras","data","templateOptions","to","formOptions","setFieldIdAndName","formName","form","$name","setDefaultValue","defaultValue","setInitialValue","initialValue","mergeFieldOptionsWithTypeDefaults","mergeOptions","defaultOptions","properOrder","optionsTypes","reverse","typeName","getType","extraOptions","extendOptionsWithDefaults","resetModel","updateInitialValue","formControl","resetFormControl","isMultiNgModel","$setViewValue","$render","$setUntouched","$setPristine","$root","$$phase","$digest","addValidationMessages","invokeControllers","controller","setupFieldGroup","formState","fieldGroup","fieldType","getFieldType","checkApi","fieldLink","formlyFormCtrl","setFieldGroupTemplate","checkFieldGroupApi","addClass","extraAttributes","elementAttributes","map","setElementTemplate","className","addAttributes","attr","addClasses","templateString","html","asHtml","contents","watchFormControl","watchFieldNameOrExistence","nameExpressionRegex","nameExpression","exec","watchFieldExistence","$watch","fieldCount","fc","stopWatchingShowError","addShowMessagesWatcher","addParsers","addFormatters","customExpression","errorExistsAndShouldBeVisibleExpression","$invalid","show","noTouchedButDirty","isUndefined","$touched","$dirty","errorExistsAndShouldBeVisible","showError","setParsersOrFormatters","formWasPristine","$pristine","formatters","$formatters","formatter","which","getThingsFromType","theType","typeThings","getDefaultOptionsProperty","getThingsFromOptionsTypes","getDefaultOptionsOptionsTypes","optionsTypesThings","optionsTypeName","getFormlyExpressionThing","thing","formlyExpressionParserOrFormatterFunction","originalThingProp","things","ngModelCtrls","ngModelCtrl","_ngModelCtrl","concat","noop","noFormControl","templateEl","ngModelNodes","querySelectorAll","ngModelNode","getAttribute","callLinkFunctions","thusly","runManipulators","manipulators","templateToManipulate","chain","manipulator","newTemplate","fieldManipulators","getManipulators","getFieldTemplate","preWrapper","transcludeInWrappers","postWrapper","error","wrapper","append","addManipulators","_ref","_ref$preWrapper","pre","_ref$postWrapper","post","templateManipulators","fromOptionsOrType","getFieldError","getTemplate","isUrl","templatePromise","_ret2","httpOptions","cache","v","url","get","response","getWrapperOption","aWrapper","checkWrapper","runApiCheck","promises","w","all","wrappersTemplates","wrapperTemplate","checkWrapperTemplate","totalWrapper","shift","doTransclusion","superWrapper","transcludeEl","find","replaceWith","getWrapper","getWrapperByType","typeWrappers","formWrappers","defaultWrapper","formlyFieldOptions","prefix","hide","_ref2","forType","apiCheck","apiCheckInstance","apiCheckFunction","apiCheckOptions","runApiCheckForType","getTypeHeritage","instance","config","disabled","_apiCheck2","globalConfig","checkerObjects","shape","checker","checkOptions","output","docsBaseUrl","transclude","fields","_apiCheck","formlyFocus","$document","previousEl","doc","$observe","activeElement","focus","focusWait","blur","formlyForm","formlyFormGetTemplate","getRootEl","rootEl","getFieldRootEl","fieldRootEl","getHideDirective","hideDirective","defaultHideDirective","getTrackBy","trackBy","getFormName","bindName","minor","getFormlyError","startSymbol","endSymbol","getTranscludeClass","transcludeClass","copyAttributes","attributes","excluded","arrayAttrs","toKebabCase","currentFormId","parentFormAttributes","parent","hasClass","FormlyFormController","onModelOrFormStateChange","hideExpression","evalCloseToFormlyExpression","validateOnModelChange","$validate","setupFields","checkDeprecatedOptions","fieldTransforms","fieldTransform","setupModels","attachKey","setupWatchers","setupOptions","formOptionsApi","optional","isFieldGroup","watchedModels","isNewModel","initModel","refrencesCurrentlyWatchedModel","some","watcher","watchers","listener","watchExpression","getWatchExpression","watchListener","getWatchListener","stopWatching","watchDeep","originalExpression","modifyArgs","_slice","displayName","originalListener","originalArgs","getFormlyFieldLikeLocals","formlyFormLink","setFormController","theFormlyForm","getter","parentForm","$parent","$removeControl","removeData","disableWarnings","fixChromeAutocomplete","global","removeChromeAutoComplete","offInstance","onInstance","input","document","createElement","setAttribute","appendChild","string","replace","$1","toLowerCase","prototype","slice","_providersFormlyApiCheck","_providersFormlyApiCheck2","_otherDocsBaseUrl","_otherDocsBaseUrl2","_providersFormlyUsability","_providersFormlyUsability2","_providersFormlyConfig","_providersFormlyConfig2","_providersFormlyValidationMessages","_providersFormlyValidationMessages2","_servicesFormlyUtil","_servicesFormlyUtil2","_servicesFormlyWarn","_servicesFormlyWarn2","_directivesFormlyCustomValidation","_directivesFormlyCustomValidation2","_directivesFormlyField","_directivesFormlyField2","_directivesFormlyFocus","_directivesFormlyFocus2","_directivesFormlyForm","_directivesFormlyForm2","_runFormlyNgModelAttrsManipulator","_runFormlyNgModelAttrsManipulator2","_runFormlyCustomTags","_runFormlyCustomTags2","ngModuleName","ngModule","constant","provider","directive","run","shapeRequiredIfNot","otherProps","propChecker","shapeRequiredIfNotDefinition","propName","location","propExists","otherPropsExist","otherProp","utils","getError","checkerHelpers","setupChecker","formlyExpression","oneOfType","func","specifyWrapperType","typeOrArrayOf","nullable","apiCheckProperty","apiCheckInstanceProperty","onlyIf","withProperties","warn","throw","apiCheckFunctionProperty","oneOf","formlyWrapperType","ifNot","types","overwriteOk","bool","object","strict","objectOf","modelChecker","arrayOf","validatorChecker","fieldOptionsApiShape","$$hashKey","any","number","skipNgModelAttrsManipulator","modelOptions","updateOn","debounce","allowInvalid","getterSetter","timezone","parsers","ngModelElAttrs","ngModelAttrs","statement","attribute","bound","boolean","array","typeOptionsDefaultOptions","formlyTypeOptions","extends","formlyUsabilityProvider","formlyErrorAndWarningsUrlPrefix","setType","checkType","extendTypeOptions","typeMap","JSON","stringify","_ret","allTypes","checkOverwrite","extendsType","extendTypeControllerFunction","extendTypeLinkFunction","extendTypeDefaultOptions","_otherUtils2","extendTemplate","extendsCtrl","optionsCtrl","extendsFn","optionsFn","extendsDO","optionsDO","optionsDOIsFn","extendsDOIsFn","extendsDefaultOptions","mergedDefaultOptions","extenderOptionsDefaultOptions","newDefaultOptions","throwError","errorContext","heritage","setWrapper","_x","_x2","_again","wrapperOptions","getOptionsTypes","getOptionsName","checkWrapperAPI","templateWrappersMap","defaultWrapperName","checkWrapperTypes","shouldThrow","every","newValue","objectName","wrappers","_name","removeWrapperByName","removeWrappersForType","_this","console","warnInfoSlug","_this2","disableNgModelAttrsManipulator","ngModelAttrsManipulatorPreferUnbound","explicitAsync","$get","_otherUtils","errorInfoSlug","Error","getErrorMessage","toJson","urlSuffix","additionalInfo","formlyTransclude","addTemplateOptionValueMessage","suffix","alternate","validationMessages","templateOptionValue","addStringMessage","addCustomTags","div","innerHTML","isIeLessThan9","getElementsByTagName","customElements","addFormlyNgModelAttrsManipulator","ngModelAttrsManipulator","addValidation","addIfNotPresent","modelNodes","alterNgModelAttr","isPropertyAccessor","addRegardlessOfPresence","addModelOptions","addTemplateOptionsAttrs","ep","ngModelAttributes","getBuiltInAttributes","attrVal","attrName","ref","toVal","epVal","getEpValue","inTo","inEp","addNgModelElAttrs","skip","getNgModelNodes","selectorNot","skipNot","query","e","getNgModelNodesFallback","allNgModelNodes","matchingNgModelNodes","hasAttribute","nodeMatches","selector","outerHTML","querySelector","boundOnly","bothBooleanAndBound","bothAttributeAndBound","statementOnly","attributeOnly","substr","nodes","$log"],"mappings":"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","file":"dist/formly.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"api-check\"), require(\"angular\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"api-check\", \"angular\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ngFormly\"] = factory(require(\"api-check\"), require(\"angular\"));\n\telse\n\t\troot[\"ngFormly\"] = factory(root[\"apiCheck\"], root[\"angular\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_18__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","//! angular-formly version 7.1.2 built with ♥ by Astrism <astrisms@gmail.com>, Kent C. Dodds <kent@doddsfamily.us> (ó ì_í)=óò=(ì_í ò)\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"api-check\"), require(\"angular\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"api-check\", \"angular\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ngFormly\"] = factory(require(\"api-check\"), require(\"angular\"));\n\telse\n\t\troot[\"ngFormly\"] = factory(root[\"apiCheck\"], root[\"angular\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_18__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _indexCommon = __webpack_require__(9);\n\t\n\tvar _indexCommon2 = _interopRequireDefault(_indexCommon);\n\t\n\texports['default'] = _indexCommon2['default'];\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// some versions of angular don't export the angular module properly,\n\t// so we get it from window in this case.\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\tvar angular = __webpack_require__(18);\n\t\n\t/* istanbul ignore next */\n\tif (!angular.version) {\n\t  angular = window.angular;\n\t}\n\texports['default'] = angular;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _angularFix = __webpack_require__(1);\n\t\n\tvar _angularFix2 = _interopRequireDefault(_angularFix);\n\t\n\texports['default'] = {\n\t  formlyEval: formlyEval, getFieldId: getFieldId, reverseDeepMerge: reverseDeepMerge, findByNodeName: findByNodeName, arrayify: arrayify, extendFunction: extendFunction, extendArray: extendArray, startsWith: startsWith, contains: contains\n\t};\n\t\n\tfunction formlyEval(scope, expression, $modelValue, $viewValue, extraLocals) {\n\t  if (_angularFix2['default'].isFunction(expression)) {\n\t    return expression($viewValue, $modelValue, scope, extraLocals);\n\t  } else {\n\t    return scope.$eval(expression, _angularFix2['default'].extend({ $viewValue: $viewValue, $modelValue: $modelValue }, extraLocals));\n\t  }\n\t}\n\t\n\tfunction getFieldId(formId, options, index) {\n\t  if (options.id) {\n\t    return options.id;\n\t  }\n\t  var type = options.type;\n\t  if (!type && options.template) {\n\t    type = 'template';\n\t  } else if (!type && options.templateUrl) {\n\t    type = 'templateUrl';\n\t  }\n\t\n\t  return [formId, type, options.key, index].join('_');\n\t}\n\t\n\tfunction reverseDeepMerge(dest) {\n\t  _angularFix2['default'].forEach(arguments, function (src, index) {\n\t    if (!index) {\n\t      return;\n\t    }\n\t    _angularFix2['default'].forEach(src, function (val, prop) {\n\t      if (!_angularFix2['default'].isDefined(dest[prop])) {\n\t        dest[prop] = _angularFix2['default'].copy(val);\n\t      } else if (objAndSameType(dest[prop], val)) {\n\t        reverseDeepMerge(dest[prop], val);\n\t      }\n\t    });\n\t  });\n\t  return dest;\n\t}\n\t\n\tfunction objAndSameType(obj1, obj2) {\n\t  return _angularFix2['default'].isObject(obj1) && _angularFix2['default'].isObject(obj2) && Object.getPrototypeOf(obj1) === Object.getPrototypeOf(obj2);\n\t}\n\t\n\t// recurse down a node tree to find a node with matching nodeName, for custom tags jQuery.find doesn't work in IE8\n\tfunction findByNodeName(el, nodeName) {\n\t  if (!el.prop) {\n\t    // not a jQuery or jqLite object -> wrap it\n\t    el = _angularFix2['default'].element(el);\n\t  }\n\t\n\t  if (el.prop('nodeName') === nodeName.toUpperCase()) {\n\t    return el;\n\t  }\n\t\n\t  var c = el.children();\n\t  for (var i = 0; c && i < c.length; i++) {\n\t    var node = findByNodeName(c[i], nodeName);\n\t    if (node) {\n\t      return node;\n\t    }\n\t  }\n\t}\n\t\n\tfunction arrayify(obj) {\n\t  if (obj && !_angularFix2['default'].isArray(obj)) {\n\t    obj = [obj];\n\t  } else if (!obj) {\n\t    obj = [];\n\t  }\n\t  return obj;\n\t}\n\t\n\tfunction extendFunction() {\n\t  for (var _len = arguments.length, fns = Array(_len), _key = 0; _key < _len; _key++) {\n\t    fns[_key] = arguments[_key];\n\t  }\n\t\n\t  return function extendedFunction() {\n\t    var args = arguments;\n\t    fns.forEach(function (fn) {\n\t      return fn.apply(null, args);\n\t    });\n\t  };\n\t}\n\t\n\tfunction extendArray(primary, secondary, property) {\n\t  if (property) {\n\t    primary = primary[property];\n\t    secondary = secondary[property];\n\t  }\n\t  if (secondary && primary) {\n\t    _angularFix2['default'].forEach(secondary, function (item) {\n\t      if (primary.indexOf(item) === -1) {\n\t        primary.push(item);\n\t      }\n\t    });\n\t    return primary;\n\t  } else if (secondary) {\n\t    return secondary;\n\t  } else {\n\t    return primary;\n\t  }\n\t}\n\t\n\tfunction startsWith(str, search) {\n\t  if (_angularFix2['default'].isString(str) && _angularFix2['default'].isString(search)) {\n\t    return str.length >= search.length && str.substring(0, search.length) === search;\n\t  } else {\n\t    return false;\n\t  }\n\t}\n\t\n\tfunction contains(str, search) {\n\t  if (_angularFix2['default'].isString(str) && _angularFix2['default'].isString(search)) {\n\t    return str.length >= search.length && str.indexOf(search) !== -1;\n\t  } else {\n\t    return false;\n\t  }\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports[\"default\"] = \"https://github.com/formly-js/angular-formly/blob/\" + (\"7.1.2\") + \"/other/ERRORS_AND_WARNINGS.md#\";\n\tmodule.exports = exports[\"default\"];\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_4__;\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _angularFix = __webpack_require__(1);\n\t\n\tvar _angularFix2 = _interopRequireDefault(_angularFix);\n\t\n\texports['default'] = formlyCustomValidation;\n\t\n\t// @ngInject\n\tfunction formlyCustomValidation(formlyUtil) {\n\t  return {\n\t    restrict: 'A',\n\t    require: 'ngModel',\n\t    link: function formlyCustomValidationLink(scope, el, attrs, ctrl) {\n\t      var opts = scope.options;\n\t      opts.validation.messages = opts.validation.messages || {};\n\t      _angularFix2['default'].forEach(opts.validation.messages, function (message, key) {\n\t        opts.validation.messages[key] = function () {\n\t          return formlyUtil.formlyEval(scope, message, ctrl.$modelValue, ctrl.$viewValue);\n\t        };\n\t      });\n\t\n\t      var useNewValidatorsApi = ctrl.hasOwnProperty('$validators') && !attrs.hasOwnProperty('useParsers');\n\t      _angularFix2['default'].forEach(opts.validators, _angularFix2['default'].bind(null, addValidatorToPipeline, false));\n\t      _angularFix2['default'].forEach(opts.asyncValidators, _angularFix2['default'].bind(null, addValidatorToPipeline, true));\n\t\n\t      function addValidatorToPipeline(isAsync, validator, name) {\n\t        setupMessage(validator, name);\n\t        validator = _angularFix2['default'].isObject(validator) ? validator.expression : validator;\n\t        if (useNewValidatorsApi) {\n\t          setupWithValidators(validator, name, isAsync);\n\t        } else {\n\t          setupWithParsers(validator, name, isAsync);\n\t        }\n\t      }\n\t\n\t      function setupMessage(validator, name) {\n\t        var message = validator.message;\n\t        if (message) {\n\t          opts.validation.messages[name] = function () {\n\t            return formlyUtil.formlyEval(scope, message, ctrl.$modelValue, ctrl.$viewValue);\n\t          };\n\t        }\n\t      }\n\t\n\t      function setupWithValidators(validator, name, isAsync) {\n\t        var validatorCollection = isAsync ? '$asyncValidators' : '$validators';\n\t\n\t        ctrl[validatorCollection][name] = function evalValidity(modelValue, viewValue) {\n\t          return formlyUtil.formlyEval(scope, validator, modelValue, viewValue);\n\t        };\n\t      }\n\t\n\t      function setupWithParsers(validator, name, isAsync) {\n\t        var inFlightValidator = undefined;\n\t        ctrl.$parsers.unshift(function evalValidityOfParser(viewValue) {\n\t          var isValid = formlyUtil.formlyEval(scope, validator, ctrl.$modelValue, viewValue);\n\t          if (isAsync) {\n\t            ctrl.$pending = ctrl.$pending || {};\n\t            ctrl.$pending[name] = true;\n\t            inFlightValidator = isValid;\n\t            isValid.then(function () {\n\t              if (inFlightValidator === isValid) {\n\t                ctrl.$setValidity(name, true);\n\t              }\n\t            })['catch'](function () {\n\t              if (inFlightValidator === isValid) {\n\t                ctrl.$setValidity(name, false);\n\t              }\n\t            })['finally'](function () {\n\t              var $pending = ctrl.$pending || {};\n\t              if (Object.keys($pending).length === 1) {\n\t                delete ctrl.$pending;\n\t              } else {\n\t                delete ctrl.$pending[name];\n\t              }\n\t            });\n\t          } else {\n\t            ctrl.$setValidity(name, isValid);\n\t          }\n\t          return viewValue;\n\t        });\n\t      }\n\t    }\n\t  };\n\t}\n\tformlyCustomValidation.$inject = [\"formlyUtil\"];\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }\n\t\n\tvar _angularFix = __webpack_require__(1);\n\t\n\tvar _angularFix2 = _interopRequireDefault(_angularFix);\n\t\n\tvar _apiCheck = __webpack_require__(4);\n\t\n\tvar _apiCheck2 = _interopRequireDefault(_apiCheck);\n\t\n\texports['default'] = formlyField;\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name formlyField\n\t * @restrict AE\n\t */\n\t// @ngInject\n\tfunction formlyField($http, $q, $compile, $templateCache, $interpolate, formlyConfig, formlyApiCheck, formlyUtil, formlyUsability, formlyWarn) {\n\t  var arrayify = formlyUtil.arrayify;\n\t\n\t  FormlyFieldController.$inject = [\"$scope\", \"$timeout\", \"$parse\", \"$controller\", \"formlyValidationMessages\"];\n\t  return {\n\t    restrict: 'AE',\n\t    transclude: true,\n\t    require: '?^formlyForm',\n\t    scope: {\n\t      options: '=',\n\t      model: '=',\n\t      originalModel: '=?',\n\t      formId: '@', // TODO remove formId in a breaking release\n\t      index: '=?',\n\t      fields: '=?',\n\t      formState: '=?',\n\t      formOptions: '=?',\n\t      form: '=?' // TODO require form in a breaking release\n\t    },\n\t    controller: FormlyFieldController,\n\t    link: fieldLink\n\t  };\n\t\n\t  // @ngInject\n\t  function FormlyFieldController($scope, $timeout, $parse, $controller, formlyValidationMessages) {\n\t    /* eslint max-statements:[2, 31] */\n\t    if ($scope.options.fieldGroup) {\n\t      setupFieldGroup();\n\t      return;\n\t    }\n\t\n\t    var fieldType = getFieldType($scope.options);\n\t    simplifyLife($scope.options);\n\t    mergeFieldOptionsWithTypeDefaults($scope.options, fieldType);\n\t    extendOptionsWithDefaults($scope.options, $scope.index);\n\t    checkApi($scope.options);\n\t    // set field id to link labels and fields\n\t\n\t    // initalization\n\t    setFieldIdAndName();\n\t    setDefaultValue();\n\t    setInitialValue();\n\t    runExpressions();\n\t    addValidationMessages($scope.options);\n\t    invokeControllers($scope, $scope.options, fieldType);\n\t\n\t    // function definitions\n\t    function runExpressions() {\n\t      // must run on next tick to make sure that the current value is correct.\n\t      $timeout(function runExpressionsOnNextTick() {\n\t        var field = $scope.options;\n\t        var currentValue = valueGetterSetter();\n\t        _angularFix2['default'].forEach(field.expressionProperties, function runExpression(expression, prop) {\n\t          var setter = $parse(prop).assign;\n\t          var promise = $q.when(formlyUtil.formlyEval($scope, expression, currentValue, currentValue));\n\t          promise.then(function setFieldValue(value) {\n\t            setter(field, value);\n\t          });\n\t        });\n\t      }, 0, false);\n\t    }\n\t\n\t    function valueGetterSetter(newVal) {\n\t      if (!$scope.model || !$scope.options.key) {\n\t        return undefined;\n\t      }\n\t      if (_angularFix2['default'].isDefined(newVal)) {\n\t        $scope.model[$scope.options.key] = newVal;\n\t      }\n\t      return $scope.model[$scope.options.key];\n\t    }\n\t\n\t    function simplifyLife(options) {\n\t      // add a few empty objects (if they don't already exist) so you don't have to undefined check everywhere\n\t      formlyUtil.reverseDeepMerge(options, {\n\t        originalModel: options.model,\n\t        extras: {},\n\t        data: {},\n\t        templateOptions: {},\n\t        validation: {}\n\t      });\n\t      // create $scope.to so template authors can reference to instead of $scope.options.templateOptions\n\t      $scope.to = $scope.options.templateOptions;\n\t      $scope.formOptions = $scope.formOptions || {};\n\t    }\n\t\n\t    function setFieldIdAndName() {\n\t      if (_angularFix2['default'].isFunction(formlyConfig.extras.getFieldId)) {\n\t        $scope.id = formlyConfig.extras.getFieldId($scope.options, $scope.model, $scope);\n\t      } else {\n\t        var formName = $scope.form && $scope.form.$name || $scope.formId;\n\t        $scope.id = formlyUtil.getFieldId(formName, $scope.options, $scope.index);\n\t      }\n\t      $scope.options.id = $scope.id;\n\t      $scope.name = $scope.options.name || $scope.options.id;\n\t      $scope.options.name = $scope.name;\n\t    }\n\t\n\t    function setDefaultValue() {\n\t      if (_angularFix2['default'].isDefined($scope.options.defaultValue) && !_angularFix2['default'].isDefined($scope.model[$scope.options.key])) {\n\t        var setter = $parse($scope.options.key).assign;\n\t        setter($scope.model, $scope.options.defaultValue);\n\t      }\n\t    }\n\t\n\t    function setInitialValue() {\n\t      $scope.options.initialValue = $scope.model && $scope.model[$scope.options.key];\n\t    }\n\t\n\t    function mergeFieldOptionsWithTypeDefaults(options, type) {\n\t      if (type) {\n\t        mergeOptions(options, type.defaultOptions);\n\t      }\n\t      var properOrder = arrayify(options.optionsTypes).reverse(); // so the right things are overridden\n\t      _angularFix2['default'].forEach(properOrder, function (typeName) {\n\t        mergeOptions(options, formlyConfig.getType(typeName, true, options).defaultOptions);\n\t      });\n\t    }\n\t\n\t    function mergeOptions(options, extraOptions) {\n\t      if (extraOptions) {\n\t        if (_angularFix2['default'].isFunction(extraOptions)) {\n\t          extraOptions = extraOptions(options, $scope);\n\t        }\n\t        formlyUtil.reverseDeepMerge(options, extraOptions);\n\t      }\n\t    }\n\t\n\t    function extendOptionsWithDefaults(options, index) {\n\t      var key = options.key || index || 0;\n\t      _angularFix2['default'].extend(options, {\n\t        // attach the key in case the formly-field directive is used directly\n\t        key: key,\n\t        value: options.value || valueGetterSetter,\n\t        runExpressions: runExpressions,\n\t        resetModel: resetModel,\n\t        updateInitialValue: updateInitialValue\n\t      });\n\t    }\n\t\n\t    function resetModel() {\n\t      $scope.model[$scope.options.key] = $scope.options.initialValue;\n\t      if ($scope.options.formControl) {\n\t        if (_angularFix2['default'].isArray($scope.options.formControl)) {\n\t          _angularFix2['default'].forEach($scope.options.formControl, function (formControl) {\n\t            resetFormControl(formControl, true);\n\t          });\n\t        } else {\n\t          resetFormControl($scope.options.formControl);\n\t        }\n\t      }\n\t    }\n\t\n\t    function resetFormControl(formControl, isMultiNgModel) {\n\t      if (!isMultiNgModel) {\n\t        formControl.$setViewValue($scope.model[$scope.options.key]);\n\t      }\n\t\n\t      formControl.$render();\n\t      formControl.$setUntouched && formControl.$setUntouched();\n\t      formControl.$setPristine();\n\t\n\t      // To prevent breaking change requiring a digest to reset $viewModel\n\t      if (!$scope.$root.$$phase) {\n\t        $scope.$digest();\n\t      }\n\t    }\n\t\n\t    function updateInitialValue() {\n\t      $scope.options.initialValue = $scope.model[$scope.options.key];\n\t    }\n\t\n\t    function addValidationMessages(options) {\n\t      options.validation.messages = options.validation.messages || {};\n\t      _angularFix2['default'].forEach(formlyValidationMessages.messages, function createFunctionForMessage(expression, name) {\n\t        if (!options.validation.messages[name]) {\n\t          options.validation.messages[name] = function evaluateMessage(viewValue, modelValue, scope) {\n\t            return formlyUtil.formlyEval(scope, expression, modelValue, viewValue);\n\t          };\n\t        }\n\t      });\n\t    }\n\t\n\t    function invokeControllers(scope) {\n\t      var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t      var type = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\t\n\t      _angularFix2['default'].forEach([type.controller, options.controller], function (controller) {\n\t        if (controller) {\n\t          $controller(controller, { $scope: scope });\n\t        }\n\t      });\n\t    }\n\t\n\t    function setupFieldGroup() {\n\t      $scope.options.options = $scope.options.options || {};\n\t      $scope.options.options.formState = $scope.formState;\n\t    }\n\t  }\n\t\n\t  // link function\n\t  function fieldLink(scope, el, attrs, formlyFormCtrl) {\n\t    if (scope.options.fieldGroup) {\n\t      setFieldGroupTemplate();\n\t      return;\n\t    }\n\t\n\t    // watch the field model (if exists) if there is no parent formly-form directive (that would watch it instead)\n\t    if (!formlyFormCtrl && scope.options.model) {\n\t      scope.$watch('options.model', function () {\n\t        return scope.options.runExpressions();\n\t      }, true);\n\t    }\n\t\n\t    addAttributes();\n\t    addClasses();\n\t\n\t    var type = getFieldType(scope.options);\n\t    var args = arguments;\n\t    var thusly = this;\n\t    var fieldCount = 0;\n\t    var fieldManipulators = getManipulators(scope.options, scope.formOptions);\n\t    getFieldTemplate(scope.options).then(runManipulators(fieldManipulators.preWrapper)).then(transcludeInWrappers(scope.options, scope.formOptions)).then(runManipulators(fieldManipulators.postWrapper)).then(setElementTemplate).then(watchFormControl).then(callLinkFunctions)['catch'](function (error) {\n\t      formlyWarn('there-was-a-problem-setting-the-template-for-this-field', 'There was a problem setting the template for this field ', scope.options, error);\n\t    });\n\t\n\t    function setFieldGroupTemplate() {\n\t      checkFieldGroupApi(scope.options);\n\t      el.addClass('formly-field-group');\n\t      var extraAttributes = '';\n\t      if (scope.options.elementAttributes) {\n\t        extraAttributes = Object.keys(scope.options.elementAttributes).map(function (key) {\n\t          return key + '=\"' + scope.options.elementAttributes[key] + '\"';\n\t        }).join(' ');\n\t      }\n\t      var modelValue = 'model';\n\t      scope.options.form = scope.form;\n\t      if (scope.options.key) {\n\t        modelValue = 'model[\\'' + scope.options.key + '\\']';\n\t      }\n\t      setElementTemplate('\\n          <formly-form model=\"' + modelValue + '\"\\n                       fields=\"options.fieldGroup\"\\n                       options=\"options.options\"\\n                       form=\"options.form\"\\n                       class=\"' + scope.options.className + '\"\\n                       ' + extraAttributes + '\\n                       is-field-group>\\n          </formly-form>\\n        ');\n\t    }\n\t\n\t    function addAttributes() {\n\t      if (scope.options.elementAttributes) {\n\t        el.attr(scope.options.elementAttributes);\n\t      }\n\t    }\n\t\n\t    function addClasses() {\n\t      if (scope.options.className) {\n\t        el.addClass(scope.options.className);\n\t      }\n\t      if (scope.options.type) {\n\t        el.addClass('formly-field-' + scope.options.type);\n\t      }\n\t    }\n\t\n\t    function setElementTemplate(templateString) {\n\t      el.html(asHtml(templateString));\n\t      $compile(el.contents())(scope);\n\t      return templateString;\n\t    }\n\t\n\t    function watchFormControl(templateString) {\n\t      var stopWatchingShowError = _angularFix2['default'].noop;\n\t      if (scope.options.noFormControl) {\n\t        return;\n\t      }\n\t      var templateEl = _angularFix2['default'].element('<div>' + templateString + '</div>');\n\t      var ngModelNodes = templateEl[0].querySelectorAll('[ng-model],[data-ng-model]');\n\t\n\t      if (ngModelNodes.length) {\n\t        _angularFix2['default'].forEach(ngModelNodes, function (ngModelNode) {\n\t          fieldCount++;\n\t          watchFieldNameOrExistence(ngModelNode.getAttribute('name'));\n\t        });\n\t      }\n\t\n\t      function watchFieldNameOrExistence(name) {\n\t        var nameExpressionRegex = /\\{\\{(.*?)}}/;\n\t        var nameExpression = nameExpressionRegex.exec(name);\n\t        if (nameExpression) {\n\t          name = $interpolate(name)(scope);\n\t        }\n\t        watchFieldExistence(name);\n\t      }\n\t\n\t      function watchFieldExistence(name) {\n\t        scope.$watch('form[\"' + name + '\"]', function formControlChange(formControl) {\n\t          if (formControl) {\n\t            if (fieldCount > 1) {\n\t              if (!scope.options.formControl) {\n\t                scope.options.formControl = [];\n\t              }\n\t              scope.options.formControl.push(formControl);\n\t            } else {\n\t              scope.options.formControl = formControl;\n\t            }\n\t            scope.fc = scope.options.formControl; // shortcut for template authors\n\t            stopWatchingShowError();\n\t            addShowMessagesWatcher();\n\t            addParsers();\n\t            addFormatters();\n\t          }\n\t        });\n\t      }\n\t\n\t      function addShowMessagesWatcher() {\n\t        stopWatchingShowError = scope.$watch(function watchShowValidationChange() {\n\t          var customExpression = formlyConfig.extras.errorExistsAndShouldBeVisibleExpression;\n\t          var options = scope.options;\n\t          var fc = scope.fc;\n\t\n\t          if (!fc.$invalid) {\n\t            return false;\n\t          } else if (typeof options.validation.show === 'boolean') {\n\t            return options.validation.show;\n\t          } else if (customExpression) {\n\t            return formlyUtil.formlyEval(scope, customExpression, fc.$modelValue, fc.$viewValue);\n\t          } else {\n\t            var noTouchedButDirty = _angularFix2['default'].isUndefined(fc.$touched) && fc.$dirty;\n\t            return scope.fc.$touched || noTouchedButDirty;\n\t          }\n\t        }, function onShowValidationChange(show) {\n\t          scope.options.validation.errorExistsAndShouldBeVisible = show;\n\t          scope.showError = show; // shortcut for template authors\n\t        });\n\t      }\n\t\n\t      function addParsers() {\n\t        setParsersOrFormatters('parsers');\n\t      }\n\t\n\t      function addFormatters() {\n\t        setParsersOrFormatters('formatters');\n\t        var ctrl = scope.fc;\n\t        var formWasPristine = scope.form.$pristine;\n\t        if (scope.options.formatters) {\n\t          (function () {\n\t            var value = ctrl.$modelValue;\n\t            ctrl.$formatters.forEach(function (formatter) {\n\t              value = formatter(value);\n\t            });\n\t\n\t            ctrl.$setViewValue(value);\n\t            ctrl.$render();\n\t            ctrl.$setPristine();\n\t            if (formWasPristine) {\n\t              scope.form.$setPristine();\n\t            }\n\t          })();\n\t        }\n\t      }\n\t\n\t      function setParsersOrFormatters(which) {\n\t        var originalThingProp = 'originalParser';\n\t        if (which === 'formatters') {\n\t          originalThingProp = 'originalFormatter';\n\t        }\n\t\n\t        // init with type's parsers\n\t        var things = getThingsFromType(type);\n\t\n\t        // get optionsTypes things\n\t        things = formlyUtil.extendArray(things, getThingsFromOptionsTypes(scope.options.optionsTypes));\n\t\n\t        // get field's things\n\t        things = formlyUtil.extendArray(things, scope.options[which]);\n\t\n\t        // convert things into formlyExpression things\n\t        _angularFix2['default'].forEach(things, function (thing, index) {\n\t          things[index] = getFormlyExpressionThing(thing);\n\t        });\n\t\n\t        var ngModelCtrls = scope.fc;\n\t        if (!_angularFix2['default'].isArray(ngModelCtrls)) {\n\t          ngModelCtrls = [ngModelCtrls];\n\t        }\n\t\n\t        _angularFix2['default'].forEach(ngModelCtrls, function (ngModelCtrl) {\n\t          var _ngModelCtrl;\n\t\n\t          ngModelCtrl['$' + which] = (_ngModelCtrl = ngModelCtrl['$' + which]).concat.apply(_ngModelCtrl, _toConsumableArray(things));\n\t        });\n\t\n\t        function getThingsFromType(theType) {\n\t          if (!theType) {\n\t            return [];\n\t          }\n\t          if (_angularFix2['default'].isString(theType)) {\n\t            theType = formlyConfig.getType(theType, true, scope.options);\n\t          }\n\t          var typeThings = [];\n\t\n\t          // get things from parent\n\t          if (theType['extends']) {\n\t            typeThings = formlyUtil.extendArray(typeThings, getThingsFromType(theType['extends']));\n\t          }\n\t\n\t          // get own type's things\n\t          typeThings = formlyUtil.extendArray(typeThings, getDefaultOptionsProperty(theType, which, []));\n\t\n\t          // get things from optionsTypes\n\t          typeThings = formlyUtil.extendArray(typeThings, getThingsFromOptionsTypes(getDefaultOptionsOptionsTypes(theType)));\n\t\n\t          return typeThings;\n\t        }\n\t\n\t        function getThingsFromOptionsTypes() {\n\t          var optionsTypes = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\t\n\t          var optionsTypesThings = [];\n\t          _angularFix2['default'].forEach(_angularFix2['default'].copy(arrayify(optionsTypes)).reverse(), function (optionsTypeName) {\n\t            optionsTypesThings = formlyUtil.extendArray(optionsTypesThings, getThingsFromType(optionsTypeName));\n\t          });\n\t          return optionsTypesThings;\n\t        }\n\t\n\t        function getFormlyExpressionThing(thing) {\n\t          formlyExpressionParserOrFormatterFunction[originalThingProp] = thing;\n\t          return formlyExpressionParserOrFormatterFunction;\n\t\n\t          function formlyExpressionParserOrFormatterFunction($viewValue) {\n\t            var $modelValue = scope.options.value();\n\t            return formlyUtil.formlyEval(scope, thing, $modelValue, $viewValue);\n\t          }\n\t        }\n\t      }\n\t    }\n\t\n\t    function callLinkFunctions() {\n\t      if (type && type.link) {\n\t        type.link.apply(thusly, args);\n\t      }\n\t      if (scope.options.link) {\n\t        scope.options.link.apply(thusly, args);\n\t      }\n\t    }\n\t\n\t    function runManipulators(manipulators) {\n\t      return function runManipulatorsOnTemplate(templateToManipulate) {\n\t        var chain = $q.when(templateToManipulate);\n\t        _angularFix2['default'].forEach(manipulators, function (manipulator) {\n\t          chain = chain.then(function (template) {\n\t            return $q.when(manipulator(template, scope.options, scope)).then(function (newTemplate) {\n\t              return _angularFix2['default'].isString(newTemplate) ? newTemplate : asHtml(newTemplate);\n\t            });\n\t          });\n\t        });\n\t        return chain;\n\t      };\n\t    }\n\t  }\n\t\n\t  // sort-of stateless util functions\n\t  function asHtml(el) {\n\t    var wrapper = _angularFix2['default'].element('<a></a>');\n\t    return wrapper.append(el).html();\n\t  }\n\t\n\t  function getFieldType(options) {\n\t    return options.type && formlyConfig.getType(options.type);\n\t  }\n\t\n\t  function getManipulators(options, formOptions) {\n\t    var preWrapper = [];\n\t    var postWrapper = [];\n\t    addManipulators(options.templateManipulators);\n\t    addManipulators(formOptions.templateManipulators);\n\t    addManipulators(formlyConfig.templateManipulators);\n\t    return { preWrapper: preWrapper, postWrapper: postWrapper };\n\t\n\t    function addManipulators(manipulators) {\n\t      /* eslint-disable */ // it doesn't understand this :-(\n\t\n\t      var _ref = manipulators || {};\n\t\n\t      var _ref$preWrapper = _ref.preWrapper;\n\t      var pre = _ref$preWrapper === undefined ? [] : _ref$preWrapper;\n\t      var _ref$postWrapper = _ref.postWrapper;\n\t      var post = _ref$postWrapper === undefined ? [] : _ref$postWrapper;\n\t\n\t      preWrapper = preWrapper.concat(pre);\n\t      postWrapper = postWrapper.concat(post);\n\t      /* eslint-enable */\n\t    }\n\t  }\n\t\n\t  function getFieldTemplate(options) {\n\t    function fromOptionsOrType(key, fieldType) {\n\t      if (_angularFix2['default'].isDefined(options[key])) {\n\t        return options[key];\n\t      } else if (fieldType && _angularFix2['default'].isDefined(fieldType[key])) {\n\t        return fieldType[key];\n\t      }\n\t    }\n\t\n\t    var type = formlyConfig.getType(options.type, true, options);\n\t    var template = fromOptionsOrType('template', type);\n\t    var templateUrl = fromOptionsOrType('templateUrl', type);\n\t    if (_angularFix2['default'].isUndefined(template) && !templateUrl) {\n\t      throw formlyUsability.getFieldError('type-type-has-no-template', 'Type \\'' + options.type + '\\' has no template. On element:', options);\n\t    }\n\t\n\t    return getTemplate(templateUrl || template, _angularFix2['default'].isUndefined(template), options);\n\t  }\n\t\n\t  function getTemplate(template, isUrl, options) {\n\t    var templatePromise = undefined;\n\t    if (_angularFix2['default'].isFunction(template)) {\n\t      templatePromise = $q.when(template(options));\n\t    } else {\n\t      templatePromise = $q.when(template);\n\t    }\n\t\n\t    if (!isUrl) {\n\t      return templatePromise;\n\t    } else {\n\t      var _ret2 = (function () {\n\t        var httpOptions = { cache: $templateCache };\n\t        return {\n\t          v: templatePromise.then(function (url) {\n\t            return $http.get(url, httpOptions);\n\t          }).then(function (response) {\n\t            return response.data;\n\t          })['catch'](function handleErrorGettingATemplate(error) {\n\t            formlyWarn('problem-loading-template-for-templateurl', 'Problem loading template for ' + template, error);\n\t          })\n\t        };\n\t      })();\n\t\n\t      if (typeof _ret2 === 'object') return _ret2.v;\n\t    }\n\t  }\n\t\n\t  function transcludeInWrappers(options, formOptions) {\n\t    var wrapper = getWrapperOption(options, formOptions);\n\t\n\t    return function transcludeTemplate(template) {\n\t      if (!wrapper.length) {\n\t        return $q.when(template);\n\t      }\n\t\n\t      wrapper.forEach(function (aWrapper) {\n\t        formlyUsability.checkWrapper(aWrapper, options);\n\t        runApiCheck(aWrapper, options);\n\t      });\n\t      var promises = wrapper.map(function (w) {\n\t        return getTemplate(w.template || w.templateUrl, !w.template);\n\t      });\n\t      return $q.all(promises).then(function (wrappersTemplates) {\n\t        wrappersTemplates.forEach(function (wrapperTemplate, index) {\n\t          formlyUsability.checkWrapperTemplate(wrapperTemplate, wrapper[index]);\n\t        });\n\t        wrappersTemplates.reverse(); // wrapper 0 is wrapped in wrapper 1 and so on...\n\t        var totalWrapper = wrappersTemplates.shift();\n\t        wrappersTemplates.forEach(function (wrapperTemplate) {\n\t          totalWrapper = doTransclusion(totalWrapper, wrapperTemplate);\n\t        });\n\t        return doTransclusion(totalWrapper, template);\n\t      });\n\t    };\n\t  }\n\t\n\t  function doTransclusion(wrapper, template) {\n\t    var superWrapper = _angularFix2['default'].element('<a></a>'); // this allows people not have to have a single root in wrappers\n\t    superWrapper.append(wrapper);\n\t    var transcludeEl = superWrapper.find('formly-transclude');\n\t    if (!transcludeEl.length) {\n\t      // try it using our custom find function\n\t      transcludeEl = formlyUtil.findByNodeName(superWrapper, 'formly-transclude');\n\t    }\n\t    transcludeEl.replaceWith(template);\n\t    return superWrapper.html();\n\t  }\n\t\n\t  function getWrapperOption(options, formOptions) {\n\t    /* eslint complexity:[2, 6] */\n\t    var wrapper = options.wrapper;\n\t    // explicit null means no wrapper\n\t    if (wrapper === null) {\n\t      return [];\n\t    }\n\t\n\t    // nothing specified means use the default wrapper for the type\n\t    if (!wrapper) {\n\t      // get all wrappers that specify they apply to this type\n\t      wrapper = arrayify(formlyConfig.getWrapperByType(options.type));\n\t    } else {\n\t      wrapper = arrayify(wrapper).map(formlyConfig.getWrapper);\n\t    }\n\t\n\t    // get all wrappers for that the type specified that it uses.\n\t    var type = formlyConfig.getType(options.type, true, options);\n\t    if (type && type.wrapper) {\n\t      var typeWrappers = arrayify(type.wrapper).map(formlyConfig.getWrapper);\n\t      wrapper = wrapper.concat(typeWrappers);\n\t    }\n\t\n\t    // add form wrappers\n\t    if (formOptions.wrapper) {\n\t      var formWrappers = arrayify(formOptions.wrapper).map(formlyConfig.getWrapper);\n\t      wrapper = wrapper.concat(formWrappers);\n\t    }\n\t\n\t    // add the default wrapper last\n\t    var defaultWrapper = formlyConfig.getWrapper();\n\t    if (defaultWrapper) {\n\t      wrapper.push(defaultWrapper);\n\t    }\n\t    return wrapper;\n\t  }\n\t\n\t  function checkApi(options) {\n\t    formlyApiCheck['throw'](formlyApiCheck.formlyFieldOptions, options, {\n\t      prefix: 'formly-field directive',\n\t      url: 'formly-field-directive-validation-failed'\n\t    });\n\t    // validate with the type\n\t    var type = options.type && formlyConfig.getType(options.type);\n\t    if (type) {\n\t      runApiCheck(type, options, true);\n\t    }\n\t    if (options.expressionProperties && options.expressionProperties.hide) {\n\t      formlyWarn('dont-use-expressionproperties.hide-use-hideexpression-instead', 'You have specified `hide` in `expressionProperties`. Use `hideExpression` instead', options);\n\t    }\n\t  }\n\t\n\t  function checkFieldGroupApi(options) {\n\t    formlyApiCheck['throw'](formlyApiCheck.fieldGroup, options, {\n\t      prefix: 'formly-field directive',\n\t      url: 'formly-field-directive-validation-failed'\n\t    });\n\t  }\n\t\n\t  function runApiCheck(_ref2, options, forType) {\n\t    var apiCheck = _ref2.apiCheck;\n\t    var apiCheckInstance = _ref2.apiCheckInstance;\n\t    var apiCheckFunction = _ref2.apiCheckFunction;\n\t    var apiCheckOptions = _ref2.apiCheckOptions;\n\t\n\t    runApiCheckForType(apiCheck, apiCheckInstance, apiCheckFunction, apiCheckOptions, options);\n\t    if (forType && options.type) {\n\t      _angularFix2['default'].forEach(formlyConfig.getTypeHeritage(options.type), function (type) {\n\t        runApiCheckForType(type.apiCheck, type.apiCheckInstance, type.apiCheckFunction, type.apiCheckOptions, options);\n\t      });\n\t    }\n\t  }\n\t\n\t  function runApiCheckForType(apiCheck, apiCheckInstance, apiCheckFunction, apiCheckOptions, options) {\n\t    /* eslint complexity:[2, 9] */\n\t    if (!apiCheck) {\n\t      return;\n\t    }\n\t    var instance = apiCheckInstance || formlyConfig.extras.apiCheckInstance || formlyApiCheck;\n\t    if (instance.config.disabled || _apiCheck2['default'].globalConfig.disabled) {\n\t      return;\n\t    }\n\t    var fn = apiCheckFunction || 'warn';\n\t    // this is the new API\n\t    var checkerObjects = apiCheck(instance);\n\t    _angularFix2['default'].forEach(checkerObjects, function (shape, name) {\n\t      var checker = instance.shape(shape);\n\t      var checkOptions = _angularFix2['default'].extend({\n\t        prefix: 'formly-field type ' + options.type + ' for property ' + name,\n\t        url: formlyApiCheck.config.output.docsBaseUrl + 'formly-field-type-apicheck-failed'\n\t      }, apiCheckOptions);\n\t      instance[fn](checker, options[name], checkOptions);\n\t    });\n\t  }\n\t}\n\tformlyField.$inject = [\"$http\", \"$q\", \"$compile\", \"$templateCache\", \"$interpolate\", \"formlyConfig\", \"formlyApiCheck\", \"formlyUtil\", \"formlyUsability\", \"formlyWarn\"];\n\t\n\t// Stateless util functions\n\tfunction getDefaultOptionsOptionsTypes(type) {\n\t  return getDefaultOptionsProperty(type, 'optionsTypes', []);\n\t}\n\t\n\tfunction getDefaultOptionsProperty(type, prop, defaultValue) {\n\t  return type.defaultOptions && type.defaultOptions[prop] || defaultValue;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\texports['default'] = formlyFocus;\n\t\n\t// @ngInject\n\tfunction formlyFocus($timeout, $document) {\n\t  return {\n\t    restrict: 'A',\n\t    link: function formlyFocusLink(scope, element, attrs) {\n\t      var previousEl = null;\n\t      var el = element[0];\n\t      var doc = $document[0];\n\t      attrs.$observe('formlyFocus', function respondToFocusExpressionChange(value) {\n\t        /* eslint no-bitwise:0 */ // I know what I'm doing. I promise...\n\t        if (value === 'true') {\n\t          $timeout(function setElementFocus() {\n\t            previousEl = doc.activeElement;\n\t            el.focus();\n\t          }, ~ ~attrs.focusWait);\n\t        } else if (value === 'false') {\n\t          if (doc.activeElement === el) {\n\t            el.blur();\n\t            if (attrs.hasOwnProperty('refocus') && previousEl) {\n\t              previousEl.focus();\n\t            }\n\t          }\n\t        }\n\t      });\n\t    }\n\t  };\n\t}\n\tformlyFocus.$inject = [\"$timeout\", \"$document\"];\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\tvar _slice = Array.prototype.slice;\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }\n\t\n\tvar _angularFix = __webpack_require__(1);\n\t\n\tvar _angularFix2 = _interopRequireDefault(_angularFix);\n\t\n\texports['default'] = formlyForm;\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name formlyForm\n\t * @restrict AE\n\t */\n\t// @ngInject\n\tfunction formlyForm(formlyUsability, formlyWarn, $parse, formlyConfig, $interpolate) {\n\t  var currentFormId = 1;\n\t  FormlyFormController.$inject = [\"$scope\", \"formlyApiCheck\", \"formlyUtil\"];\n\t  return {\n\t    restrict: 'AE',\n\t    template: formlyFormGetTemplate,\n\t    replace: true,\n\t    transclude: true,\n\t    scope: {\n\t      fields: '=',\n\t      model: '=',\n\t      form: '=?',\n\t      options: '=?'\n\t    },\n\t    controller: FormlyFormController,\n\t    link: formlyFormLink\n\t  };\n\t\n\t  function formlyFormGetTemplate(el, attrs) {\n\t    var rootEl = getRootEl();\n\t    var fieldRootEl = getFieldRootEl();\n\t    var formId = 'formly_' + currentFormId++;\n\t    var parentFormAttributes = '';\n\t    if (attrs.hasOwnProperty('isFieldGroup') && el.parent().parent().hasClass('formly')) {\n\t      parentFormAttributes = copyAttributes(el.parent().parent()[0].attributes);\n\t    }\n\t    return '\\n        <' + rootEl + ' class=\"formly\"\\n                 name=\"' + getFormName() + '\"\\n                 role=\"form\" ' + parentFormAttributes + '>\\n          <' + fieldRootEl + ' formly-field\\n               ng-repeat=\"field in fields ' + getTrackBy() + '\"\\n               ' + getHideDirective() + '=\"!field.hide\"\\n               class=\"formly-field\"\\n               options=\"field\"\\n               model=\"field.model || model\"\\n               original-model=\"model\"\\n               fields=\"fields\"\\n               form=\"theFormlyForm\"\\n               form-id=\"' + getFormName() + '\"\\n               form-state=\"options.formState\"\\n               form-options=\"options\"\\n               index=\"$index\">\\n          </' + fieldRootEl + '>\\n          <div ng-transclude class=\"' + getTranscludeClass() + '\"></div>\\n        </' + rootEl + '>\\n      ';\n\t\n\t    function getRootEl() {\n\t      return attrs.rootEl || 'ng-form';\n\t    }\n\t\n\t    function getFieldRootEl() {\n\t      return attrs.fieldRootEl || 'div';\n\t    }\n\t\n\t    function getHideDirective() {\n\t      return attrs.hideDirective || formlyConfig.extras.defaultHideDirective || 'ng-if';\n\t    }\n\t\n\t    function getTrackBy() {\n\t      if (!attrs.trackBy) {\n\t        return '';\n\t      } else {\n\t        return 'track by ' + attrs.trackBy;\n\t      }\n\t    }\n\t\n\t    function getFormName() {\n\t      var formName = formId;\n\t      var bindName = attrs.bindName;\n\t      if (bindName) {\n\t        if (_angularFix2['default'].version.minor < 3) {\n\t          throw formlyUsability.getFormlyError('bind-name attribute on formly-form not allowed in < angular 1.3');\n\t        }\n\t        // we can do a one-time binding here because we know we're in 1.3.x territory\n\t        formName = $interpolate.startSymbol() + '::\\'formly_\\' + ' + bindName + $interpolate.endSymbol();\n\t      }\n\t      return formName;\n\t    }\n\t\n\t    function getTranscludeClass() {\n\t      return attrs.transcludeClass || '';\n\t    }\n\t\n\t    function copyAttributes(attributes) {\n\t      var excluded = ['model', 'form', 'fields', 'options', 'name', 'role', 'class', 'data-model', 'data-form', 'data-fields', 'data-options', 'data-name'];\n\t      var arrayAttrs = [];\n\t      _angularFix2['default'].forEach(attributes, function (_ref) {\n\t        var nodeName = _ref.nodeName;\n\t        var value = _ref.value;\n\t\n\t        if (nodeName !== 'undefined' && excluded.indexOf(nodeName) === -1) {\n\t          arrayAttrs.push(toKebabCase(nodeName) + '=\"' + value + '\"');\n\t        }\n\t      });\n\t      return arrayAttrs.join(' ');\n\t    }\n\t  }\n\t\n\t  // @ngInject\n\t  function FormlyFormController($scope, formlyApiCheck, formlyUtil) {\n\t    setupOptions();\n\t    $scope.model = $scope.model || {};\n\t    setupFields();\n\t\n\t    // watch the model and evaluate watch expressions that depend on it.\n\t    $scope.$watch('model', onModelOrFormStateChange, true);\n\t    if ($scope.options.formState) {\n\t      $scope.$watch('options.formState', onModelOrFormStateChange, true);\n\t    }\n\t\n\t    function onModelOrFormStateChange() {\n\t      _angularFix2['default'].forEach($scope.fields, function runFieldExpressionProperties(field, index) {\n\t        var model = field.model || $scope.model;\n\t        field.runExpressions && field.runExpressions();\n\t        if (field.hideExpression) {\n\t          // can't use hide with expressionProperties reliably\n\t          var val = model[field.key];\n\t          field.hide = evalCloseToFormlyExpression(field.hideExpression, val, field, index);\n\t        }\n\t        if (field.extras && field.extras.validateOnModelChange && field.formControl) {\n\t          field.formControl.$validate();\n\t        }\n\t      });\n\t    }\n\t\n\t    function setupFields() {\n\t      $scope.fields = $scope.fields || [];\n\t\n\t      checkDeprecatedOptions($scope.options);\n\t\n\t      var fieldTransforms = $scope.options.fieldTransform || formlyConfig.extras.fieldTransform;\n\t\n\t      if (!_angularFix2['default'].isArray(fieldTransforms)) {\n\t        fieldTransforms = [fieldTransforms];\n\t      }\n\t\n\t      _angularFix2['default'].forEach(fieldTransforms, function transformFields(fieldTransform) {\n\t        if (fieldTransform) {\n\t          $scope.fields = fieldTransform($scope.fields, $scope.model, $scope.options, $scope.form);\n\t          if (!$scope.fields) {\n\t            throw formlyUsability.getFormlyError('fieldTransform must return an array of fields');\n\t          }\n\t        }\n\t      });\n\t\n\t      setupModels();\n\t\n\t      _angularFix2['default'].forEach($scope.fields, attachKey); // attaches a key based on the index if a key isn't specified\n\t      _angularFix2['default'].forEach($scope.fields, setupWatchers); // setup watchers for all fields\n\t    }\n\t\n\t    function checkDeprecatedOptions(options) {\n\t      if (formlyConfig.extras.fieldTransform && _angularFix2['default'].isFunction(formlyConfig.extras.fieldTransform)) {\n\t        formlyWarn('fieldtransform-as-a-function-deprecated', 'fieldTransform as a function has been deprecated.', 'Attempted for formlyConfig.extras: ' + formlyConfig.extras.fieldTransform.name, formlyConfig.extras);\n\t      } else if (options.fieldTransform && _angularFix2['default'].isFunction(options.fieldTransform)) {\n\t        formlyWarn('fieldtransform-as-a-function-deprecated', 'fieldTransform as a function has been deprecated.', 'Attempted for form', options);\n\t      }\n\t    }\n\t\n\t    function setupOptions() {\n\t      formlyApiCheck['throw']([formlyApiCheck.formOptionsApi.optional], [$scope.options], { prefix: 'formly-form options check' });\n\t      $scope.options = $scope.options || {};\n\t      $scope.options.formState = $scope.options.formState || {};\n\t\n\t      _angularFix2['default'].extend($scope.options, {\n\t        updateInitialValue: updateInitialValue,\n\t        resetModel: resetModel\n\t      });\n\t    }\n\t\n\t    function updateInitialValue() {\n\t      _angularFix2['default'].forEach($scope.fields, function (field) {\n\t        if (isFieldGroup(field) && field.options) {\n\t          field.options.updateInitialValue();\n\t        } else {\n\t          field.updateInitialValue();\n\t        }\n\t      });\n\t    }\n\t\n\t    function resetModel() {\n\t      _angularFix2['default'].forEach($scope.fields, function (field) {\n\t        if (isFieldGroup(field) && field.options) {\n\t          field.options.resetModel();\n\t        } else if (field.resetModel) {\n\t          field.resetModel();\n\t        }\n\t      });\n\t    }\n\t\n\t    function setupModels() {\n\t      // a set of field models that are already watched (the $scope.model will have its own watcher)\n\t      var watchedModels = [$scope.model];\n\t\n\t      if ($scope.options.formState) {\n\t        // $scope.options.formState will have its own watcher\n\t        watchedModels.push($scope.options.formState);\n\t      }\n\t\n\t      _angularFix2['default'].forEach($scope.fields, function (field) {\n\t        var isNewModel = initModel(field);\n\t\n\t        if (field.model && isNewModel && watchedModels.indexOf(field.model) === -1) {\n\t          $scope.$watch(function () {\n\t            return field.model;\n\t          }, onModelOrFormStateChange, true);\n\t          watchedModels.push(field.model);\n\t        }\n\t      });\n\t    }\n\t\n\t    function initModel(field) {\n\t      var isNewModel = true;\n\t\n\t      if (_angularFix2['default'].isString(field.model)) {\n\t        var expression = field.model;\n\t        var index = $scope.fields.indexOf(field);\n\t\n\t        isNewModel = !refrencesCurrentlyWatchedModel(expression);\n\t\n\t        field.model = evalCloseToFormlyExpression(expression, undefined, field, index);\n\t        if (!field.model) {\n\t          throw formlyUsability.getFieldError('field-model-must-be-initialized', 'Field model must be initialized. When specifying a model as a string for a field, the result of the' + ' expression must have been initialized ahead of time.', field);\n\t        }\n\t      }\n\t      return isNewModel;\n\t    }\n\t\n\t    function refrencesCurrentlyWatchedModel(expression) {\n\t      return ['model', 'formState'].some(function (item) {\n\t        return formlyUtil.startsWith(expression, item + '.') || formlyUtil.startsWith(expression, item + '[');\n\t      });\n\t    }\n\t\n\t    function attachKey(field, index) {\n\t      if (!isFieldGroup(field)) {\n\t        field.key = field.key || index || 0;\n\t      }\n\t    }\n\t\n\t    function setupWatchers(field, index) {\n\t      if (isFieldGroup(field) || !_angularFix2['default'].isDefined(field.watcher)) {\n\t        return;\n\t      }\n\t      var watchers = field.watcher;\n\t      if (!_angularFix2['default'].isArray(watchers)) {\n\t        watchers = [watchers];\n\t      }\n\t      _angularFix2['default'].forEach(watchers, function setupWatcher(watcher) {\n\t        if (!_angularFix2['default'].isDefined(watcher.listener)) {\n\t          throw formlyUsability.getFieldError('all-field-watchers-must-have-a-listener', 'All field watchers must have a listener', field);\n\t        }\n\t        var watchExpression = getWatchExpression(watcher, field, index);\n\t        var watchListener = getWatchListener(watcher, field, index);\n\t\n\t        var type = watcher.type || '$watch';\n\t        watcher.stopWatching = $scope[type](watchExpression, watchListener, watcher.watchDeep);\n\t      });\n\t    }\n\t\n\t    function getWatchExpression(watcher, field, index) {\n\t      var watchExpression = watcher.expression || 'model[\\'' + field.key + '\\']';\n\t      if (_angularFix2['default'].isFunction(watchExpression)) {\n\t        (function () {\n\t          // wrap the field's watch expression so we can call it with the field as the first arg\n\t          // and the stop function as the last arg as a helper\n\t          var originalExpression = watchExpression;\n\t          watchExpression = function formlyWatchExpression() {\n\t            var args = modifyArgs.apply(undefined, [watcher, index].concat(_slice.call(arguments)));\n\t            return originalExpression.apply(undefined, _toConsumableArray(args));\n\t          };\n\t          watchExpression.displayName = 'Formly Watch Expression for field for ' + field.key;\n\t        })();\n\t      }\n\t      return watchExpression;\n\t    }\n\t\n\t    function getWatchListener(watcher, field, index) {\n\t      var watchListener = watcher.listener;\n\t      if (_angularFix2['default'].isFunction(watchListener)) {\n\t        (function () {\n\t          // wrap the field's watch listener so we can call it with the field as the first arg\n\t          // and the stop function as the last arg as a helper\n\t          var originalListener = watchListener;\n\t          watchListener = function formlyWatchListener() {\n\t            var args = modifyArgs.apply(undefined, [watcher, index].concat(_slice.call(arguments)));\n\t            return originalListener.apply(undefined, _toConsumableArray(args));\n\t          };\n\t          watchListener.displayName = 'Formly Watch Listener for field for ' + field.key;\n\t        })();\n\t      }\n\t      return watchListener;\n\t    }\n\t\n\t    function modifyArgs(watcher, index) {\n\t      for (var _len = arguments.length, originalArgs = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n\t        originalArgs[_key - 2] = arguments[_key];\n\t      }\n\t\n\t      return [$scope.fields[index]].concat(originalArgs, [watcher.stopWatching]);\n\t    }\n\t\n\t    function evalCloseToFormlyExpression(expression, val, field, index) {\n\t      var extraLocals = getFormlyFieldLikeLocals(field, index);\n\t      return formlyUtil.formlyEval($scope, expression, val, val, extraLocals);\n\t    }\n\t\n\t    function getFormlyFieldLikeLocals(field, index) {\n\t      // this makes it closer to what a regular formlyExpression would be\n\t      return {\n\t        options: field,\n\t        index: index,\n\t        formState: $scope.options.formState,\n\t        formId: $scope.formId\n\t      };\n\t    }\n\t  }\n\t\n\t  function formlyFormLink(scope, el, attrs) {\n\t    setFormController();\n\t    fixChromeAutocomplete();\n\t\n\t    function setFormController() {\n\t      var formId = attrs.name;\n\t      scope.formId = formId;\n\t      scope.theFormlyForm = scope[formId];\n\t      if (attrs.form) {\n\t        var getter = $parse(attrs.form);\n\t        var setter = getter.assign;\n\t        var parentForm = getter(scope.$parent);\n\t        if (parentForm) {\n\t          scope.theFormlyForm = parentForm;\n\t          if (scope[formId]) {\n\t            scope.theFormlyForm.$removeControl(scope[formId]);\n\t          }\n\t\n\t          // this next line is probably one of the more dangerous things that angular-formly does to improve the\n\t          // API for angular-formly forms. It ensures that the NgModelControllers inside of formly-form will be\n\t          // attached to the form that is passed to formly-form rather than the one that formly-form creates\n\t          // this is necessary because it's confusing to have a step between the form you pass in\n\t          // and the fields in that form. It also is because angular doesn't propagate properties like $submitted down\n\t          // to children forms :-( This line was added to solve this issue:\n\t          // https://github.com/formly-js/angular-formly/issues/287\n\t          // luckily, this is how the formController has been accessed by the NgModelController since angular 1.0.0\n\t          // so I expect it will remain this way for the life of angular 1.x\n\t          el.removeData('$formController');\n\t        } else {\n\t          setter(scope.$parent, scope[formId]);\n\t        }\n\t      }\n\t      if (!scope.theFormlyForm && !formlyConfig.disableWarnings) {\n\t        /* eslint no-console:0 */\n\t        formlyWarn('formly-form-has-no-formcontroller', 'Your formly-form does not have a `form` property. Many functions of the form (like validation) may not work', el, scope);\n\t      }\n\t    }\n\t\n\t    /*\n\t     * chrome autocomplete lameness\n\t     * see https://code.google.com/p/chromium/issues/detail?id=468153#c14\n\t     * ლ(ಠ益ಠლ)   (╯°□°)╯︵ ┻━┻    (◞‸◟;)\n\t     */\n\t    function fixChromeAutocomplete() {\n\t      var global = formlyConfig.extras.removeChromeAutoComplete === true;\n\t      var offInstance = scope.options && scope.options.removeChromeAutoComplete === false;\n\t      var onInstance = scope.options && scope.options.removeChromeAutoComplete === true;\n\t      if (global && !offInstance || onInstance) {\n\t        var input = document.createElement('input');\n\t        input.setAttribute('autocomplete', 'address-level4');\n\t        input.setAttribute('hidden', 'true');\n\t        el[0].appendChild(input);\n\t      }\n\t    }\n\t  }\n\t\n\t  // stateless util functions\n\t  function toKebabCase(string) {\n\t    if (string) {\n\t      return string.replace(/([A-Z])/g, function ($1) {\n\t        return '-' + $1.toLowerCase();\n\t      });\n\t    } else {\n\t      return '';\n\t    }\n\t  }\n\t\n\t  function isFieldGroup(field) {\n\t    return field && !!field.fieldGroup;\n\t  }\n\t}\n\tformlyForm.$inject = [\"formlyUsability\", \"formlyWarn\", \"$parse\", \"formlyConfig\", \"$interpolate\"];\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _angularFix = __webpack_require__(1);\n\t\n\tvar _angularFix2 = _interopRequireDefault(_angularFix);\n\t\n\tvar _providersFormlyApiCheck = __webpack_require__(10);\n\t\n\tvar _providersFormlyApiCheck2 = _interopRequireDefault(_providersFormlyApiCheck);\n\t\n\tvar _otherDocsBaseUrl = __webpack_require__(3);\n\t\n\tvar _otherDocsBaseUrl2 = _interopRequireDefault(_otherDocsBaseUrl);\n\t\n\tvar _providersFormlyUsability = __webpack_require__(12);\n\t\n\tvar _providersFormlyUsability2 = _interopRequireDefault(_providersFormlyUsability);\n\t\n\tvar _providersFormlyConfig = __webpack_require__(11);\n\t\n\tvar _providersFormlyConfig2 = _interopRequireDefault(_providersFormlyConfig);\n\t\n\tvar _providersFormlyValidationMessages = __webpack_require__(13);\n\t\n\tvar _providersFormlyValidationMessages2 = _interopRequireDefault(_providersFormlyValidationMessages);\n\t\n\tvar _servicesFormlyUtil = __webpack_require__(16);\n\t\n\tvar _servicesFormlyUtil2 = _interopRequireDefault(_servicesFormlyUtil);\n\t\n\tvar _servicesFormlyWarn = __webpack_require__(17);\n\t\n\tvar _servicesFormlyWarn2 = _interopRequireDefault(_servicesFormlyWarn);\n\t\n\tvar _directivesFormlyCustomValidation = __webpack_require__(5);\n\t\n\tvar _directivesFormlyCustomValidation2 = _interopRequireDefault(_directivesFormlyCustomValidation);\n\t\n\tvar _directivesFormlyField = __webpack_require__(6);\n\t\n\tvar _directivesFormlyField2 = _interopRequireDefault(_directivesFormlyField);\n\t\n\tvar _directivesFormlyFocus = __webpack_require__(7);\n\t\n\tvar _directivesFormlyFocus2 = _interopRequireDefault(_directivesFormlyFocus);\n\t\n\tvar _directivesFormlyForm = __webpack_require__(8);\n\t\n\tvar _directivesFormlyForm2 = _interopRequireDefault(_directivesFormlyForm);\n\t\n\tvar _runFormlyNgModelAttrsManipulator = __webpack_require__(15);\n\t\n\tvar _runFormlyNgModelAttrsManipulator2 = _interopRequireDefault(_runFormlyNgModelAttrsManipulator);\n\t\n\tvar _runFormlyCustomTags = __webpack_require__(14);\n\t\n\tvar _runFormlyCustomTags2 = _interopRequireDefault(_runFormlyCustomTags);\n\t\n\tvar ngModuleName = 'formly';\n\t\n\texports['default'] = ngModuleName;\n\t\n\tvar ngModule = _angularFix2['default'].module(ngModuleName, []);\n\t\n\tngModule.constant('formlyApiCheck', _providersFormlyApiCheck2['default']);\n\tngModule.constant('formlyErrorAndWarningsUrlPrefix', _otherDocsBaseUrl2['default']);\n\tngModule.constant('formlyVersion', (\"7.1.2\")); // <-- webpack variable\n\t\n\tngModule.provider('formlyUsability', _providersFormlyUsability2['default']);\n\tngModule.provider('formlyConfig', _providersFormlyConfig2['default']);\n\t\n\tngModule.factory('formlyValidationMessages', _providersFormlyValidationMessages2['default']);\n\tngModule.factory('formlyUtil', _servicesFormlyUtil2['default']);\n\tngModule.factory('formlyWarn', _servicesFormlyWarn2['default']);\n\t\n\tngModule.directive('formlyCustomValidation', _directivesFormlyCustomValidation2['default']);\n\tngModule.directive('formlyField', _directivesFormlyField2['default']);\n\tngModule.directive('formlyFocus', _directivesFormlyFocus2['default']);\n\tngModule.directive('formlyForm', _directivesFormlyForm2['default']);\n\t\n\tngModule.run(_runFormlyNgModelAttrsManipulator2['default']);\n\tngModule.run(_runFormlyCustomTags2['default']);\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _angularFix = __webpack_require__(1);\n\t\n\tvar _angularFix2 = _interopRequireDefault(_angularFix);\n\t\n\tvar _apiCheck = __webpack_require__(4);\n\t\n\tvar _apiCheck2 = _interopRequireDefault(_apiCheck);\n\t\n\tvar apiCheck = (0, _apiCheck2['default'])({\n\t  output: {\n\t    prefix: 'angular-formly:',\n\t    docsBaseUrl: __webpack_require__(3)\n\t  }\n\t});\n\t\n\tfunction shapeRequiredIfNot(otherProps, propChecker) {\n\t  if (!_angularFix2['default'].isArray(otherProps)) {\n\t    otherProps = [otherProps];\n\t  }\n\t  var type = 'specified if these are not specified: `' + otherProps.join(', ') + '` (otherwise it\\'s optional)';\n\t\n\t  function shapeRequiredIfNotDefinition(prop, propName, location, obj) {\n\t    var propExists = obj && obj.hasOwnProperty(propName);\n\t    var otherPropsExist = otherProps.some(function (otherProp) {\n\t      return obj && obj.hasOwnProperty(otherProp);\n\t    });\n\t    if (!otherPropsExist && !propExists) {\n\t      return apiCheck.utils.getError(propName, location, type);\n\t    } else if (propExists) {\n\t      return propChecker(prop, propName, location, obj);\n\t    }\n\t  }\n\t\n\t  shapeRequiredIfNotDefinition.type = type;\n\t  return apiCheck.utils.checkerHelpers.setupChecker(shapeRequiredIfNotDefinition);\n\t}\n\t\n\tvar formlyExpression = apiCheck.oneOfType([apiCheck.string, apiCheck.func]);\n\tvar specifyWrapperType = apiCheck.typeOrArrayOf(apiCheck.string).nullable;\n\t\n\tvar apiCheckProperty = apiCheck.func;\n\t\n\tvar apiCheckInstanceProperty = apiCheck.shape.onlyIf('apiCheck', apiCheck.func.withProperties({\n\t  warn: apiCheck.func,\n\t  'throw': apiCheck.func,\n\t  shape: apiCheck.func\n\t}));\n\t\n\tvar apiCheckFunctionProperty = apiCheck.shape.onlyIf('apiCheck', apiCheck.oneOf(['throw', 'warn']));\n\t\n\tvar formlyWrapperType = apiCheck.shape({\n\t  name: shapeRequiredIfNot('types', apiCheck.string).optional,\n\t  template: apiCheck.shape.ifNot('templateUrl', apiCheck.string).optional,\n\t  templateUrl: apiCheck.shape.ifNot('template', apiCheck.string).optional,\n\t  types: apiCheck.typeOrArrayOf(apiCheck.string).optional,\n\t  overwriteOk: apiCheck.bool.optional,\n\t  apiCheck: apiCheckProperty.optional,\n\t  apiCheckInstance: apiCheckInstanceProperty.optional,\n\t  apiCheckFunction: apiCheckFunctionProperty.optional,\n\t  apiCheckOptions: apiCheck.object.optional\n\t}).strict;\n\t\n\tvar expressionProperties = apiCheck.objectOf(apiCheck.oneOfType([formlyExpression, apiCheck.shape({\n\t  expression: formlyExpression,\n\t  message: formlyExpression.optional\n\t}).strict]));\n\t\n\tvar modelChecker = apiCheck.oneOfType([apiCheck.string, apiCheck.object]);\n\t\n\tvar templateManipulators = apiCheck.shape({\n\t  preWrapper: apiCheck.arrayOf(apiCheck.func).nullable.optional,\n\t  postWrapper: apiCheck.arrayOf(apiCheck.func).nullable.optional\n\t}).strict.nullable;\n\t\n\tvar validatorChecker = apiCheck.objectOf(apiCheck.oneOfType([formlyExpression, apiCheck.shape({\n\t  expression: formlyExpression,\n\t  message: formlyExpression.optional\n\t}).strict]));\n\t\n\tvar fieldOptionsApiShape = {\n\t  $$hashKey: apiCheck.any.optional,\n\t  type: apiCheck.shape.ifNot(['template', 'templateUrl'], apiCheck.string).optional,\n\t  template: apiCheck.shape.ifNot(['type', 'templateUrl'], apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n\t  templateUrl: apiCheck.shape.ifNot(['type', 'template'], apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n\t  key: apiCheck.oneOfType([apiCheck.string, apiCheck.number]).optional,\n\t  model: modelChecker.optional,\n\t  originalModel: modelChecker.optional,\n\t  className: apiCheck.string.optional,\n\t  id: apiCheck.string.optional,\n\t  name: apiCheck.string.optional,\n\t  expressionProperties: expressionProperties.optional,\n\t  extras: apiCheck.shape({\n\t    validateOnModelChange: apiCheck.bool.optional,\n\t    skipNgModelAttrsManipulator: apiCheck.oneOfType([apiCheck.string, apiCheck.bool]).optional\n\t  }).strict.optional,\n\t  data: apiCheck.object.optional,\n\t  templateOptions: apiCheck.object.optional,\n\t  wrapper: specifyWrapperType.optional,\n\t  modelOptions: apiCheck.shape({\n\t    updateOn: apiCheck.string.optional,\n\t    debounce: apiCheck.oneOfType([apiCheck.objectOf(apiCheck.number), apiCheck.number]).optional,\n\t    allowInvalid: apiCheck.bool.optional,\n\t    getterSetter: apiCheck.bool.optional,\n\t    timezone: apiCheck.string.optional\n\t  }).optional,\n\t  watcher: apiCheck.typeOrArrayOf(apiCheck.shape({\n\t    expression: formlyExpression.optional,\n\t    listener: formlyExpression\n\t  })).optional,\n\t  validators: validatorChecker.optional,\n\t  asyncValidators: validatorChecker.optional,\n\t  parsers: apiCheck.arrayOf(formlyExpression).optional,\n\t  formatters: apiCheck.arrayOf(formlyExpression).optional,\n\t  noFormControl: apiCheck.bool.optional,\n\t  hide: apiCheck.bool.optional,\n\t  hideExpression: formlyExpression.optional,\n\t  ngModelElAttrs: apiCheck.objectOf(apiCheck.string).optional,\n\t  ngModelAttrs: apiCheck.objectOf(apiCheck.shape({\n\t    statement: apiCheck.shape.ifNot(['value', 'attribute', 'bound', 'boolean'], apiCheck.any).optional,\n\t    value: apiCheck.shape.ifNot('statement', apiCheck.any).optional,\n\t    attribute: apiCheck.shape.ifNot('statement', apiCheck.any).optional,\n\t    bound: apiCheck.shape.ifNot('statement', apiCheck.any).optional,\n\t    boolean: apiCheck.shape.ifNot('statement', apiCheck.any).optional\n\t  }).strict).optional,\n\t  elementAttributes: apiCheck.objectOf(apiCheck.string).optional,\n\t  optionsTypes: apiCheck.typeOrArrayOf(apiCheck.string).optional,\n\t  link: apiCheck.func.optional,\n\t  controller: apiCheck.oneOfType([apiCheck.string, apiCheck.func, apiCheck.array]).optional,\n\t  validation: apiCheck.shape({\n\t    show: apiCheck.bool.nullable.optional,\n\t    messages: apiCheck.objectOf(formlyExpression).optional,\n\t    errorExistsAndShouldBeVisible: apiCheck.bool.optional\n\t  }).optional,\n\t  formControl: apiCheck.typeOrArrayOf(apiCheck.object).optional,\n\t  value: apiCheck.func.optional,\n\t  runExpressions: apiCheck.func.optional,\n\t  templateManipulators: templateManipulators.optional,\n\t  resetModel: apiCheck.func.optional,\n\t  updateInitialValue: apiCheck.func.optional,\n\t  initialValue: apiCheck.any.optional,\n\t  defaultValue: apiCheck.any.optional\n\t};\n\t\n\tvar formlyFieldOptions = apiCheck.shape(fieldOptionsApiShape).strict;\n\t\n\tvar formOptionsApi = apiCheck.shape({\n\t  formState: apiCheck.object.optional,\n\t  resetModel: apiCheck.func.optional,\n\t  updateInitialValue: apiCheck.func.optional,\n\t  removeChromeAutoComplete: apiCheck.bool.optional,\n\t  templateManipulators: templateManipulators.optional,\n\t  wrapper: specifyWrapperType.optional,\n\t  fieldTransform: apiCheck.oneOfType([apiCheck.func, apiCheck.array]).optional,\n\t  data: apiCheck.object.optional\n\t}).strict;\n\t\n\tvar fieldGroup = apiCheck.shape({\n\t  $$hashKey: apiCheck.any.optional,\n\t  key: apiCheck.oneOfType([apiCheck.string, apiCheck.number]).optional,\n\t  // danger. Nested field groups wont get api-checked...\n\t  fieldGroup: apiCheck.arrayOf(apiCheck.oneOfType([formlyFieldOptions, apiCheck.object])),\n\t  className: apiCheck.string.optional,\n\t  options: formOptionsApi.optional,\n\t  hide: apiCheck.bool.optional,\n\t  hideExpression: formlyExpression.optional,\n\t  data: apiCheck.object.optional,\n\t  model: modelChecker.optional,\n\t  form: apiCheck.object.optional,\n\t  elementAttributes: apiCheck.objectOf(apiCheck.string).optional\n\t}).strict;\n\t\n\tvar typeOptionsDefaultOptions = _angularFix2['default'].copy(fieldOptionsApiShape);\n\ttypeOptionsDefaultOptions.key = apiCheck.string.optional;\n\t\n\tvar formlyTypeOptions = apiCheck.shape({\n\t  name: apiCheck.string,\n\t  template: apiCheck.shape.ifNot('templateUrl', apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n\t  templateUrl: apiCheck.shape.ifNot('template', apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n\t  controller: apiCheck.oneOfType([apiCheck.func, apiCheck.string, apiCheck.array]).optional,\n\t  link: apiCheck.func.optional,\n\t  defaultOptions: apiCheck.oneOfType([apiCheck.func, apiCheck.shape(typeOptionsDefaultOptions)]).optional,\n\t  'extends': apiCheck.string.optional,\n\t  wrapper: specifyWrapperType.optional,\n\t  data: apiCheck.object.optional,\n\t  apiCheck: apiCheckProperty.optional,\n\t  apiCheckInstance: apiCheckInstanceProperty.optional,\n\t  apiCheckFunction: apiCheckFunctionProperty.optional,\n\t  apiCheckOptions: apiCheck.object.optional,\n\t  overwriteOk: apiCheck.bool.optional\n\t}).strict;\n\t\n\t_angularFix2['default'].extend(apiCheck, {\n\t  formlyTypeOptions: formlyTypeOptions, formlyFieldOptions: formlyFieldOptions, formlyExpression: formlyExpression, formlyWrapperType: formlyWrapperType, fieldGroup: fieldGroup, formOptionsApi: formOptionsApi\n\t});\n\t\n\texports['default'] = apiCheck;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }\n\t\n\tvar _angularFix = __webpack_require__(1);\n\t\n\tvar _angularFix2 = _interopRequireDefault(_angularFix);\n\t\n\tvar _otherUtils = __webpack_require__(2);\n\t\n\tvar _otherUtils2 = _interopRequireDefault(_otherUtils);\n\t\n\texports['default'] = formlyConfig;\n\t\n\t// @ngInject\n\tfunction formlyConfig(formlyUsabilityProvider, formlyErrorAndWarningsUrlPrefix, formlyApiCheck) {\n\t  var _this2 = this;\n\t\n\t  var typeMap = {};\n\t  var templateWrappersMap = {};\n\t  var defaultWrapperName = 'default';\n\t  var _this = this;\n\t  var getError = formlyUsabilityProvider.getFormlyError;\n\t\n\t  _angularFix2['default'].extend(this, {\n\t    setType: setType,\n\t    getType: getType,\n\t    getTypeHeritage: getTypeHeritage,\n\t    setWrapper: setWrapper,\n\t    getWrapper: getWrapper,\n\t    getWrapperByType: getWrapperByType,\n\t    removeWrapperByName: removeWrapperByName,\n\t    removeWrappersForType: removeWrappersForType,\n\t    disableWarnings: false,\n\t    extras: {\n\t      disableNgModelAttrsManipulator: false,\n\t      ngModelAttrsManipulatorPreferUnbound: false,\n\t      removeChromeAutoComplete: false,\n\t      defaultHideDirective: 'ng-if',\n\t      getFieldId: null,\n\t      explicitAsync: false\n\t    },\n\t    templateManipulators: {\n\t      preWrapper: [],\n\t      postWrapper: []\n\t    },\n\t    $get: function $get() {\n\t      return _this2;\n\t    }\n\t  });\n\t\n\t  function setType(options) {\n\t    if (_angularFix2['default'].isArray(options)) {\n\t      var _ret = (function () {\n\t        var allTypes = [];\n\t        _angularFix2['default'].forEach(options, function (item) {\n\t          allTypes.push(setType(item));\n\t        });\n\t        return {\n\t          v: allTypes\n\t        };\n\t      })();\n\t\n\t      if (typeof _ret === 'object') return _ret.v;\n\t    } else if (_angularFix2['default'].isObject(options)) {\n\t      checkType(options);\n\t      if (options['extends']) {\n\t        extendTypeOptions(options);\n\t      }\n\t      typeMap[options.name] = options;\n\t      return typeMap[options.name];\n\t    } else {\n\t      throw getError('You must provide an object or array for setType. You provided: ' + JSON.stringify(arguments));\n\t    }\n\t  }\n\t\n\t  function checkType(options) {\n\t    formlyApiCheck['throw'](formlyApiCheck.formlyTypeOptions, options, {\n\t      prefix: 'formlyConfig.setType',\n\t      url: 'settype-validation-failed'\n\t    });\n\t    if (!options.overwriteOk) {\n\t      checkOverwrite(options.name, typeMap, options, 'types');\n\t    } else {\n\t      options.overwriteOk = undefined;\n\t    }\n\t  }\n\t\n\t  function extendTypeOptions(options) {\n\t    var extendsType = getType(options['extends'], true, options);\n\t    extendTypeControllerFunction(options, extendsType);\n\t    extendTypeLinkFunction(options, extendsType);\n\t    extendTypeDefaultOptions(options, extendsType);\n\t    _otherUtils2['default'].reverseDeepMerge(options, extendsType);\n\t    extendTemplate(options, extendsType);\n\t  }\n\t\n\t  function extendTemplate(options, extendsType) {\n\t    if (options.template && extendsType.templateUrl) {\n\t      delete options.templateUrl;\n\t    } else if (options.templateUrl && extendsType.template) {\n\t      delete options.template;\n\t    }\n\t  }\n\t\n\t  function extendTypeControllerFunction(options, extendsType) {\n\t    var extendsCtrl = extendsType.controller;\n\t    if (!_angularFix2['default'].isDefined(extendsCtrl)) {\n\t      return;\n\t    }\n\t    var optionsCtrl = options.controller;\n\t    if (_angularFix2['default'].isDefined(optionsCtrl)) {\n\t      options.controller = function ($scope, $controller) {\n\t        $controller(extendsCtrl, { $scope: $scope });\n\t        $controller(optionsCtrl, { $scope: $scope });\n\t      };\n\t      options.controller.$inject = ['$scope', '$controller'];\n\t    } else {\n\t      options.controller = extendsCtrl;\n\t    }\n\t  }\n\t\n\t  function extendTypeLinkFunction(options, extendsType) {\n\t    var extendsFn = extendsType.link;\n\t    if (!_angularFix2['default'].isDefined(extendsFn)) {\n\t      return;\n\t    }\n\t    var optionsFn = options.link;\n\t    if (_angularFix2['default'].isDefined(optionsFn)) {\n\t      options.link = function () {\n\t        extendsFn.apply(undefined, arguments);\n\t        optionsFn.apply(undefined, arguments);\n\t      };\n\t    } else {\n\t      options.link = extendsFn;\n\t    }\n\t  }\n\t\n\t  function extendTypeDefaultOptions(options, extendsType) {\n\t    var extendsDO = extendsType.defaultOptions;\n\t    if (!_angularFix2['default'].isDefined(extendsDO)) {\n\t      return;\n\t    }\n\t    var optionsDO = options.defaultOptions;\n\t    var optionsDOIsFn = _angularFix2['default'].isFunction(optionsDO);\n\t    var extendsDOIsFn = _angularFix2['default'].isFunction(extendsDO);\n\t    if (extendsDOIsFn) {\n\t      options.defaultOptions = function defaultOptions(opts, scope) {\n\t        var extendsDefaultOptions = extendsDO(opts, scope);\n\t        var mergedDefaultOptions = {};\n\t        _otherUtils2['default'].reverseDeepMerge(mergedDefaultOptions, opts, extendsDefaultOptions);\n\t        var extenderOptionsDefaultOptions = optionsDO;\n\t        if (optionsDOIsFn) {\n\t          extenderOptionsDefaultOptions = extenderOptionsDefaultOptions(mergedDefaultOptions, scope);\n\t        }\n\t        _otherUtils2['default'].reverseDeepMerge(extendsDefaultOptions, extenderOptionsDefaultOptions);\n\t        return extendsDefaultOptions;\n\t      };\n\t    } else if (optionsDOIsFn) {\n\t      options.defaultOptions = function defaultOptions(opts, scope) {\n\t        var newDefaultOptions = {};\n\t        _otherUtils2['default'].reverseDeepMerge(newDefaultOptions, opts, extendsDO);\n\t        return optionsDO(newDefaultOptions, scope);\n\t      };\n\t    }\n\t  }\n\t\n\t  function getType(name, throwError, errorContext) {\n\t    if (!name) {\n\t      return undefined;\n\t    }\n\t    var type = typeMap[name];\n\t    if (!type && throwError === true) {\n\t      throw getError('There is no type by the name of \"' + name + '\": ' + JSON.stringify(errorContext));\n\t    } else {\n\t      return type;\n\t    }\n\t  }\n\t\n\t  function getTypeHeritage(parent) {\n\t    var heritage = [];\n\t    var type = parent;\n\t    if (_angularFix2['default'].isString(type)) {\n\t      type = getType(parent);\n\t    }\n\t    parent = type['extends'];\n\t    while (parent) {\n\t      type = getType(parent);\n\t      heritage.push(type);\n\t      parent = type['extends'];\n\t    }\n\t    return heritage;\n\t  }\n\t\n\t  function setWrapper(_x, _x2) {\n\t    var _again = true;\n\t\n\t    _function: while (_again) {\n\t      var options = _x,\n\t          name = _x2;\n\t      _again = false;\n\t\n\t      if (_angularFix2['default'].isArray(options)) {\n\t        return options.map(function (wrapperOptions) {\n\t          return setWrapper(wrapperOptions);\n\t        });\n\t      } else if (_angularFix2['default'].isObject(options)) {\n\t        options.types = getOptionsTypes(options);\n\t        options.name = getOptionsName(options, name);\n\t        checkWrapperAPI(options);\n\t        templateWrappersMap[options.name] = options;\n\t        return options;\n\t      } else if (_angularFix2['default'].isString(options)) {\n\t        _x = {\n\t          template: options,\n\t          name: name\n\t        };\n\t        _x2 = undefined;\n\t        _again = true;\n\t        continue _function;\n\t      }\n\t    }\n\t  }\n\t\n\t  function getOptionsTypes(options) {\n\t    if (_angularFix2['default'].isString(options.types)) {\n\t      return [options.types];\n\t    }\n\t    if (!_angularFix2['default'].isDefined(options.types)) {\n\t      return [];\n\t    } else {\n\t      return options.types;\n\t    }\n\t  }\n\t\n\t  function getOptionsName(options, name) {\n\t    return options.name || name || options.types.join(' ') || defaultWrapperName;\n\t  }\n\t\n\t  function checkWrapperAPI(options) {\n\t    formlyUsabilityProvider.checkWrapper(options);\n\t    if (options.template) {\n\t      formlyUsabilityProvider.checkWrapperTemplate(options.template, options);\n\t    }\n\t    if (!options.overwriteOk) {\n\t      checkOverwrite(options.name, templateWrappersMap, options, 'templateWrappers');\n\t    } else {\n\t      delete options.overwriteOk;\n\t    }\n\t    checkWrapperTypes(options);\n\t  }\n\t\n\t  function checkWrapperTypes(options) {\n\t    var shouldThrow = !_angularFix2['default'].isArray(options.types) || !options.types.every(_angularFix2['default'].isString);\n\t    if (shouldThrow) {\n\t      throw getError('Attempted to create a template wrapper with types that is not a string or an array of strings');\n\t    }\n\t  }\n\t\n\t  function checkOverwrite(property, object, newValue, objectName) {\n\t    if (object.hasOwnProperty(property)) {\n\t      warn('overwriting-types-or-wrappers', ['Attempting to overwrite ' + property + ' on ' + objectName + ' which is currently', JSON.stringify(object[property]) + ' with ' + JSON.stringify(newValue), 'To supress this warning, specify the property \"overwriteOk: true\"'].join(' '));\n\t    }\n\t  }\n\t\n\t  function getWrapper(name) {\n\t    return templateWrappersMap[name || defaultWrapperName];\n\t  }\n\t\n\t  function getWrapperByType(type) {\n\t    /* eslint prefer-const:0 */\n\t    var wrappers = [];\n\t    for (var _name in templateWrappersMap) {\n\t      if (templateWrappersMap.hasOwnProperty(_name)) {\n\t        if (templateWrappersMap[_name].types && templateWrappersMap[_name].types.indexOf(type) !== -1) {\n\t          wrappers.push(templateWrappersMap[_name]);\n\t        }\n\t      }\n\t    }\n\t    return wrappers;\n\t  }\n\t\n\t  function removeWrapperByName(name) {\n\t    var wrapper = templateWrappersMap[name];\n\t    delete templateWrappersMap[name];\n\t    return wrapper;\n\t  }\n\t\n\t  function removeWrappersForType(type) {\n\t    var wrappers = getWrapperByType(type);\n\t    if (!wrappers) {\n\t      return undefined;\n\t    }\n\t    if (!_angularFix2['default'].isArray(wrappers)) {\n\t      return removeWrapperByName(wrappers.name);\n\t    } else {\n\t      wrappers.forEach(function (wrapper) {\n\t        return removeWrapperByName(wrapper.name);\n\t      });\n\t      return wrappers;\n\t    }\n\t  }\n\t\n\t  function warn() {\n\t    if (!_this.disableWarnings && console.warn) {\n\t      /* eslint no-console:0 */\n\t      var args = Array.prototype.slice.call(arguments);\n\t      var warnInfoSlug = args.shift();\n\t      args.unshift('Formly Warning:');\n\t      args.push('' + formlyErrorAndWarningsUrlPrefix + warnInfoSlug);\n\t      console.warn.apply(console, _toConsumableArray(args));\n\t    }\n\t  }\n\t}\n\tformlyConfig.$inject = [\"formlyUsabilityProvider\", \"formlyErrorAndWarningsUrlPrefix\", \"formlyApiCheck\"];\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _angularFix = __webpack_require__(1);\n\t\n\tvar _angularFix2 = _interopRequireDefault(_angularFix);\n\t\n\texports['default'] = formlyUsability;\n\t\n\t// @ngInject\n\tfunction formlyUsability(formlyApiCheck, formlyErrorAndWarningsUrlPrefix) {\n\t  var _this = this;\n\t\n\t  _angularFix2['default'].extend(this, {\n\t    getFormlyError: getFormlyError,\n\t    getFieldError: getFieldError,\n\t    checkWrapper: checkWrapper,\n\t    checkWrapperTemplate: checkWrapperTemplate,\n\t    getErrorMessage: getErrorMessage,\n\t    $get: function $get() {\n\t      return _this;\n\t    }\n\t  });\n\t\n\t  function getFieldError(errorInfoSlug, message, field) {\n\t    if (arguments.length < 3) {\n\t      field = message;\n\t      message = errorInfoSlug;\n\t      errorInfoSlug = null;\n\t    }\n\t    return new Error(getErrorMessage(errorInfoSlug, message) + (' Field definition: ' + _angularFix2['default'].toJson(field)));\n\t  }\n\t\n\t  function getFormlyError(errorInfoSlug, message) {\n\t    if (!message) {\n\t      message = errorInfoSlug;\n\t      errorInfoSlug = null;\n\t    }\n\t    return new Error(getErrorMessage(errorInfoSlug, message));\n\t  }\n\t\n\t  function getErrorMessage(errorInfoSlug, message) {\n\t    var url = '';\n\t    if (errorInfoSlug !== null) {\n\t      url = '' + formlyErrorAndWarningsUrlPrefix + errorInfoSlug;\n\t    }\n\t    return 'Formly Error: ' + message + '. ' + url;\n\t  }\n\t\n\t  function checkWrapper(wrapper) {\n\t    formlyApiCheck['throw'](formlyApiCheck.formlyWrapperType, wrapper, {\n\t      prefix: 'formlyConfig.setWrapper',\n\t      urlSuffix: 'setwrapper-validation-failed'\n\t    });\n\t  }\n\t\n\t  function checkWrapperTemplate(template, additionalInfo) {\n\t    var formlyTransclude = '<formly-transclude></formly-transclude>';\n\t    if (template.indexOf(formlyTransclude) === -1) {\n\t      throw getFormlyError('Template wrapper templates must use \"' + formlyTransclude + '\" somewhere in them. ' + ('This one does not have \"<formly-transclude></formly-transclude>\" in it: ' + template) + '\\n' + ('Additional information: ' + JSON.stringify(additionalInfo)));\n\t    }\n\t  }\n\t}\n\tformlyUsability.$inject = [\"formlyApiCheck\", \"formlyErrorAndWarningsUrlPrefix\"];\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports[\"default\"] = formlyValidationMessages;\n\t\n\t// @ngInject\n\tfunction formlyValidationMessages() {\n\t\n\t  var validationMessages = {\n\t    addTemplateOptionValueMessage: addTemplateOptionValueMessage,\n\t    addStringMessage: addStringMessage,\n\t    messages: {}\n\t  };\n\t\n\t  return validationMessages;\n\t\n\t  function addTemplateOptionValueMessage(name, prop, prefix, suffix, alternate) {\n\t    validationMessages.messages[name] = templateOptionValue(prop, prefix, suffix, alternate);\n\t  }\n\t\n\t  function addStringMessage(name, string) {\n\t    validationMessages.messages[name] = function () {\n\t      return string;\n\t    };\n\t  }\n\t\n\t  function templateOptionValue(prop, prefix, suffix, alternate) {\n\t    return function getValidationMessage(viewValue, modelValue, scope) {\n\t      if (scope.options.templateOptions[prop]) {\n\t        return prefix + \" \" + scope.options.templateOptions[prop] + \" \" + suffix;\n\t      } else {\n\t        return alternate;\n\t      }\n\t    };\n\t  }\n\t}\n\tmodule.exports = exports[\"default\"];\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _angularFix = __webpack_require__(1);\n\t\n\tvar _angularFix2 = _interopRequireDefault(_angularFix);\n\t\n\texports['default'] = addCustomTags;\n\t\n\t// @ngInject\n\tfunction addCustomTags($document) {\n\t  if ($document && $document.get) {\n\t    (function () {\n\t      // IE8 check ->\n\t      // http://stackoverflow.com/questions/10964966/detect-ie-version-prior-to-v9-in-javascript/10965203#10965203\n\t      var document = $document.get(0);\n\t      var div = document.createElement('div');\n\t      div.innerHTML = '<!--[if lt IE 9]><i></i><![endif]-->';\n\t      var isIeLessThan9 = div.getElementsByTagName('i').length === 1;\n\t\n\t      if (isIeLessThan9) {\n\t        // add the custom elements that we need for formly\n\t        var customElements = ['formly-field', 'formly-form', 'formly-custom-validation', 'formly-focus', 'formly-transpose'];\n\t        _angularFix2['default'].forEach(customElements, function (el) {\n\t          document.createElement(el);\n\t        });\n\t      }\n\t    })();\n\t  }\n\t}\n\taddCustomTags.$inject = [\"$document\"];\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _angularFix = __webpack_require__(1);\n\t\n\tvar _angularFix2 = _interopRequireDefault(_angularFix);\n\t\n\tvar _otherUtils = __webpack_require__(2);\n\t\n\texports['default'] = addFormlyNgModelAttrsManipulator;\n\t\n\t// @ngInject\n\tfunction addFormlyNgModelAttrsManipulator(formlyConfig, $interpolate) {\n\t  if (formlyConfig.extras.disableNgModelAttrsManipulator) {\n\t    return;\n\t  }\n\t  formlyConfig.templateManipulators.preWrapper.push(ngModelAttrsManipulator);\n\t\n\t  function ngModelAttrsManipulator(template, options, scope) {\n\t    var node = document.createElement('div');\n\t    var skip = options.extras && options.extras.skipNgModelAttrsManipulator;\n\t    if (skip === true) {\n\t      return template;\n\t    }\n\t    node.innerHTML = template;\n\t\n\t    var modelNodes = getNgModelNodes(node, skip);\n\t    if (!modelNodes || !modelNodes.length) {\n\t      return template;\n\t    }\n\t\n\t    addIfNotPresent(modelNodes, 'id', scope.id);\n\t    addIfNotPresent(modelNodes, 'name', scope.name || scope.id);\n\t\n\t    addValidation();\n\t    alterNgModelAttr();\n\t    addModelOptions();\n\t    addTemplateOptionsAttrs();\n\t    addNgModelElAttrs();\n\t\n\t    return node.innerHTML;\n\t\n\t    function addValidation() {\n\t      if (_angularFix2['default'].isDefined(options.validators) || _angularFix2['default'].isDefined(options.validation.messages)) {\n\t        addIfNotPresent(modelNodes, 'formly-custom-validation', '');\n\t      }\n\t    }\n\t\n\t    function alterNgModelAttr() {\n\t      if (isPropertyAccessor(options.key)) {\n\t        addRegardlessOfPresence(modelNodes, 'ng-model', 'model.' + options.key);\n\t      }\n\t    }\n\t\n\t    function addModelOptions() {\n\t      if (_angularFix2['default'].isDefined(options.modelOptions)) {\n\t        addIfNotPresent(modelNodes, 'ng-model-options', 'options.modelOptions');\n\t        if (options.modelOptions.getterSetter) {\n\t          addRegardlessOfPresence(modelNodes, 'ng-model', 'options.value');\n\t        }\n\t      }\n\t    }\n\t\n\t    function addTemplateOptionsAttrs() {\n\t      if (!options.templateOptions && !options.expressionProperties) {\n\t        // no need to run these if there are no templateOptions or expressionProperties\n\t        return;\n\t      }\n\t      var to = options.templateOptions || {};\n\t      var ep = options.expressionProperties || {};\n\t\n\t      var ngModelAttributes = getBuiltInAttributes();\n\t\n\t      // extend with the user's specifications winning\n\t      _angularFix2['default'].extend(ngModelAttributes, options.ngModelAttrs);\n\t\n\t      // Feel free to make this more simple :-)\n\t      _angularFix2['default'].forEach(ngModelAttributes, function (val, name) {\n\t        /* eslint complexity:[2, 14] */\n\t        var attrVal = undefined,\n\t            attrName = undefined;\n\t        var ref = 'options.templateOptions[\\'' + name + '\\']';\n\t        var toVal = to[name];\n\t        var epVal = getEpValue(ep, name);\n\t\n\t        var inTo = _angularFix2['default'].isDefined(toVal);\n\t        var inEp = _angularFix2['default'].isDefined(epVal);\n\t        if (val.value) {\n\t          // I realize this looks backwards, but it's right, trust me...\n\t          attrName = val.value;\n\t          attrVal = name;\n\t        } else if (val.statement && inTo) {\n\t          attrName = val.statement;\n\t          if (_angularFix2['default'].isString(to[name])) {\n\t            attrVal = '$eval(' + ref + ')';\n\t          } else if (_angularFix2['default'].isFunction(to[name])) {\n\t            attrVal = ref + '(model[options.key], options, this, $event)';\n\t          } else {\n\t            throw new Error('options.templateOptions.' + name + ' must be a string or function: ' + JSON.stringify(options));\n\t          }\n\t        } else if (val.bound && inEp) {\n\t          attrName = val.bound;\n\t          attrVal = ref;\n\t        } else if ((val.attribute || val.boolean) && inEp) {\n\t          attrName = val.attribute || val.boolean;\n\t          attrVal = '' + $interpolate.startSymbol() + ref + $interpolate.endSymbol();\n\t        } else if (val.attribute && inTo) {\n\t          attrName = val.attribute;\n\t          attrVal = toVal;\n\t        } else if (val.boolean) {\n\t          if (inTo && !inEp && toVal) {\n\t            attrName = val.boolean;\n\t            attrVal = true;\n\t          } else {\n\t            /* eslint no-empty:0 */\n\t            // empty to illustrate that a boolean will not be added via val.bound\n\t            // if you want it added via val.bound, then put it in expressionProperties\n\t          }\n\t        } else if (val.bound && inTo) {\n\t            attrName = val.bound;\n\t            attrVal = ref;\n\t          }\n\t\n\t        if (_angularFix2['default'].isDefined(attrName) && _angularFix2['default'].isDefined(attrVal)) {\n\t          addIfNotPresent(modelNodes, attrName, attrVal);\n\t        }\n\t      });\n\t    }\n\t\n\t    function addNgModelElAttrs() {\n\t      _angularFix2['default'].forEach(options.ngModelElAttrs, function (val, name) {\n\t        addRegardlessOfPresence(modelNodes, name, val);\n\t      });\n\t    }\n\t  }\n\t\n\t  // Utility functions\n\t  function getNgModelNodes(node, skip) {\n\t    var selectorNot = _angularFix2['default'].isString(skip) ? ':not(' + skip + ')' : '';\n\t    var skipNot = ':not([formly-skip-ng-model-attrs-manipulator])';\n\t    var query = '[ng-model]' + selectorNot + skipNot + ', [data-ng-model]' + selectorNot + skipNot;\n\t    try {\n\t      return node.querySelectorAll(query);\n\t    } catch (e) {\n\t      //this code is needed for IE8, as it does not support the CSS3 ':not' selector\n\t      //it should be removed when IE8 support is dropped\n\t      return getNgModelNodesFallback(node, skip);\n\t    }\n\t  }\n\t\n\t  function getNgModelNodesFallback(node, skip) {\n\t    var allNgModelNodes = node.querySelectorAll('[ng-model], [data-ng-model]');\n\t    var matchingNgModelNodes = [];\n\t\n\t    //make sure this array is compatible with NodeList type by adding an 'item' function\n\t    matchingNgModelNodes.item = function (i) {\n\t      return this[i];\n\t    };\n\t\n\t    for (var i = 0; i < allNgModelNodes.length; i++) {\n\t      var ngModelNode = allNgModelNodes[i];\n\t      if (!ngModelNode.hasAttribute('formly-skip-ng-model-attrs-manipulator') && !(_angularFix2['default'].isString(skip) && nodeMatches(ngModelNode, skip))) {\n\t        matchingNgModelNodes.push(ngModelNode);\n\t      }\n\t    }\n\t\n\t    return matchingNgModelNodes;\n\t  }\n\t\n\t  function nodeMatches(node, selector) {\n\t    var div = document.createElement('div');\n\t    div.innerHTML = node.outerHTML;\n\t    return div.querySelector(selector);\n\t  }\n\t\n\t  function getBuiltInAttributes() {\n\t    var ngModelAttributes = {\n\t      focus: {\n\t        attribute: 'formly-focus'\n\t      }\n\t    };\n\t    var boundOnly = [];\n\t    var bothBooleanAndBound = ['required', 'disabled'];\n\t    var bothAttributeAndBound = ['pattern', 'minlength'];\n\t    var statementOnly = ['change', 'keydown', 'keyup', 'keypress', 'click', 'focus', 'blur'];\n\t    var attributeOnly = ['placeholder', 'min', 'max', 'tabindex', 'type'];\n\t    if (formlyConfig.extras.ngModelAttrsManipulatorPreferUnbound) {\n\t      bothAttributeAndBound.push('maxlength');\n\t    } else {\n\t      boundOnly.push('maxlength');\n\t    }\n\t\n\t    _angularFix2['default'].forEach(boundOnly, function (item) {\n\t      ngModelAttributes[item] = { bound: 'ng-' + item };\n\t    });\n\t\n\t    _angularFix2['default'].forEach(bothBooleanAndBound, function (item) {\n\t      ngModelAttributes[item] = { boolean: item, bound: 'ng-' + item };\n\t    });\n\t\n\t    _angularFix2['default'].forEach(bothAttributeAndBound, function (item) {\n\t      ngModelAttributes[item] = { attribute: item, bound: 'ng-' + item };\n\t    });\n\t\n\t    _angularFix2['default'].forEach(statementOnly, function (item) {\n\t      var propName = 'on' + item.substr(0, 1).toUpperCase() + item.substr(1);\n\t      ngModelAttributes[propName] = { statement: 'ng-' + item };\n\t    });\n\t\n\t    _angularFix2['default'].forEach(attributeOnly, function (item) {\n\t      ngModelAttributes[item] = { attribute: item };\n\t    });\n\t    return ngModelAttributes;\n\t  }\n\t\n\t  function getEpValue(ep, name) {\n\t    return ep['templateOptions.' + name] || ep['templateOptions[\\'' + name + '\\']'] || ep['templateOptions[\"' + name + '\"]'];\n\t  }\n\t\n\t  function addIfNotPresent(nodes, attr, val) {\n\t    _angularFix2['default'].forEach(nodes, function (node) {\n\t      if (!node.getAttribute(attr)) {\n\t        node.setAttribute(attr, val);\n\t      }\n\t    });\n\t  }\n\t\n\t  function addRegardlessOfPresence(nodes, attr, val) {\n\t    _angularFix2['default'].forEach(nodes, function (node) {\n\t      node.setAttribute(attr, val);\n\t    });\n\t  }\n\t\n\t  function isPropertyAccessor(key) {\n\t    return (0, _otherUtils.contains)(key, '.') || (0, _otherUtils.contains)(key, '[') && (0, _otherUtils.contains)(key, ']');\n\t  }\n\t}\n\taddFormlyNgModelAttrsManipulator.$inject = [\"formlyConfig\", \"$interpolate\"];\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _otherUtils = __webpack_require__(2);\n\t\n\tvar _otherUtils2 = _interopRequireDefault(_otherUtils);\n\t\n\texports['default'] = formlyUtil;\n\t\n\t// @ngInject\n\tfunction formlyUtil() {\n\t  return _otherUtils2['default'];\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t  value: true\n\t});\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }\n\t\n\texports['default'] = formlyWarn;\n\t\n\t// @ngInject\n\tfunction formlyWarn(formlyConfig, formlyErrorAndWarningsUrlPrefix, $log) {\n\t  return function warn() {\n\t    if (!formlyConfig.disableWarnings) {\n\t      var args = Array.prototype.slice.call(arguments);\n\t      var warnInfoSlug = args.shift();\n\t      args.unshift('Formly Warning:');\n\t      args.push('' + formlyErrorAndWarningsUrlPrefix + warnInfoSlug);\n\t      $log.warn.apply($log, _toConsumableArray(args));\n\t    }\n\t  };\n\t}\n\tformlyWarn.$inject = [\"formlyConfig\", \"formlyErrorAndWarningsUrlPrefix\", \"$log\"];\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_18__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** dist/formly.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 93515443539cea44613d\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _indexCommon = require('./index.common');\n\nvar _indexCommon2 = _interopRequireDefault(_indexCommon);\n\nexports['default'] = _indexCommon2['default'];\nmodule.exports = exports['default'];\n\n\n/** WEBPACK FOOTER **\n ** ./index.js\n **/","import index from './index.common';\nexport default index;\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./index.js\n **/","// some versions of angular don't export the angular module properly,\n// so we get it from window in this case.\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\nvar angular = require('angular');\n\n/* istanbul ignore next */\nif (!angular.version) {\n  angular = window.angular;\n}\nexports['default'] = angular;\nmodule.exports = exports['default'];\n\n\n/** WEBPACK FOOTER **\n ** ./angular-fix/index.js\n **/","// some versions of angular don't export the angular module properly,\n// so we get it from window in this case.\nlet angular = require('angular');\n\n/* istanbul ignore next */\nif (!angular.version) {\n  angular = window.angular;\n}\nexport default angular;\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./angular-fix/index.js\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _angularFix = require('angular-fix');\n\nvar _angularFix2 = _interopRequireDefault(_angularFix);\n\nexports['default'] = {\n  formlyEval: formlyEval, getFieldId: getFieldId, reverseDeepMerge: reverseDeepMerge, findByNodeName: findByNodeName, arrayify: arrayify, extendFunction: extendFunction, extendArray: extendArray, startsWith: startsWith, contains: contains\n};\n\nfunction formlyEval(scope, expression, $modelValue, $viewValue, extraLocals) {\n  if (_angularFix2['default'].isFunction(expression)) {\n    return expression($viewValue, $modelValue, scope, extraLocals);\n  } else {\n    return scope.$eval(expression, _angularFix2['default'].extend({ $viewValue: $viewValue, $modelValue: $modelValue }, extraLocals));\n  }\n}\n\nfunction getFieldId(formId, options, index) {\n  if (options.id) {\n    return options.id;\n  }\n  var type = options.type;\n  if (!type && options.template) {\n    type = 'template';\n  } else if (!type && options.templateUrl) {\n    type = 'templateUrl';\n  }\n\n  return [formId, type, options.key, index].join('_');\n}\n\nfunction reverseDeepMerge(dest) {\n  _angularFix2['default'].forEach(arguments, function (src, index) {\n    if (!index) {\n      return;\n    }\n    _angularFix2['default'].forEach(src, function (val, prop) {\n      if (!_angularFix2['default'].isDefined(dest[prop])) {\n        dest[prop] = _angularFix2['default'].copy(val);\n      } else if (objAndSameType(dest[prop], val)) {\n        reverseDeepMerge(dest[prop], val);\n      }\n    });\n  });\n  return dest;\n}\n\nfunction objAndSameType(obj1, obj2) {\n  return _angularFix2['default'].isObject(obj1) && _angularFix2['default'].isObject(obj2) && Object.getPrototypeOf(obj1) === Object.getPrototypeOf(obj2);\n}\n\n// recurse down a node tree to find a node with matching nodeName, for custom tags jQuery.find doesn't work in IE8\nfunction findByNodeName(el, nodeName) {\n  if (!el.prop) {\n    // not a jQuery or jqLite object -> wrap it\n    el = _angularFix2['default'].element(el);\n  }\n\n  if (el.prop('nodeName') === nodeName.toUpperCase()) {\n    return el;\n  }\n\n  var c = el.children();\n  for (var i = 0; c && i < c.length; i++) {\n    var node = findByNodeName(c[i], nodeName);\n    if (node) {\n      return node;\n    }\n  }\n}\n\nfunction arrayify(obj) {\n  if (obj && !_angularFix2['default'].isArray(obj)) {\n    obj = [obj];\n  } else if (!obj) {\n    obj = [];\n  }\n  return obj;\n}\n\nfunction extendFunction() {\n  for (var _len = arguments.length, fns = Array(_len), _key = 0; _key < _len; _key++) {\n    fns[_key] = arguments[_key];\n  }\n\n  return function extendedFunction() {\n    var args = arguments;\n    fns.forEach(function (fn) {\n      return fn.apply(null, args);\n    });\n  };\n}\n\nfunction extendArray(primary, secondary, property) {\n  if (property) {\n    primary = primary[property];\n    secondary = secondary[property];\n  }\n  if (secondary && primary) {\n    _angularFix2['default'].forEach(secondary, function (item) {\n      if (primary.indexOf(item) === -1) {\n        primary.push(item);\n      }\n    });\n    return primary;\n  } else if (secondary) {\n    return secondary;\n  } else {\n    return primary;\n  }\n}\n\nfunction startsWith(str, search) {\n  if (_angularFix2['default'].isString(str) && _angularFix2['default'].isString(search)) {\n    return str.length >= search.length && str.substring(0, search.length) === search;\n  } else {\n    return false;\n  }\n}\n\nfunction contains(str, search) {\n  if (_angularFix2['default'].isString(str) && _angularFix2['default'].isString(search)) {\n    return str.length >= search.length && str.indexOf(search) !== -1;\n  } else {\n    return false;\n  }\n}\nmodule.exports = exports['default'];\n\n\n/** WEBPACK FOOTER **\n ** ./other/utils.js\n **/","import angular from 'angular-fix';\n\nexport default {\n  formlyEval, getFieldId, reverseDeepMerge, findByNodeName, arrayify, extendFunction, extendArray, startsWith, contains\n};\n\nfunction formlyEval(scope, expression, $modelValue, $viewValue, extraLocals) {\n  if (angular.isFunction(expression)) {\n    return expression($viewValue, $modelValue, scope, extraLocals);\n  } else {\n    return scope.$eval(expression, angular.extend({$viewValue, $modelValue}, extraLocals));\n  }\n}\n\nfunction getFieldId(formId, options, index) {\n  if (options.id) {\n    return options.id;\n  }\n  let type = options.type;\n  if (!type && options.template) {\n    type = 'template';\n  } else if (!type && options.templateUrl) {\n    type = 'templateUrl';\n  }\n\n  return [formId, type, options.key, index].join('_');\n}\n\n\nfunction reverseDeepMerge(dest) {\n  angular.forEach(arguments, (src, index) => {\n    if (!index) {\n      return;\n    }\n    angular.forEach(src, (val, prop) => {\n      if (!angular.isDefined(dest[prop])) {\n        dest[prop] = angular.copy(val);\n      } else if (objAndSameType(dest[prop], val)) {\n        reverseDeepMerge(dest[prop], val);\n      }\n    });\n  });\n  return dest;\n}\n\nfunction objAndSameType(obj1, obj2) {\n  return angular.isObject(obj1) && angular.isObject(obj2) &&\n    Object.getPrototypeOf(obj1) === Object.getPrototypeOf(obj2);\n}\n\n// recurse down a node tree to find a node with matching nodeName, for custom tags jQuery.find doesn't work in IE8\nfunction findByNodeName(el, nodeName) {\n  if (!el.prop) { // not a jQuery or jqLite object -> wrap it\n    el = angular.element(el);\n  }\n\n  if (el.prop('nodeName') === nodeName.toUpperCase()) {\n    return el;\n  }\n\n  const c = el.children();\n  for (let i = 0; c && i < c.length; i++) {\n    const node = findByNodeName(c[i], nodeName);\n    if (node) {\n      return node;\n    }\n  }\n}\n\n\nfunction arrayify(obj) {\n  if (obj && !angular.isArray(obj)) {\n    obj = [obj];\n  } else if (!obj) {\n    obj = [];\n  }\n  return obj;\n}\n\n\nfunction extendFunction(...fns) {\n  return function extendedFunction() {\n    const args = arguments;\n    fns.forEach(fn => fn.apply(null, args));\n  };\n}\n\nfunction extendArray(primary, secondary, property) {\n  if (property) {\n    primary = primary[property];\n    secondary = secondary[property];\n  }\n  if (secondary && primary) {\n    angular.forEach(secondary, function(item) {\n      if (primary.indexOf(item) === -1) {\n        primary.push(item);\n      }\n    });\n    return primary;\n  } else if (secondary) {\n    return secondary;\n  } else {\n    return primary;\n  }\n}\n\nfunction startsWith(str, search) {\n  if (angular.isString(str) && angular.isString(search)) {\n    return str.length >= search.length && str.substring(0, search.length) === search;\n  } else {\n    return false;\n  }\n}\n\nfunction contains(str, search) {\n  if (angular.isString(str) && angular.isString(search)) {\n    return str.length >= search.length && str.indexOf(search) !== -1;\n  } else {\n    return false;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./other/utils.js\n **/","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = \"https://github.com/formly-js/angular-formly/blob/\" + VERSION + \"/other/ERRORS_AND_WARNINGS.md#\";\nmodule.exports = exports[\"default\"];\n\n\n/** WEBPACK FOOTER **\n ** ./other/docsBaseUrl.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_4__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"root\":\"apiCheck\",\"amd\":\"api-check\",\"commonjs2\":\"api-check\",\"commonjs\":\"api-check\"}\n ** module id = 4\n ** module chunks = 0\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _angularFix = require('angular-fix');\n\nvar _angularFix2 = _interopRequireDefault(_angularFix);\n\nexports['default'] = formlyCustomValidation;\n\n// @ngInject\nfunction formlyCustomValidation(formlyUtil) {\n  return {\n    restrict: 'A',\n    require: 'ngModel',\n    link: function formlyCustomValidationLink(scope, el, attrs, ctrl) {\n      var opts = scope.options;\n      opts.validation.messages = opts.validation.messages || {};\n      _angularFix2['default'].forEach(opts.validation.messages, function (message, key) {\n        opts.validation.messages[key] = function () {\n          return formlyUtil.formlyEval(scope, message, ctrl.$modelValue, ctrl.$viewValue);\n        };\n      });\n\n      var useNewValidatorsApi = ctrl.hasOwnProperty('$validators') && !attrs.hasOwnProperty('useParsers');\n      _angularFix2['default'].forEach(opts.validators, _angularFix2['default'].bind(null, addValidatorToPipeline, false));\n      _angularFix2['default'].forEach(opts.asyncValidators, _angularFix2['default'].bind(null, addValidatorToPipeline, true));\n\n      function addValidatorToPipeline(isAsync, validator, name) {\n        setupMessage(validator, name);\n        validator = _angularFix2['default'].isObject(validator) ? validator.expression : validator;\n        if (useNewValidatorsApi) {\n          setupWithValidators(validator, name, isAsync);\n        } else {\n          setupWithParsers(validator, name, isAsync);\n        }\n      }\n\n      function setupMessage(validator, name) {\n        var message = validator.message;\n        if (message) {\n          opts.validation.messages[name] = function () {\n            return formlyUtil.formlyEval(scope, message, ctrl.$modelValue, ctrl.$viewValue);\n          };\n        }\n      }\n\n      function setupWithValidators(validator, name, isAsync) {\n        var validatorCollection = isAsync ? '$asyncValidators' : '$validators';\n\n        ctrl[validatorCollection][name] = function evalValidity(modelValue, viewValue) {\n          return formlyUtil.formlyEval(scope, validator, modelValue, viewValue);\n        };\n      }\n\n      function setupWithParsers(validator, name, isAsync) {\n        var inFlightValidator = undefined;\n        ctrl.$parsers.unshift(function evalValidityOfParser(viewValue) {\n          var isValid = formlyUtil.formlyEval(scope, validator, ctrl.$modelValue, viewValue);\n          if (isAsync) {\n            ctrl.$pending = ctrl.$pending || {};\n            ctrl.$pending[name] = true;\n            inFlightValidator = isValid;\n            isValid.then(function () {\n              if (inFlightValidator === isValid) {\n                ctrl.$setValidity(name, true);\n              }\n            })['catch'](function () {\n              if (inFlightValidator === isValid) {\n                ctrl.$setValidity(name, false);\n              }\n            })['finally'](function () {\n              var $pending = ctrl.$pending || {};\n              if (Object.keys($pending).length === 1) {\n                delete ctrl.$pending;\n              } else {\n                delete ctrl.$pending[name];\n              }\n            });\n          } else {\n            ctrl.$setValidity(name, isValid);\n          }\n          return viewValue;\n        });\n      }\n    }\n  };\n}\nmodule.exports = exports['default'];\n\n\n/** WEBPACK FOOTER **\n ** ./directives/formly-custom-validation.js\n **/","import angular from 'angular-fix';\nexport default formlyCustomValidation;\n\n// @ngInject\nfunction formlyCustomValidation(formlyUtil) {\n  return {\n    restrict: 'A',\n    require: 'ngModel',\n    link: function formlyCustomValidationLink(scope, el, attrs, ctrl) {\n      const opts = scope.options;\n      opts.validation.messages = opts.validation.messages || {};\n      angular.forEach(opts.validation.messages, (message, key) => {\n        opts.validation.messages[key] = () => {\n          return formlyUtil.formlyEval(scope, message, ctrl.$modelValue, ctrl.$viewValue);\n        };\n      });\n\n\n      const useNewValidatorsApi = ctrl.hasOwnProperty('$validators') && !attrs.hasOwnProperty('useParsers');\n      angular.forEach(opts.validators, angular.bind(null, addValidatorToPipeline, false));\n      angular.forEach(opts.asyncValidators, angular.bind(null, addValidatorToPipeline, true));\n\n      function addValidatorToPipeline(isAsync, validator, name) {\n        setupMessage(validator, name);\n        validator = angular.isObject(validator) ? validator.expression : validator;\n        if (useNewValidatorsApi) {\n          setupWithValidators(validator, name, isAsync);\n        } else {\n          setupWithParsers(validator, name, isAsync);\n        }\n      }\n\n      function setupMessage(validator, name) {\n        const message = validator.message;\n        if (message) {\n          opts.validation.messages[name] = () => {\n            return formlyUtil.formlyEval(scope, message, ctrl.$modelValue, ctrl.$viewValue);\n          };\n        }\n      }\n\n      function setupWithValidators(validator, name, isAsync) {\n        const validatorCollection = isAsync ? '$asyncValidators' : '$validators';\n\n        ctrl[validatorCollection][name] = function evalValidity(modelValue, viewValue) {\n          return formlyUtil.formlyEval(scope, validator, modelValue, viewValue);\n        };\n      }\n\n      function setupWithParsers(validator, name, isAsync) {\n        let inFlightValidator;\n        ctrl.$parsers.unshift(function evalValidityOfParser(viewValue) {\n          const isValid = formlyUtil.formlyEval(scope, validator, ctrl.$modelValue, viewValue);\n          if (isAsync) {\n            ctrl.$pending = ctrl.$pending || {};\n            ctrl.$pending[name] = true;\n            inFlightValidator = isValid;\n            isValid.then(() => {\n              if (inFlightValidator === isValid) {\n                ctrl.$setValidity(name, true);\n              }\n            }).catch(() => {\n              if (inFlightValidator === isValid) {\n                ctrl.$setValidity(name, false);\n              }\n            }).finally(() => {\n              const $pending = ctrl.$pending || {};\n              if (Object.keys($pending).length === 1) {\n                delete ctrl.$pending;\n              } else {\n                delete ctrl.$pending[name];\n              }\n            });\n          } else {\n            ctrl.$setValidity(name, isValid);\n          }\n          return viewValue;\n        });\n      }\n    }\n  };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./directives/formly-custom-validation.js\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }\n\nvar _angularFix = require('angular-fix');\n\nvar _angularFix2 = _interopRequireDefault(_angularFix);\n\nvar _apiCheck = require('api-check');\n\nvar _apiCheck2 = _interopRequireDefault(_apiCheck);\n\nexports['default'] = formlyField;\n\n/**\n * @ngdoc directive\n * @name formlyField\n * @restrict AE\n */\n// @ngInject\nfunction formlyField($http, $q, $compile, $templateCache, $interpolate, formlyConfig, formlyApiCheck, formlyUtil, formlyUsability, formlyWarn) {\n  var arrayify = formlyUtil.arrayify;\n\n  return {\n    restrict: 'AE',\n    transclude: true,\n    require: '?^formlyForm',\n    scope: {\n      options: '=',\n      model: '=',\n      originalModel: '=?',\n      formId: '@', // TODO remove formId in a breaking release\n      index: '=?',\n      fields: '=?',\n      formState: '=?',\n      formOptions: '=?',\n      form: '=?' // TODO require form in a breaking release\n    },\n    controller: FormlyFieldController,\n    link: fieldLink\n  };\n\n  // @ngInject\n  function FormlyFieldController($scope, $timeout, $parse, $controller, formlyValidationMessages) {\n    /* eslint max-statements:[2, 31] */\n    if ($scope.options.fieldGroup) {\n      setupFieldGroup();\n      return;\n    }\n\n    var fieldType = getFieldType($scope.options);\n    simplifyLife($scope.options);\n    mergeFieldOptionsWithTypeDefaults($scope.options, fieldType);\n    extendOptionsWithDefaults($scope.options, $scope.index);\n    checkApi($scope.options);\n    // set field id to link labels and fields\n\n    // initalization\n    setFieldIdAndName();\n    setDefaultValue();\n    setInitialValue();\n    runExpressions();\n    addValidationMessages($scope.options);\n    invokeControllers($scope, $scope.options, fieldType);\n\n    // function definitions\n    function runExpressions() {\n      // must run on next tick to make sure that the current value is correct.\n      $timeout(function runExpressionsOnNextTick() {\n        var field = $scope.options;\n        var currentValue = valueGetterSetter();\n        _angularFix2['default'].forEach(field.expressionProperties, function runExpression(expression, prop) {\n          var setter = $parse(prop).assign;\n          var promise = $q.when(formlyUtil.formlyEval($scope, expression, currentValue, currentValue));\n          promise.then(function setFieldValue(value) {\n            setter(field, value);\n          });\n        });\n      }, 0, false);\n    }\n\n    function valueGetterSetter(newVal) {\n      if (!$scope.model || !$scope.options.key) {\n        return undefined;\n      }\n      if (_angularFix2['default'].isDefined(newVal)) {\n        $scope.model[$scope.options.key] = newVal;\n      }\n      return $scope.model[$scope.options.key];\n    }\n\n    function simplifyLife(options) {\n      // add a few empty objects (if they don't already exist) so you don't have to undefined check everywhere\n      formlyUtil.reverseDeepMerge(options, {\n        originalModel: options.model,\n        extras: {},\n        data: {},\n        templateOptions: {},\n        validation: {}\n      });\n      // create $scope.to so template authors can reference to instead of $scope.options.templateOptions\n      $scope.to = $scope.options.templateOptions;\n      $scope.formOptions = $scope.formOptions || {};\n    }\n\n    function setFieldIdAndName() {\n      if (_angularFix2['default'].isFunction(formlyConfig.extras.getFieldId)) {\n        $scope.id = formlyConfig.extras.getFieldId($scope.options, $scope.model, $scope);\n      } else {\n        var formName = $scope.form && $scope.form.$name || $scope.formId;\n        $scope.id = formlyUtil.getFieldId(formName, $scope.options, $scope.index);\n      }\n      $scope.options.id = $scope.id;\n      $scope.name = $scope.options.name || $scope.options.id;\n      $scope.options.name = $scope.name;\n    }\n\n    function setDefaultValue() {\n      if (_angularFix2['default'].isDefined($scope.options.defaultValue) && !_angularFix2['default'].isDefined($scope.model[$scope.options.key])) {\n        var setter = $parse($scope.options.key).assign;\n        setter($scope.model, $scope.options.defaultValue);\n      }\n    }\n\n    function setInitialValue() {\n      $scope.options.initialValue = $scope.model && $scope.model[$scope.options.key];\n    }\n\n    function mergeFieldOptionsWithTypeDefaults(options, type) {\n      if (type) {\n        mergeOptions(options, type.defaultOptions);\n      }\n      var properOrder = arrayify(options.optionsTypes).reverse(); // so the right things are overridden\n      _angularFix2['default'].forEach(properOrder, function (typeName) {\n        mergeOptions(options, formlyConfig.getType(typeName, true, options).defaultOptions);\n      });\n    }\n\n    function mergeOptions(options, extraOptions) {\n      if (extraOptions) {\n        if (_angularFix2['default'].isFunction(extraOptions)) {\n          extraOptions = extraOptions(options, $scope);\n        }\n        formlyUtil.reverseDeepMerge(options, extraOptions);\n      }\n    }\n\n    function extendOptionsWithDefaults(options, index) {\n      var key = options.key || index || 0;\n      _angularFix2['default'].extend(options, {\n        // attach the key in case the formly-field directive is used directly\n        key: key,\n        value: options.value || valueGetterSetter,\n        runExpressions: runExpressions,\n        resetModel: resetModel,\n        updateInitialValue: updateInitialValue\n      });\n    }\n\n    function resetModel() {\n      $scope.model[$scope.options.key] = $scope.options.initialValue;\n      if ($scope.options.formControl) {\n        if (_angularFix2['default'].isArray($scope.options.formControl)) {\n          _angularFix2['default'].forEach($scope.options.formControl, function (formControl) {\n            resetFormControl(formControl, true);\n          });\n        } else {\n          resetFormControl($scope.options.formControl);\n        }\n      }\n    }\n\n    function resetFormControl(formControl, isMultiNgModel) {\n      if (!isMultiNgModel) {\n        formControl.$setViewValue($scope.model[$scope.options.key]);\n      }\n\n      formControl.$render();\n      formControl.$setUntouched && formControl.$setUntouched();\n      formControl.$setPristine();\n\n      // To prevent breaking change requiring a digest to reset $viewModel\n      if (!$scope.$root.$$phase) {\n        $scope.$digest();\n      }\n    }\n\n    function updateInitialValue() {\n      $scope.options.initialValue = $scope.model[$scope.options.key];\n    }\n\n    function addValidationMessages(options) {\n      options.validation.messages = options.validation.messages || {};\n      _angularFix2['default'].forEach(formlyValidationMessages.messages, function createFunctionForMessage(expression, name) {\n        if (!options.validation.messages[name]) {\n          options.validation.messages[name] = function evaluateMessage(viewValue, modelValue, scope) {\n            return formlyUtil.formlyEval(scope, expression, modelValue, viewValue);\n          };\n        }\n      });\n    }\n\n    function invokeControllers(scope) {\n      var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n      var type = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n      _angularFix2['default'].forEach([type.controller, options.controller], function (controller) {\n        if (controller) {\n          $controller(controller, { $scope: scope });\n        }\n      });\n    }\n\n    function setupFieldGroup() {\n      $scope.options.options = $scope.options.options || {};\n      $scope.options.options.formState = $scope.formState;\n    }\n  }\n\n  // link function\n  function fieldLink(scope, el, attrs, formlyFormCtrl) {\n    if (scope.options.fieldGroup) {\n      setFieldGroupTemplate();\n      return;\n    }\n\n    // watch the field model (if exists) if there is no parent formly-form directive (that would watch it instead)\n    if (!formlyFormCtrl && scope.options.model) {\n      scope.$watch('options.model', function () {\n        return scope.options.runExpressions();\n      }, true);\n    }\n\n    addAttributes();\n    addClasses();\n\n    var type = getFieldType(scope.options);\n    var args = arguments;\n    var thusly = this;\n    var fieldCount = 0;\n    var fieldManipulators = getManipulators(scope.options, scope.formOptions);\n    getFieldTemplate(scope.options).then(runManipulators(fieldManipulators.preWrapper)).then(transcludeInWrappers(scope.options, scope.formOptions)).then(runManipulators(fieldManipulators.postWrapper)).then(setElementTemplate).then(watchFormControl).then(callLinkFunctions)['catch'](function (error) {\n      formlyWarn('there-was-a-problem-setting-the-template-for-this-field', 'There was a problem setting the template for this field ', scope.options, error);\n    });\n\n    function setFieldGroupTemplate() {\n      checkFieldGroupApi(scope.options);\n      el.addClass('formly-field-group');\n      var extraAttributes = '';\n      if (scope.options.elementAttributes) {\n        extraAttributes = Object.keys(scope.options.elementAttributes).map(function (key) {\n          return key + '=\"' + scope.options.elementAttributes[key] + '\"';\n        }).join(' ');\n      }\n      var modelValue = 'model';\n      scope.options.form = scope.form;\n      if (scope.options.key) {\n        modelValue = 'model[\\'' + scope.options.key + '\\']';\n      }\n      setElementTemplate('\\n          <formly-form model=\"' + modelValue + '\"\\n                       fields=\"options.fieldGroup\"\\n                       options=\"options.options\"\\n                       form=\"options.form\"\\n                       class=\"' + scope.options.className + '\"\\n                       ' + extraAttributes + '\\n                       is-field-group>\\n          </formly-form>\\n        ');\n    }\n\n    function addAttributes() {\n      if (scope.options.elementAttributes) {\n        el.attr(scope.options.elementAttributes);\n      }\n    }\n\n    function addClasses() {\n      if (scope.options.className) {\n        el.addClass(scope.options.className);\n      }\n      if (scope.options.type) {\n        el.addClass('formly-field-' + scope.options.type);\n      }\n    }\n\n    function setElementTemplate(templateString) {\n      el.html(asHtml(templateString));\n      $compile(el.contents())(scope);\n      return templateString;\n    }\n\n    function watchFormControl(templateString) {\n      var stopWatchingShowError = _angularFix2['default'].noop;\n      if (scope.options.noFormControl) {\n        return;\n      }\n      var templateEl = _angularFix2['default'].element('<div>' + templateString + '</div>');\n      var ngModelNodes = templateEl[0].querySelectorAll('[ng-model],[data-ng-model]');\n\n      if (ngModelNodes.length) {\n        _angularFix2['default'].forEach(ngModelNodes, function (ngModelNode) {\n          fieldCount++;\n          watchFieldNameOrExistence(ngModelNode.getAttribute('name'));\n        });\n      }\n\n      function watchFieldNameOrExistence(name) {\n        var nameExpressionRegex = /\\{\\{(.*?)}}/;\n        var nameExpression = nameExpressionRegex.exec(name);\n        if (nameExpression) {\n          name = $interpolate(name)(scope);\n        }\n        watchFieldExistence(name);\n      }\n\n      function watchFieldExistence(name) {\n        scope.$watch('form[\"' + name + '\"]', function formControlChange(formControl) {\n          if (formControl) {\n            if (fieldCount > 1) {\n              if (!scope.options.formControl) {\n                scope.options.formControl = [];\n              }\n              scope.options.formControl.push(formControl);\n            } else {\n              scope.options.formControl = formControl;\n            }\n            scope.fc = scope.options.formControl; // shortcut for template authors\n            stopWatchingShowError();\n            addShowMessagesWatcher();\n            addParsers();\n            addFormatters();\n          }\n        });\n      }\n\n      function addShowMessagesWatcher() {\n        stopWatchingShowError = scope.$watch(function watchShowValidationChange() {\n          var customExpression = formlyConfig.extras.errorExistsAndShouldBeVisibleExpression;\n          var options = scope.options;\n          var fc = scope.fc;\n\n          if (!fc.$invalid) {\n            return false;\n          } else if (typeof options.validation.show === 'boolean') {\n            return options.validation.show;\n          } else if (customExpression) {\n            return formlyUtil.formlyEval(scope, customExpression, fc.$modelValue, fc.$viewValue);\n          } else {\n            var noTouchedButDirty = _angularFix2['default'].isUndefined(fc.$touched) && fc.$dirty;\n            return scope.fc.$touched || noTouchedButDirty;\n          }\n        }, function onShowValidationChange(show) {\n          scope.options.validation.errorExistsAndShouldBeVisible = show;\n          scope.showError = show; // shortcut for template authors\n        });\n      }\n\n      function addParsers() {\n        setParsersOrFormatters('parsers');\n      }\n\n      function addFormatters() {\n        setParsersOrFormatters('formatters');\n        var ctrl = scope.fc;\n        var formWasPristine = scope.form.$pristine;\n        if (scope.options.formatters) {\n          (function () {\n            var value = ctrl.$modelValue;\n            ctrl.$formatters.forEach(function (formatter) {\n              value = formatter(value);\n            });\n\n            ctrl.$setViewValue(value);\n            ctrl.$render();\n            ctrl.$setPristine();\n            if (formWasPristine) {\n              scope.form.$setPristine();\n            }\n          })();\n        }\n      }\n\n      function setParsersOrFormatters(which) {\n        var originalThingProp = 'originalParser';\n        if (which === 'formatters') {\n          originalThingProp = 'originalFormatter';\n        }\n\n        // init with type's parsers\n        var things = getThingsFromType(type);\n\n        // get optionsTypes things\n        things = formlyUtil.extendArray(things, getThingsFromOptionsTypes(scope.options.optionsTypes));\n\n        // get field's things\n        things = formlyUtil.extendArray(things, scope.options[which]);\n\n        // convert things into formlyExpression things\n        _angularFix2['default'].forEach(things, function (thing, index) {\n          things[index] = getFormlyExpressionThing(thing);\n        });\n\n        var ngModelCtrls = scope.fc;\n        if (!_angularFix2['default'].isArray(ngModelCtrls)) {\n          ngModelCtrls = [ngModelCtrls];\n        }\n\n        _angularFix2['default'].forEach(ngModelCtrls, function (ngModelCtrl) {\n          var _ngModelCtrl;\n\n          ngModelCtrl['$' + which] = (_ngModelCtrl = ngModelCtrl['$' + which]).concat.apply(_ngModelCtrl, _toConsumableArray(things));\n        });\n\n        function getThingsFromType(theType) {\n          if (!theType) {\n            return [];\n          }\n          if (_angularFix2['default'].isString(theType)) {\n            theType = formlyConfig.getType(theType, true, scope.options);\n          }\n          var typeThings = [];\n\n          // get things from parent\n          if (theType['extends']) {\n            typeThings = formlyUtil.extendArray(typeThings, getThingsFromType(theType['extends']));\n          }\n\n          // get own type's things\n          typeThings = formlyUtil.extendArray(typeThings, getDefaultOptionsProperty(theType, which, []));\n\n          // get things from optionsTypes\n          typeThings = formlyUtil.extendArray(typeThings, getThingsFromOptionsTypes(getDefaultOptionsOptionsTypes(theType)));\n\n          return typeThings;\n        }\n\n        function getThingsFromOptionsTypes() {\n          var optionsTypes = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n\n          var optionsTypesThings = [];\n          _angularFix2['default'].forEach(_angularFix2['default'].copy(arrayify(optionsTypes)).reverse(), function (optionsTypeName) {\n            optionsTypesThings = formlyUtil.extendArray(optionsTypesThings, getThingsFromType(optionsTypeName));\n          });\n          return optionsTypesThings;\n        }\n\n        function getFormlyExpressionThing(thing) {\n          formlyExpressionParserOrFormatterFunction[originalThingProp] = thing;\n          return formlyExpressionParserOrFormatterFunction;\n\n          function formlyExpressionParserOrFormatterFunction($viewValue) {\n            var $modelValue = scope.options.value();\n            return formlyUtil.formlyEval(scope, thing, $modelValue, $viewValue);\n          }\n        }\n      }\n    }\n\n    function callLinkFunctions() {\n      if (type && type.link) {\n        type.link.apply(thusly, args);\n      }\n      if (scope.options.link) {\n        scope.options.link.apply(thusly, args);\n      }\n    }\n\n    function runManipulators(manipulators) {\n      return function runManipulatorsOnTemplate(templateToManipulate) {\n        var chain = $q.when(templateToManipulate);\n        _angularFix2['default'].forEach(manipulators, function (manipulator) {\n          chain = chain.then(function (template) {\n            return $q.when(manipulator(template, scope.options, scope)).then(function (newTemplate) {\n              return _angularFix2['default'].isString(newTemplate) ? newTemplate : asHtml(newTemplate);\n            });\n          });\n        });\n        return chain;\n      };\n    }\n  }\n\n  // sort-of stateless util functions\n  function asHtml(el) {\n    var wrapper = _angularFix2['default'].element('<a></a>');\n    return wrapper.append(el).html();\n  }\n\n  function getFieldType(options) {\n    return options.type && formlyConfig.getType(options.type);\n  }\n\n  function getManipulators(options, formOptions) {\n    var preWrapper = [];\n    var postWrapper = [];\n    addManipulators(options.templateManipulators);\n    addManipulators(formOptions.templateManipulators);\n    addManipulators(formlyConfig.templateManipulators);\n    return { preWrapper: preWrapper, postWrapper: postWrapper };\n\n    function addManipulators(manipulators) {\n      /* eslint-disable */ // it doesn't understand this :-(\n\n      var _ref = manipulators || {};\n\n      var _ref$preWrapper = _ref.preWrapper;\n      var pre = _ref$preWrapper === undefined ? [] : _ref$preWrapper;\n      var _ref$postWrapper = _ref.postWrapper;\n      var post = _ref$postWrapper === undefined ? [] : _ref$postWrapper;\n\n      preWrapper = preWrapper.concat(pre);\n      postWrapper = postWrapper.concat(post);\n      /* eslint-enable */\n    }\n  }\n\n  function getFieldTemplate(options) {\n    function fromOptionsOrType(key, fieldType) {\n      if (_angularFix2['default'].isDefined(options[key])) {\n        return options[key];\n      } else if (fieldType && _angularFix2['default'].isDefined(fieldType[key])) {\n        return fieldType[key];\n      }\n    }\n\n    var type = formlyConfig.getType(options.type, true, options);\n    var template = fromOptionsOrType('template', type);\n    var templateUrl = fromOptionsOrType('templateUrl', type);\n    if (_angularFix2['default'].isUndefined(template) && !templateUrl) {\n      throw formlyUsability.getFieldError('type-type-has-no-template', 'Type \\'' + options.type + '\\' has no template. On element:', options);\n    }\n\n    return getTemplate(templateUrl || template, _angularFix2['default'].isUndefined(template), options);\n  }\n\n  function getTemplate(template, isUrl, options) {\n    var templatePromise = undefined;\n    if (_angularFix2['default'].isFunction(template)) {\n      templatePromise = $q.when(template(options));\n    } else {\n      templatePromise = $q.when(template);\n    }\n\n    if (!isUrl) {\n      return templatePromise;\n    } else {\n      var _ret2 = (function () {\n        var httpOptions = { cache: $templateCache };\n        return {\n          v: templatePromise.then(function (url) {\n            return $http.get(url, httpOptions);\n          }).then(function (response) {\n            return response.data;\n          })['catch'](function handleErrorGettingATemplate(error) {\n            formlyWarn('problem-loading-template-for-templateurl', 'Problem loading template for ' + template, error);\n          })\n        };\n      })();\n\n      if (typeof _ret2 === 'object') return _ret2.v;\n    }\n  }\n\n  function transcludeInWrappers(options, formOptions) {\n    var wrapper = getWrapperOption(options, formOptions);\n\n    return function transcludeTemplate(template) {\n      if (!wrapper.length) {\n        return $q.when(template);\n      }\n\n      wrapper.forEach(function (aWrapper) {\n        formlyUsability.checkWrapper(aWrapper, options);\n        runApiCheck(aWrapper, options);\n      });\n      var promises = wrapper.map(function (w) {\n        return getTemplate(w.template || w.templateUrl, !w.template);\n      });\n      return $q.all(promises).then(function (wrappersTemplates) {\n        wrappersTemplates.forEach(function (wrapperTemplate, index) {\n          formlyUsability.checkWrapperTemplate(wrapperTemplate, wrapper[index]);\n        });\n        wrappersTemplates.reverse(); // wrapper 0 is wrapped in wrapper 1 and so on...\n        var totalWrapper = wrappersTemplates.shift();\n        wrappersTemplates.forEach(function (wrapperTemplate) {\n          totalWrapper = doTransclusion(totalWrapper, wrapperTemplate);\n        });\n        return doTransclusion(totalWrapper, template);\n      });\n    };\n  }\n\n  function doTransclusion(wrapper, template) {\n    var superWrapper = _angularFix2['default'].element('<a></a>'); // this allows people not have to have a single root in wrappers\n    superWrapper.append(wrapper);\n    var transcludeEl = superWrapper.find('formly-transclude');\n    if (!transcludeEl.length) {\n      // try it using our custom find function\n      transcludeEl = formlyUtil.findByNodeName(superWrapper, 'formly-transclude');\n    }\n    transcludeEl.replaceWith(template);\n    return superWrapper.html();\n  }\n\n  function getWrapperOption(options, formOptions) {\n    /* eslint complexity:[2, 6] */\n    var wrapper = options.wrapper;\n    // explicit null means no wrapper\n    if (wrapper === null) {\n      return [];\n    }\n\n    // nothing specified means use the default wrapper for the type\n    if (!wrapper) {\n      // get all wrappers that specify they apply to this type\n      wrapper = arrayify(formlyConfig.getWrapperByType(options.type));\n    } else {\n      wrapper = arrayify(wrapper).map(formlyConfig.getWrapper);\n    }\n\n    // get all wrappers for that the type specified that it uses.\n    var type = formlyConfig.getType(options.type, true, options);\n    if (type && type.wrapper) {\n      var typeWrappers = arrayify(type.wrapper).map(formlyConfig.getWrapper);\n      wrapper = wrapper.concat(typeWrappers);\n    }\n\n    // add form wrappers\n    if (formOptions.wrapper) {\n      var formWrappers = arrayify(formOptions.wrapper).map(formlyConfig.getWrapper);\n      wrapper = wrapper.concat(formWrappers);\n    }\n\n    // add the default wrapper last\n    var defaultWrapper = formlyConfig.getWrapper();\n    if (defaultWrapper) {\n      wrapper.push(defaultWrapper);\n    }\n    return wrapper;\n  }\n\n  function checkApi(options) {\n    formlyApiCheck['throw'](formlyApiCheck.formlyFieldOptions, options, {\n      prefix: 'formly-field directive',\n      url: 'formly-field-directive-validation-failed'\n    });\n    // validate with the type\n    var type = options.type && formlyConfig.getType(options.type);\n    if (type) {\n      runApiCheck(type, options, true);\n    }\n    if (options.expressionProperties && options.expressionProperties.hide) {\n      formlyWarn('dont-use-expressionproperties.hide-use-hideexpression-instead', 'You have specified `hide` in `expressionProperties`. Use `hideExpression` instead', options);\n    }\n  }\n\n  function checkFieldGroupApi(options) {\n    formlyApiCheck['throw'](formlyApiCheck.fieldGroup, options, {\n      prefix: 'formly-field directive',\n      url: 'formly-field-directive-validation-failed'\n    });\n  }\n\n  function runApiCheck(_ref2, options, forType) {\n    var apiCheck = _ref2.apiCheck;\n    var apiCheckInstance = _ref2.apiCheckInstance;\n    var apiCheckFunction = _ref2.apiCheckFunction;\n    var apiCheckOptions = _ref2.apiCheckOptions;\n\n    runApiCheckForType(apiCheck, apiCheckInstance, apiCheckFunction, apiCheckOptions, options);\n    if (forType && options.type) {\n      _angularFix2['default'].forEach(formlyConfig.getTypeHeritage(options.type), function (type) {\n        runApiCheckForType(type.apiCheck, type.apiCheckInstance, type.apiCheckFunction, type.apiCheckOptions, options);\n      });\n    }\n  }\n\n  function runApiCheckForType(apiCheck, apiCheckInstance, apiCheckFunction, apiCheckOptions, options) {\n    /* eslint complexity:[2, 9] */\n    if (!apiCheck) {\n      return;\n    }\n    var instance = apiCheckInstance || formlyConfig.extras.apiCheckInstance || formlyApiCheck;\n    if (instance.config.disabled || _apiCheck2['default'].globalConfig.disabled) {\n      return;\n    }\n    var fn = apiCheckFunction || 'warn';\n    // this is the new API\n    var checkerObjects = apiCheck(instance);\n    _angularFix2['default'].forEach(checkerObjects, function (shape, name) {\n      var checker = instance.shape(shape);\n      var checkOptions = _angularFix2['default'].extend({\n        prefix: 'formly-field type ' + options.type + ' for property ' + name,\n        url: formlyApiCheck.config.output.docsBaseUrl + 'formly-field-type-apicheck-failed'\n      }, apiCheckOptions);\n      instance[fn](checker, options[name], checkOptions);\n    });\n  }\n}\n\n// Stateless util functions\nfunction getDefaultOptionsOptionsTypes(type) {\n  return getDefaultOptionsProperty(type, 'optionsTypes', []);\n}\n\nfunction getDefaultOptionsProperty(type, prop, defaultValue) {\n  return type.defaultOptions && type.defaultOptions[prop] || defaultValue;\n}\nmodule.exports = exports['default'];\n\n\n/** WEBPACK FOOTER **\n ** ./directives/formly-field.js\n **/","import angular from 'angular-fix';\nimport apiCheckFactory from 'api-check';\n\nexport default formlyField;\n\n/**\n * @ngdoc directive\n * @name formlyField\n * @restrict AE\n */\n// @ngInject\nfunction formlyField($http, $q, $compile, $templateCache, $interpolate, formlyConfig,\n                     formlyApiCheck, formlyUtil, formlyUsability, formlyWarn) {\n  const {arrayify} = formlyUtil;\n\n  return {\n    restrict: 'AE',\n    transclude: true,\n    require: '?^formlyForm',\n    scope: {\n      options: '=',\n      model: '=',\n      originalModel: '=?',\n      formId: '@', // TODO remove formId in a breaking release\n      index: '=?',\n      fields: '=?',\n      formState: '=?',\n      formOptions: '=?',\n      form: '=?' // TODO require form in a breaking release\n    },\n    controller: FormlyFieldController,\n    link: fieldLink\n  };\n\n\n  // @ngInject\n  function FormlyFieldController($scope, $timeout, $parse, $controller, formlyValidationMessages) {\n    /* eslint max-statements:[2, 31] */\n    if ($scope.options.fieldGroup) {\n      setupFieldGroup();\n      return;\n    }\n\n    const fieldType = getFieldType($scope.options);\n    simplifyLife($scope.options);\n    mergeFieldOptionsWithTypeDefaults($scope.options, fieldType);\n    extendOptionsWithDefaults($scope.options, $scope.index);\n    checkApi($scope.options);\n    // set field id to link labels and fields\n\n    // initalization\n    setFieldIdAndName();\n    setDefaultValue();\n    setInitialValue();\n    runExpressions();\n    addValidationMessages($scope.options);\n    invokeControllers($scope, $scope.options, fieldType);\n\n    // function definitions\n    function runExpressions() {\n      // must run on next tick to make sure that the current value is correct.\n      $timeout(function runExpressionsOnNextTick() {\n        const field = $scope.options;\n        const currentValue = valueGetterSetter();\n        angular.forEach(field.expressionProperties, function runExpression(expression, prop) {\n          const setter = $parse(prop).assign;\n          const promise = $q.when(formlyUtil.formlyEval($scope, expression, currentValue, currentValue));\n          promise.then(function setFieldValue(value) {\n            setter(field, value);\n          });\n        });\n      }, 0, false);\n    }\n\n    function valueGetterSetter(newVal) {\n      if (!$scope.model || !$scope.options.key) {\n        return undefined;\n      }\n      if (angular.isDefined(newVal)) {\n        $scope.model[$scope.options.key] = newVal;\n      }\n      return $scope.model[$scope.options.key];\n    }\n\n    function simplifyLife(options) {\n      // add a few empty objects (if they don't already exist) so you don't have to undefined check everywhere\n      formlyUtil.reverseDeepMerge(options, {\n        originalModel: options.model,\n        extras: {},\n        data: {},\n        templateOptions: {},\n        validation: {}\n      });\n      // create $scope.to so template authors can reference to instead of $scope.options.templateOptions\n      $scope.to = $scope.options.templateOptions;\n      $scope.formOptions = $scope.formOptions || {};\n    }\n\n    function setFieldIdAndName() {\n      if (angular.isFunction(formlyConfig.extras.getFieldId)) {\n        $scope.id = formlyConfig.extras.getFieldId($scope.options, $scope.model, $scope);\n      } else {\n        const formName = ($scope.form && $scope.form.$name) || $scope.formId;\n        $scope.id = formlyUtil.getFieldId(formName, $scope.options, $scope.index);\n      }\n      $scope.options.id = $scope.id;\n      $scope.name = $scope.options.name || $scope.options.id;\n      $scope.options.name = $scope.name;\n    }\n\n    function setDefaultValue() {\n      if (angular.isDefined($scope.options.defaultValue) && !angular.isDefined($scope.model[$scope.options.key])) {\n        const setter = $parse($scope.options.key).assign;\n        setter($scope.model, $scope.options.defaultValue);\n      }\n    }\n\n    function setInitialValue() {\n      $scope.options.initialValue = $scope.model && $scope.model[$scope.options.key];\n    }\n\n    function mergeFieldOptionsWithTypeDefaults(options, type) {\n      if (type) {\n        mergeOptions(options, type.defaultOptions);\n      }\n      const properOrder = arrayify(options.optionsTypes).reverse(); // so the right things are overridden\n      angular.forEach(properOrder, typeName => {\n        mergeOptions(options, formlyConfig.getType(typeName, true, options).defaultOptions);\n      });\n    }\n\n    function mergeOptions(options, extraOptions) {\n      if (extraOptions) {\n        if (angular.isFunction(extraOptions)) {\n          extraOptions = extraOptions(options, $scope);\n        }\n        formlyUtil.reverseDeepMerge(options, extraOptions);\n      }\n    }\n\n    function extendOptionsWithDefaults(options, index) {\n      const key = options.key || index || 0;\n      angular.extend(options, {\n        // attach the key in case the formly-field directive is used directly\n        key,\n        value: options.value || valueGetterSetter,\n        runExpressions,\n        resetModel,\n        updateInitialValue\n      });\n    }\n\n    function resetModel() {\n      $scope.model[$scope.options.key] = $scope.options.initialValue;\n      if ($scope.options.formControl) {\n        if (angular.isArray($scope.options.formControl)) {\n          angular.forEach($scope.options.formControl, function(formControl) {\n            resetFormControl(formControl, true);\n          });\n        } else {\n          resetFormControl($scope.options.formControl);\n        }\n      }\n    }\n\n    function resetFormControl(formControl, isMultiNgModel) {\n      if (!isMultiNgModel) {\n        formControl.$setViewValue($scope.model[$scope.options.key]);\n      }\n\n      formControl.$render();\n      formControl.$setUntouched && formControl.$setUntouched();\n      formControl.$setPristine();\n\n      // To prevent breaking change requiring a digest to reset $viewModel\n      if (!$scope.$root.$$phase) {\n        $scope.$digest();\n      }\n    }\n\n    function updateInitialValue() {\n      $scope.options.initialValue = $scope.model[$scope.options.key];\n    }\n\n    function addValidationMessages(options) {\n      options.validation.messages = options.validation.messages || {};\n      angular.forEach(formlyValidationMessages.messages, function createFunctionForMessage(expression, name) {\n        if (!options.validation.messages[name]) {\n          options.validation.messages[name] = function evaluateMessage(viewValue, modelValue, scope) {\n            return formlyUtil.formlyEval(scope, expression, modelValue, viewValue);\n          };\n        }\n      });\n    }\n\n    function invokeControllers(scope, options = {}, type = {}) {\n      angular.forEach([type.controller, options.controller], controller => {\n        if (controller) {\n          $controller(controller, {$scope: scope});\n        }\n      });\n    }\n\n    function setupFieldGroup() {\n      $scope.options.options = $scope.options.options || {};\n      $scope.options.options.formState = $scope.formState;\n    }\n  }\n\n\n  // link function\n  function fieldLink(scope, el, attrs, formlyFormCtrl) {\n    if (scope.options.fieldGroup) {\n      setFieldGroupTemplate();\n      return;\n    }\n\n    // watch the field model (if exists) if there is no parent formly-form directive (that would watch it instead)\n    if (!formlyFormCtrl && scope.options.model) {\n      scope.$watch('options.model', () => scope.options.runExpressions(), true);\n    }\n\n    addAttributes();\n    addClasses();\n\n    const type = getFieldType(scope.options);\n    const args = arguments;\n    const thusly = this;\n    let fieldCount = 0;\n    const fieldManipulators = getManipulators(scope.options, scope.formOptions);\n    getFieldTemplate(scope.options)\n      .then(runManipulators(fieldManipulators.preWrapper))\n      .then(transcludeInWrappers(scope.options, scope.formOptions))\n      .then(runManipulators(fieldManipulators.postWrapper))\n      .then(setElementTemplate)\n      .then(watchFormControl)\n      .then(callLinkFunctions)\n      .catch(error => {\n        formlyWarn(\n          'there-was-a-problem-setting-the-template-for-this-field',\n          'There was a problem setting the template for this field ',\n          scope.options,\n          error\n        );\n      });\n\n    function setFieldGroupTemplate() {\n      checkFieldGroupApi(scope.options);\n      el.addClass('formly-field-group');\n      let extraAttributes = '';\n      if (scope.options.elementAttributes) {\n        extraAttributes = Object.keys(scope.options.elementAttributes).map(key => {\n          return `${key}=\"${scope.options.elementAttributes[key]}\"`;\n        }).join(' ');\n      }\n      let modelValue = 'model';\n      scope.options.form = scope.form;\n      if (scope.options.key) {\n        modelValue = `model['${scope.options.key}']`;\n      }\n      setElementTemplate(`\n          <formly-form model=\"${modelValue}\"\n                       fields=\"options.fieldGroup\"\n                       options=\"options.options\"\n                       form=\"options.form\"\n                       class=\"${scope.options.className}\"\n                       ${extraAttributes}\n                       is-field-group>\n          </formly-form>\n        `);\n    }\n\n    function addAttributes() {\n      if (scope.options.elementAttributes) {\n        el.attr(scope.options.elementAttributes);\n      }\n    }\n\n    function addClasses() {\n      if (scope.options.className) {\n        el.addClass(scope.options.className);\n      }\n      if (scope.options.type) {\n        el.addClass(`formly-field-${scope.options.type}`);\n      }\n    }\n\n    function setElementTemplate(templateString) {\n      el.html(asHtml(templateString));\n      $compile(el.contents())(scope);\n      return templateString;\n    }\n\n    function watchFormControl(templateString) {\n      let stopWatchingShowError = angular.noop;\n      if (scope.options.noFormControl) {\n        return;\n      }\n      const templateEl = angular.element(`<div>${templateString}</div>`);\n      const ngModelNodes = templateEl[0].querySelectorAll('[ng-model],[data-ng-model]');\n\n\n      if (ngModelNodes.length) {\n        angular.forEach(ngModelNodes, function(ngModelNode) {\n          fieldCount++;\n          watchFieldNameOrExistence(ngModelNode.getAttribute('name'));\n        });\n      }\n\n      function watchFieldNameOrExistence(name) {\n        const nameExpressionRegex = /\\{\\{(.*?)}}/;\n        const nameExpression = nameExpressionRegex.exec(name);\n        if (nameExpression) {\n          name = $interpolate(name)(scope);\n        }\n        watchFieldExistence(name);\n      }\n\n      function watchFieldExistence(name) {\n        scope.$watch(`form[\"${name}\"]`, function formControlChange(formControl) {\n          if (formControl) {\n            if (fieldCount > 1) {\n              if (!scope.options.formControl) {\n                scope.options.formControl = [];\n              }\n              scope.options.formControl.push(formControl);\n            } else {\n              scope.options.formControl = formControl;\n            }\n            scope.fc = scope.options.formControl; // shortcut for template authors\n            stopWatchingShowError();\n            addShowMessagesWatcher();\n            addParsers();\n            addFormatters();\n          }\n        });\n      }\n\n      function addShowMessagesWatcher() {\n        stopWatchingShowError = scope.$watch(function watchShowValidationChange() {\n          const customExpression = formlyConfig.extras.errorExistsAndShouldBeVisibleExpression;\n          const {options, fc} = scope;\n          if (!fc.$invalid) {\n            return false;\n          } else if (typeof options.validation.show === 'boolean') {\n            return options.validation.show;\n          } else if (customExpression) {\n            return formlyUtil.formlyEval(scope, customExpression, fc.$modelValue, fc.$viewValue);\n          } else {\n            const noTouchedButDirty = (angular.isUndefined(fc.$touched) && fc.$dirty);\n            return (scope.fc.$touched || noTouchedButDirty);\n          }\n        }, function onShowValidationChange(show) {\n          scope.options.validation.errorExistsAndShouldBeVisible = show;\n          scope.showError = show; // shortcut for template authors\n        });\n      }\n\n      function addParsers() {\n        setParsersOrFormatters('parsers');\n      }\n\n      function addFormatters() {\n        setParsersOrFormatters('formatters');\n        const ctrl = scope.fc;\n        const formWasPristine = scope.form.$pristine;\n        if (scope.options.formatters) {\n          let value = ctrl.$modelValue;\n          ctrl.$formatters.forEach((formatter) => {\n            value = formatter(value);\n          });\n\n          ctrl.$setViewValue(value);\n          ctrl.$render();\n          ctrl.$setPristine();\n          if (formWasPristine) {\n            scope.form.$setPristine();\n          }\n        }\n      }\n\n      function setParsersOrFormatters(which) {\n        let originalThingProp = 'originalParser';\n        if (which === 'formatters') {\n          originalThingProp = 'originalFormatter';\n        }\n\n        // init with type's parsers\n        let things = getThingsFromType(type);\n\n        // get optionsTypes things\n        things = formlyUtil.extendArray(things, getThingsFromOptionsTypes(scope.options.optionsTypes));\n\n        // get field's things\n        things = formlyUtil.extendArray(things, scope.options[which]);\n\n        // convert things into formlyExpression things\n        angular.forEach(things, (thing, index) => {\n          things[index] = getFormlyExpressionThing(thing);\n        });\n\n        let ngModelCtrls = scope.fc;\n        if (!angular.isArray(ngModelCtrls)) {\n          ngModelCtrls = [ngModelCtrls];\n        }\n\n        angular.forEach(ngModelCtrls, ngModelCtrl => {\n          ngModelCtrl['$' + which] = ngModelCtrl['$' + which].concat(...things);\n        });\n\n        function getThingsFromType(theType) {\n          if (!theType) {\n            return [];\n          }\n          if (angular.isString(theType)) {\n            theType = formlyConfig.getType(theType, true, scope.options);\n          }\n          let typeThings = [];\n\n          // get things from parent\n          if (theType.extends) {\n            typeThings = formlyUtil.extendArray(typeThings, getThingsFromType(theType.extends));\n          }\n\n          // get own type's things\n          typeThings = formlyUtil.extendArray(typeThings, getDefaultOptionsProperty(theType, which, []));\n\n          // get things from optionsTypes\n          typeThings = formlyUtil.extendArray(\n            typeThings,\n            getThingsFromOptionsTypes(getDefaultOptionsOptionsTypes(theType))\n          );\n\n          return typeThings;\n        }\n\n        function getThingsFromOptionsTypes(optionsTypes = []) {\n          let optionsTypesThings = [];\n          angular.forEach(angular.copy(arrayify(optionsTypes)).reverse(), optionsTypeName => {\n            optionsTypesThings = formlyUtil.extendArray(optionsTypesThings, getThingsFromType(optionsTypeName));\n          });\n          return optionsTypesThings;\n        }\n\n        function getFormlyExpressionThing(thing) {\n          formlyExpressionParserOrFormatterFunction[originalThingProp] = thing;\n          return formlyExpressionParserOrFormatterFunction;\n\n          function formlyExpressionParserOrFormatterFunction($viewValue) {\n            const $modelValue = scope.options.value();\n            return formlyUtil.formlyEval(scope, thing, $modelValue, $viewValue);\n          }\n        }\n\n      }\n    }\n\n    function callLinkFunctions() {\n      if (type && type.link) {\n        type.link.apply(thusly, args);\n      }\n      if (scope.options.link) {\n        scope.options.link.apply(thusly, args);\n      }\n    }\n\n\n    function runManipulators(manipulators) {\n      return function runManipulatorsOnTemplate(templateToManipulate) {\n        let chain = $q.when(templateToManipulate);\n        angular.forEach(manipulators, manipulator => {\n          chain = chain.then(template => {\n            return $q.when(manipulator(template, scope.options, scope)).then(newTemplate => {\n              return angular.isString(newTemplate) ? newTemplate : asHtml(newTemplate);\n            });\n          });\n        });\n        return chain;\n      };\n    }\n  }\n\n  // sort-of stateless util functions\n  function asHtml(el) {\n    const wrapper = angular.element('<a></a>');\n    return wrapper.append(el).html();\n  }\n\n  function getFieldType(options) {\n    return options.type && formlyConfig.getType(options.type);\n  }\n\n  function getManipulators(options, formOptions) {\n    let preWrapper = [];\n    let postWrapper = [];\n    addManipulators(options.templateManipulators);\n    addManipulators(formOptions.templateManipulators);\n    addManipulators(formlyConfig.templateManipulators);\n    return {preWrapper, postWrapper};\n\n    function addManipulators(manipulators) {\n      /* eslint-disable */ // it doesn't understand this :-(\n      const {preWrapper:pre = [], postWrapper:post = []} = (manipulators || {});\n      preWrapper = preWrapper.concat(pre);\n      postWrapper = postWrapper.concat(post);\n      /* eslint-enable */\n    }\n  }\n\n  function getFieldTemplate(options) {\n    function fromOptionsOrType(key, fieldType) {\n      if (angular.isDefined(options[key])) {\n        return options[key];\n      } else if (fieldType && angular.isDefined(fieldType[key])) {\n        return fieldType[key];\n      }\n    }\n\n    const type = formlyConfig.getType(options.type, true, options);\n    const template = fromOptionsOrType('template', type);\n    const templateUrl = fromOptionsOrType('templateUrl', type);\n    if (angular.isUndefined(template) && !templateUrl) {\n      throw formlyUsability.getFieldError(\n        'type-type-has-no-template',\n        `Type '${options.type}' has no template. On element:`, options\n      );\n    }\n\n    return getTemplate(templateUrl || template, angular.isUndefined(template), options);\n  }\n\n\n  function getTemplate(template, isUrl, options) {\n    let templatePromise;\n    if (angular.isFunction(template)) {\n      templatePromise = $q.when(template(options));\n    } else {\n      templatePromise = $q.when(template);\n    }\n\n    if (!isUrl) {\n      return templatePromise;\n    } else {\n      const httpOptions = {cache: $templateCache};\n      return templatePromise\n        .then((url) => $http.get(url, httpOptions))\n        .then((response) => response.data)\n        .catch(function handleErrorGettingATemplate(error) {\n          formlyWarn(\n            'problem-loading-template-for-templateurl',\n            'Problem loading template for ' + template,\n            error\n          );\n        });\n    }\n  }\n\n  function transcludeInWrappers(options, formOptions) {\n    const wrapper = getWrapperOption(options, formOptions);\n\n    return function transcludeTemplate(template) {\n      if (!wrapper.length) {\n        return $q.when(template);\n      }\n\n      wrapper.forEach((aWrapper) => {\n        formlyUsability.checkWrapper(aWrapper, options);\n        runApiCheck(aWrapper, options);\n      });\n      const promises = wrapper.map(w => getTemplate(w.template || w.templateUrl, !w.template));\n      return $q.all(promises).then(wrappersTemplates => {\n        wrappersTemplates.forEach((wrapperTemplate, index) => {\n          formlyUsability.checkWrapperTemplate(wrapperTemplate, wrapper[index]);\n        });\n        wrappersTemplates.reverse(); // wrapper 0 is wrapped in wrapper 1 and so on...\n        let totalWrapper = wrappersTemplates.shift();\n        wrappersTemplates.forEach(wrapperTemplate => {\n          totalWrapper = doTransclusion(totalWrapper, wrapperTemplate);\n        });\n        return doTransclusion(totalWrapper, template);\n      });\n    };\n  }\n\n  function doTransclusion(wrapper, template) {\n    const superWrapper = angular.element('<a></a>'); // this allows people not have to have a single root in wrappers\n    superWrapper.append(wrapper);\n    let transcludeEl = superWrapper.find('formly-transclude');\n    if (!transcludeEl.length) {\n      // try it using our custom find function\n      transcludeEl = formlyUtil.findByNodeName(superWrapper, 'formly-transclude');\n    }\n    transcludeEl.replaceWith(template);\n    return superWrapper.html();\n  }\n\n  function getWrapperOption(options, formOptions) {\n    /* eslint complexity:[2, 6] */\n    let wrapper = options.wrapper;\n    // explicit null means no wrapper\n    if (wrapper === null) {\n      return [];\n    }\n\n    // nothing specified means use the default wrapper for the type\n    if (!wrapper) {\n      // get all wrappers that specify they apply to this type\n      wrapper = arrayify(formlyConfig.getWrapperByType(options.type));\n    } else {\n      wrapper = arrayify(wrapper).map(formlyConfig.getWrapper);\n    }\n\n    // get all wrappers for that the type specified that it uses.\n    const type = formlyConfig.getType(options.type, true, options);\n    if (type && type.wrapper) {\n      const typeWrappers = arrayify(type.wrapper).map(formlyConfig.getWrapper);\n      wrapper = wrapper.concat(typeWrappers);\n    }\n\n    // add form wrappers\n    if (formOptions.wrapper) {\n      const formWrappers = arrayify(formOptions.wrapper).map(formlyConfig.getWrapper);\n      wrapper = wrapper.concat(formWrappers);\n    }\n\n    // add the default wrapper last\n    const defaultWrapper = formlyConfig.getWrapper();\n    if (defaultWrapper) {\n      wrapper.push(defaultWrapper);\n    }\n    return wrapper;\n  }\n\n  function checkApi(options) {\n    formlyApiCheck.throw(formlyApiCheck.formlyFieldOptions, options, {\n      prefix: 'formly-field directive',\n      url: 'formly-field-directive-validation-failed'\n    });\n    // validate with the type\n    const type = options.type && formlyConfig.getType(options.type);\n    if (type) {\n      runApiCheck(type, options, true);\n    }\n    if (options.expressionProperties && options.expressionProperties.hide) {\n      formlyWarn(\n        'dont-use-expressionproperties.hide-use-hideexpression-instead',\n        'You have specified `hide` in `expressionProperties`. Use `hideExpression` instead',\n        options\n      );\n    }\n  }\n\n  function checkFieldGroupApi(options) {\n    formlyApiCheck.throw(formlyApiCheck.fieldGroup, options, {\n      prefix: 'formly-field directive',\n      url: 'formly-field-directive-validation-failed'\n    });\n  }\n\n  function runApiCheck({apiCheck, apiCheckInstance, apiCheckFunction, apiCheckOptions}, options, forType) {\n    runApiCheckForType(apiCheck, apiCheckInstance, apiCheckFunction, apiCheckOptions, options);\n    if (forType && options.type) {\n      angular.forEach(formlyConfig.getTypeHeritage(options.type), function(type) {\n        runApiCheckForType(type.apiCheck, type.apiCheckInstance, type.apiCheckFunction, type.apiCheckOptions, options);\n      });\n    }\n  }\n\n  function runApiCheckForType(apiCheck, apiCheckInstance, apiCheckFunction, apiCheckOptions, options) {\n    /* eslint complexity:[2, 9] */\n    if (!apiCheck) {\n      return;\n    }\n    const instance = apiCheckInstance || formlyConfig.extras.apiCheckInstance || formlyApiCheck;\n    if (instance.config.disabled || apiCheckFactory.globalConfig.disabled) {\n      return;\n    }\n    const fn = apiCheckFunction || 'warn';\n    // this is the new API\n    const checkerObjects = apiCheck(instance);\n    angular.forEach(checkerObjects, (shape, name) => {\n      const checker = instance.shape(shape);\n      const checkOptions = angular.extend({\n        prefix: `formly-field type ${options.type} for property ${name}`,\n        url: formlyApiCheck.config.output.docsBaseUrl + 'formly-field-type-apicheck-failed'\n      }, apiCheckOptions);\n      instance[fn](checker, options[name], checkOptions);\n    });\n  }\n\n\n}\n\n\n// Stateless util functions\nfunction getDefaultOptionsOptionsTypes(type) {\n  return getDefaultOptionsProperty(type, 'optionsTypes', []);\n}\n\nfunction getDefaultOptionsProperty(type, prop, defaultValue) {\n  return type.defaultOptions && type.defaultOptions[prop] || defaultValue;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./directives/formly-field.js\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\nexports['default'] = formlyFocus;\n\n// @ngInject\nfunction formlyFocus($timeout, $document) {\n  return {\n    restrict: 'A',\n    link: function formlyFocusLink(scope, element, attrs) {\n      var previousEl = null;\n      var el = element[0];\n      var doc = $document[0];\n      attrs.$observe('formlyFocus', function respondToFocusExpressionChange(value) {\n        /* eslint no-bitwise:0 */ // I know what I'm doing. I promise...\n        if (value === 'true') {\n          $timeout(function setElementFocus() {\n            previousEl = doc.activeElement;\n            el.focus();\n          }, ~ ~attrs.focusWait);\n        } else if (value === 'false') {\n          if (doc.activeElement === el) {\n            el.blur();\n            if (attrs.hasOwnProperty('refocus') && previousEl) {\n              previousEl.focus();\n            }\n          }\n        }\n      });\n    }\n  };\n}\nmodule.exports = exports['default'];\n\n\n/** WEBPACK FOOTER **\n ** ./directives/formly-focus.js\n **/","export default formlyFocus;\n\n// @ngInject\nfunction formlyFocus($timeout, $document) {\n  return {\n    restrict: 'A',\n    link: function formlyFocusLink(scope, element, attrs) {\n      let previousEl = null;\n      const el = element[0];\n      const doc = $document[0];\n      attrs.$observe('formlyFocus', function respondToFocusExpressionChange(value) {\n        /* eslint no-bitwise:0 */ // I know what I'm doing. I promise...\n        if (value === 'true') {\n          $timeout(function setElementFocus() {\n            previousEl = doc.activeElement;\n            el.focus();\n          }, ~~attrs.focusWait);\n        } else if (value === 'false') {\n          if (doc.activeElement === el) {\n            el.blur();\n            if (attrs.hasOwnProperty('refocus') && previousEl) {\n              previousEl.focus();\n            }\n          }\n        }\n      });\n    }\n  };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./directives/formly-focus.js\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\nvar _slice = Array.prototype.slice;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }\n\nvar _angularFix = require('angular-fix');\n\nvar _angularFix2 = _interopRequireDefault(_angularFix);\n\nexports['default'] = formlyForm;\n\n/**\n * @ngdoc directive\n * @name formlyForm\n * @restrict AE\n */\n// @ngInject\nfunction formlyForm(formlyUsability, formlyWarn, $parse, formlyConfig, $interpolate) {\n  var currentFormId = 1;\n  return {\n    restrict: 'AE',\n    template: formlyFormGetTemplate,\n    replace: true,\n    transclude: true,\n    scope: {\n      fields: '=',\n      model: '=',\n      form: '=?',\n      options: '=?'\n    },\n    controller: FormlyFormController,\n    link: formlyFormLink\n  };\n\n  function formlyFormGetTemplate(el, attrs) {\n    var rootEl = getRootEl();\n    var fieldRootEl = getFieldRootEl();\n    var formId = 'formly_' + currentFormId++;\n    var parentFormAttributes = '';\n    if (attrs.hasOwnProperty('isFieldGroup') && el.parent().parent().hasClass('formly')) {\n      parentFormAttributes = copyAttributes(el.parent().parent()[0].attributes);\n    }\n    return '\\n        <' + rootEl + ' class=\"formly\"\\n                 name=\"' + getFormName() + '\"\\n                 role=\"form\" ' + parentFormAttributes + '>\\n          <' + fieldRootEl + ' formly-field\\n               ng-repeat=\"field in fields ' + getTrackBy() + '\"\\n               ' + getHideDirective() + '=\"!field.hide\"\\n               class=\"formly-field\"\\n               options=\"field\"\\n               model=\"field.model || model\"\\n               original-model=\"model\"\\n               fields=\"fields\"\\n               form=\"theFormlyForm\"\\n               form-id=\"' + getFormName() + '\"\\n               form-state=\"options.formState\"\\n               form-options=\"options\"\\n               index=\"$index\">\\n          </' + fieldRootEl + '>\\n          <div ng-transclude class=\"' + getTranscludeClass() + '\"></div>\\n        </' + rootEl + '>\\n      ';\n\n    function getRootEl() {\n      return attrs.rootEl || 'ng-form';\n    }\n\n    function getFieldRootEl() {\n      return attrs.fieldRootEl || 'div';\n    }\n\n    function getHideDirective() {\n      return attrs.hideDirective || formlyConfig.extras.defaultHideDirective || 'ng-if';\n    }\n\n    function getTrackBy() {\n      if (!attrs.trackBy) {\n        return '';\n      } else {\n        return 'track by ' + attrs.trackBy;\n      }\n    }\n\n    function getFormName() {\n      var formName = formId;\n      var bindName = attrs.bindName;\n      if (bindName) {\n        if (_angularFix2['default'].version.minor < 3) {\n          throw formlyUsability.getFormlyError('bind-name attribute on formly-form not allowed in < angular 1.3');\n        }\n        // we can do a one-time binding here because we know we're in 1.3.x territory\n        formName = $interpolate.startSymbol() + '::\\'formly_\\' + ' + bindName + $interpolate.endSymbol();\n      }\n      return formName;\n    }\n\n    function getTranscludeClass() {\n      return attrs.transcludeClass || '';\n    }\n\n    function copyAttributes(attributes) {\n      var excluded = ['model', 'form', 'fields', 'options', 'name', 'role', 'class', 'data-model', 'data-form', 'data-fields', 'data-options', 'data-name'];\n      var arrayAttrs = [];\n      _angularFix2['default'].forEach(attributes, function (_ref) {\n        var nodeName = _ref.nodeName;\n        var value = _ref.value;\n\n        if (nodeName !== 'undefined' && excluded.indexOf(nodeName) === -1) {\n          arrayAttrs.push(toKebabCase(nodeName) + '=\"' + value + '\"');\n        }\n      });\n      return arrayAttrs.join(' ');\n    }\n  }\n\n  // @ngInject\n  function FormlyFormController($scope, formlyApiCheck, formlyUtil) {\n    setupOptions();\n    $scope.model = $scope.model || {};\n    setupFields();\n\n    // watch the model and evaluate watch expressions that depend on it.\n    $scope.$watch('model', onModelOrFormStateChange, true);\n    if ($scope.options.formState) {\n      $scope.$watch('options.formState', onModelOrFormStateChange, true);\n    }\n\n    function onModelOrFormStateChange() {\n      _angularFix2['default'].forEach($scope.fields, function runFieldExpressionProperties(field, index) {\n        var model = field.model || $scope.model;\n        field.runExpressions && field.runExpressions();\n        if (field.hideExpression) {\n          // can't use hide with expressionProperties reliably\n          var val = model[field.key];\n          field.hide = evalCloseToFormlyExpression(field.hideExpression, val, field, index);\n        }\n        if (field.extras && field.extras.validateOnModelChange && field.formControl) {\n          field.formControl.$validate();\n        }\n      });\n    }\n\n    function setupFields() {\n      $scope.fields = $scope.fields || [];\n\n      checkDeprecatedOptions($scope.options);\n\n      var fieldTransforms = $scope.options.fieldTransform || formlyConfig.extras.fieldTransform;\n\n      if (!_angularFix2['default'].isArray(fieldTransforms)) {\n        fieldTransforms = [fieldTransforms];\n      }\n\n      _angularFix2['default'].forEach(fieldTransforms, function transformFields(fieldTransform) {\n        if (fieldTransform) {\n          $scope.fields = fieldTransform($scope.fields, $scope.model, $scope.options, $scope.form);\n          if (!$scope.fields) {\n            throw formlyUsability.getFormlyError('fieldTransform must return an array of fields');\n          }\n        }\n      });\n\n      setupModels();\n\n      _angularFix2['default'].forEach($scope.fields, attachKey); // attaches a key based on the index if a key isn't specified\n      _angularFix2['default'].forEach($scope.fields, setupWatchers); // setup watchers for all fields\n    }\n\n    function checkDeprecatedOptions(options) {\n      if (formlyConfig.extras.fieldTransform && _angularFix2['default'].isFunction(formlyConfig.extras.fieldTransform)) {\n        formlyWarn('fieldtransform-as-a-function-deprecated', 'fieldTransform as a function has been deprecated.', 'Attempted for formlyConfig.extras: ' + formlyConfig.extras.fieldTransform.name, formlyConfig.extras);\n      } else if (options.fieldTransform && _angularFix2['default'].isFunction(options.fieldTransform)) {\n        formlyWarn('fieldtransform-as-a-function-deprecated', 'fieldTransform as a function has been deprecated.', 'Attempted for form', options);\n      }\n    }\n\n    function setupOptions() {\n      formlyApiCheck['throw']([formlyApiCheck.formOptionsApi.optional], [$scope.options], { prefix: 'formly-form options check' });\n      $scope.options = $scope.options || {};\n      $scope.options.formState = $scope.options.formState || {};\n\n      _angularFix2['default'].extend($scope.options, {\n        updateInitialValue: updateInitialValue,\n        resetModel: resetModel\n      });\n    }\n\n    function updateInitialValue() {\n      _angularFix2['default'].forEach($scope.fields, function (field) {\n        if (isFieldGroup(field) && field.options) {\n          field.options.updateInitialValue();\n        } else {\n          field.updateInitialValue();\n        }\n      });\n    }\n\n    function resetModel() {\n      _angularFix2['default'].forEach($scope.fields, function (field) {\n        if (isFieldGroup(field) && field.options) {\n          field.options.resetModel();\n        } else if (field.resetModel) {\n          field.resetModel();\n        }\n      });\n    }\n\n    function setupModels() {\n      // a set of field models that are already watched (the $scope.model will have its own watcher)\n      var watchedModels = [$scope.model];\n\n      if ($scope.options.formState) {\n        // $scope.options.formState will have its own watcher\n        watchedModels.push($scope.options.formState);\n      }\n\n      _angularFix2['default'].forEach($scope.fields, function (field) {\n        var isNewModel = initModel(field);\n\n        if (field.model && isNewModel && watchedModels.indexOf(field.model) === -1) {\n          $scope.$watch(function () {\n            return field.model;\n          }, onModelOrFormStateChange, true);\n          watchedModels.push(field.model);\n        }\n      });\n    }\n\n    function initModel(field) {\n      var isNewModel = true;\n\n      if (_angularFix2['default'].isString(field.model)) {\n        var expression = field.model;\n        var index = $scope.fields.indexOf(field);\n\n        isNewModel = !refrencesCurrentlyWatchedModel(expression);\n\n        field.model = evalCloseToFormlyExpression(expression, undefined, field, index);\n        if (!field.model) {\n          throw formlyUsability.getFieldError('field-model-must-be-initialized', 'Field model must be initialized. When specifying a model as a string for a field, the result of the' + ' expression must have been initialized ahead of time.', field);\n        }\n      }\n      return isNewModel;\n    }\n\n    function refrencesCurrentlyWatchedModel(expression) {\n      return ['model', 'formState'].some(function (item) {\n        return formlyUtil.startsWith(expression, item + '.') || formlyUtil.startsWith(expression, item + '[');\n      });\n    }\n\n    function attachKey(field, index) {\n      if (!isFieldGroup(field)) {\n        field.key = field.key || index || 0;\n      }\n    }\n\n    function setupWatchers(field, index) {\n      if (isFieldGroup(field) || !_angularFix2['default'].isDefined(field.watcher)) {\n        return;\n      }\n      var watchers = field.watcher;\n      if (!_angularFix2['default'].isArray(watchers)) {\n        watchers = [watchers];\n      }\n      _angularFix2['default'].forEach(watchers, function setupWatcher(watcher) {\n        if (!_angularFix2['default'].isDefined(watcher.listener)) {\n          throw formlyUsability.getFieldError('all-field-watchers-must-have-a-listener', 'All field watchers must have a listener', field);\n        }\n        var watchExpression = getWatchExpression(watcher, field, index);\n        var watchListener = getWatchListener(watcher, field, index);\n\n        var type = watcher.type || '$watch';\n        watcher.stopWatching = $scope[type](watchExpression, watchListener, watcher.watchDeep);\n      });\n    }\n\n    function getWatchExpression(watcher, field, index) {\n      var watchExpression = watcher.expression || 'model[\\'' + field.key + '\\']';\n      if (_angularFix2['default'].isFunction(watchExpression)) {\n        (function () {\n          // wrap the field's watch expression so we can call it with the field as the first arg\n          // and the stop function as the last arg as a helper\n          var originalExpression = watchExpression;\n          watchExpression = function formlyWatchExpression() {\n            var args = modifyArgs.apply(undefined, [watcher, index].concat(_slice.call(arguments)));\n            return originalExpression.apply(undefined, _toConsumableArray(args));\n          };\n          watchExpression.displayName = 'Formly Watch Expression for field for ' + field.key;\n        })();\n      }\n      return watchExpression;\n    }\n\n    function getWatchListener(watcher, field, index) {\n      var watchListener = watcher.listener;\n      if (_angularFix2['default'].isFunction(watchListener)) {\n        (function () {\n          // wrap the field's watch listener so we can call it with the field as the first arg\n          // and the stop function as the last arg as a helper\n          var originalListener = watchListener;\n          watchListener = function formlyWatchListener() {\n            var args = modifyArgs.apply(undefined, [watcher, index].concat(_slice.call(arguments)));\n            return originalListener.apply(undefined, _toConsumableArray(args));\n          };\n          watchListener.displayName = 'Formly Watch Listener for field for ' + field.key;\n        })();\n      }\n      return watchListener;\n    }\n\n    function modifyArgs(watcher, index) {\n      for (var _len = arguments.length, originalArgs = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n        originalArgs[_key - 2] = arguments[_key];\n      }\n\n      return [$scope.fields[index]].concat(originalArgs, [watcher.stopWatching]);\n    }\n\n    function evalCloseToFormlyExpression(expression, val, field, index) {\n      var extraLocals = getFormlyFieldLikeLocals(field, index);\n      return formlyUtil.formlyEval($scope, expression, val, val, extraLocals);\n    }\n\n    function getFormlyFieldLikeLocals(field, index) {\n      // this makes it closer to what a regular formlyExpression would be\n      return {\n        options: field,\n        index: index,\n        formState: $scope.options.formState,\n        formId: $scope.formId\n      };\n    }\n  }\n\n  function formlyFormLink(scope, el, attrs) {\n    setFormController();\n    fixChromeAutocomplete();\n\n    function setFormController() {\n      var formId = attrs.name;\n      scope.formId = formId;\n      scope.theFormlyForm = scope[formId];\n      if (attrs.form) {\n        var getter = $parse(attrs.form);\n        var setter = getter.assign;\n        var parentForm = getter(scope.$parent);\n        if (parentForm) {\n          scope.theFormlyForm = parentForm;\n          if (scope[formId]) {\n            scope.theFormlyForm.$removeControl(scope[formId]);\n          }\n\n          // this next line is probably one of the more dangerous things that angular-formly does to improve the\n          // API for angular-formly forms. It ensures that the NgModelControllers inside of formly-form will be\n          // attached to the form that is passed to formly-form rather than the one that formly-form creates\n          // this is necessary because it's confusing to have a step between the form you pass in\n          // and the fields in that form. It also is because angular doesn't propagate properties like $submitted down\n          // to children forms :-( This line was added to solve this issue:\n          // https://github.com/formly-js/angular-formly/issues/287\n          // luckily, this is how the formController has been accessed by the NgModelController since angular 1.0.0\n          // so I expect it will remain this way for the life of angular 1.x\n          el.removeData('$formController');\n        } else {\n          setter(scope.$parent, scope[formId]);\n        }\n      }\n      if (!scope.theFormlyForm && !formlyConfig.disableWarnings) {\n        /* eslint no-console:0 */\n        formlyWarn('formly-form-has-no-formcontroller', 'Your formly-form does not have a `form` property. Many functions of the form (like validation) may not work', el, scope);\n      }\n    }\n\n    /*\n     * chrome autocomplete lameness\n     * see https://code.google.com/p/chromium/issues/detail?id=468153#c14\n     * ლ(ಠ益ಠლ)   (╯°□°)╯︵ ┻━┻    (◞‸◟;)\n     */\n    function fixChromeAutocomplete() {\n      var global = formlyConfig.extras.removeChromeAutoComplete === true;\n      var offInstance = scope.options && scope.options.removeChromeAutoComplete === false;\n      var onInstance = scope.options && scope.options.removeChromeAutoComplete === true;\n      if (global && !offInstance || onInstance) {\n        var input = document.createElement('input');\n        input.setAttribute('autocomplete', 'address-level4');\n        input.setAttribute('hidden', 'true');\n        el[0].appendChild(input);\n      }\n    }\n  }\n\n  // stateless util functions\n  function toKebabCase(string) {\n    if (string) {\n      return string.replace(/([A-Z])/g, function ($1) {\n        return '-' + $1.toLowerCase();\n      });\n    } else {\n      return '';\n    }\n  }\n\n  function isFieldGroup(field) {\n    return field && !!field.fieldGroup;\n  }\n}\nmodule.exports = exports['default'];\n\n\n/** WEBPACK FOOTER **\n ** ./directives/formly-form.js\n **/","import angular from 'angular-fix';\n\nexport default formlyForm;\n\n/**\n * @ngdoc directive\n * @name formlyForm\n * @restrict AE\n */\n// @ngInject\nfunction formlyForm(formlyUsability, formlyWarn, $parse, formlyConfig, $interpolate) {\n  let currentFormId = 1;\n  return {\n    restrict: 'AE',\n    template: formlyFormGetTemplate,\n    replace: true,\n    transclude: true,\n    scope: {\n      fields: '=',\n      model: '=',\n      form: '=?',\n      options: '=?'\n    },\n    controller: FormlyFormController,\n    link: formlyFormLink\n  };\n\n  function formlyFormGetTemplate(el, attrs) {\n    const rootEl = getRootEl();\n    const fieldRootEl = getFieldRootEl();\n    const formId = `formly_${currentFormId++}`;\n    let parentFormAttributes = '';\n    if (attrs.hasOwnProperty('isFieldGroup') && el.parent().parent().hasClass('formly')) {\n      parentFormAttributes = copyAttributes(el.parent().parent()[0].attributes);\n    }\n    return `\n        <${rootEl} class=\"formly\"\n                 name=\"${getFormName()}\"\n                 role=\"form\" ${parentFormAttributes}>\n          <${fieldRootEl} formly-field\n               ng-repeat=\"field in fields ${getTrackBy()}\"\n               ${getHideDirective()}=\"!field.hide\"\n               class=\"formly-field\"\n               options=\"field\"\n               model=\"field.model || model\"\n               original-model=\"model\"\n               fields=\"fields\"\n               form=\"theFormlyForm\"\n               form-id=\"${getFormName()}\"\n               form-state=\"options.formState\"\n               form-options=\"options\"\n               index=\"$index\">\n          </${fieldRootEl}>\n          <div ng-transclude class=\"${getTranscludeClass()}\"></div>\n        </${rootEl}>\n      `;\n\n    function getRootEl() {\n      return attrs.rootEl || 'ng-form';\n    }\n\n    function getFieldRootEl() {\n      return attrs.fieldRootEl || 'div';\n    }\n\n    function getHideDirective() {\n      return attrs.hideDirective || formlyConfig.extras.defaultHideDirective || 'ng-if';\n    }\n\n    function getTrackBy() {\n      if (!attrs.trackBy) {\n        return '';\n      } else {\n        return `track by ${attrs.trackBy}`;\n      }\n    }\n\n    function getFormName() {\n      let formName = formId;\n      const bindName = attrs.bindName;\n      if (bindName) {\n        if (angular.version.minor < 3) {\n          throw formlyUsability.getFormlyError('bind-name attribute on formly-form not allowed in < angular 1.3');\n        }\n        // we can do a one-time binding here because we know we're in 1.3.x territory\n        formName = `${$interpolate.startSymbol()}::'formly_' + ${bindName}${$interpolate.endSymbol()}`;\n      }\n      return formName;\n    }\n\n    function getTranscludeClass() {\n      return attrs.transcludeClass || '';\n    }\n\n    function copyAttributes(attributes) {\n      const excluded = ['model', 'form', 'fields', 'options', 'name', 'role', 'class',\n        'data-model', 'data-form', 'data-fields', 'data-options', 'data-name'];\n      const arrayAttrs = [];\n      angular.forEach(attributes, ({nodeName, value}) => {\n        if (nodeName !== 'undefined' && excluded.indexOf(nodeName) === -1) {\n          arrayAttrs.push(`${toKebabCase(nodeName)}=\"${value}\"`);\n        }\n      });\n      return arrayAttrs.join(' ');\n    }\n  }\n\n  // @ngInject\n  function FormlyFormController($scope, formlyApiCheck, formlyUtil) {\n    setupOptions();\n    $scope.model = $scope.model || {};\n    setupFields();\n\n    // watch the model and evaluate watch expressions that depend on it.\n    $scope.$watch('model', onModelOrFormStateChange, true);\n    if ($scope.options.formState) {\n      $scope.$watch('options.formState', onModelOrFormStateChange, true);\n    }\n\n    function onModelOrFormStateChange() {\n      angular.forEach($scope.fields, function runFieldExpressionProperties(field, index) {\n        const model = field.model || $scope.model;\n        field.runExpressions && field.runExpressions();\n        if (field.hideExpression) { // can't use hide with expressionProperties reliably\n          const val = model[field.key];\n          field.hide = evalCloseToFormlyExpression(field.hideExpression, val, field, index);\n        }\n        if (field.extras && field.extras.validateOnModelChange && field.formControl) {\n          field.formControl.$validate();\n        }\n      });\n    }\n\n    function setupFields() {\n      $scope.fields = $scope.fields || [];\n\n      checkDeprecatedOptions($scope.options);\n\n      let fieldTransforms = $scope.options.fieldTransform || formlyConfig.extras.fieldTransform;\n\n      if (!angular.isArray(fieldTransforms)) {\n        fieldTransforms = [fieldTransforms];\n      }\n\n      angular.forEach(fieldTransforms, function transformFields(fieldTransform) {\n        if (fieldTransform) {\n          $scope.fields = fieldTransform($scope.fields, $scope.model, $scope.options, $scope.form);\n          if (!$scope.fields) {\n            throw formlyUsability.getFormlyError('fieldTransform must return an array of fields');\n          }\n        }\n      });\n\n      setupModels();\n\n      angular.forEach($scope.fields, attachKey); // attaches a key based on the index if a key isn't specified\n      angular.forEach($scope.fields, setupWatchers); // setup watchers for all fields\n    }\n\n    function checkDeprecatedOptions(options) {\n      if (formlyConfig.extras.fieldTransform && angular.isFunction(formlyConfig.extras.fieldTransform)) {\n        formlyWarn(\n          'fieldtransform-as-a-function-deprecated',\n          'fieldTransform as a function has been deprecated.',\n          `Attempted for formlyConfig.extras: ${formlyConfig.extras.fieldTransform.name}`,\n          formlyConfig.extras\n        );\n      } else if (options.fieldTransform && angular.isFunction(options.fieldTransform)) {\n        formlyWarn(\n          'fieldtransform-as-a-function-deprecated',\n          'fieldTransform as a function has been deprecated.',\n          `Attempted for form`,\n          options\n        );\n      }\n    }\n\n    function setupOptions() {\n      formlyApiCheck.throw(\n        [formlyApiCheck.formOptionsApi.optional], [$scope.options], {prefix: 'formly-form options check'}\n      );\n      $scope.options = $scope.options || {};\n      $scope.options.formState = $scope.options.formState || {};\n\n      angular.extend($scope.options, {\n        updateInitialValue,\n        resetModel\n      });\n\n    }\n\n    function updateInitialValue() {\n      angular.forEach($scope.fields, field => {\n        if (isFieldGroup(field) && field.options) {\n          field.options.updateInitialValue();\n        } else {\n          field.updateInitialValue();\n        }\n      });\n    }\n\n    function resetModel() {\n      angular.forEach($scope.fields, field => {\n        if (isFieldGroup(field) && field.options) {\n          field.options.resetModel();\n        } else if (field.resetModel) {\n          field.resetModel();\n        }\n      });\n    }\n\n    function setupModels() {\n      // a set of field models that are already watched (the $scope.model will have its own watcher)\n      const watchedModels = [$scope.model];\n\n      if ($scope.options.formState) {\n        // $scope.options.formState will have its own watcher\n        watchedModels.push($scope.options.formState);\n      }\n\n      angular.forEach($scope.fields, (field) => {\n        const isNewModel = initModel(field);\n\n        if (field.model && isNewModel && watchedModels.indexOf(field.model) === -1) {\n          $scope.$watch(() => field.model, onModelOrFormStateChange, true);\n          watchedModels.push(field.model);\n        }\n      });\n    }\n\n    function initModel(field) {\n      let isNewModel = true;\n\n      if (angular.isString(field.model)) {\n        const expression = field.model;\n        const index = $scope.fields.indexOf(field);\n\n        isNewModel = !refrencesCurrentlyWatchedModel(expression);\n\n        field.model = evalCloseToFormlyExpression(expression, undefined, field, index);\n        if (!field.model) {\n          throw formlyUsability.getFieldError(\n            'field-model-must-be-initialized',\n            'Field model must be initialized. When specifying a model as a string for a field, the result of the' +\n            ' expression must have been initialized ahead of time.',\n            field);\n        }\n      }\n      return isNewModel;\n    }\n\n    function refrencesCurrentlyWatchedModel(expression) {\n      return ['model', 'formState'].some(item => {\n        return formlyUtil.startsWith(expression, `${item}.`) || formlyUtil.startsWith(expression, `${item}[`);\n      });\n    }\n\n    function attachKey(field, index) {\n      if (!isFieldGroup(field)) {\n        field.key = field.key || index || 0;\n      }\n    }\n\n    function setupWatchers(field, index) {\n      if (isFieldGroup(field) || !angular.isDefined(field.watcher)) {\n        return;\n      }\n      let watchers = field.watcher;\n      if (!angular.isArray(watchers)) {\n        watchers = [watchers];\n      }\n      angular.forEach(watchers, function setupWatcher(watcher) {\n        if (!angular.isDefined(watcher.listener)) {\n          throw formlyUsability.getFieldError(\n            'all-field-watchers-must-have-a-listener',\n            'All field watchers must have a listener', field\n          );\n        }\n        const watchExpression = getWatchExpression(watcher, field, index);\n        const watchListener = getWatchListener(watcher, field, index);\n\n        const type = watcher.type || '$watch';\n        watcher.stopWatching = $scope[type](watchExpression, watchListener, watcher.watchDeep);\n      });\n    }\n\n    function getWatchExpression(watcher, field, index) {\n      let watchExpression = watcher.expression || `model['${field.key}']`;\n      if (angular.isFunction(watchExpression)) {\n        // wrap the field's watch expression so we can call it with the field as the first arg\n        // and the stop function as the last arg as a helper\n        const originalExpression = watchExpression;\n        watchExpression = function formlyWatchExpression() {\n          const args = modifyArgs(watcher, index, ...arguments);\n          return originalExpression(...args);\n        };\n        watchExpression.displayName = `Formly Watch Expression for field for ${field.key}`;\n      }\n      return watchExpression;\n    }\n\n    function getWatchListener(watcher, field, index) {\n      let watchListener = watcher.listener;\n      if (angular.isFunction(watchListener)) {\n        // wrap the field's watch listener so we can call it with the field as the first arg\n        // and the stop function as the last arg as a helper\n        const originalListener = watchListener;\n        watchListener = function formlyWatchListener() {\n          const args = modifyArgs(watcher, index, ...arguments);\n          return originalListener(...args);\n        };\n        watchListener.displayName = `Formly Watch Listener for field for ${field.key}`;\n      }\n      return watchListener;\n    }\n\n    function modifyArgs(watcher, index, ...originalArgs) {\n      return [$scope.fields[index], ...originalArgs, watcher.stopWatching];\n    }\n\n    function evalCloseToFormlyExpression(expression, val, field, index) {\n      const extraLocals = getFormlyFieldLikeLocals(field, index);\n      return formlyUtil.formlyEval($scope, expression, val, val, extraLocals);\n    }\n\n    function getFormlyFieldLikeLocals(field, index) {\n      // this makes it closer to what a regular formlyExpression would be\n      return {\n        options: field,\n        index,\n        formState: $scope.options.formState,\n        formId: $scope.formId\n      };\n    }\n  }\n\n  function formlyFormLink(scope, el, attrs) {\n    setFormController();\n    fixChromeAutocomplete();\n\n    function setFormController() {\n      const formId = attrs.name;\n      scope.formId = formId;\n      scope.theFormlyForm = scope[formId];\n      if (attrs.form) {\n        const getter = $parse(attrs.form);\n        const setter = getter.assign;\n        const parentForm = getter(scope.$parent);\n        if (parentForm) {\n          scope.theFormlyForm = parentForm;\n          if (scope[formId]) {\n            scope.theFormlyForm.$removeControl(scope[formId]);\n          }\n\n          // this next line is probably one of the more dangerous things that angular-formly does to improve the\n          // API for angular-formly forms. It ensures that the NgModelControllers inside of formly-form will be\n          // attached to the form that is passed to formly-form rather than the one that formly-form creates\n          // this is necessary because it's confusing to have a step between the form you pass in\n          // and the fields in that form. It also is because angular doesn't propagate properties like $submitted down\n          // to children forms :-( This line was added to solve this issue:\n          // https://github.com/formly-js/angular-formly/issues/287\n          // luckily, this is how the formController has been accessed by the NgModelController since angular 1.0.0\n          // so I expect it will remain this way for the life of angular 1.x\n          el.removeData('$formController');\n        } else {\n          setter(scope.$parent, scope[formId]);\n        }\n      }\n      if (!scope.theFormlyForm && !formlyConfig.disableWarnings) {\n        /* eslint no-console:0 */\n        formlyWarn(\n          'formly-form-has-no-formcontroller',\n          'Your formly-form does not have a `form` property. Many functions of the form (like validation) may not work',\n          el,\n          scope\n        );\n      }\n    }\n\n    /*\n     * chrome autocomplete lameness\n     * see https://code.google.com/p/chromium/issues/detail?id=468153#c14\n     * ლ(ಠ益ಠლ)   (╯°□°)╯︵ ┻━┻    (◞‸◟;)\n     */\n    function fixChromeAutocomplete() {\n      const global = formlyConfig.extras.removeChromeAutoComplete === true;\n      const offInstance = scope.options && scope.options.removeChromeAutoComplete === false;\n      const onInstance = scope.options && scope.options.removeChromeAutoComplete === true;\n      if ((global && !offInstance) || onInstance) {\n        const input = document.createElement('input');\n        input.setAttribute('autocomplete', 'address-level4');\n        input.setAttribute('hidden', 'true');\n        el[0].appendChild(input);\n      }\n\n    }\n  }\n\n\n  // stateless util functions\n  function toKebabCase(string) {\n    if (string) {\n      return string.replace(/([A-Z])/g, $1 => '-' + $1.toLowerCase());\n    } else {\n      return '';\n    }\n  }\n\n  function isFieldGroup(field) {\n    return field && !!field.fieldGroup;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./directives/formly-form.js\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _angularFix = require('angular-fix');\n\nvar _angularFix2 = _interopRequireDefault(_angularFix);\n\nvar _providersFormlyApiCheck = require('./providers/formlyApiCheck');\n\nvar _providersFormlyApiCheck2 = _interopRequireDefault(_providersFormlyApiCheck);\n\nvar _otherDocsBaseUrl = require('./other/docsBaseUrl');\n\nvar _otherDocsBaseUrl2 = _interopRequireDefault(_otherDocsBaseUrl);\n\nvar _providersFormlyUsability = require('./providers/formlyUsability');\n\nvar _providersFormlyUsability2 = _interopRequireDefault(_providersFormlyUsability);\n\nvar _providersFormlyConfig = require('./providers/formlyConfig');\n\nvar _providersFormlyConfig2 = _interopRequireDefault(_providersFormlyConfig);\n\nvar _providersFormlyValidationMessages = require('./providers/formlyValidationMessages');\n\nvar _providersFormlyValidationMessages2 = _interopRequireDefault(_providersFormlyValidationMessages);\n\nvar _servicesFormlyUtil = require('./services/formlyUtil');\n\nvar _servicesFormlyUtil2 = _interopRequireDefault(_servicesFormlyUtil);\n\nvar _servicesFormlyWarn = require('./services/formlyWarn');\n\nvar _servicesFormlyWarn2 = _interopRequireDefault(_servicesFormlyWarn);\n\nvar _directivesFormlyCustomValidation = require('./directives/formly-custom-validation');\n\nvar _directivesFormlyCustomValidation2 = _interopRequireDefault(_directivesFormlyCustomValidation);\n\nvar _directivesFormlyField = require('./directives/formly-field');\n\nvar _directivesFormlyField2 = _interopRequireDefault(_directivesFormlyField);\n\nvar _directivesFormlyFocus = require('./directives/formly-focus');\n\nvar _directivesFormlyFocus2 = _interopRequireDefault(_directivesFormlyFocus);\n\nvar _directivesFormlyForm = require('./directives/formly-form');\n\nvar _directivesFormlyForm2 = _interopRequireDefault(_directivesFormlyForm);\n\nvar _runFormlyNgModelAttrsManipulator = require('./run/formlyNgModelAttrsManipulator');\n\nvar _runFormlyNgModelAttrsManipulator2 = _interopRequireDefault(_runFormlyNgModelAttrsManipulator);\n\nvar _runFormlyCustomTags = require('./run/formlyCustomTags');\n\nvar _runFormlyCustomTags2 = _interopRequireDefault(_runFormlyCustomTags);\n\nvar ngModuleName = 'formly';\n\nexports['default'] = ngModuleName;\n\nvar ngModule = _angularFix2['default'].module(ngModuleName, []);\n\nngModule.constant('formlyApiCheck', _providersFormlyApiCheck2['default']);\nngModule.constant('formlyErrorAndWarningsUrlPrefix', _otherDocsBaseUrl2['default']);\nngModule.constant('formlyVersion', VERSION); // <-- webpack variable\n\nngModule.provider('formlyUsability', _providersFormlyUsability2['default']);\nngModule.provider('formlyConfig', _providersFormlyConfig2['default']);\n\nngModule.factory('formlyValidationMessages', _providersFormlyValidationMessages2['default']);\nngModule.factory('formlyUtil', _servicesFormlyUtil2['default']);\nngModule.factory('formlyWarn', _servicesFormlyWarn2['default']);\n\nngModule.directive('formlyCustomValidation', _directivesFormlyCustomValidation2['default']);\nngModule.directive('formlyField', _directivesFormlyField2['default']);\nngModule.directive('formlyFocus', _directivesFormlyFocus2['default']);\nngModule.directive('formlyForm', _directivesFormlyForm2['default']);\n\nngModule.run(_runFormlyNgModelAttrsManipulator2['default']);\nngModule.run(_runFormlyCustomTags2['default']);\nmodule.exports = exports['default'];\n\n\n/** WEBPACK FOOTER **\n ** ./index.common.js\n **/","import angular from 'angular-fix';\n\nimport formlyApiCheck from './providers/formlyApiCheck';\nimport formlyErrorAndWarningsUrlPrefix from './other/docsBaseUrl';\nimport formlyUsability from './providers/formlyUsability';\nimport formlyConfig from './providers/formlyConfig';\nimport formlyValidationMessages from './providers/formlyValidationMessages';\nimport formlyUtil from './services/formlyUtil';\nimport formlyWarn from './services/formlyWarn';\n\nimport formlyCustomValidation from './directives/formly-custom-validation';\nimport formlyField from './directives/formly-field';\nimport formlyFocus from './directives/formly-focus';\nimport formlyForm from './directives/formly-form';\n\nimport formlyNgModelAttrsManipulator from './run/formlyNgModelAttrsManipulator';\nimport formlyCustomTags from './run/formlyCustomTags';\n\nconst ngModuleName = 'formly';\n\nexport default ngModuleName;\n\nconst ngModule = angular.module(ngModuleName, []);\n\nngModule.constant('formlyApiCheck', formlyApiCheck);\nngModule.constant('formlyErrorAndWarningsUrlPrefix', formlyErrorAndWarningsUrlPrefix);\nngModule.constant('formlyVersion', VERSION); // <-- webpack variable\n\nngModule.provider('formlyUsability', formlyUsability);\nngModule.provider('formlyConfig', formlyConfig);\n\nngModule.factory('formlyValidationMessages', formlyValidationMessages);\nngModule.factory('formlyUtil', formlyUtil);\nngModule.factory('formlyWarn', formlyWarn);\n\nngModule.directive('formlyCustomValidation', formlyCustomValidation);\nngModule.directive('formlyField', formlyField);\nngModule.directive('formlyFocus', formlyFocus);\nngModule.directive('formlyForm', formlyForm);\n\nngModule.run(formlyNgModelAttrsManipulator);\nngModule.run(formlyCustomTags);\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./index.common.js\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _angularFix = require('angular-fix');\n\nvar _angularFix2 = _interopRequireDefault(_angularFix);\n\nvar _apiCheck = require('api-check');\n\nvar _apiCheck2 = _interopRequireDefault(_apiCheck);\n\nvar apiCheck = (0, _apiCheck2['default'])({\n  output: {\n    prefix: 'angular-formly:',\n    docsBaseUrl: require('../other/docsBaseUrl')\n  }\n});\n\nfunction shapeRequiredIfNot(otherProps, propChecker) {\n  if (!_angularFix2['default'].isArray(otherProps)) {\n    otherProps = [otherProps];\n  }\n  var type = 'specified if these are not specified: `' + otherProps.join(', ') + '` (otherwise it\\'s optional)';\n\n  function shapeRequiredIfNotDefinition(prop, propName, location, obj) {\n    var propExists = obj && obj.hasOwnProperty(propName);\n    var otherPropsExist = otherProps.some(function (otherProp) {\n      return obj && obj.hasOwnProperty(otherProp);\n    });\n    if (!otherPropsExist && !propExists) {\n      return apiCheck.utils.getError(propName, location, type);\n    } else if (propExists) {\n      return propChecker(prop, propName, location, obj);\n    }\n  }\n\n  shapeRequiredIfNotDefinition.type = type;\n  return apiCheck.utils.checkerHelpers.setupChecker(shapeRequiredIfNotDefinition);\n}\n\nvar formlyExpression = apiCheck.oneOfType([apiCheck.string, apiCheck.func]);\nvar specifyWrapperType = apiCheck.typeOrArrayOf(apiCheck.string).nullable;\n\nvar apiCheckProperty = apiCheck.func;\n\nvar apiCheckInstanceProperty = apiCheck.shape.onlyIf('apiCheck', apiCheck.func.withProperties({\n  warn: apiCheck.func,\n  'throw': apiCheck.func,\n  shape: apiCheck.func\n}));\n\nvar apiCheckFunctionProperty = apiCheck.shape.onlyIf('apiCheck', apiCheck.oneOf(['throw', 'warn']));\n\nvar formlyWrapperType = apiCheck.shape({\n  name: shapeRequiredIfNot('types', apiCheck.string).optional,\n  template: apiCheck.shape.ifNot('templateUrl', apiCheck.string).optional,\n  templateUrl: apiCheck.shape.ifNot('template', apiCheck.string).optional,\n  types: apiCheck.typeOrArrayOf(apiCheck.string).optional,\n  overwriteOk: apiCheck.bool.optional,\n  apiCheck: apiCheckProperty.optional,\n  apiCheckInstance: apiCheckInstanceProperty.optional,\n  apiCheckFunction: apiCheckFunctionProperty.optional,\n  apiCheckOptions: apiCheck.object.optional\n}).strict;\n\nvar expressionProperties = apiCheck.objectOf(apiCheck.oneOfType([formlyExpression, apiCheck.shape({\n  expression: formlyExpression,\n  message: formlyExpression.optional\n}).strict]));\n\nvar modelChecker = apiCheck.oneOfType([apiCheck.string, apiCheck.object]);\n\nvar templateManipulators = apiCheck.shape({\n  preWrapper: apiCheck.arrayOf(apiCheck.func).nullable.optional,\n  postWrapper: apiCheck.arrayOf(apiCheck.func).nullable.optional\n}).strict.nullable;\n\nvar validatorChecker = apiCheck.objectOf(apiCheck.oneOfType([formlyExpression, apiCheck.shape({\n  expression: formlyExpression,\n  message: formlyExpression.optional\n}).strict]));\n\nvar fieldOptionsApiShape = {\n  $$hashKey: apiCheck.any.optional,\n  type: apiCheck.shape.ifNot(['template', 'templateUrl'], apiCheck.string).optional,\n  template: apiCheck.shape.ifNot(['type', 'templateUrl'], apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n  templateUrl: apiCheck.shape.ifNot(['type', 'template'], apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n  key: apiCheck.oneOfType([apiCheck.string, apiCheck.number]).optional,\n  model: modelChecker.optional,\n  originalModel: modelChecker.optional,\n  className: apiCheck.string.optional,\n  id: apiCheck.string.optional,\n  name: apiCheck.string.optional,\n  expressionProperties: expressionProperties.optional,\n  extras: apiCheck.shape({\n    validateOnModelChange: apiCheck.bool.optional,\n    skipNgModelAttrsManipulator: apiCheck.oneOfType([apiCheck.string, apiCheck.bool]).optional\n  }).strict.optional,\n  data: apiCheck.object.optional,\n  templateOptions: apiCheck.object.optional,\n  wrapper: specifyWrapperType.optional,\n  modelOptions: apiCheck.shape({\n    updateOn: apiCheck.string.optional,\n    debounce: apiCheck.oneOfType([apiCheck.objectOf(apiCheck.number), apiCheck.number]).optional,\n    allowInvalid: apiCheck.bool.optional,\n    getterSetter: apiCheck.bool.optional,\n    timezone: apiCheck.string.optional\n  }).optional,\n  watcher: apiCheck.typeOrArrayOf(apiCheck.shape({\n    expression: formlyExpression.optional,\n    listener: formlyExpression\n  })).optional,\n  validators: validatorChecker.optional,\n  asyncValidators: validatorChecker.optional,\n  parsers: apiCheck.arrayOf(formlyExpression).optional,\n  formatters: apiCheck.arrayOf(formlyExpression).optional,\n  noFormControl: apiCheck.bool.optional,\n  hide: apiCheck.bool.optional,\n  hideExpression: formlyExpression.optional,\n  ngModelElAttrs: apiCheck.objectOf(apiCheck.string).optional,\n  ngModelAttrs: apiCheck.objectOf(apiCheck.shape({\n    statement: apiCheck.shape.ifNot(['value', 'attribute', 'bound', 'boolean'], apiCheck.any).optional,\n    value: apiCheck.shape.ifNot('statement', apiCheck.any).optional,\n    attribute: apiCheck.shape.ifNot('statement', apiCheck.any).optional,\n    bound: apiCheck.shape.ifNot('statement', apiCheck.any).optional,\n    boolean: apiCheck.shape.ifNot('statement', apiCheck.any).optional\n  }).strict).optional,\n  elementAttributes: apiCheck.objectOf(apiCheck.string).optional,\n  optionsTypes: apiCheck.typeOrArrayOf(apiCheck.string).optional,\n  link: apiCheck.func.optional,\n  controller: apiCheck.oneOfType([apiCheck.string, apiCheck.func, apiCheck.array]).optional,\n  validation: apiCheck.shape({\n    show: apiCheck.bool.nullable.optional,\n    messages: apiCheck.objectOf(formlyExpression).optional,\n    errorExistsAndShouldBeVisible: apiCheck.bool.optional\n  }).optional,\n  formControl: apiCheck.typeOrArrayOf(apiCheck.object).optional,\n  value: apiCheck.func.optional,\n  runExpressions: apiCheck.func.optional,\n  templateManipulators: templateManipulators.optional,\n  resetModel: apiCheck.func.optional,\n  updateInitialValue: apiCheck.func.optional,\n  initialValue: apiCheck.any.optional,\n  defaultValue: apiCheck.any.optional\n};\n\nvar formlyFieldOptions = apiCheck.shape(fieldOptionsApiShape).strict;\n\nvar formOptionsApi = apiCheck.shape({\n  formState: apiCheck.object.optional,\n  resetModel: apiCheck.func.optional,\n  updateInitialValue: apiCheck.func.optional,\n  removeChromeAutoComplete: apiCheck.bool.optional,\n  templateManipulators: templateManipulators.optional,\n  wrapper: specifyWrapperType.optional,\n  fieldTransform: apiCheck.oneOfType([apiCheck.func, apiCheck.array]).optional,\n  data: apiCheck.object.optional\n}).strict;\n\nvar fieldGroup = apiCheck.shape({\n  $$hashKey: apiCheck.any.optional,\n  key: apiCheck.oneOfType([apiCheck.string, apiCheck.number]).optional,\n  // danger. Nested field groups wont get api-checked...\n  fieldGroup: apiCheck.arrayOf(apiCheck.oneOfType([formlyFieldOptions, apiCheck.object])),\n  className: apiCheck.string.optional,\n  options: formOptionsApi.optional,\n  hide: apiCheck.bool.optional,\n  hideExpression: formlyExpression.optional,\n  data: apiCheck.object.optional,\n  model: modelChecker.optional,\n  form: apiCheck.object.optional,\n  elementAttributes: apiCheck.objectOf(apiCheck.string).optional\n}).strict;\n\nvar typeOptionsDefaultOptions = _angularFix2['default'].copy(fieldOptionsApiShape);\ntypeOptionsDefaultOptions.key = apiCheck.string.optional;\n\nvar formlyTypeOptions = apiCheck.shape({\n  name: apiCheck.string,\n  template: apiCheck.shape.ifNot('templateUrl', apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n  templateUrl: apiCheck.shape.ifNot('template', apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n  controller: apiCheck.oneOfType([apiCheck.func, apiCheck.string, apiCheck.array]).optional,\n  link: apiCheck.func.optional,\n  defaultOptions: apiCheck.oneOfType([apiCheck.func, apiCheck.shape(typeOptionsDefaultOptions)]).optional,\n  'extends': apiCheck.string.optional,\n  wrapper: specifyWrapperType.optional,\n  data: apiCheck.object.optional,\n  apiCheck: apiCheckProperty.optional,\n  apiCheckInstance: apiCheckInstanceProperty.optional,\n  apiCheckFunction: apiCheckFunctionProperty.optional,\n  apiCheckOptions: apiCheck.object.optional,\n  overwriteOk: apiCheck.bool.optional\n}).strict;\n\n_angularFix2['default'].extend(apiCheck, {\n  formlyTypeOptions: formlyTypeOptions, formlyFieldOptions: formlyFieldOptions, formlyExpression: formlyExpression, formlyWrapperType: formlyWrapperType, fieldGroup: fieldGroup, formOptionsApi: formOptionsApi\n});\n\nexports['default'] = apiCheck;\nmodule.exports = exports['default'];\n\n\n/** WEBPACK FOOTER **\n ** ./providers/formlyApiCheck.js\n **/","import angular from 'angular-fix';\nimport apiCheckFactory from 'api-check';\n\nconst apiCheck = apiCheckFactory({\n  output: {\n    prefix: 'angular-formly:',\n    docsBaseUrl: require('../other/docsBaseUrl')\n  }\n});\n\nfunction shapeRequiredIfNot(otherProps, propChecker) {\n  if (!angular.isArray(otherProps)) {\n    otherProps = [otherProps];\n  }\n  const type = `specified if these are not specified: \\`${otherProps.join(', ')}\\` (otherwise it's optional)`;\n\n  function shapeRequiredIfNotDefinition(prop, propName, location, obj) {\n    const propExists = obj && obj.hasOwnProperty(propName);\n    const otherPropsExist = otherProps.some(function(otherProp) {\n      return obj && obj.hasOwnProperty(otherProp);\n    });\n    if (!otherPropsExist && !propExists) {\n      return apiCheck.utils.getError(propName, location, type);\n    } else if (propExists) {\n      return propChecker(prop, propName, location, obj);\n    }\n  }\n\n  shapeRequiredIfNotDefinition.type = type;\n  return apiCheck.utils.checkerHelpers.setupChecker(shapeRequiredIfNotDefinition);\n}\n\nconst formlyExpression = apiCheck.oneOfType([apiCheck.string, apiCheck.func]);\nconst specifyWrapperType = apiCheck.typeOrArrayOf(apiCheck.string).nullable;\n\nconst apiCheckProperty = apiCheck.func;\n\nconst apiCheckInstanceProperty = apiCheck.shape.onlyIf('apiCheck', apiCheck.func.withProperties({\n  warn: apiCheck.func,\n  throw: apiCheck.func,\n  shape: apiCheck.func\n}));\n\nconst apiCheckFunctionProperty = apiCheck.shape.onlyIf('apiCheck', apiCheck.oneOf(['throw', 'warn']));\n\nconst formlyWrapperType = apiCheck.shape({\n  name: shapeRequiredIfNot('types', apiCheck.string).optional,\n  template: apiCheck.shape.ifNot('templateUrl', apiCheck.string).optional,\n  templateUrl: apiCheck.shape.ifNot('template', apiCheck.string).optional,\n  types: apiCheck.typeOrArrayOf(apiCheck.string).optional,\n  overwriteOk: apiCheck.bool.optional,\n  apiCheck: apiCheckProperty.optional,\n  apiCheckInstance: apiCheckInstanceProperty.optional,\n  apiCheckFunction: apiCheckFunctionProperty.optional,\n  apiCheckOptions: apiCheck.object.optional\n}).strict;\n\nconst expressionProperties = apiCheck.objectOf(apiCheck.oneOfType([\n  formlyExpression,\n  apiCheck.shape({\n    expression: formlyExpression,\n    message: formlyExpression.optional\n  }).strict\n]));\n\nconst modelChecker = apiCheck.oneOfType([apiCheck.string, apiCheck.object]);\n\nconst templateManipulators = apiCheck.shape({\n  preWrapper: apiCheck.arrayOf(apiCheck.func).nullable.optional,\n  postWrapper: apiCheck.arrayOf(apiCheck.func).nullable.optional\n}).strict.nullable;\n\nconst validatorChecker = apiCheck.objectOf(apiCheck.oneOfType([\n  formlyExpression, apiCheck.shape({\n    expression: formlyExpression,\n    message: formlyExpression.optional\n  }).strict\n]));\n\nconst fieldOptionsApiShape = {\n  $$hashKey: apiCheck.any.optional,\n  type: apiCheck.shape.ifNot(['template', 'templateUrl'], apiCheck.string).optional,\n  template: apiCheck.shape.ifNot(\n    ['type', 'templateUrl'],\n    apiCheck.oneOfType([apiCheck.string, apiCheck.func])\n  ).optional,\n  templateUrl: apiCheck.shape.ifNot(\n    ['type', 'template'],\n    apiCheck.oneOfType([apiCheck.string, apiCheck.func])\n  ).optional,\n  key: apiCheck.oneOfType([apiCheck.string, apiCheck.number]).optional,\n  model: modelChecker.optional,\n  originalModel: modelChecker.optional,\n  className: apiCheck.string.optional,\n  id: apiCheck.string.optional,\n  name: apiCheck.string.optional,\n  expressionProperties: expressionProperties.optional,\n  extras: apiCheck.shape({\n    validateOnModelChange: apiCheck.bool.optional,\n    skipNgModelAttrsManipulator: apiCheck.oneOfType([\n      apiCheck.string, apiCheck.bool\n    ]).optional\n  }).strict.optional,\n  data: apiCheck.object.optional,\n  templateOptions: apiCheck.object.optional,\n  wrapper: specifyWrapperType.optional,\n  modelOptions: apiCheck.shape({\n    updateOn: apiCheck.string.optional,\n    debounce: apiCheck.oneOfType([\n      apiCheck.objectOf(apiCheck.number), apiCheck.number\n    ]).optional,\n    allowInvalid: apiCheck.bool.optional,\n    getterSetter: apiCheck.bool.optional,\n    timezone: apiCheck.string.optional\n  }).optional,\n  watcher: apiCheck.typeOrArrayOf(\n    apiCheck.shape({\n      expression: formlyExpression.optional,\n      listener: formlyExpression\n    })\n  ).optional,\n  validators: validatorChecker.optional,\n  asyncValidators: validatorChecker.optional,\n  parsers: apiCheck.arrayOf(formlyExpression).optional,\n  formatters: apiCheck.arrayOf(formlyExpression).optional,\n  noFormControl: apiCheck.bool.optional,\n  hide: apiCheck.bool.optional,\n  hideExpression: formlyExpression.optional,\n  ngModelElAttrs: apiCheck.objectOf(apiCheck.string).optional,\n  ngModelAttrs: apiCheck.objectOf(apiCheck.shape({\n    statement: apiCheck.shape.ifNot(['value', 'attribute', 'bound', 'boolean'], apiCheck.any).optional,\n    value: apiCheck.shape.ifNot('statement', apiCheck.any).optional,\n    attribute: apiCheck.shape.ifNot('statement', apiCheck.any).optional,\n    bound: apiCheck.shape.ifNot('statement', apiCheck.any).optional,\n    boolean: apiCheck.shape.ifNot('statement', apiCheck.any).optional\n  }).strict).optional,\n  elementAttributes: apiCheck.objectOf(apiCheck.string).optional,\n  optionsTypes: apiCheck.typeOrArrayOf(apiCheck.string).optional,\n  link: apiCheck.func.optional,\n  controller: apiCheck.oneOfType([\n    apiCheck.string, apiCheck.func, apiCheck.array\n  ]).optional,\n  validation: apiCheck.shape({\n    show: apiCheck.bool.nullable.optional,\n    messages: apiCheck.objectOf(formlyExpression).optional,\n    errorExistsAndShouldBeVisible: apiCheck.bool.optional\n  }).optional,\n  formControl: apiCheck.typeOrArrayOf(apiCheck.object).optional,\n  value: apiCheck.func.optional,\n  runExpressions: apiCheck.func.optional,\n  templateManipulators: templateManipulators.optional,\n  resetModel: apiCheck.func.optional,\n  updateInitialValue: apiCheck.func.optional,\n  initialValue: apiCheck.any.optional,\n  defaultValue: apiCheck.any.optional\n};\n\n\nconst formlyFieldOptions = apiCheck.shape(fieldOptionsApiShape).strict;\n\nconst formOptionsApi = apiCheck.shape({\n  formState: apiCheck.object.optional,\n  resetModel: apiCheck.func.optional,\n  updateInitialValue: apiCheck.func.optional,\n  removeChromeAutoComplete: apiCheck.bool.optional,\n  templateManipulators: templateManipulators.optional,\n  wrapper: specifyWrapperType.optional,\n  fieldTransform: apiCheck.oneOfType([\n    apiCheck.func, apiCheck.array\n  ]).optional,\n  data: apiCheck.object.optional\n}).strict;\n\n\nconst fieldGroup = apiCheck.shape({\n  $$hashKey: apiCheck.any.optional,\n  key: apiCheck.oneOfType([apiCheck.string, apiCheck.number]).optional,\n  // danger. Nested field groups wont get api-checked...\n  fieldGroup: apiCheck.arrayOf(apiCheck.oneOfType([formlyFieldOptions, apiCheck.object])),\n  className: apiCheck.string.optional,\n  options: formOptionsApi.optional,\n  hide: apiCheck.bool.optional,\n  hideExpression: formlyExpression.optional,\n  data: apiCheck.object.optional,\n  model: modelChecker.optional,\n  form: apiCheck.object.optional,\n  elementAttributes: apiCheck.objectOf(apiCheck.string).optional\n}).strict;\n\nconst typeOptionsDefaultOptions = angular.copy(fieldOptionsApiShape);\ntypeOptionsDefaultOptions.key = apiCheck.string.optional;\n\nconst formlyTypeOptions = apiCheck.shape({\n  name: apiCheck.string,\n  template: apiCheck.shape.ifNot('templateUrl', apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n  templateUrl: apiCheck.shape.ifNot('template', apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n  controller: apiCheck.oneOfType([\n    apiCheck.func, apiCheck.string, apiCheck.array\n  ]).optional,\n  link: apiCheck.func.optional,\n  defaultOptions: apiCheck.oneOfType([\n    apiCheck.func, apiCheck.shape(typeOptionsDefaultOptions)\n  ]).optional,\n  extends: apiCheck.string.optional,\n  wrapper: specifyWrapperType.optional,\n  data: apiCheck.object.optional,\n  apiCheck: apiCheckProperty.optional,\n  apiCheckInstance: apiCheckInstanceProperty.optional,\n  apiCheckFunction: apiCheckFunctionProperty.optional,\n  apiCheckOptions: apiCheck.object.optional,\n  overwriteOk: apiCheck.bool.optional\n}).strict;\n\nangular.extend(apiCheck, {\n  formlyTypeOptions, formlyFieldOptions, formlyExpression, formlyWrapperType, fieldGroup, formOptionsApi\n});\n\nexport default apiCheck;\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./providers/formlyApiCheck.js\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }\n\nvar _angularFix = require('angular-fix');\n\nvar _angularFix2 = _interopRequireDefault(_angularFix);\n\nvar _otherUtils = require('../other/utils');\n\nvar _otherUtils2 = _interopRequireDefault(_otherUtils);\n\nexports['default'] = formlyConfig;\n\n// @ngInject\nfunction formlyConfig(formlyUsabilityProvider, formlyErrorAndWarningsUrlPrefix, formlyApiCheck) {\n  var _this2 = this;\n\n  var typeMap = {};\n  var templateWrappersMap = {};\n  var defaultWrapperName = 'default';\n  var _this = this;\n  var getError = formlyUsabilityProvider.getFormlyError;\n\n  _angularFix2['default'].extend(this, {\n    setType: setType,\n    getType: getType,\n    getTypeHeritage: getTypeHeritage,\n    setWrapper: setWrapper,\n    getWrapper: getWrapper,\n    getWrapperByType: getWrapperByType,\n    removeWrapperByName: removeWrapperByName,\n    removeWrappersForType: removeWrappersForType,\n    disableWarnings: false,\n    extras: {\n      disableNgModelAttrsManipulator: false,\n      ngModelAttrsManipulatorPreferUnbound: false,\n      removeChromeAutoComplete: false,\n      defaultHideDirective: 'ng-if',\n      getFieldId: null,\n      explicitAsync: false\n    },\n    templateManipulators: {\n      preWrapper: [],\n      postWrapper: []\n    },\n    $get: function $get() {\n      return _this2;\n    }\n  });\n\n  function setType(options) {\n    if (_angularFix2['default'].isArray(options)) {\n      var _ret = (function () {\n        var allTypes = [];\n        _angularFix2['default'].forEach(options, function (item) {\n          allTypes.push(setType(item));\n        });\n        return {\n          v: allTypes\n        };\n      })();\n\n      if (typeof _ret === 'object') return _ret.v;\n    } else if (_angularFix2['default'].isObject(options)) {\n      checkType(options);\n      if (options['extends']) {\n        extendTypeOptions(options);\n      }\n      typeMap[options.name] = options;\n      return typeMap[options.name];\n    } else {\n      throw getError('You must provide an object or array for setType. You provided: ' + JSON.stringify(arguments));\n    }\n  }\n\n  function checkType(options) {\n    formlyApiCheck['throw'](formlyApiCheck.formlyTypeOptions, options, {\n      prefix: 'formlyConfig.setType',\n      url: 'settype-validation-failed'\n    });\n    if (!options.overwriteOk) {\n      checkOverwrite(options.name, typeMap, options, 'types');\n    } else {\n      options.overwriteOk = undefined;\n    }\n  }\n\n  function extendTypeOptions(options) {\n    var extendsType = getType(options['extends'], true, options);\n    extendTypeControllerFunction(options, extendsType);\n    extendTypeLinkFunction(options, extendsType);\n    extendTypeDefaultOptions(options, extendsType);\n    _otherUtils2['default'].reverseDeepMerge(options, extendsType);\n    extendTemplate(options, extendsType);\n  }\n\n  function extendTemplate(options, extendsType) {\n    if (options.template && extendsType.templateUrl) {\n      delete options.templateUrl;\n    } else if (options.templateUrl && extendsType.template) {\n      delete options.template;\n    }\n  }\n\n  function extendTypeControllerFunction(options, extendsType) {\n    var extendsCtrl = extendsType.controller;\n    if (!_angularFix2['default'].isDefined(extendsCtrl)) {\n      return;\n    }\n    var optionsCtrl = options.controller;\n    if (_angularFix2['default'].isDefined(optionsCtrl)) {\n      options.controller = function ($scope, $controller) {\n        $controller(extendsCtrl, { $scope: $scope });\n        $controller(optionsCtrl, { $scope: $scope });\n      };\n      options.controller.$inject = ['$scope', '$controller'];\n    } else {\n      options.controller = extendsCtrl;\n    }\n  }\n\n  function extendTypeLinkFunction(options, extendsType) {\n    var extendsFn = extendsType.link;\n    if (!_angularFix2['default'].isDefined(extendsFn)) {\n      return;\n    }\n    var optionsFn = options.link;\n    if (_angularFix2['default'].isDefined(optionsFn)) {\n      options.link = function () {\n        extendsFn.apply(undefined, arguments);\n        optionsFn.apply(undefined, arguments);\n      };\n    } else {\n      options.link = extendsFn;\n    }\n  }\n\n  function extendTypeDefaultOptions(options, extendsType) {\n    var extendsDO = extendsType.defaultOptions;\n    if (!_angularFix2['default'].isDefined(extendsDO)) {\n      return;\n    }\n    var optionsDO = options.defaultOptions;\n    var optionsDOIsFn = _angularFix2['default'].isFunction(optionsDO);\n    var extendsDOIsFn = _angularFix2['default'].isFunction(extendsDO);\n    if (extendsDOIsFn) {\n      options.defaultOptions = function defaultOptions(opts, scope) {\n        var extendsDefaultOptions = extendsDO(opts, scope);\n        var mergedDefaultOptions = {};\n        _otherUtils2['default'].reverseDeepMerge(mergedDefaultOptions, opts, extendsDefaultOptions);\n        var extenderOptionsDefaultOptions = optionsDO;\n        if (optionsDOIsFn) {\n          extenderOptionsDefaultOptions = extenderOptionsDefaultOptions(mergedDefaultOptions, scope);\n        }\n        _otherUtils2['default'].reverseDeepMerge(extendsDefaultOptions, extenderOptionsDefaultOptions);\n        return extendsDefaultOptions;\n      };\n    } else if (optionsDOIsFn) {\n      options.defaultOptions = function defaultOptions(opts, scope) {\n        var newDefaultOptions = {};\n        _otherUtils2['default'].reverseDeepMerge(newDefaultOptions, opts, extendsDO);\n        return optionsDO(newDefaultOptions, scope);\n      };\n    }\n  }\n\n  function getType(name, throwError, errorContext) {\n    if (!name) {\n      return undefined;\n    }\n    var type = typeMap[name];\n    if (!type && throwError === true) {\n      throw getError('There is no type by the name of \"' + name + '\": ' + JSON.stringify(errorContext));\n    } else {\n      return type;\n    }\n  }\n\n  function getTypeHeritage(parent) {\n    var heritage = [];\n    var type = parent;\n    if (_angularFix2['default'].isString(type)) {\n      type = getType(parent);\n    }\n    parent = type['extends'];\n    while (parent) {\n      type = getType(parent);\n      heritage.push(type);\n      parent = type['extends'];\n    }\n    return heritage;\n  }\n\n  function setWrapper(_x, _x2) {\n    var _again = true;\n\n    _function: while (_again) {\n      var options = _x,\n          name = _x2;\n      _again = false;\n\n      if (_angularFix2['default'].isArray(options)) {\n        return options.map(function (wrapperOptions) {\n          return setWrapper(wrapperOptions);\n        });\n      } else if (_angularFix2['default'].isObject(options)) {\n        options.types = getOptionsTypes(options);\n        options.name = getOptionsName(options, name);\n        checkWrapperAPI(options);\n        templateWrappersMap[options.name] = options;\n        return options;\n      } else if (_angularFix2['default'].isString(options)) {\n        _x = {\n          template: options,\n          name: name\n        };\n        _x2 = undefined;\n        _again = true;\n        continue _function;\n      }\n    }\n  }\n\n  function getOptionsTypes(options) {\n    if (_angularFix2['default'].isString(options.types)) {\n      return [options.types];\n    }\n    if (!_angularFix2['default'].isDefined(options.types)) {\n      return [];\n    } else {\n      return options.types;\n    }\n  }\n\n  function getOptionsName(options, name) {\n    return options.name || name || options.types.join(' ') || defaultWrapperName;\n  }\n\n  function checkWrapperAPI(options) {\n    formlyUsabilityProvider.checkWrapper(options);\n    if (options.template) {\n      formlyUsabilityProvider.checkWrapperTemplate(options.template, options);\n    }\n    if (!options.overwriteOk) {\n      checkOverwrite(options.name, templateWrappersMap, options, 'templateWrappers');\n    } else {\n      delete options.overwriteOk;\n    }\n    checkWrapperTypes(options);\n  }\n\n  function checkWrapperTypes(options) {\n    var shouldThrow = !_angularFix2['default'].isArray(options.types) || !options.types.every(_angularFix2['default'].isString);\n    if (shouldThrow) {\n      throw getError('Attempted to create a template wrapper with types that is not a string or an array of strings');\n    }\n  }\n\n  function checkOverwrite(property, object, newValue, objectName) {\n    if (object.hasOwnProperty(property)) {\n      warn('overwriting-types-or-wrappers', ['Attempting to overwrite ' + property + ' on ' + objectName + ' which is currently', JSON.stringify(object[property]) + ' with ' + JSON.stringify(newValue), 'To supress this warning, specify the property \"overwriteOk: true\"'].join(' '));\n    }\n  }\n\n  function getWrapper(name) {\n    return templateWrappersMap[name || defaultWrapperName];\n  }\n\n  function getWrapperByType(type) {\n    /* eslint prefer-const:0 */\n    var wrappers = [];\n    for (var _name in templateWrappersMap) {\n      if (templateWrappersMap.hasOwnProperty(_name)) {\n        if (templateWrappersMap[_name].types && templateWrappersMap[_name].types.indexOf(type) !== -1) {\n          wrappers.push(templateWrappersMap[_name]);\n        }\n      }\n    }\n    return wrappers;\n  }\n\n  function removeWrapperByName(name) {\n    var wrapper = templateWrappersMap[name];\n    delete templateWrappersMap[name];\n    return wrapper;\n  }\n\n  function removeWrappersForType(type) {\n    var wrappers = getWrapperByType(type);\n    if (!wrappers) {\n      return undefined;\n    }\n    if (!_angularFix2['default'].isArray(wrappers)) {\n      return removeWrapperByName(wrappers.name);\n    } else {\n      wrappers.forEach(function (wrapper) {\n        return removeWrapperByName(wrapper.name);\n      });\n      return wrappers;\n    }\n  }\n\n  function warn() {\n    if (!_this.disableWarnings && console.warn) {\n      /* eslint no-console:0 */\n      var args = Array.prototype.slice.call(arguments);\n      var warnInfoSlug = args.shift();\n      args.unshift('Formly Warning:');\n      args.push('' + formlyErrorAndWarningsUrlPrefix + warnInfoSlug);\n      console.warn.apply(console, _toConsumableArray(args));\n    }\n  }\n}\nmodule.exports = exports['default'];\n\n\n/** WEBPACK FOOTER **\n ** ./providers/formlyConfig.js\n **/","import angular from 'angular-fix';\nimport utils from '../other/utils';\n\nexport default formlyConfig;\n\n// @ngInject\nfunction formlyConfig(formlyUsabilityProvider, formlyErrorAndWarningsUrlPrefix, formlyApiCheck) {\n\n  const typeMap = {};\n  const templateWrappersMap = {};\n  const defaultWrapperName = 'default';\n  const _this = this;\n  const getError = formlyUsabilityProvider.getFormlyError;\n\n  angular.extend(this, {\n    setType,\n    getType,\n    getTypeHeritage,\n    setWrapper,\n    getWrapper,\n    getWrapperByType,\n    removeWrapperByName,\n    removeWrappersForType,\n    disableWarnings: false,\n    extras: {\n      disableNgModelAttrsManipulator: false,\n      ngModelAttrsManipulatorPreferUnbound: false,\n      removeChromeAutoComplete: false,\n      defaultHideDirective: 'ng-if',\n      getFieldId: null,\n      explicitAsync: false\n    },\n    templateManipulators: {\n      preWrapper: [],\n      postWrapper: []\n    },\n    $get: () => this\n  });\n\n  function setType(options) {\n    if (angular.isArray(options)) {\n      const allTypes = [];\n      angular.forEach(options, item => {\n        allTypes.push(setType(item));\n      });\n      return allTypes;\n    } else if (angular.isObject(options)) {\n      checkType(options);\n      if (options.extends) {\n        extendTypeOptions(options);\n      }\n      typeMap[options.name] = options;\n      return typeMap[options.name];\n    } else {\n      throw getError(`You must provide an object or array for setType. You provided: ${JSON.stringify(arguments)}`);\n    }\n  }\n\n  function checkType(options) {\n    formlyApiCheck.throw(formlyApiCheck.formlyTypeOptions, options, {\n      prefix: 'formlyConfig.setType',\n      url: 'settype-validation-failed'\n    });\n    if (!options.overwriteOk) {\n      checkOverwrite(options.name, typeMap, options, 'types');\n    } else {\n      options.overwriteOk = undefined;\n    }\n  }\n\n  function extendTypeOptions(options) {\n    const extendsType = getType(options.extends, true, options);\n    extendTypeControllerFunction(options, extendsType);\n    extendTypeLinkFunction(options, extendsType);\n    extendTypeDefaultOptions(options, extendsType);\n    utils.reverseDeepMerge(options, extendsType);\n    extendTemplate(options, extendsType);\n  }\n\n  function extendTemplate(options, extendsType) {\n    if (options.template && extendsType.templateUrl) {\n      delete options.templateUrl;\n    } else if (options.templateUrl && extendsType.template) {\n      delete options.template;\n    }\n  }\n\n  function extendTypeControllerFunction(options, extendsType) {\n    const extendsCtrl = extendsType.controller;\n    if (!angular.isDefined(extendsCtrl)) {\n      return;\n    }\n    const optionsCtrl = options.controller;\n    if (angular.isDefined(optionsCtrl)) {\n      options.controller = function($scope, $controller) {\n        $controller(extendsCtrl, {$scope});\n        $controller(optionsCtrl, {$scope});\n      };\n      options.controller.$inject = ['$scope', '$controller'];\n    } else {\n      options.controller = extendsCtrl;\n    }\n  }\n\n  function extendTypeLinkFunction(options, extendsType) {\n    const extendsFn = extendsType.link;\n    if (!angular.isDefined(extendsFn)) {\n      return;\n    }\n    const optionsFn = options.link;\n    if (angular.isDefined(optionsFn)) {\n      options.link = function() {\n        extendsFn(...arguments);\n        optionsFn(...arguments);\n      };\n    } else {\n      options.link = extendsFn;\n    }\n  }\n\n  function extendTypeDefaultOptions(options, extendsType) {\n    const extendsDO = extendsType.defaultOptions;\n    if (!angular.isDefined(extendsDO)) {\n      return;\n    }\n    const optionsDO = options.defaultOptions;\n    const optionsDOIsFn = angular.isFunction(optionsDO);\n    const extendsDOIsFn = angular.isFunction(extendsDO);\n    if (extendsDOIsFn) {\n      options.defaultOptions = function defaultOptions(opts, scope) {\n        const extendsDefaultOptions = extendsDO(opts, scope);\n        const mergedDefaultOptions = {};\n        utils.reverseDeepMerge(mergedDefaultOptions, opts, extendsDefaultOptions);\n        let extenderOptionsDefaultOptions = optionsDO;\n        if (optionsDOIsFn) {\n          extenderOptionsDefaultOptions = extenderOptionsDefaultOptions(mergedDefaultOptions, scope);\n        }\n        utils.reverseDeepMerge(extendsDefaultOptions, extenderOptionsDefaultOptions);\n        return extendsDefaultOptions;\n      };\n    } else if (optionsDOIsFn) {\n      options.defaultOptions = function defaultOptions(opts, scope) {\n        const newDefaultOptions = {};\n        utils.reverseDeepMerge(newDefaultOptions, opts, extendsDO);\n        return optionsDO(newDefaultOptions, scope);\n      };\n    }\n  }\n\n  function getType(name, throwError, errorContext) {\n    if (!name) {\n      return undefined;\n    }\n    const type = typeMap[name];\n    if (!type && throwError === true) {\n      throw getError(\n        `There is no type by the name of \"${name}\": ${JSON.stringify(errorContext)}`\n      );\n    } else {\n      return type;\n    }\n  }\n\n  function getTypeHeritage(parent) {\n    const heritage = [];\n    let type = parent;\n    if (angular.isString(type)) {\n      type = getType(parent);\n    }\n    parent = type.extends;\n    while (parent) {\n      type = getType(parent);\n      heritage.push(type);\n      parent = type.extends;\n    }\n    return heritage;\n  }\n\n\n  function setWrapper(options, name) {\n    if (angular.isArray(options)) {\n      return options.map(wrapperOptions => setWrapper(wrapperOptions));\n    } else if (angular.isObject(options)) {\n      options.types = getOptionsTypes(options);\n      options.name = getOptionsName(options, name);\n      checkWrapperAPI(options);\n      templateWrappersMap[options.name] = options;\n      return options;\n    } else if (angular.isString(options)) {\n      return setWrapper({\n        template: options,\n        name\n      });\n    }\n  }\n\n  function getOptionsTypes(options) {\n    if (angular.isString(options.types)) {\n      return [options.types];\n    }\n    if (!angular.isDefined(options.types)) {\n      return [];\n    } else {\n      return options.types;\n    }\n  }\n\n  function getOptionsName(options, name) {\n    return options.name || name || options.types.join(' ') || defaultWrapperName;\n  }\n\n  function checkWrapperAPI(options) {\n    formlyUsabilityProvider.checkWrapper(options);\n    if (options.template) {\n      formlyUsabilityProvider.checkWrapperTemplate(options.template, options);\n    }\n    if (!options.overwriteOk) {\n      checkOverwrite(options.name, templateWrappersMap, options, 'templateWrappers');\n    } else {\n      delete options.overwriteOk;\n    }\n    checkWrapperTypes(options);\n  }\n\n  function checkWrapperTypes(options) {\n    const shouldThrow = !angular.isArray(options.types) || !options.types.every(angular.isString);\n    if (shouldThrow) {\n      throw getError(`Attempted to create a template wrapper with types that is not a string or an array of strings`);\n    }\n  }\n\n  function checkOverwrite(property, object, newValue, objectName) {\n    if (object.hasOwnProperty(property)) {\n      warn('overwriting-types-or-wrappers', [\n        `Attempting to overwrite ${property} on ${objectName} which is currently`,\n        `${JSON.stringify(object[property])} with ${JSON.stringify(newValue)}`,\n        `To supress this warning, specify the property \"overwriteOk: true\"`\n      ].join(' '));\n    }\n  }\n\n  function getWrapper(name) {\n    return templateWrappersMap[name || defaultWrapperName];\n  }\n\n  function getWrapperByType(type) {\n    /* eslint prefer-const:0 */\n    const wrappers = [];\n    for (let name in templateWrappersMap) {\n      if (templateWrappersMap.hasOwnProperty(name)) {\n        if (templateWrappersMap[name].types && templateWrappersMap[name].types.indexOf(type) !== -1) {\n          wrappers.push(templateWrappersMap[name]);\n        }\n      }\n    }\n    return wrappers;\n  }\n\n  function removeWrapperByName(name) {\n    const wrapper = templateWrappersMap[name];\n    delete templateWrappersMap[name];\n    return wrapper;\n  }\n\n  function removeWrappersForType(type) {\n    const wrappers = getWrapperByType(type);\n    if (!wrappers) {\n      return undefined;\n    }\n    if (!angular.isArray(wrappers)) {\n      return removeWrapperByName(wrappers.name);\n    } else {\n      wrappers.forEach((wrapper) => removeWrapperByName(wrapper.name));\n      return wrappers;\n    }\n  }\n\n\n  function warn() {\n    if (!_this.disableWarnings && console.warn) {\n      /* eslint no-console:0 */\n      const args = Array.prototype.slice.call(arguments);\n      const warnInfoSlug = args.shift();\n      args.unshift('Formly Warning:');\n      args.push(`${formlyErrorAndWarningsUrlPrefix}${warnInfoSlug}`);\n      console.warn(...args);\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./providers/formlyConfig.js\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _angularFix = require('angular-fix');\n\nvar _angularFix2 = _interopRequireDefault(_angularFix);\n\nexports['default'] = formlyUsability;\n\n// @ngInject\nfunction formlyUsability(formlyApiCheck, formlyErrorAndWarningsUrlPrefix) {\n  var _this = this;\n\n  _angularFix2['default'].extend(this, {\n    getFormlyError: getFormlyError,\n    getFieldError: getFieldError,\n    checkWrapper: checkWrapper,\n    checkWrapperTemplate: checkWrapperTemplate,\n    getErrorMessage: getErrorMessage,\n    $get: function $get() {\n      return _this;\n    }\n  });\n\n  function getFieldError(errorInfoSlug, message, field) {\n    if (arguments.length < 3) {\n      field = message;\n      message = errorInfoSlug;\n      errorInfoSlug = null;\n    }\n    return new Error(getErrorMessage(errorInfoSlug, message) + (' Field definition: ' + _angularFix2['default'].toJson(field)));\n  }\n\n  function getFormlyError(errorInfoSlug, message) {\n    if (!message) {\n      message = errorInfoSlug;\n      errorInfoSlug = null;\n    }\n    return new Error(getErrorMessage(errorInfoSlug, message));\n  }\n\n  function getErrorMessage(errorInfoSlug, message) {\n    var url = '';\n    if (errorInfoSlug !== null) {\n      url = '' + formlyErrorAndWarningsUrlPrefix + errorInfoSlug;\n    }\n    return 'Formly Error: ' + message + '. ' + url;\n  }\n\n  function checkWrapper(wrapper) {\n    formlyApiCheck['throw'](formlyApiCheck.formlyWrapperType, wrapper, {\n      prefix: 'formlyConfig.setWrapper',\n      urlSuffix: 'setwrapper-validation-failed'\n    });\n  }\n\n  function checkWrapperTemplate(template, additionalInfo) {\n    var formlyTransclude = '<formly-transclude></formly-transclude>';\n    if (template.indexOf(formlyTransclude) === -1) {\n      throw getFormlyError('Template wrapper templates must use \"' + formlyTransclude + '\" somewhere in them. ' + ('This one does not have \"<formly-transclude></formly-transclude>\" in it: ' + template) + '\\n' + ('Additional information: ' + JSON.stringify(additionalInfo)));\n    }\n  }\n}\nmodule.exports = exports['default'];\n\n\n/** WEBPACK FOOTER **\n ** ./providers/formlyUsability.js\n **/","import angular from 'angular-fix';\n\nexport default formlyUsability;\n\n// @ngInject\nfunction formlyUsability(formlyApiCheck, formlyErrorAndWarningsUrlPrefix) {\n  angular.extend(this, {\n    getFormlyError,\n    getFieldError,\n    checkWrapper,\n    checkWrapperTemplate,\n    getErrorMessage,\n    $get: () => this\n  });\n\n  function getFieldError(errorInfoSlug, message, field) {\n    if (arguments.length < 3) {\n      field = message;\n      message = errorInfoSlug;\n      errorInfoSlug = null;\n    }\n    return new Error(getErrorMessage(errorInfoSlug, message) + ` Field definition: ${angular.toJson(field)}`);\n  }\n\n  function getFormlyError(errorInfoSlug, message) {\n    if (!message) {\n      message = errorInfoSlug;\n      errorInfoSlug = null;\n    }\n    return new Error(getErrorMessage(errorInfoSlug, message));\n  }\n\n  function getErrorMessage(errorInfoSlug, message) {\n    let url = '';\n    if (errorInfoSlug !== null) {\n      url = `${formlyErrorAndWarningsUrlPrefix}${errorInfoSlug}`;\n    }\n    return `Formly Error: ${message}. ${url}`;\n  }\n\n  function checkWrapper(wrapper) {\n    formlyApiCheck.throw(formlyApiCheck.formlyWrapperType, wrapper, {\n      prefix: 'formlyConfig.setWrapper',\n      urlSuffix: 'setwrapper-validation-failed'\n    });\n  }\n\n  function checkWrapperTemplate(template, additionalInfo) {\n    const formlyTransclude = '<formly-transclude></formly-transclude>';\n    if (template.indexOf(formlyTransclude) === -1) {\n      throw getFormlyError(\n        `Template wrapper templates must use \"${formlyTransclude}\" somewhere in them. ` +\n        `This one does not have \"<formly-transclude></formly-transclude>\" in it: ${template}` + '\\n' +\n        `Additional information: ${JSON.stringify(additionalInfo)}`\n      );\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./providers/formlyUsability.js\n **/","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = formlyValidationMessages;\n\n// @ngInject\nfunction formlyValidationMessages() {\n\n  var validationMessages = {\n    addTemplateOptionValueMessage: addTemplateOptionValueMessage,\n    addStringMessage: addStringMessage,\n    messages: {}\n  };\n\n  return validationMessages;\n\n  function addTemplateOptionValueMessage(name, prop, prefix, suffix, alternate) {\n    validationMessages.messages[name] = templateOptionValue(prop, prefix, suffix, alternate);\n  }\n\n  function addStringMessage(name, string) {\n    validationMessages.messages[name] = function () {\n      return string;\n    };\n  }\n\n  function templateOptionValue(prop, prefix, suffix, alternate) {\n    return function getValidationMessage(viewValue, modelValue, scope) {\n      if (scope.options.templateOptions[prop]) {\n        return prefix + \" \" + scope.options.templateOptions[prop] + \" \" + suffix;\n      } else {\n        return alternate;\n      }\n    };\n  }\n}\nmodule.exports = exports[\"default\"];\n\n\n/** WEBPACK FOOTER **\n ** ./providers/formlyValidationMessages.js\n **/","export default formlyValidationMessages;\n\n\n// @ngInject\nfunction formlyValidationMessages() {\n\n  const validationMessages = {\n    addTemplateOptionValueMessage,\n    addStringMessage,\n    messages: {}\n  };\n\n  return validationMessages;\n\n  function addTemplateOptionValueMessage(name, prop, prefix, suffix, alternate) {\n    validationMessages.messages[name] = templateOptionValue(prop, prefix, suffix, alternate);\n  }\n\n  function addStringMessage(name, string) {\n    validationMessages.messages[name] = () => string;\n  }\n\n\n  function templateOptionValue(prop, prefix, suffix, alternate) {\n    return function getValidationMessage(viewValue, modelValue, scope) {\n      if (scope.options.templateOptions[prop]) {\n        return `${prefix} ${scope.options.templateOptions[prop]} ${suffix}`;\n      } else {\n        return alternate;\n      }\n    };\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./providers/formlyValidationMessages.js\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _angularFix = require('angular-fix');\n\nvar _angularFix2 = _interopRequireDefault(_angularFix);\n\nexports['default'] = addCustomTags;\n\n// @ngInject\nfunction addCustomTags($document) {\n  if ($document && $document.get) {\n    (function () {\n      // IE8 check ->\n      // http://stackoverflow.com/questions/10964966/detect-ie-version-prior-to-v9-in-javascript/10965203#10965203\n      var document = $document.get(0);\n      var div = document.createElement('div');\n      div.innerHTML = '<!--[if lt IE 9]><i></i><![endif]-->';\n      var isIeLessThan9 = div.getElementsByTagName('i').length === 1;\n\n      if (isIeLessThan9) {\n        // add the custom elements that we need for formly\n        var customElements = ['formly-field', 'formly-form', 'formly-custom-validation', 'formly-focus', 'formly-transpose'];\n        _angularFix2['default'].forEach(customElements, function (el) {\n          document.createElement(el);\n        });\n      }\n    })();\n  }\n}\nmodule.exports = exports['default'];\n\n\n/** WEBPACK FOOTER **\n ** ./run/formlyCustomTags.js\n **/","import angular from 'angular-fix';\nexport default addCustomTags;\n\n// @ngInject\nfunction addCustomTags($document) {\n  if ($document && $document.get) {\n    // IE8 check ->\n    // http://stackoverflow.com/questions/10964966/detect-ie-version-prior-to-v9-in-javascript/10965203#10965203\n    const document = $document.get(0);\n    const div = document.createElement('div');\n    div.innerHTML = '<!--[if lt IE 9]><i></i><![endif]-->';\n    const isIeLessThan9 = (div.getElementsByTagName('i').length === 1);\n\n    if (isIeLessThan9) {\n      // add the custom elements that we need for formly\n      const customElements = [\n        'formly-field', 'formly-form', 'formly-custom-validation', 'formly-focus', 'formly-transpose'\n      ];\n      angular.forEach(customElements, el => {\n        document.createElement(el);\n      });\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./run/formlyCustomTags.js\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _angularFix = require('angular-fix');\n\nvar _angularFix2 = _interopRequireDefault(_angularFix);\n\nvar _otherUtils = require('../other/utils');\n\nexports['default'] = addFormlyNgModelAttrsManipulator;\n\n// @ngInject\nfunction addFormlyNgModelAttrsManipulator(formlyConfig, $interpolate) {\n  if (formlyConfig.extras.disableNgModelAttrsManipulator) {\n    return;\n  }\n  formlyConfig.templateManipulators.preWrapper.push(ngModelAttrsManipulator);\n\n  function ngModelAttrsManipulator(template, options, scope) {\n    var node = document.createElement('div');\n    var skip = options.extras && options.extras.skipNgModelAttrsManipulator;\n    if (skip === true) {\n      return template;\n    }\n    node.innerHTML = template;\n\n    var modelNodes = getNgModelNodes(node, skip);\n    if (!modelNodes || !modelNodes.length) {\n      return template;\n    }\n\n    addIfNotPresent(modelNodes, 'id', scope.id);\n    addIfNotPresent(modelNodes, 'name', scope.name || scope.id);\n\n    addValidation();\n    alterNgModelAttr();\n    addModelOptions();\n    addTemplateOptionsAttrs();\n    addNgModelElAttrs();\n\n    return node.innerHTML;\n\n    function addValidation() {\n      if (_angularFix2['default'].isDefined(options.validators) || _angularFix2['default'].isDefined(options.validation.messages)) {\n        addIfNotPresent(modelNodes, 'formly-custom-validation', '');\n      }\n    }\n\n    function alterNgModelAttr() {\n      if (isPropertyAccessor(options.key)) {\n        addRegardlessOfPresence(modelNodes, 'ng-model', 'model.' + options.key);\n      }\n    }\n\n    function addModelOptions() {\n      if (_angularFix2['default'].isDefined(options.modelOptions)) {\n        addIfNotPresent(modelNodes, 'ng-model-options', 'options.modelOptions');\n        if (options.modelOptions.getterSetter) {\n          addRegardlessOfPresence(modelNodes, 'ng-model', 'options.value');\n        }\n      }\n    }\n\n    function addTemplateOptionsAttrs() {\n      if (!options.templateOptions && !options.expressionProperties) {\n        // no need to run these if there are no templateOptions or expressionProperties\n        return;\n      }\n      var to = options.templateOptions || {};\n      var ep = options.expressionProperties || {};\n\n      var ngModelAttributes = getBuiltInAttributes();\n\n      // extend with the user's specifications winning\n      _angularFix2['default'].extend(ngModelAttributes, options.ngModelAttrs);\n\n      // Feel free to make this more simple :-)\n      _angularFix2['default'].forEach(ngModelAttributes, function (val, name) {\n        /* eslint complexity:[2, 14] */\n        var attrVal = undefined,\n            attrName = undefined;\n        var ref = 'options.templateOptions[\\'' + name + '\\']';\n        var toVal = to[name];\n        var epVal = getEpValue(ep, name);\n\n        var inTo = _angularFix2['default'].isDefined(toVal);\n        var inEp = _angularFix2['default'].isDefined(epVal);\n        if (val.value) {\n          // I realize this looks backwards, but it's right, trust me...\n          attrName = val.value;\n          attrVal = name;\n        } else if (val.statement && inTo) {\n          attrName = val.statement;\n          if (_angularFix2['default'].isString(to[name])) {\n            attrVal = '$eval(' + ref + ')';\n          } else if (_angularFix2['default'].isFunction(to[name])) {\n            attrVal = ref + '(model[options.key], options, this, $event)';\n          } else {\n            throw new Error('options.templateOptions.' + name + ' must be a string or function: ' + JSON.stringify(options));\n          }\n        } else if (val.bound && inEp) {\n          attrName = val.bound;\n          attrVal = ref;\n        } else if ((val.attribute || val.boolean) && inEp) {\n          attrName = val.attribute || val.boolean;\n          attrVal = '' + $interpolate.startSymbol() + ref + $interpolate.endSymbol();\n        } else if (val.attribute && inTo) {\n          attrName = val.attribute;\n          attrVal = toVal;\n        } else if (val.boolean) {\n          if (inTo && !inEp && toVal) {\n            attrName = val.boolean;\n            attrVal = true;\n          } else {\n            /* eslint no-empty:0 */\n            // empty to illustrate that a boolean will not be added via val.bound\n            // if you want it added via val.bound, then put it in expressionProperties\n          }\n        } else if (val.bound && inTo) {\n            attrName = val.bound;\n            attrVal = ref;\n          }\n\n        if (_angularFix2['default'].isDefined(attrName) && _angularFix2['default'].isDefined(attrVal)) {\n          addIfNotPresent(modelNodes, attrName, attrVal);\n        }\n      });\n    }\n\n    function addNgModelElAttrs() {\n      _angularFix2['default'].forEach(options.ngModelElAttrs, function (val, name) {\n        addRegardlessOfPresence(modelNodes, name, val);\n      });\n    }\n  }\n\n  // Utility functions\n  function getNgModelNodes(node, skip) {\n    var selectorNot = _angularFix2['default'].isString(skip) ? ':not(' + skip + ')' : '';\n    var skipNot = ':not([formly-skip-ng-model-attrs-manipulator])';\n    var query = '[ng-model]' + selectorNot + skipNot + ', [data-ng-model]' + selectorNot + skipNot;\n    try {\n      return node.querySelectorAll(query);\n    } catch (e) {\n      //this code is needed for IE8, as it does not support the CSS3 ':not' selector\n      //it should be removed when IE8 support is dropped\n      return getNgModelNodesFallback(node, skip);\n    }\n  }\n\n  function getNgModelNodesFallback(node, skip) {\n    var allNgModelNodes = node.querySelectorAll('[ng-model], [data-ng-model]');\n    var matchingNgModelNodes = [];\n\n    //make sure this array is compatible with NodeList type by adding an 'item' function\n    matchingNgModelNodes.item = function (i) {\n      return this[i];\n    };\n\n    for (var i = 0; i < allNgModelNodes.length; i++) {\n      var ngModelNode = allNgModelNodes[i];\n      if (!ngModelNode.hasAttribute('formly-skip-ng-model-attrs-manipulator') && !(_angularFix2['default'].isString(skip) && nodeMatches(ngModelNode, skip))) {\n        matchingNgModelNodes.push(ngModelNode);\n      }\n    }\n\n    return matchingNgModelNodes;\n  }\n\n  function nodeMatches(node, selector) {\n    var div = document.createElement('div');\n    div.innerHTML = node.outerHTML;\n    return div.querySelector(selector);\n  }\n\n  function getBuiltInAttributes() {\n    var ngModelAttributes = {\n      focus: {\n        attribute: 'formly-focus'\n      }\n    };\n    var boundOnly = [];\n    var bothBooleanAndBound = ['required', 'disabled'];\n    var bothAttributeAndBound = ['pattern', 'minlength'];\n    var statementOnly = ['change', 'keydown', 'keyup', 'keypress', 'click', 'focus', 'blur'];\n    var attributeOnly = ['placeholder', 'min', 'max', 'tabindex', 'type'];\n    if (formlyConfig.extras.ngModelAttrsManipulatorPreferUnbound) {\n      bothAttributeAndBound.push('maxlength');\n    } else {\n      boundOnly.push('maxlength');\n    }\n\n    _angularFix2['default'].forEach(boundOnly, function (item) {\n      ngModelAttributes[item] = { bound: 'ng-' + item };\n    });\n\n    _angularFix2['default'].forEach(bothBooleanAndBound, function (item) {\n      ngModelAttributes[item] = { boolean: item, bound: 'ng-' + item };\n    });\n\n    _angularFix2['default'].forEach(bothAttributeAndBound, function (item) {\n      ngModelAttributes[item] = { attribute: item, bound: 'ng-' + item };\n    });\n\n    _angularFix2['default'].forEach(statementOnly, function (item) {\n      var propName = 'on' + item.substr(0, 1).toUpperCase() + item.substr(1);\n      ngModelAttributes[propName] = { statement: 'ng-' + item };\n    });\n\n    _angularFix2['default'].forEach(attributeOnly, function (item) {\n      ngModelAttributes[item] = { attribute: item };\n    });\n    return ngModelAttributes;\n  }\n\n  function getEpValue(ep, name) {\n    return ep['templateOptions.' + name] || ep['templateOptions[\\'' + name + '\\']'] || ep['templateOptions[\"' + name + '\"]'];\n  }\n\n  function addIfNotPresent(nodes, attr, val) {\n    _angularFix2['default'].forEach(nodes, function (node) {\n      if (!node.getAttribute(attr)) {\n        node.setAttribute(attr, val);\n      }\n    });\n  }\n\n  function addRegardlessOfPresence(nodes, attr, val) {\n    _angularFix2['default'].forEach(nodes, function (node) {\n      node.setAttribute(attr, val);\n    });\n  }\n\n  function isPropertyAccessor(key) {\n    return (0, _otherUtils.contains)(key, '.') || (0, _otherUtils.contains)(key, '[') && (0, _otherUtils.contains)(key, ']');\n  }\n}\nmodule.exports = exports['default'];\n\n\n/** WEBPACK FOOTER **\n ** ./run/formlyNgModelAttrsManipulator.js\n **/","import angular from 'angular-fix';\nimport {contains} from '../other/utils';\n\nexport default addFormlyNgModelAttrsManipulator;\n\n// @ngInject\nfunction addFormlyNgModelAttrsManipulator(formlyConfig, $interpolate) {\n  if (formlyConfig.extras.disableNgModelAttrsManipulator) {\n    return;\n  }\n  formlyConfig.templateManipulators.preWrapper.push(ngModelAttrsManipulator);\n\n\n  function ngModelAttrsManipulator(template, options, scope) {\n    const node = document.createElement('div');\n    const skip = options.extras && options.extras.skipNgModelAttrsManipulator;\n    if (skip === true) {\n      return template;\n    }\n    node.innerHTML = template;\n\n    const modelNodes = getNgModelNodes(node, skip);\n    if (!modelNodes || !modelNodes.length) {\n      return template;\n    }\n\n    addIfNotPresent(modelNodes, 'id', scope.id);\n    addIfNotPresent(modelNodes, 'name', scope.name || scope.id);\n\n    addValidation();\n    alterNgModelAttr();\n    addModelOptions();\n    addTemplateOptionsAttrs();\n    addNgModelElAttrs();\n\n\n    return node.innerHTML;\n\n\n    function addValidation() {\n      if (angular.isDefined(options.validators) || angular.isDefined(options.validation.messages)) {\n        addIfNotPresent(modelNodes, 'formly-custom-validation', '');\n      }\n    }\n\n    function alterNgModelAttr() {\n      if (isPropertyAccessor(options.key)) {\n        addRegardlessOfPresence(modelNodes, 'ng-model', 'model.' + options.key);\n      }\n    }\n\n    function addModelOptions() {\n      if (angular.isDefined(options.modelOptions)) {\n        addIfNotPresent(modelNodes, 'ng-model-options', 'options.modelOptions');\n        if (options.modelOptions.getterSetter) {\n          addRegardlessOfPresence(modelNodes, 'ng-model', 'options.value');\n        }\n      }\n    }\n\n    function addTemplateOptionsAttrs() {\n      if (!options.templateOptions && !options.expressionProperties) {\n        // no need to run these if there are no templateOptions or expressionProperties\n        return;\n      }\n      const to = options.templateOptions || {};\n      const ep = options.expressionProperties || {};\n\n      const ngModelAttributes = getBuiltInAttributes();\n\n      // extend with the user's specifications winning\n      angular.extend(ngModelAttributes, options.ngModelAttrs);\n\n      // Feel free to make this more simple :-)\n      angular.forEach(ngModelAttributes, (val, name) => {\n        /* eslint complexity:[2, 14] */\n        let attrVal, attrName;\n        const ref = `options.templateOptions['${name}']`;\n        const toVal = to[name];\n        const epVal = getEpValue(ep, name);\n\n        const inTo = angular.isDefined(toVal);\n        const inEp = angular.isDefined(epVal);\n        if (val.value) {\n          // I realize this looks backwards, but it's right, trust me...\n          attrName = val.value;\n          attrVal = name;\n        } else if (val.statement && inTo) {\n          attrName = val.statement;\n          if (angular.isString(to[name])) {\n            attrVal = `$eval(${ref})`;\n          } else if (angular.isFunction(to[name])) {\n            attrVal = `${ref}(model[options.key], options, this, $event)`;\n          } else {\n            throw new Error(\n              `options.templateOptions.${name} must be a string or function: ${JSON.stringify(options)}`\n            );\n          }\n        } else if (val.bound && inEp) {\n          attrName = val.bound;\n          attrVal = ref;\n        } else if ((val.attribute || val.boolean) && inEp) {\n          attrName = val.attribute || val.boolean;\n          attrVal = `${$interpolate.startSymbol()}${ref}${$interpolate.endSymbol()}`;\n        } else if (val.attribute && inTo) {\n          attrName = val.attribute;\n          attrVal = toVal;\n        } else if (val.boolean) {\n          if (inTo && !inEp && toVal) {\n            attrName = val.boolean;\n            attrVal = true;\n          } else {\n            /* eslint no-empty:0 */\n            // empty to illustrate that a boolean will not be added via val.bound\n            // if you want it added via val.bound, then put it in expressionProperties\n          }\n        } else if (val.bound && inTo) {\n          attrName = val.bound;\n          attrVal = ref;\n        }\n\n        if (angular.isDefined(attrName) && angular.isDefined(attrVal)) {\n          addIfNotPresent(modelNodes, attrName, attrVal);\n        }\n      });\n    }\n\n    function addNgModelElAttrs() {\n      angular.forEach(options.ngModelElAttrs, (val, name) => {\n        addRegardlessOfPresence(modelNodes, name, val);\n      });\n    }\n  }\n\n  // Utility functions\n  function getNgModelNodes(node, skip) {\n    const selectorNot = angular.isString(skip) ? `:not(${skip})` : '';\n    const skipNot = ':not([formly-skip-ng-model-attrs-manipulator])';\n    const query = `[ng-model]${selectorNot}${skipNot}, [data-ng-model]${selectorNot}${skipNot}`;\n    try {\n      return node.querySelectorAll(query);\n    } catch (e) {\n      //this code is needed for IE8, as it does not support the CSS3 ':not' selector\n      //it should be removed when IE8 support is dropped\n      return getNgModelNodesFallback(node, skip);\n    }\n  }\n\n  function getNgModelNodesFallback(node, skip) {\n    const allNgModelNodes = node.querySelectorAll('[ng-model], [data-ng-model]');\n    const matchingNgModelNodes = [];\n\n    //make sure this array is compatible with NodeList type by adding an 'item' function\n    matchingNgModelNodes.item = function(i) {\n      return this[i];\n    };\n\n    for (let i = 0; i < allNgModelNodes.length; i++) {\n      const ngModelNode = allNgModelNodes[i];\n      if (!ngModelNode.hasAttribute('formly-skip-ng-model-attrs-manipulator') &&\n        !(angular.isString(skip) && nodeMatches(ngModelNode, skip))) {\n        matchingNgModelNodes.push(ngModelNode);\n      }\n    }\n\n    return matchingNgModelNodes;\n  }\n\n  function nodeMatches(node, selector) {\n    const div = document.createElement('div');\n    div.innerHTML = node.outerHTML;\n    return div.querySelector(selector);\n  }\n\n  function getBuiltInAttributes() {\n    const ngModelAttributes = {\n      focus: {\n        attribute: 'formly-focus'\n      }\n    };\n    const boundOnly = [];\n    const bothBooleanAndBound = ['required', 'disabled'];\n    const bothAttributeAndBound = ['pattern', 'minlength'];\n    const statementOnly = ['change', 'keydown', 'keyup', 'keypress', 'click', 'focus', 'blur'];\n    const attributeOnly = ['placeholder', 'min', 'max', 'tabindex', 'type'];\n    if (formlyConfig.extras.ngModelAttrsManipulatorPreferUnbound) {\n      bothAttributeAndBound.push('maxlength');\n    } else {\n      boundOnly.push('maxlength');\n    }\n\n    angular.forEach(boundOnly, item => {\n      ngModelAttributes[item] = {bound: 'ng-' + item};\n    });\n\n    angular.forEach(bothBooleanAndBound, item => {\n      ngModelAttributes[item] = {boolean: item, bound: 'ng-' + item};\n    });\n\n    angular.forEach(bothAttributeAndBound, item => {\n      ngModelAttributes[item] = {attribute: item, bound: 'ng-' + item};\n    });\n\n    angular.forEach(statementOnly, item => {\n      const propName = 'on' + item.substr(0, 1).toUpperCase() + item.substr(1);\n      ngModelAttributes[propName] = {statement: 'ng-' + item};\n    });\n\n    angular.forEach(attributeOnly, item => {\n      ngModelAttributes[item] = {attribute: item};\n    });\n    return ngModelAttributes;\n  }\n\n  function getEpValue(ep, name) {\n    return ep['templateOptions.' + name] ||\n      ep[`templateOptions['${name}']`] ||\n      ep[`templateOptions[\"${name}\"]`];\n  }\n\n  function addIfNotPresent(nodes, attr, val) {\n    angular.forEach(nodes, node => {\n      if (!node.getAttribute(attr)) {\n        node.setAttribute(attr, val);\n      }\n    });\n  }\n\n  function addRegardlessOfPresence(nodes, attr, val) {\n    angular.forEach(nodes, node => {\n      node.setAttribute(attr, val);\n    });\n  }\n\n  function isPropertyAccessor(key) {\n    return contains(key, '.') || (contains(key, '[') && contains(key, ']'));\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./run/formlyNgModelAttrsManipulator.js\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _otherUtils = require('../other/utils');\n\nvar _otherUtils2 = _interopRequireDefault(_otherUtils);\n\nexports['default'] = formlyUtil;\n\n// @ngInject\nfunction formlyUtil() {\n  return _otherUtils2['default'];\n}\nmodule.exports = exports['default'];\n\n\n/** WEBPACK FOOTER **\n ** ./services/formlyUtil.js\n **/","import utils from '../other/utils';\n\nexport default formlyUtil;\n\n// @ngInject\nfunction formlyUtil() {\n  return utils;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./services/formlyUtil.js\n **/","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }\n\nexports['default'] = formlyWarn;\n\n// @ngInject\nfunction formlyWarn(formlyConfig, formlyErrorAndWarningsUrlPrefix, $log) {\n  return function warn() {\n    if (!formlyConfig.disableWarnings) {\n      var args = Array.prototype.slice.call(arguments);\n      var warnInfoSlug = args.shift();\n      args.unshift('Formly Warning:');\n      args.push('' + formlyErrorAndWarningsUrlPrefix + warnInfoSlug);\n      $log.warn.apply($log, _toConsumableArray(args));\n    }\n  };\n}\nmodule.exports = exports['default'];\n\n\n/** WEBPACK FOOTER **\n ** ./services/formlyWarn.js\n **/","export default formlyWarn;\n\n// @ngInject\nfunction formlyWarn(formlyConfig, formlyErrorAndWarningsUrlPrefix, $log) {\n  return function warn() {\n    if (!formlyConfig.disableWarnings) {\n      const args = Array.prototype.slice.call(arguments);\n      const warnInfoSlug = args.shift();\n      args.unshift('Formly Warning:');\n      args.push(`${formlyErrorAndWarningsUrlPrefix}${warnInfoSlug}`);\n      $log.warn(...args);\n    }\n  };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./services/formlyWarn.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_18__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"angular\"\n ** module id = 18\n ** module chunks = 0\n **/"],"sourceRoot":""}