{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///formly.min.js","webpack:///webpack/bootstrap 93c79f1b6aeadfb4a33c","webpack:///./index.js","webpack:///./angular-fix/index.js","webpack:///./other/utils.js","webpack:///./directives/formly-custom-validation.js","webpack:///./directives/formly-field.js","webpack:///./directives/formly-focus.js","webpack:///./directives/formly-form.js","webpack:///./index.common.js","webpack:///./providers/formlyApiCheck.js","webpack:///./providers/formlyConfig.js","webpack:///./providers/formlyUsability.js","webpack:///./providers/formlyValidationMessages.js","webpack:///./run/formlyCustomTags.js","webpack:///./run/formlyNgModelAttrsManipulator.js","webpack:///./services/formlyUtil.js","webpack:///./services/formlyWarn.js","webpack:///external \"angular\"","webpack:///external {\"root\":\"apiCheck\",\"amd\":\"api-check\",\"commonjs2\":\"api-check\",\"commonjs\":\"api-check\"}"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_17__","__WEBPACK_EXTERNAL_MODULE_18__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequire","obj","__esModule","index","angular","version","window","formlyEval","scope","expression","$modelValue","$viewValue","isFunction","$eval","getFieldId","formId","options","type","template","templateUrl","key","join","reverseDeepMerge","dest","forEach","arguments","src","val","prop","isDefined","objAndSameType","copy","obj1","obj2","isObject","Object","getPrototypeOf","findByNodeName","el","nodeName","element","toUpperCase","children","i","length","node","formlyCustomValidation","formlyUtil","$q","isPromiseLike","then","checkValidators","validators","allowedProperties","validatorsWithExtraProps","validator","name","isString","extraProps","v","indexOf","push","keys","Error","JSON","stringify","restrict","link","attrs","ctrl","opts","validation","messages","message","useNewValidatorsApi","hasOwnProperty","setupWithValidators","validatorCollection","isPossiblyAsync","modelValue","viewValue","value","when","reject","setupWithParsers","inFlightValidator","undefined","$parsers","unshift","isValid","$pending","$setValidity","$inject","formlyField","$http","$compile","$templateCache","formlyConfig","formlyValidationMessages","formlyApiCheck","formlyUsability","formlyWarn","asHtml","wrapper","append","html","getFieldTemplate","getType","getFieldError","getTemplate","isUrl","templatePromise","_ret","httpOptions","cache","url","get","response","data","error","transcludeInWrappers","getWrapperOption","checkWrapper","validateOptions","runApiCheck","promises","map","w","all","wrappersTemplates","wrapperTemplate","checkWrapperTemplate","reverse","totalWrapper","shift","doTransclusion","superWrapper","transcludeEl","find","replaceWith","arrayify","getWrapper","getWrapperByType","typeWrappers","concat","defaultWrapper","checkApi","formlyFieldOptions","prefix","checkFieldGroupApi","fieldGroup","_ref","apiCheck","apiCheckInstance","apiCheckFunction","apiCheckOptions","instance","fn","shape","config","output","docsBaseUrl","transclude","model","fields","formState","form","controller","$scope","$timeout","$parse","$controller","runExpressions","field","currentValue","valueGetterSetter","expressionProperties","setter","assign","promise","newVal","simplifyLife","templateOptions","setDefaultValue","defaultValue","setInitialValue","initialValue","mergeFieldOptionsWithTypeDefaults","mergeOptions","defaultOptions","properOrder","optionsTypes","typeName","extraOptions","extendOptionsWithDefaults","extend","resetModel","updateInitialValue","addModelWatcher","$watch","formControl","$setViewValue","$render","addValidationMessages","invokeControllers","fieldType","to","addClasses","className","addClass","setElementTemplate","templateString","contents","watchFormControl","watchFieldNameOrExistence","nameExpressionRegex","nameExpression","exec","watchFieldName","watchFieldExistence","stopWatchingField","fc","stopWatchingShowError","addShowMessagesWatcher","show","$invalid","noTouchedButDirty","isUndefined","$touched","$dirty","errorExistsAndShouldBeVisible","showError","noop","noFormControl","templateEl","ngModelNode","querySelector","callLinkFunctions","apply","thusly","args","runManipulators","manipulators","chain","manipulator","newTemplate","templateManipulators","preWrapper","postWrapper","isArray","formlyFocus","$document","previousEl","doc","$observe","activeElement","focus","focusWait","blur","formlyForm","currentFormId","optionsApi","object","optional","func","removeChromeAutoComplete","bool","strict","getRootEl","rootEl","getHideDirective","hideDirective","extras","defaultHideDirective","getTrackBy","trackBy","getFormName","formName","bindName","minor","getFormlyError","copyAttributes","attributes","excluded","arrayAttrs","nodeValue","toKebabCase","string","replace","$1","toLowerCase","parentFormAttributes","parent","hasClass","setupOptions","attachKey","isFieldGroup","setupWatchers","watcher","watchers","listener","watchExpression","getWatchExpression","watchListener","getWatchListener","stopWatching","watchDeep","originalExpression","modifyArgs","_slice","_toConsumableArray","displayName","originalListener","_len","originalArgs","Array","_key","newResult","$parent","global","offInstance","onInstance","input","document","createElement","setAttribute","appendChild","arr","arr2","from","prototype","slice","formlyErrorAndWarningsUrlPrefix","formlyNgModelAttrsManipulator","formlyCustomTags","ngModuleName","ngModule","constant","provider","directive","run","shapeRequiredIfNot","otherProps","propChecker","shapeRequiredIfNotDefinition","propName","location","propExists","otherPropsExist","some","otherProp","utils","getError","checkerHelpers","setupChecker","apiCheckFactory","formlyExpression","oneOfType","specifyWrapperType","oneOf","typeOrArrayOf","apiCheckProperty","objectOf","apiCheckInstanceProperty","onlyIf","withProperties","warn","throw","apiCheckFunctionProperty","formlyWrapperType","ifNot","types","overwriteOk","fieldOptionsApiShape","$$hashKey","any","number","modelOptions","updateOn","debounce","allowInvalid","getterSetter","timezone","hide","ngModelAttrs","attribute","bound","array","arrayOf","typeOptionsDefaultOptions","formlyTypeOptions","extends","formlyUsabilityProvider","setType","checkType","extendTypeOptions","typeMap","checkOverwrite","extendsType","extendTypeControllerFunction","extendTypeLinkFunction","extendTypeValidateOptionsFunction","extendTypeDefaultOptions","extendsCtrl","optionsCtrl","extendsFn","optionsFn","originalDefaultOptions","mergedOptions","extendsDO","optionsDO","optionsDOIsFn","extendsDOIsFn","extendsDefaultOptions","mergedDefaultOptions","extenderOptionsDefaultOptions","newDefaultOptions","throwError","errorContext","setWrapper","_x","_x2","_again","wrapperOptions","getOptionsTypes","getOptionsName","checkWrapperAPI","templateWrappersMap","defaultWrapperName","checkWrapperTypes","shouldThrow","every","property","newValue","objectName","wrappers","removeWrapperByName","removeWrappersForType","_this","disableWarnings","console","_this2","disableNgModelAttrsManipulator","ngModelAttrsManipulatorPreferUnbound","$get","errorInfoSlug","getErrorMessage","toJson","urlSuffix","additionalInfo","formlyTransclude","addTemplateOptionValueMessage","suffix","alternate","validationMessages","templateOptionValue","addStringMessage","addCustomTags","div","innerHTML","isIeLessThan9","getElementsByTagName","customElements","addFormlyNgModelAttrsManipulator","ngModelAttrsManipulator","addValidation","addIfNotPresent","modelNodes","addModelOptions","addTemplateOptionsAttrs","ep","ngModelAttributes","getBuiltInAttributes","attrVal","attrName","ref","toVal","epVal","getEpValue","inTo","inEp","skipNgModelAttrsManipulator","querySelectorAll","boundOnly","bothBooleanAndBound","bothAttributeAndBound","expressionOnly","attributeOnly","item","boolean","substr","nodes","attr","getAttribute","$log","warnInfoSlug"],"mappings":"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","file":"formly.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"angular\"), require(\"api-check\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"angular\", \"api-check\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ngFormly\"] = factory(require(\"angular\"), require(\"api-check\"));\n\telse\n\t\troot[\"ngFormly\"] = factory(root[\"angular\"], root[\"apiCheck\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_17__, __WEBPACK_EXTERNAL_MODULE_18__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"angular\"), require(\"api-check\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"angular\", \"api-check\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ngFormly\"] = factory(require(\"angular\"), require(\"api-check\"));\n\telse\n\t\troot[\"ngFormly\"] = factory(root[\"angular\"], root[\"apiCheck\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_17__, __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\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar index = _interopRequire(__webpack_require__(8));\n\t\n\tmodule.exports = index;\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\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\n\tvar angular = _interopRequire(__webpack_require__(17));\n\t\n\tif (!angular.version) {\n\t  angular = window.angular;\n\t}\n\tmodule.exports = angular;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tmodule.exports = \"https://github.com/formly-js/angular-formly/blob/\" + (\"6.4.0-beta.1\") + \"/other/ERRORS_AND_WARNINGS.md#\";\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar angular = _interopRequire(__webpack_require__(1));\n\t\n\tmodule.exports = { formlyEval: formlyEval, getFieldId: getFieldId, reverseDeepMerge: reverseDeepMerge, findByNodeName: findByNodeName };\n\t\n\tfunction formlyEval(scope, expression, $modelValue, $viewValue) {\n\t  if (angular.isFunction(expression)) {\n\t    return expression($viewValue, $modelValue, scope);\n\t  } else {\n\t    return scope.$eval(expression, { $viewValue: $viewValue, $modelValue: $modelValue });\n\t  }\n\t}\n\t\n\tfunction getFieldId(formId, options, index) {\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  angular.forEach(arguments, function (src, index) {\n\t    if (!index) {\n\t      return;\n\t    }\n\t    angular.forEach(src, function (val, prop) {\n\t      if (!angular.isDefined(dest[prop])) {\n\t        dest[prop] = angular.copy(val);\n\t      } else if (objAndSameType(dest[prop], val)) {\n\t        reverseDeepMerge(dest[prop], val);\n\t      }\n\t    });\n\t  });\n\t}\n\t\n\tfunction objAndSameType(obj1, obj2) {\n\t  return angular.isObject(obj1) && angular.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 = angular.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\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tmodule.exports = formlyCustomValidation;\n\t\n\t// @ngInject\n\tfunction formlyCustomValidation(formlyUtil, $q) {\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      if (opts.validators) {\n\t        checkValidators(opts.validators);\n\t      }\n\t      opts.validation.messages = opts.validation.messages || {};\n\t      angular.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      angular.forEach(opts.validators, function addValidatorToPipeline(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        validator = angular.isObject(validator) ? validator.expression : validator;\n\t        var isPossiblyAsync = !angular.isString(validator);\n\t        if (useNewValidatorsApi) {\n\t          setupWithValidators();\n\t        } else {\n\t          setupWithParsers();\n\t        }\n\t\n\t        function setupWithValidators() {\n\t          var validatorCollection = isPossiblyAsync ? \"$asyncValidators\" : \"$validators\";\n\t          ctrl[validatorCollection][name] = function evalValidity(modelValue, viewValue) {\n\t            var value = formlyUtil.formlyEval(scope, validator, modelValue, viewValue);\n\t            if (isPossiblyAsync) {\n\t              return isPromiseLike(value) ? value : value ? $q.when(value) : $q.reject(value);\n\t            } else {\n\t              return value;\n\t            }\n\t          };\n\t        }\n\t\n\t        function setupWithParsers() {\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 (isPromiseLike(isValid)) {\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                if (Object.keys(ctrl.$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\t\n\t  function isPromiseLike(obj) {\n\t    return obj && angular.isFunction(obj.then);\n\t  }\n\t\n\t  function checkValidators(validators) {\n\t    var allowedProperties = [\"expression\", \"message\"];\n\t    var validatorsWithExtraProps = {};\n\t    angular.forEach(validators, function (validator, name) {\n\t      if (angular.isString(validator)) {\n\t        return;\n\t      }\n\t      var extraProps = [];\n\t      angular.forEach(validator, function (v, key) {\n\t        if (allowedProperties.indexOf(key) === -1) {\n\t          extraProps.push(key);\n\t        }\n\t      });\n\t      if (extraProps.length) {\n\t        validatorsWithExtraProps[name] = extraProps;\n\t      }\n\t    });\n\t    if (Object.keys(validatorsWithExtraProps).length) {\n\t      throw new Error([\"Validators are only allowed to be functions or objects that have \" + allowedProperties.join(\", \") + \".\", \"You provided some extra properties: \" + JSON.stringify(validatorsWithExtraProps)].join(\" \"));\n\t    }\n\t  }\n\t}\n\tformlyCustomValidation.$inject = [\"formlyUtil\", \"$q\"];\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar angular = _interopRequire(__webpack_require__(1));\n\t\n\tmodule.exports = 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, formlyConfig, formlyValidationMessages, formlyApiCheck, formlyUtil, formlyUsability, formlyWarn) {\n\t  return {\n\t    restrict: \"AE\",\n\t    transclude: true,\n\t    scope: {\n\t      options: \"=\",\n\t      model: \"=\",\n\t      formId: \"@\",\n\t      index: \"=?\",\n\t      fields: \"=?\",\n\t      formState: \"=?\",\n\t      form: \"=?\"\n\t    },\n\t    controller: /* @ngInject */[\"$scope\", \"$timeout\", \"$parse\", \"$controller\", function FormlyFieldController($scope, $timeout, $parse, $controller) {\n\t      if ($scope.options.fieldGroup) {\n\t        return;\n\t      }\n\t      var opts = $scope.options;\n\t      var fieldType = opts.type && formlyConfig.getType(opts.type);\n\t      simplifyLife(opts);\n\t      mergeFieldOptionsWithTypeDefaults(opts, fieldType);\n\t      extendOptionsWithDefaults(opts, $scope.index);\n\t      checkApi(opts);\n\t      // set field id to link labels and fields\n\t      $scope.id = formlyUtil.getFieldId($scope.formId, opts, $scope.index);\n\t\n\t      // initalization\n\t      setDefaultValue();\n\t      setInitialValue();\n\t      runExpressions();\n\t      addModelWatcher($scope, opts);\n\t      addValidationMessages(opts);\n\t      // simplify things\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      invokeControllers($scope, opts, 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          angular.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));\n\t            promise.then(function setFieldValue(value) {\n\t              setter(field, value);\n\t            });\n\t          });\n\t        });\n\t      }\n\t\n\t      function valueGetterSetter(newVal) {\n\t        if (!$scope.model || !$scope.options.key) {\n\t          return;\n\t        }\n\t        if (angular.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          data: {},\n\t          templateOptions: {},\n\t          validation: {}\n\t        });\n\t      }\n\t\n\t      function setDefaultValue() {\n\t        if (angular.isDefined(opts.defaultValue) && !angular.isDefined($scope.model[opts.key])) {\n\t          $scope.model[opts.key] = opts.defaultValue;\n\t        }\n\t      }\n\t\n\t      function setInitialValue() {\n\t        opts.initialValue = $scope.model && $scope.model[opts.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        angular.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 (angular.isFunction(extraOptions)) {\n\t            extraOptions = extraOptions(options);\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        angular.extend(options, {\n\t          // attach the key in case the formly-field directive is used directly\n\t          key: key,\n\t          value: valueGetterSetter,\n\t          runExpressions: runExpressions,\n\t          resetModel: resetModel,\n\t          updateInitialValue: updateInitialValue\n\t        });\n\t      }\n\t\n\t      // initialization functions\n\t      function addModelWatcher(scope, options) {\n\t        if (options.model) {\n\t          scope.$watch(\"options.model\", runExpressions, true);\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          $scope.options.formControl.$setViewValue($scope.model[$scope.options.key]);\n\t          $scope.options.formControl.$render();\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        angular.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[1] === undefined ? {} : arguments[1];\n\t        var type = arguments[2] === undefined ? {} : arguments[2];\n\t\n\t        angular.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    link: function fieldLink(scope, el) {\n\t      if (scope.options.fieldGroup) {\n\t        checkFieldGroupApi(scope.options);\n\t        el.addClass(\"formly-field-group\");\n\t        setElementTemplate(\"\\n          <formly-form model=\\\"model\\\"\\n                       fields=\\\"options.fieldGroup\\\"\\n                       options=\\\"$parent.options\\\"\\n                       class=\\\"\" + scope.options.className + \"\\\"\\n                       is-field-group>\\n          </formly-form>\\n        \");\n\t        return;\n\t      }\n\t\n\t      addClasses();\n\t\n\t      var type = scope.options.type && formlyConfig.getType(scope.options.type);\n\t      var args = arguments;\n\t      var thusly = this;\n\t      getFieldTemplate(scope.options).then(runManipulators(formlyConfig.templateManipulators.preWrapper)).then(transcludeInWrappers(scope.options)).then(runManipulators(formlyConfig.templateManipulators.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 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 stopWatchingField = angular.noop;\n\t        var stopWatchingShowError = angular.noop;\n\t        if (scope.options.noFormControl) {\n\t          return;\n\t        }\n\t        var templateEl = angular.element(\"<div>\" + templateString + \"</div>\");\n\t        var ngModelNode = templateEl[0].querySelector(\"[ng-model]\");\n\t        if (ngModelNode && ngModelNode.name) {\n\t          watchFieldNameOrExistence(ngModelNode.name);\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            watchFieldName(nameExpression[1]);\n\t          } else {\n\t            watchFieldExistence(name);\n\t          }\n\t        }\n\t\n\t        function watchFieldName(expression) {\n\t          scope.$watch(expression, function oneFieldNameChange(name) {\n\t            if (name) {\n\t              stopWatchingField();\n\t              watchFieldExistence(name);\n\t            }\n\t          });\n\t        }\n\t\n\t        function watchFieldExistence(name) {\n\t          stopWatchingField = scope.$watch(\"form[\\\"\" + name + \"\\\"]\", function formControlChange(formControl) {\n\t            if (formControl) {\n\t              scope.fc = formControl; // shortcut for template authors\n\t              scope.options.formControl = formControl;\n\t              stopWatchingShowError();\n\t              addShowMessagesWatcher();\n\t            }\n\t          });\n\t        }\n\t\n\t        function addShowMessagesWatcher() {\n\t          stopWatchingShowError = scope.$watch(function watchShowValidationChange() {\n\t            if (typeof scope.options.validation.show === \"boolean\") {\n\t              return scope.fc.$invalid && scope.options.validation.show;\n\t            } else {\n\t              var noTouchedButDirty = angular.isUndefined(scope.fc.$touched) && scope.fc.$dirty;\n\t              return scope.fc.$invalid && (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\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(template) {\n\t          var chain = $q.when(template);\n\t          angular.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 angular.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\n\t  function asHtml(el) {\n\t    var wrapper = angular.element(\"<a></a>\");\n\t    return wrapper.append(el).html();\n\t  }\n\t\n\t  function getFieldTemplate(options) {\n\t    var type = formlyConfig.getType(options.type, true, options);\n\t    var template = options.template || type && type.template;\n\t    var templateUrl = options.templateUrl || type && type.templateUrl;\n\t    if (!template && !templateUrl) {\n\t      throw formlyUsability.getFieldError(\"type-type-has-no-template\", \"Type '\" + options.type + \"' has not template. On element:\", options);\n\t    }\n\t\n\t    return getTemplate(template || templateUrl, !template, options);\n\t  }\n\t\n\t  function getTemplate(template, isUrl, options) {\n\t    var templatePromise = undefined;\n\t    if (angular.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 _ret = (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 _ret === \"object\") {\n\t        return _ret.v;\n\t      }\n\t    }\n\t  }\n\t\n\t  function transcludeInWrappers(options) {\n\t    var wrapper = getWrapperOption(options);\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 (wrapper) {\n\t        formlyUsability.checkWrapper(wrapper, options);\n\t        wrapper.validateOptions && wrapper.validateOptions(options);\n\t        runApiCheck(wrapper, 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 = angular.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) {\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 this 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 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      if (type.validateOptions) {\n\t        type.validateOptions(options);\n\t      }\n\t      runApiCheck(type, 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(_ref, options) {\n\t    var apiCheck = _ref.apiCheck;\n\t    var apiCheckInstance = _ref.apiCheckInstance;\n\t    var apiCheckFunction = _ref.apiCheckFunction;\n\t    var apiCheckOptions = _ref.apiCheckOptions;\n\t\n\t    if (!apiCheck) {\n\t      return;\n\t    }\n\t    var instance = apiCheckInstance || formlyApiCheck;\n\t    var fn = apiCheckFunction || \"warn\";\n\t    var shape = instance.shape(apiCheck);\n\t    instance[fn](shape, options, apiCheckOptions || {\n\t      prefix: \"formly-field \" + name,\n\t      url: formlyApiCheck.config.output.docsBaseUrl + \"formly-field-type-apicheck-failed\"\n\t    });\n\t  }\n\t}\n\tformlyField.$inject = [\"$http\", \"$q\", \"$compile\", \"$templateCache\", \"formlyConfig\", \"formlyValidationMessages\", \"formlyApiCheck\", \"formlyUtil\", \"formlyUsability\", \"formlyWarn\"];\n\t\n\tfunction arrayify(obj) {\n\t  if (obj && !angular.isArray(obj)) {\n\t    obj = [obj];\n\t  } else if (!obj) {\n\t    obj = [];\n\t  }\n\t  return obj;\n\t}\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tmodule.exports = formlyFocus;\n\t\n\t// @ngInject\n\tfunction formlyFocus($timeout, $document) {\n\t  /* jshint -W052 */\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        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\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar _toConsumableArray = function (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 _slice = Array.prototype.slice;\n\t\n\tvar angular = _interopRequire(__webpack_require__(1));\n\t\n\tmodule.exports = formlyForm;\n\t\n\t/**\n\t * @ngdoc directive\n\t * @name formlyForm\n\t * @restrict E\n\t */\n\t// @ngInject\n\tfunction formlyForm(formlyUsability, $parse, formlyApiCheck, formlyConfig) {\n\t  var currentFormId = 1;\n\t  var optionsApi = [formlyApiCheck.shape({\n\t    formState: formlyApiCheck.object.optional,\n\t    resetModel: formlyApiCheck.func.optional,\n\t    updateInitialValue: formlyApiCheck.func.optional,\n\t    removeChromeAutoComplete: formlyApiCheck.bool.optional\n\t  }).strict.optional];\n\t  return {\n\t    restrict: \"E\",\n\t    template: function formlyFormGetTemplate(el, attrs) {\n\t      /* jshint -W033 */ // this because jshint is broken I guess...\n\t      var rootEl = getRootEl();\n\t      var formId = \"formly_\" + currentFormId++;\n\t      var parentFormAttributes = undefined;\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          <div 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               fields=\\\"fields\\\"\\n               form=\\\"\" + formId + \"\\\"\\n               form-id=\\\"\" + formId + \"\\\"\\n               form-state=\\\"options.formState\\\"\\n               index=\\\"$index\\\">\\n          </div>\\n          <div ng-transclude></div>\\n        </\" + rootEl + \">\\n      \";\n\t\n\t      function getRootEl() {\n\t        return attrs.rootEl || \"ng-form\";\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 (angular.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 = \"{{::'formly_' + \" + bindName + \"}}\";\n\t        }\n\t        return formName;\n\t      }\n\t\n\t      function copyAttributes(attributes) {\n\t        //console.log(attributes);\n\t        var excluded = [\"model\", \"form\", \"fields\", \"options\", \"name\", \"role\", \"class\"];\n\t        var arrayAttrs = [];\n\t        angular.forEach(attributes, function (_ref) {\n\t          var nodeName = _ref.nodeName;\n\t          var nodeValue = _ref.nodeValue;\n\t\n\t          if (nodeName !== \"undefined\" && excluded.indexOf(nodeName) === -1) {\n\t            arrayAttrs.push(\"\" + toKebabCase(nodeName) + \"=\\\"\" + nodeValue + \"\\\"\");\n\t          }\n\t        });\n\t        return arrayAttrs.join(\" \");\n\t      }\n\t\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    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: /* @ngInject */[\"$scope\", function FormlyFormController($scope) {\n\t      setupOptions();\n\t      $scope.model = $scope.model || {};\n\t      $scope.fields = $scope.fields || [];\n\t\n\t      angular.forEach($scope.fields, attachKey); // attaches a key based on the index if a key isn't specified\n\t      angular.forEach($scope.fields, setupWatchers); // setup watchers for all fields\n\t\n\t      // watch the model and evaluate watch expressions that depend on it.\n\t      $scope.$watch(\"model\", function onResultUpdate(newResult) {\n\t        angular.forEach($scope.fields, function runFieldExpressionProperties(field) {\n\t          /*jshint -W030 */\n\t          !isFieldGroup(field) && field.runExpressions && field.runExpressions(newResult);\n\t        });\n\t      }, true);\n\t\n\t      function setupOptions() {\n\t        formlyApiCheck[\"throw\"](optionsApi, [$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        angular.extend($scope.options, {\n\t          updateInitialValue: updateInitialValue,\n\t          resetModel: resetModel\n\t        });\n\t      }\n\t\n\t      function updateInitialValue() {\n\t        angular.forEach($scope.fields, function (field) {\n\t          return field.updateInitialValue();\n\t        });\n\t      }\n\t\n\t      function resetModel() {\n\t        angular.forEach($scope.fields, function (field) {\n\t          return field.resetModel();\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) || !angular.isDefined(field.watcher)) {\n\t          return;\n\t        }\n\t        var watchers = field.watcher;\n\t        if (!angular.isArray(watchers)) {\n\t          watchers = [watchers];\n\t        }\n\t        angular.forEach(watchers, function setupWatcher(watcher) {\n\t          if (!angular.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 (angular.isFunction(watchExpression)) {\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        return watchExpression;\n\t      }\n\t\n\t      function getWatchListener(watcher, field, index) {\n\t        var watchListener = watcher.listener;\n\t        if (angular.isFunction(watchListener)) {\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        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 isFieldGroup(field) {\n\t        return field && !!field.fieldGroup;\n\t      }\n\t    }],\n\t    link: function link(scope, el, attrs) {\n\t      if (attrs.form) {\n\t        var formId = attrs.name;\n\t        $parse(attrs.form).assign(scope.$parent, scope[formId]);\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      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\tformlyForm.$inject = [\"formlyUsability\", \"$parse\", \"formlyApiCheck\", \"formlyConfig\"];\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar angular = _interopRequire(__webpack_require__(1));\n\t\n\tvar formlyApiCheck = _interopRequire(__webpack_require__(9));\n\t\n\tvar formlyErrorAndWarningsUrlPrefix = _interopRequire(__webpack_require__(2));\n\t\n\tvar formlyUsability = _interopRequire(__webpack_require__(11));\n\t\n\tvar formlyConfig = _interopRequire(__webpack_require__(10));\n\t\n\tvar formlyValidationMessages = _interopRequire(__webpack_require__(12));\n\t\n\tvar formlyUtil = _interopRequire(__webpack_require__(15));\n\t\n\tvar formlyWarn = _interopRequire(__webpack_require__(16));\n\t\n\tvar formlyCustomValidation = _interopRequire(__webpack_require__(4));\n\t\n\tvar formlyField = _interopRequire(__webpack_require__(5));\n\t\n\tvar formlyFocus = _interopRequire(__webpack_require__(6));\n\t\n\tvar formlyForm = _interopRequire(__webpack_require__(7));\n\t\n\tvar formlyNgModelAttrsManipulator = _interopRequire(__webpack_require__(14));\n\t\n\tvar formlyCustomTags = _interopRequire(__webpack_require__(13));\n\t\n\tvar ngModuleName = \"formly\";\n\t\n\tmodule.exports = ngModuleName;\n\t\n\tvar ngModule = angular.module(ngModuleName, []);\n\t\n\tngModule.constant(\"formlyApiCheck\", formlyApiCheck);\n\tngModule.constant(\"formlyErrorAndWarningsUrlPrefix\", formlyErrorAndWarningsUrlPrefix);\n\tngModule.constant(\"formlyVersion\", (\"6.4.0-beta.1\")); // <-- webpack variable\n\t\n\tngModule.provider(\"formlyUsability\", formlyUsability);\n\tngModule.provider(\"formlyConfig\", formlyConfig);\n\t\n\tngModule.factory(\"formlyValidationMessages\", formlyValidationMessages);\n\tngModule.factory(\"formlyUtil\", formlyUtil);\n\tngModule.factory(\"formlyWarn\", formlyWarn);\n\t\n\tngModule.directive(\"formlyCustomValidation\", formlyCustomValidation);\n\tngModule.directive(\"formlyField\", formlyField);\n\tngModule.directive(\"formlyFocus\", formlyFocus);\n\tngModule.directive(\"formlyForm\", formlyForm);\n\t\n\tngModule.run(formlyNgModelAttrsManipulator);\n\tngModule.run(formlyCustomTags);\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar apiCheckFactory = _interopRequire(__webpack_require__(18));\n\t\n\tvar apiCheck = apiCheckFactory({\n\t  output: {\n\t    prefix: \"angular-formly:\",\n\t    docsBaseUrl: __webpack_require__(2)\n\t  }\n\t});\n\t\n\tfunction shapeRequiredIfNot(otherProps, propChecker) {\n\t  if (!angular.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  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  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.oneOfType([apiCheck.oneOf([null]), apiCheck.typeOrArrayOf(apiCheck.string)]);\n\t\n\tvar apiCheckProperty = apiCheck.objectOf(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  validateOptions: apiCheck.func.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 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: apiCheck.object.optional,\n\t  className: apiCheck.string.optional,\n\t  expressionProperties: apiCheck.objectOf(apiCheck.oneOfType([formlyExpression, apiCheck.shape({\n\t    expression: formlyExpression,\n\t    message: formlyExpression.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.object, apiCheck.string]).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: apiCheck.objectOf(apiCheck.oneOfType([formlyExpression, apiCheck.shape({\n\t    expression: formlyExpression,\n\t    message: formlyExpression.optional\n\t  }).strict])).optional,\n\t  noFormControl: apiCheck.bool.optional,\n\t  hide: apiCheck.bool.optional,\n\t  ngModelAttrs: apiCheck.objectOf(apiCheck.shape({\n\t    expression: apiCheck.shape.ifNot([\"value\", \"attribute\", \"bound\"], apiCheck.any).optional,\n\t    value: apiCheck.shape.ifNot(\"expression\", apiCheck.any).optional,\n\t    attribute: apiCheck.shape.ifNot(\"expression\", apiCheck.any).optional,\n\t    bound: apiCheck.shape.ifNot(\"expression\", apiCheck.any).optional\n\t  }).strict).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.oneOfType([apiCheck.bool, apiCheck.oneOf([null])]).optional,\n\t    messages: apiCheck.objectOf(formlyExpression).optional,\n\t    errorExistsAndShouldBeVisible: apiCheck.bool.optional\n\t  }).optional,\n\t  formControl: apiCheck.object.optional,\n\t  value: apiCheck.func.optional,\n\t  runExpressions: apiCheck.func.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 fieldGroup = apiCheck.shape({\n\t  $$hashKey: apiCheck.any.optional,\n\t  fieldGroup: apiCheck.arrayOf(formlyFieldOptions),\n\t  className: apiCheck.string.optional\n\t}).strict;\n\t\n\tvar typeOptionsDefaultOptions = angular.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  validateOptions: apiCheck.func.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\tangular.extend(apiCheck, {\n\t  formlyTypeOptions: formlyTypeOptions, formlyFieldOptions: formlyFieldOptions, formlyExpression: formlyExpression, formlyWrapperType: formlyWrapperType, fieldGroup: fieldGroup\n\t});\n\t\n\tmodule.exports = apiCheck;\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar angular = _interopRequire(__webpack_require__(1));\n\t\n\tvar utils = _interopRequire(__webpack_require__(3));\n\t\n\tmodule.exports = formlyConfig;\n\t\n\t// @ngInject\n\tfunction formlyConfig(formlyUsabilityProvider, 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  angular.extend(this, {\n\t    setType: setType,\n\t    getType: getType,\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    },\n\t    templateManipulators: {\n\t      preWrapper: [],\n\t      postWrapper: []\n\t    },\n\t    $get: function () {\n\t      return _this2;\n\t    }\n\t  });\n\t\n\t  function setType(options) {\n\t    if (angular.isArray(options)) {\n\t      angular.forEach(options, setType);\n\t    } else if (angular.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    } 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    extendTypeValidateOptionsFunction(options, extendsType);\n\t    extendTypeDefaultOptions(options, extendsType);\n\t    utils.reverseDeepMerge(options, extendsType);\n\t  }\n\t\n\t  function extendTypeControllerFunction(options, extendsType) {\n\t    var extendsCtrl = extendsType.controller;\n\t    if (!angular.isDefined(extendsCtrl)) {\n\t      return;\n\t    }\n\t    var optionsCtrl = options.controller;\n\t    if (angular.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 (!angular.isDefined(extendsFn)) {\n\t      return;\n\t    }\n\t    var optionsFn = options.link;\n\t    if (angular.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 extendTypeValidateOptionsFunction(options, extendsType) {\n\t    var extendsFn = extendsType.validateOptions;\n\t    if (!angular.isDefined(extendsFn)) {\n\t      return;\n\t    }\n\t    var optionsFn = options.validateOptions;\n\t    var originalDefaultOptions = options.defaultOptions;\n\t    if (angular.isDefined(optionsFn)) {\n\t      options.validateOptions = function (options) {\n\t        optionsFn(options);\n\t        var mergedOptions = angular.copy(options);\n\t        var defaultOptions = originalDefaultOptions;\n\t        if (defaultOptions) {\n\t          if (angular.isFunction(defaultOptions)) {\n\t            defaultOptions = defaultOptions(mergedOptions);\n\t          }\n\t          utils.reverseDeepMerge(mergedOptions, defaultOptions);\n\t        }\n\t        extendsFn(mergedOptions);\n\t      };\n\t    } else {\n\t      options.validateOptions = extendsFn;\n\t    }\n\t  }\n\t\n\t  function extendTypeDefaultOptions(options, extendsType) {\n\t    var extendsDO = extendsType.defaultOptions;\n\t    if (!angular.isDefined(extendsDO)) {\n\t      return;\n\t    }\n\t    var optionsDO = options.defaultOptions;\n\t    var optionsDOIsFn = angular.isFunction(optionsDO);\n\t    var extendsDOIsFn = angular.isFunction(extendsDO);\n\t    if (extendsDOIsFn) {\n\t      options.defaultOptions = function defaultOptions(options) {\n\t        var extendsDefaultOptions = extendsDO(options);\n\t        var mergedDefaultOptions = {};\n\t        utils.reverseDeepMerge(mergedDefaultOptions, options, extendsDefaultOptions);\n\t        var extenderOptionsDefaultOptions = optionsDO;\n\t        if (optionsDOIsFn) {\n\t          extenderOptionsDefaultOptions = extenderOptionsDefaultOptions(mergedDefaultOptions);\n\t        }\n\t        utils.reverseDeepMerge(extendsDefaultOptions, extenderOptionsDefaultOptions);\n\t        return extendsDefaultOptions;\n\t      };\n\t    } else if (optionsDOIsFn) {\n\t      options.defaultOptions = function defaultOptions(options) {\n\t        var newDefaultOptions = {};\n\t        utils.reverseDeepMerge(newDefaultOptions, options, extendsDO);\n\t        return optionsDO(newDefaultOptions);\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 setWrapper(_x, _x2) {\n\t    var _again = true;\n\t\n\t    _function: while (_again) {\n\t      _again = false;\n\t      var options = _x,\n\t          name = _x2;\n\t\n\t      if (angular.isArray(options)) {\n\t        return options.map(function (wrapperOptions) {\n\t          return setWrapper(wrapperOptions);\n\t        });\n\t      } else if (angular.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 (angular.isString(options)) {\n\t        _x = {\n\t          template: options,\n\t          name: name\n\t        };\n\t        _again = true;\n\t        continue _function;\n\t      }\n\t    }\n\t  }\n\t\n\t  function getOptionsTypes(options) {\n\t    if (angular.isString(options.types)) {\n\t      return [options.types];\n\t    }\n\t    if (!angular.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 = !angular.isArray(options.types) || !options.types.every(angular.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([\"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    /* jshint maxcomplexity:6 */\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;\n\t    }\n\t    if (!angular.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) {\n\t      console.warn.apply(console, arguments);\n\t    }\n\t  }\n\t}\n\tformlyConfig.$inject = [\"formlyUsabilityProvider\", \"formlyApiCheck\"];\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar angular = _interopRequire(__webpack_require__(1));\n\t\n\tmodule.exports = formlyUsability;\n\t\n\t// @ngInject\n\tfunction formlyUsability(formlyApiCheck, formlyErrorAndWarningsUrlPrefix) {\n\t  var _this = this;\n\t\n\t  angular.extend(this, {\n\t    getFormlyError: getFormlyError,\n\t    getFieldError: getFieldError,\n\t    checkWrapper: checkWrapper,\n\t    checkWrapperTemplate: checkWrapperTemplate,\n\t    $get: function () {\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: \" + angular.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\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tmodule.exports = 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\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tmodule.exports = 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        angular.forEach(customElements, function (el) {\n\t          document.createElement(el);\n\t        });\n\t      }\n\t    })();\n\t  }\n\t}\n\taddCustomTags.$inject = [\"$document\"];\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar angular = _interopRequire(__webpack_require__(1));\n\t\n\tmodule.exports = addFormlyNgModelAttrsManipulator;\n\t\n\t// @ngInject\n\tfunction addFormlyNgModelAttrsManipulator(formlyConfig) {\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    /* jshint maxcomplexity:6 */\n\t    var el = document.createElement(\"div\");\n\t    var data = options.data;\n\t    if (data.skipNgModelAttrsManipulator === true) {\n\t      return template;\n\t    }\n\t    el.innerHTML = template;\n\t    var modelNodes = el.querySelectorAll(\"[ng-model]\");\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.id);\n\t\n\t    addValidation();\n\t    addModelOptions();\n\t    addTemplateOptionsAttrs();\n\t\n\t    return el.innerHTML;\n\t\n\t    function addValidation() {\n\t      if (angular.isDefined(options.validators) || angular.isDefined(options.validation.messages)) {\n\t        addIfNotPresent(modelNodes, \"formly-custom-validation\", \"\");\n\t      }\n\t    }\n\t\n\t    function addModelOptions() {\n\t      if (angular.isDefined(options.modelOptions)) {\n\t        addIfNotPresent(modelNodes, \"ng-model-options\", \"options.modelOptions\");\n\t        if (options.modelOptions.getterSetter) {\n\t          angular.forEach(modelNodes, function (node) {\n\t            node.setAttribute(\"ng-model\", \"options.value\");\n\t          });\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      angular.extend(ngModelAttributes, options.ngModelAttrs);\n\t\n\t      // Feel free to make this more simple :-)\n\t      angular.forEach(ngModelAttributes, function (val, name) {\n\t        /* jshint maxcomplexity:14 */\n\t        var attrVal = undefined;\n\t        var 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 = angular.isDefined(toVal);\n\t        var inEp = angular.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.expression && inTo) {\n\t          attrName = val.expression;\n\t          if (angular.isString(to[name])) {\n\t            attrVal = \"$eval(\" + ref + \")\";\n\t          } else if (angular.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 = \"{{\" + ref + \"}}\";\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        } else if (val.bound && inTo) {\n\t          attrName = val.bound;\n\t          attrVal = ref;\n\t        }\n\t\n\t        if (angular.isDefined(attrName) && angular.isDefined(attrVal)) {\n\t          addIfNotPresent(modelNodes, attrName, attrVal);\n\t        }\n\t      });\n\t    }\n\t  }\n\t\n\t  // Utility functions\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 expressionOnly = [\"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    angular.forEach(boundOnly, function (item) {\n\t      ngModelAttributes[item] = { bound: \"ng-\" + item };\n\t    });\n\t\n\t    angular.forEach(bothBooleanAndBound, function (item) {\n\t      ngModelAttributes[item] = { boolean: item, bound: \"ng-\" + item };\n\t    });\n\t\n\t    angular.forEach(bothAttributeAndBound, function (item) {\n\t      ngModelAttributes[item] = { attribute: item, bound: \"ng-\" + item };\n\t    });\n\t\n\t    angular.forEach(expressionOnly, function (item) {\n\t      var propName = \"on\" + item.substr(0, 1).toUpperCase() + item.substr(1);\n\t      ngModelAttributes[propName] = { expression: \"ng-\" + item };\n\t    });\n\t\n\t    angular.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    angular.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\taddFormlyNgModelAttrsManipulator.$inject = [\"formlyConfig\"];\n\n\t// jshint -W035\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\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\t\n\tvar utils = _interopRequire(__webpack_require__(3));\n\t\n\tmodule.exports = formlyUtil;\n\t\n\t// @ngInject\n\tfunction formlyUtil() {\n\t  return utils;\n\t}\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _toConsumableArray = function (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\tmodule.exports = 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\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_17__;\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_18__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** 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 93c79f1b6aeadfb4a33c\n **/","import index from './index.common';\nexport default index;\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/jshint-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.\nimport angular from 'angular';\nif (!angular.version) {\n  angular = window.angular;\n}\nexport default angular;\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/jshint-loader!./angular-fix/index.js\n **/","import angular from 'angular-fix';\n\nexport default {formlyEval, getFieldId, reverseDeepMerge, findByNodeName};\n\nfunction formlyEval(scope, expression, $modelValue, $viewValue) {\n  if (angular.isFunction(expression)) {\n    return expression($viewValue, $modelValue, scope);\n  } else {\n    return scope.$eval(expression, {$viewValue, $modelValue});\n  }\n}\n\nfunction getFieldId(formId, options, index) {\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\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}\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  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\n\n\n/** WEBPACK FOOTER **\n ** ../~/jshint-loader!./other/utils.js\n **/","export default formlyCustomValidation;\n\n// @ngInject\nfunction formlyCustomValidation(formlyUtil, $q) {\n  return {\n    restrict: 'A',\n    require: 'ngModel',\n    link: function formlyCustomValidationLink(scope, el, attrs, ctrl) {\n      const opts = scope.options;\n      if (opts.validators) {\n        checkValidators(opts.validators);\n      }\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      var useNewValidatorsApi = ctrl.hasOwnProperty('$validators') && !attrs.hasOwnProperty('useParsers');\n      angular.forEach(opts.validators, function addValidatorToPipeline(validator, name) {\n        var message = validator.message;\n        if (message) {\n          opts.validation.messages[name] = () => {\n            return formlyUtil.formlyEval(scope, message, ctrl.$modelValue, ctrl.$viewValue);\n          };\n        }\n        validator = angular.isObject(validator) ? validator.expression : validator;\n        var isPossiblyAsync = !angular.isString(validator);\n        if (useNewValidatorsApi) {\n          setupWithValidators();\n        } else {\n          setupWithParsers();\n        }\n\n        function setupWithValidators() {\n          var validatorCollection = isPossiblyAsync ? '$asyncValidators' : '$validators';\n          ctrl[validatorCollection][name] = function evalValidity(modelValue, viewValue) {\n            var value = formlyUtil.formlyEval(scope, validator, modelValue, viewValue);\n            if (isPossiblyAsync) {\n              return isPromiseLike(value) ? value : value ? $q.when(value) : $q.reject(value);\n            } else {\n              return value;\n            }\n          };\n        }\n\n        function setupWithParsers() {\n          let inFlightValidator;\n          ctrl.$parsers.unshift(function evalValidityOfParser(viewValue) {\n            var isValid = formlyUtil.formlyEval(scope, validator, ctrl.$modelValue, viewValue);\n            if (isPromiseLike(isValid)) {\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                if (Object.keys(ctrl.$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  function isPromiseLike(obj) {\n    return obj && angular.isFunction(obj.then);\n  }\n\n  function checkValidators(validators) {\n    var allowedProperties = ['expression', 'message'];\n    var validatorsWithExtraProps = {};\n    angular.forEach(validators, (validator, name) => {\n      if (angular.isString(validator)) {\n        return;\n      }\n      var extraProps = [];\n      angular.forEach(validator, (v, key) => {\n        if (allowedProperties.indexOf(key) === -1) {\n          extraProps.push(key);\n        }\n      });\n      if (extraProps.length) {\n        validatorsWithExtraProps[name] = extraProps;\n      }\n    });\n    if (Object.keys(validatorsWithExtraProps).length) {\n      throw new Error([\n        `Validators are only allowed to be functions or objects that have ${allowedProperties.join(', ')}.`,\n        `You provided some extra properties: ${JSON.stringify(validatorsWithExtraProps)}`\n      ].join(' '));\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/jshint-loader!./directives/formly-custom-validation.js\n **/","import angular from 'angular-fix';\n\nexport default formlyField;\n\n/**\n * @ngdoc directive\n * @name formlyField\n * @restrict AE\n */\n// @ngInject\nfunction formlyField($http, $q, $compile, $templateCache, formlyConfig, formlyValidationMessages, formlyApiCheck,\n                     formlyUtil, formlyUsability, formlyWarn) {\n  return {\n    restrict: 'AE',\n    transclude: true,\n    scope: {\n      options: '=',\n      model: '=',\n      formId: '@',\n      index: '=?',\n      fields: '=?',\n      formState: '=?',\n      form: '=?'\n    },\n    controller: /* @ngInject */ function FormlyFieldController($scope, $timeout, $parse, $controller) {\n      if ($scope.options.fieldGroup) {\n        return;\n      }\n      var opts = $scope.options;\n      var fieldType = opts.type && formlyConfig.getType(opts.type);\n      simplifyLife(opts);\n      mergeFieldOptionsWithTypeDefaults(opts, fieldType);\n      extendOptionsWithDefaults(opts, $scope.index);\n      checkApi(opts);\n      // set field id to link labels and fields\n      $scope.id = formlyUtil.getFieldId($scope.formId, opts, $scope.index);\n\n      // initalization\n      setDefaultValue();\n      setInitialValue();\n      runExpressions();\n      addModelWatcher($scope, opts);\n      addValidationMessages(opts);\n      // simplify things\n      // create $scope.to so template authors can reference to instead of $scope.options.templateOptions\n      $scope.to = $scope.options.templateOptions;\n      invokeControllers($scope, opts, 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          angular.forEach(field.expressionProperties, function runExpression(expression, prop) {\n            var setter = $parse(prop).assign;\n            var promise = $q.when(formlyUtil.formlyEval($scope, expression, currentValue));\n            promise.then(function setFieldValue(value) {\n              setter(field, value);\n            });\n          });\n        });\n      }\n\n      function valueGetterSetter(newVal) {\n        if (!$scope.model || !$scope.options.key) {\n          return;\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          data: {},\n          templateOptions: {},\n          validation: {}\n        });\n      }\n\n      function setDefaultValue() {\n        if (angular.isDefined(opts.defaultValue) && !angular.isDefined($scope.model[opts.key])) {\n          $scope.model[opts.key] = opts.defaultValue;\n        }\n      }\n\n      function setInitialValue() {\n        opts.initialValue = $scope.model && $scope.model[opts.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        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);\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: valueGetterSetter,\n          runExpressions,\n          resetModel,\n          updateInitialValue\n        });\n      }\n\n      // initialization functions\n      function addModelWatcher(scope, options) {\n        if (options.model) {\n          scope.$watch('options.model', runExpressions, true);\n        }\n      }\n\n      function resetModel() {\n        $scope.model[$scope.options.key] = $scope.options.initialValue;\n        if ($scope.options.formControl) {\n          $scope.options.formControl.$setViewValue($scope.model[$scope.options.key]);\n          $scope.options.formControl.$render();\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    link: function fieldLink(scope, el) {\n      if (scope.options.fieldGroup) {\n        checkFieldGroupApi(scope.options);\n        el.addClass('formly-field-group');\n        setElementTemplate(`\n          <formly-form model=\"model\"\n                       fields=\"options.fieldGroup\"\n                       options=\"$parent.options\"\n                       class=\"${scope.options.className}\"\n                       is-field-group>\n          </formly-form>\n        `);\n        return;\n      }\n\n      addClasses();\n\n      var type = scope.options.type && formlyConfig.getType(scope.options.type);\n      var args = arguments;\n      var thusly = this;\n      getFieldTemplate(scope.options)\n        .then(runManipulators(formlyConfig.templateManipulators.preWrapper))\n        .then(transcludeInWrappers(scope.options))\n        .then(runManipulators(formlyConfig.templateManipulators.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 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 stopWatchingField = angular.noop;\n        let stopWatchingShowError = angular.noop;\n        if (scope.options.noFormControl) {\n          return;\n        }\n        const templateEl = angular.element(`<div>${templateString}</div>`);\n        const ngModelNode = templateEl[0].querySelector('[ng-model]');\n        if (ngModelNode && ngModelNode.name) {\n          watchFieldNameOrExistence(ngModelNode.name);\n        }\n\n        function watchFieldNameOrExistence(name) {\n          const nameExpressionRegex = /\\{\\{(.*?)}}/;\n          const nameExpression = nameExpressionRegex.exec(name);\n          if (nameExpression) {\n            watchFieldName(nameExpression[1]);\n          } else {\n            watchFieldExistence(name);\n          }\n        }\n\n        function watchFieldName(expression) {\n          scope.$watch(expression, function oneFieldNameChange(name) {\n            if (name) {\n              stopWatchingField();\n              watchFieldExistence(name);\n            }\n          });\n        }\n\n        function watchFieldExistence(name) {\n          stopWatchingField = scope.$watch(`form[\"${name}\"]`, function formControlChange(formControl) {\n            if (formControl) {\n              scope.fc = formControl; // shortcut for template authors\n              scope.options.formControl = formControl;\n              stopWatchingShowError();\n              addShowMessagesWatcher();\n            }\n          });\n        }\n\n        function addShowMessagesWatcher() {\n          stopWatchingShowError = scope.$watch(function watchShowValidationChange() {\n            if (typeof scope.options.validation.show === 'boolean') {\n              return scope.fc.$invalid && scope.options.validation.show;\n            } else {\n              let noTouchedButDirty = (angular.isUndefined(scope.fc.$touched) && scope.fc.$dirty);\n              return scope.fc.$invalid && (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\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(template) {\n          var chain = $q.when(template);\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\n  function asHtml(el) {\n    var wrapper = angular.element('<a></a>');\n    return wrapper.append(el).html();\n  }\n\n  function getFieldTemplate(options) {\n    let type = formlyConfig.getType(options.type, true, options);\n    let template = options.template || type && type.template;\n    let templateUrl = options.templateUrl || type && type.templateUrl;\n    if (!template && !templateUrl) {\n      throw formlyUsability.getFieldError(\n        'type-type-has-no-template',\n        `Type '${options.type}' has not template. On element:`, options\n      );\n    }\n\n    return getTemplate(template || templateUrl, !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      let 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) {\n    let wrapper = getWrapperOption(options);\n\n    return function transcludeTemplate(template) {\n      if (!wrapper.length) {\n        return $q.when(template);\n      }\n\n      wrapper.forEach((wrapper) => {\n        formlyUsability.checkWrapper(wrapper, options);\n        wrapper.validateOptions && wrapper.validateOptions(options);\n        runApiCheck(wrapper, options);\n      });\n      let 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    let 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) {\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 this type specified that it uses.\n    var type = formlyConfig.getType(options.type, true, options);\n    if (type && type.wrapper) {\n      let typeWrappers = arrayify(type.wrapper).map(formlyConfig.getWrapper);\n      wrapper = wrapper.concat(typeWrappers);\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    const type = options.type && formlyConfig.getType(options.type);\n    if (type) {\n      if (type.validateOptions) {\n        type.validateOptions(options);\n      }\n      runApiCheck(type, 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({apiCheck, apiCheckInstance, apiCheckFunction, apiCheckOptions}, options) {\n    if (!apiCheck) {\n      return;\n    }\n    const instance = apiCheckInstance || formlyApiCheck;\n    const fn = apiCheckFunction || 'warn';\n    const shape = instance.shape(apiCheck);\n    instance[fn](shape, options, apiCheckOptions || {\n        prefix: `formly-field ${name}`,\n        url: formlyApiCheck.config.output.docsBaseUrl + 'formly-field-type-apicheck-failed'\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\n\n/** WEBPACK FOOTER **\n ** ../~/jshint-loader!./directives/formly-field.js\n **/","export default formlyFocus;\n\n// @ngInject\nfunction formlyFocus($timeout, $document) {\n  /* jshint -W052 */\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        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 ** ../~/jshint-loader!./directives/formly-focus.js\n **/","import angular from 'angular-fix';\n\nexport default formlyForm;\n\n/**\n * @ngdoc directive\n * @name formlyForm\n * @restrict E\n */\n// @ngInject\nfunction formlyForm(formlyUsability, $parse, formlyApiCheck, formlyConfig) {\n  var currentFormId = 1;\n  var optionsApi = [\n    formlyApiCheck.shape({\n      formState: formlyApiCheck.object.optional,\n      resetModel: formlyApiCheck.func.optional,\n      updateInitialValue: formlyApiCheck.func.optional,\n      removeChromeAutoComplete: formlyApiCheck.bool.optional\n    }).strict.optional\n  ];\n  return {\n    restrict: 'E',\n    template: function formlyFormGetTemplate(el, attrs) {\n      /* jshint -W033 */ // this because jshint is broken I guess...\n      const rootEl = getRootEl();\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          <div 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               fields=\"fields\"\n               form=\"${formId}\"\n               form-id=\"${formId}\"\n               form-state=\"options.formState\"\n               index=\"$index\">\n          </div>\n          <div ng-transclude></div>\n        </${rootEl}>\n      `;\n\n      function getRootEl() {\n        return attrs.rootEl || 'ng-form';\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 = `{{::'formly_' + ${bindName}}}`;\n        }\n        return formName;\n      }\n\n      function copyAttributes(attributes) {\n        //console.log(attributes);\n        const excluded = ['model', 'form', 'fields', 'options', 'name', 'role', 'class'];\n        const arrayAttrs = [];\n        angular.forEach(attributes, ({nodeName, nodeValue}) => {\n          if (nodeName !== 'undefined' && excluded.indexOf(nodeName) === -1) {\n            arrayAttrs.push(`${toKebabCase(nodeName)}=\"${nodeValue}\"`);\n          }\n        });\n        return arrayAttrs.join(' ');\n      }\n\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    replace: true,\n    transclude: true,\n    scope: {\n      fields: '=',\n      model: '=',\n      form: '=?',\n      options: '=?'\n    },\n    controller: /* @ngInject */ function FormlyFormController($scope) {\n      setupOptions();\n      $scope.model = $scope.model || {};\n      $scope.fields = $scope.fields || [];\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      // watch the model and evaluate watch expressions that depend on it.\n      $scope.$watch('model', function onResultUpdate(newResult) {\n        angular.forEach($scope.fields, function runFieldExpressionProperties(field) {\n          /*jshint -W030 */\n          !isFieldGroup(field) && field.runExpressions && field.runExpressions(newResult);\n        });\n      }, true);\n\n      function setupOptions() {\n        formlyApiCheck.throw(optionsApi, [$scope.options], {prefix: 'formly-form options check'});\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 => field.updateInitialValue());\n      }\n\n      function resetModel() {\n        angular.forEach($scope.fields, field => field.resetModel());\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        var 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          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 (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          var originalExpression = watchExpression;\n          watchExpression = function formlyWatchExpression() {\n            var 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        var 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          var originalListener = watchListener;\n          watchListener = function formlyWatchListener() {\n            var 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 isFieldGroup(field) {\n        return field && !!field.fieldGroup;\n      }\n    },\n    link(scope, el, attrs) {\n      if (attrs.form) {\n        const formId = attrs.name;\n        $parse(attrs.form).assign(scope.$parent, scope[formId]);\n      }\n\n      // chrome autocomplete lameness\n      // see https://code.google.com/p/chromium/issues/detail?id=468153#c14\n      // ლ(ಠ益ಠლ)   (╯°□°)╯︵ ┻━┻    (◞‸◟;)\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\n/** WEBPACK FOOTER **\n ** ../~/jshint-loader!./directives/formly-form.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 ** ../~/jshint-loader!./index.common.js\n **/","import apiCheckFactory from 'api-check';\n\nlet 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  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  shapeRequiredIfNotDefinition.type = type;\n  return apiCheck.utils.checkerHelpers.setupChecker(shapeRequiredIfNotDefinition);\n}\n\nlet formlyExpression = apiCheck.oneOfType([apiCheck.string, apiCheck.func]);\nlet specifyWrapperType = apiCheck.oneOfType([\n  apiCheck.oneOf([null]), apiCheck.typeOrArrayOf(apiCheck.string)\n]);\n\nconst apiCheckProperty = apiCheck.objectOf(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  validateOptions: apiCheck.func.optional,\n  apiCheck: apiCheckProperty.optional,\n  apiCheckInstance: apiCheckInstanceProperty.optional,\n  apiCheckFunction: apiCheckFunctionProperty.optional,\n  apiCheckOptions: apiCheck.object.optional\n}).strict;\n\nlet 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: apiCheck.object.optional,\n  className: apiCheck.string.optional,\n  expressionProperties: apiCheck.objectOf(apiCheck.oneOfType([\n    formlyExpression,\n    apiCheck.shape({\n      expression: formlyExpression,\n      message: formlyExpression.optional\n    }).strict\n  ])).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.object, apiCheck.string\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: apiCheck.objectOf(apiCheck.oneOfType([\n    formlyExpression, apiCheck.shape({\n      expression: formlyExpression,\n      message: formlyExpression.optional\n    }).strict\n  ])).optional,\n  noFormControl: apiCheck.bool.optional,\n  hide: apiCheck.bool.optional,\n  ngModelAttrs: apiCheck.objectOf(apiCheck.shape({\n    expression: apiCheck.shape.ifNot(['value', 'attribute', 'bound'], apiCheck.any).optional,\n    value: apiCheck.shape.ifNot('expression', apiCheck.any).optional,\n    attribute: apiCheck.shape.ifNot('expression', apiCheck.any).optional,\n    bound: apiCheck.shape.ifNot('expression', apiCheck.any).optional\n  }).strict).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.oneOfType([\n      apiCheck.bool, apiCheck.oneOf([null])\n    ]).optional,\n    messages: apiCheck.objectOf(formlyExpression).optional,\n    errorExistsAndShouldBeVisible: apiCheck.bool.optional\n  }).optional,\n  formControl: apiCheck.object.optional,\n  value: apiCheck.func.optional,\n  runExpressions: apiCheck.func.optional,\n  resetModel: apiCheck.func.optional,\n  updateInitialValue: apiCheck.func.optional,\n  initialValue: apiCheck.any.optional,\n  defaultValue: apiCheck.any.optional\n};\n\n\nlet formlyFieldOptions = apiCheck.shape(fieldOptionsApiShape).strict;\n\nconst fieldGroup = apiCheck.shape({\n  $$hashKey: apiCheck.any.optional,\n  fieldGroup: apiCheck.arrayOf(formlyFieldOptions),\n  className: apiCheck.string.optional\n}).strict;\n\nlet typeOptionsDefaultOptions = angular.copy(fieldOptionsApiShape);\ntypeOptionsDefaultOptions.key = apiCheck.string.optional;\n\nlet 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  validateOptions: apiCheck.func.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\n});\n\nexport default apiCheck;\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/jshint-loader!./providers/formlyApiCheck.js\n **/","import angular from 'angular-fix';\nimport utils from '../other/utils';\n\nexport default formlyConfig;\n\n// @ngInject\nfunction formlyConfig(formlyUsabilityProvider, formlyApiCheck) {\n\n  var typeMap = {};\n  var templateWrappersMap = {};\n  var defaultWrapperName = 'default';\n  var _this = this;\n  var getError = formlyUsabilityProvider.getFormlyError;\n\n  angular.extend(this, {\n    setType,\n    getType,\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    },\n    templateManipulators: {\n      preWrapper: [],\n      postWrapper: []\n    },\n    $get: () => this\n  });\n\n  function setType(options) {\n    if (angular.isArray(options)) {\n      angular.forEach(options, setType);\n    } else if (angular.isObject(options)) {\n      checkType(options);\n      if (options.extends) {\n        extendTypeOptions(options);\n      }\n      typeMap[options.name] = options;\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    extendTypeValidateOptionsFunction(options, extendsType);\n    extendTypeDefaultOptions(options, extendsType);\n    utils.reverseDeepMerge(options, extendsType);\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 extendTypeValidateOptionsFunction(options, extendsType) {\n    const extendsFn = extendsType.validateOptions;\n    if (!angular.isDefined(extendsFn)) {\n      return;\n    }\n    const optionsFn = options.validateOptions;\n    const originalDefaultOptions = options.defaultOptions;\n    if (angular.isDefined(optionsFn)) {\n      options.validateOptions = function (options) {\n        optionsFn(options);\n        let mergedOptions = angular.copy(options);\n        let defaultOptions = originalDefaultOptions;\n        if (defaultOptions) {\n          if (angular.isFunction(defaultOptions)) {\n            defaultOptions = defaultOptions(mergedOptions);\n          }\n          utils.reverseDeepMerge(mergedOptions, defaultOptions);\n        }\n        extendsFn(mergedOptions);\n      };\n    } else {\n      options.validateOptions = 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(options) {\n        const extendsDefaultOptions = extendsDO(options);\n        const mergedDefaultOptions = {};\n        utils.reverseDeepMerge(mergedDefaultOptions, options, extendsDefaultOptions);\n        let extenderOptionsDefaultOptions = optionsDO;\n        if (optionsDOIsFn) {\n          extenderOptionsDefaultOptions = extenderOptionsDefaultOptions(mergedDefaultOptions);\n        }\n        utils.reverseDeepMerge(extendsDefaultOptions, extenderOptionsDefaultOptions);\n        return extendsDefaultOptions;\n      };\n    } else if (optionsDOIsFn) {\n      options.defaultOptions = function defaultOptions(options) {\n        let newDefaultOptions = {};\n        utils.reverseDeepMerge(newDefaultOptions, options, extendsDO);\n        return optionsDO(newDefaultOptions);\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(\n        `There is no type by the name of \"${name}\": ${JSON.stringify(errorContext)}`\n      );\n    } else {\n      return type;\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    let 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([\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    /* jshint maxcomplexity:6 */\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;\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) {\n      console.warn(...arguments);\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/jshint-loader!./providers/formlyConfig.js\n **/","import angular from 'angular-fix';\n\nexport default formlyUsability;\n\n// @ngInject\nfunction formlyUsability(formlyApiCheck, formlyErrorAndWarningsUrlPrefix) {\n  angular.extend(this, {\n    getFormlyError: getFormlyError,\n    getFieldError: getFieldError,\n    checkWrapper: checkWrapper,\n    checkWrapperTemplate: checkWrapperTemplate,\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    var 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 ** ../~/jshint-loader!./providers/formlyUsability.js\n **/","export default formlyValidationMessages;\n\n\n// @ngInject\nfunction formlyValidationMessages() {\n\n  var 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 ** ../~/jshint-loader!./providers/formlyValidationMessages.js\n **/","export 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 ** ../~/jshint-loader!./run/formlyCustomTags.js\n **/","import angular from 'angular-fix';\n\nexport default addFormlyNgModelAttrsManipulator;\n\n// @ngInject\nfunction addFormlyNgModelAttrsManipulator(formlyConfig) {\n  if (formlyConfig.extras.disableNgModelAttrsManipulator) {\n    return;\n  }\n  formlyConfig.templateManipulators.preWrapper.push(ngModelAttrsManipulator);\n\n\n  function ngModelAttrsManipulator(template, options, scope) {\n    /* jshint maxcomplexity:6 */\n    var el = document.createElement('div');\n    var data = options.data;\n    if (data.skipNgModelAttrsManipulator === true) {\n      return template;\n    }\n    el.innerHTML = template;\n    var modelNodes = el.querySelectorAll('[ng-model]');\n    if (!modelNodes || !modelNodes.length) {\n      return template;\n    }\n\n    addIfNotPresent(modelNodes, 'id', scope.id);\n    addIfNotPresent(modelNodes, 'name', scope.id);\n\n    addValidation();\n    addModelOptions();\n    addTemplateOptionsAttrs();\n\n\n    return el.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 addModelOptions() {\n      if (angular.isDefined(options.modelOptions)) {\n        addIfNotPresent(modelNodes, 'ng-model-options', 'options.modelOptions');\n        if (options.modelOptions.getterSetter) {\n          angular.forEach(modelNodes, node => {\n            node.setAttribute('ng-model', 'options.value');\n          });\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      let 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        /* jshint maxcomplexity:14 */\n        let attrVal;\n        let 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.expression && inTo) {\n          attrName = val.expression;\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 = `{{${ref}}}`;\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            // jshint -W035\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\n  // Utility functions\n  function getBuiltInAttributes() {\n    let ngModelAttributes = {\n      focus: {\n        attribute: 'formly-focus'\n      }\n    };\n    const boundOnly = [];\n    const bothBooleanAndBound = ['required', 'disabled'];\n    const bothAttributeAndBound = ['pattern', 'minlength'];\n    const expressionOnly = ['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(expressionOnly, item => {\n      var propName = 'on' + item.substr(0, 1).toUpperCase() + item.substr(1);\n      ngModelAttributes[propName] = {expression: '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\n\n\n/** WEBPACK FOOTER **\n ** ../~/jshint-loader!./run/formlyNgModelAttrsManipulator.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 ** ../~/jshint-loader!./services/formlyUtil.js\n **/","export 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(...args);\n    }\n  };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/jshint-loader!./services/formlyWarn.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_17__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"angular\"\n ** module id = 17\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_18__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"root\":\"apiCheck\",\"amd\":\"api-check\",\"commonjs2\":\"api-check\",\"commonjs\":\"api-check\"}\n ** module id = 18\n ** module chunks = 0\n **/"],"sourceRoot":""}