{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///formly.min.js","webpack:///webpack/bootstrap 0d2222e7aab3a72e2975","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","extraLocals","isFunction","$eval","extend","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","arrayify","isArray","extendFunction","_len","fns","Array","_key","args","fn","apply","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","FormlyFieldController","$scope","$timeout","$parse","$controller","runExpressions","field","currentValue","valueGetterSetter","expressionProperties","setter","assign","promise","newVal","model","simplifyLife","data","templateOptions","to","setFieldId","extras","formName","form","$name","setDefaultValue","defaultValue","setInitialValue","initialValue","mergeFieldOptionsWithTypeDefaults","mergeOptions","defaultOptions","properOrder","optionsTypes","reverse","typeName","getType","extraOptions","extendOptionsWithDefaults","resetModel","updateInitialValue","addModelWatcher","$watch","formControl","$setViewValue","$render","$setUntouched","$setPristine","addValidationMessages","invokeControllers","controller","setupFieldGroup","formState","fieldGroup","fieldType","getFieldType","checkApi","fieldLink","setFieldGroupTemplate","checkFieldGroupApi","addClass","extraAttributes","elementAttributes","map","setElementTemplate","className","addAttributes","attr","addClasses","templateString","html","asHtml","contents","watchFormControl","watchFieldNameOrExistence","nameExpressionRegex","nameExpression","exec","watchFieldName","watchFieldExistence","stopWatchingField","fc","stopWatchingShowError","addShowMessagesWatcher","customExpression","errorExistsAndShouldBeVisibleExpression","$invalid","show","noTouchedButDirty","isUndefined","$touched","$dirty","errorExistsAndShouldBeVisible","showError","noop","noFormControl","templateEl","ngModelNode","querySelector","getAttribute","callLinkFunctions","thusly","runManipulators","manipulators","chain","manipulator","newTemplate","getFieldTemplate","templateManipulators","preWrapper","transcludeInWrappers","postWrapper","error","wrapper","append","fromOptionsOrType","getFieldError","getTemplate","isUrl","templatePromise","_ret","httpOptions","cache","url","get","response","getWrapperOption","checkWrapper","validateOptions","runApiCheck","promises","w","all","wrappersTemplates","wrapperTemplate","checkWrapperTemplate","totalWrapper","shift","doTransclusion","superWrapper","transcludeEl","find","replaceWith","getWrapper","getWrapperByType","typeWrappers","concat","defaultWrapper","formlyFieldOptions","prefix","_ref","apiCheck","apiCheckInstance","apiCheckFunction","apiCheckOptions","instance","shape","config","output","docsBaseUrl","transclude","fields","formlyFocus","$document","previousEl","doc","$observe","activeElement","focus","focusWait","blur","formlyForm","currentFormId","getRootEl","rootEl","getFieldRootEl","fieldRootEl","getHideDirective","hideDirective","defaultHideDirective","getTrackBy","trackBy","getFormName","bindName","minor","getFormlyError","copyAttributes","attributes","excluded","arrayAttrs","nodeValue","toKebabCase","string","replace","$1","toLowerCase","parentFormAttributes","parent","hasClass","onModelOrFormStateChange","hideExpression","hide","setupOptions","formOptionsApi","optional","isFieldGroup","initModel","attachKey","setupWatchers","watcher","watchers","listener","watchExpression","getWatchExpression","watchListener","getWatchListener","stopWatching","watchDeep","originalExpression","modifyArgs","_slice","_toConsumableArray","displayName","originalListener","originalArgs","theFormlyForm","$parent","global","removeChromeAutoComplete","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","func","specifyWrapperType","oneOf","typeOrArrayOf","apiCheckProperty","objectOf","apiCheckInstanceProperty","onlyIf","withProperties","warn","throw","apiCheckFunctionProperty","formlyWrapperType","ifNot","types","overwriteOk","bool","object","strict","modelChecker","fieldOptionsApiShape","$$hashKey","any","number","modelOptions","updateOn","debounce","allowInvalid","getterSetter","timezone","ngModelAttrs","attribute","bound","array","arrayOf","typeOptionsDefaultOptions","formlyTypeOptions","extends","formlyUsabilityProvider","setType","checkType","extendTypeOptions","typeMap","checkOverwrite","extendsType","extendTypeControllerFunction","extendTypeLinkFunction","extendTypeValidateOptionsFunction","extendTypeDefaultOptions","extendTemplate","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","$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.8.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, arrayify: arrayify, extendFunction: extendFunction };\n\t\n\tfunction formlyEval(scope, expression, $modelValue, $viewValue, extraLocals) {\n\t if (angular.isFunction(expression)) {\n\t return expression($viewValue, $modelValue, scope, extraLocals);\n\t } else {\n\t return scope.$eval(expression, angular.extend({ $viewValue: $viewValue, $modelValue: $modelValue }, extraLocals));\n\t }\n\t}\n\t\n\tfunction getFieldId(formId, options, index) {\n\t if (options.id) {\n\t return options.id;\n\t }\n\t var type = options.type;\n\t if (!type && options.template) {\n\t type = \"template\";\n\t } else if (!type && options.templateUrl) {\n\t type = \"templateUrl\";\n\t }\n\t\n\t return [formId, type, options.key, index].join(\"_\");\n\t}\n\t\n\tfunction reverseDeepMerge(dest) {\n\t 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\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\t\n\tfunction extendFunction() {\n\t for (var _len = arguments.length, fns = Array(_len), _key = 0; _key < _len; _key++) {\n\t fns[_key] = arguments[_key];\n\t }\n\t\n\t return function extendedFunction() {\n\t var args = arguments;\n\t fns.forEach(function (fn) {\n\t return fn.apply(null, args);\n\t });\n\t };\n\t}\n\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 var arrayify = formlyUtil.arrayify;\n\t\n\t FormlyFieldController.$inject = [\"$scope\", \"$timeout\", \"$parse\", \"$controller\"];\n\t return {\n\t restrict: \"AE\",\n\t transclude: true,\n\t scope: {\n\t options: \"=\",\n\t model: \"=\",\n\t formId: \"@\", // TODO remove formId in a breaking release\n\t index: \"=?\",\n\t fields: \"=?\",\n\t formState: \"=?\",\n\t form: \"=?\" // TODO require form in a breaking release\n\t },\n\t controller: FormlyFieldController,\n\t link: fieldLink\n\t };\n\t\n\t // @ngInject\n\t function FormlyFieldController($scope, $timeout, $parse, $controller) {\n\t /* jshint maxstatements:31 */\n\t if ($scope.options.fieldGroup) {\n\t setupFieldGroup();\n\t return;\n\t }\n\t\n\t var fieldType = getFieldType($scope.options);\n\t simplifyLife($scope.options);\n\t mergeFieldOptionsWithTypeDefaults($scope.options, fieldType);\n\t extendOptionsWithDefaults($scope.options, $scope.index);\n\t checkApi($scope.options);\n\t // set field id to link labels and fields\n\t\n\t // initalization\n\t setFieldId();\n\t setDefaultValue();\n\t setInitialValue();\n\t runExpressions();\n\t addModelWatcher($scope, $scope.options);\n\t addValidationMessages($scope.options);\n\t invokeControllers($scope, $scope.options, fieldType);\n\t\n\t // function definitions\n\t function runExpressions() {\n\t // must run on next tick to make sure that the current value is correct.\n\t $timeout(function runExpressionsOnNextTick() {\n\t var field = $scope.options;\n\t var currentValue = valueGetterSetter();\n\t 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 // create $scope.to so template authors can reference to instead of $scope.options.templateOptions\n\t $scope.to = $scope.options.templateOptions;\n\t }\n\t\n\t function setFieldId() {\n\t if (angular.isFunction(formlyConfig.extras.getFieldId)) {\n\t $scope.id = formlyConfig.extras.getFieldId($scope.options, $scope.model, $scope);\n\t } else {\n\t var formName = $scope.form && $scope.form.$name || $scope.formId;\n\t $scope.id = formlyUtil.getFieldId(formName, $scope.options, $scope.index);\n\t }\n\t $scope.options.id = $scope.id;\n\t }\n\t\n\t function setDefaultValue() {\n\t if (angular.isDefined($scope.options.defaultValue) && !angular.isDefined($scope.model[$scope.options.key])) {\n\t $scope.model[$scope.options.key] = $scope.options.defaultValue;\n\t }\n\t }\n\t\n\t function setInitialValue() {\n\t $scope.options.initialValue = $scope.model && $scope.model[$scope.options.key];\n\t }\n\t\n\t function mergeFieldOptionsWithTypeDefaults(options, type) {\n\t if (type) {\n\t mergeOptions(options, type.defaultOptions);\n\t }\n\t var properOrder = arrayify(options.optionsTypes).reverse(); // so the right things are overridden\n\t 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 $scope.options.formControl.$setUntouched();\n\t $scope.options.formControl.$setPristine();\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 function setupFieldGroup() {\n\t $scope.options.options = $scope.options.options || {};\n\t $scope.options.options.formState = $scope.formState;\n\t }\n\t }\n\t\n\t // link function\n\t function fieldLink(scope, el) {\n\t if (scope.options.fieldGroup) {\n\t setFieldGroupTemplate();\n\t return;\n\t }\n\t\n\t addAttributes();\n\t addClasses();\n\t\n\t var type = getFieldType(scope.options);\n\t var args = arguments;\n\t var thusly = this;\n\t 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 setFieldGroupTemplate() {\n\t checkFieldGroupApi(scope.options);\n\t el.addClass(\"formly-field-group\");\n\t var extraAttributes = \"\";\n\t if (scope.options.elementAttributes) {\n\t extraAttributes = Object.keys(scope.options.elementAttributes).map(function (key) {\n\t return \"\" + key + \"=\\\"\" + scope.options.elementAttributes[key] + \"\\\"\";\n\t }).join(\" \");\n\t }\n\t setElementTemplate(\"\\n \\n \\n \");\n\t }\n\t\n\t function addAttributes() {\n\t if (scope.options.elementAttributes) {\n\t el.attr(scope.options.elementAttributes);\n\t }\n\t }\n\t\n\t function addClasses() {\n\t if (scope.options.className) {\n\t el.addClass(scope.options.className);\n\t }\n\t if (scope.options.type) {\n\t el.addClass(\"formly-field-\" + scope.options.type);\n\t }\n\t }\n\t\n\t function setElementTemplate(templateString) {\n\t el.html(asHtml(templateString));\n\t $compile(el.contents())(scope);\n\t return templateString;\n\t }\n\t\n\t function watchFormControl(templateString) {\n\t var 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(\"
\" + templateString + \"
\");\n\t var ngModelNode = templateEl[0].querySelector(\"[ng-model],[data-ng-model]\");\n\t if (ngModelNode && ngModelNode.getAttribute(\"name\")) {\n\t watchFieldNameOrExistence(ngModelNode.getAttribute(\"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 var customExpression = formlyConfig.extras.errorExistsAndShouldBeVisibleExpression;\n\t var options = scope.options;\n\t var fc = scope.fc;\n\t\n\t if (!fc.$invalid) {\n\t return false;\n\t } else if (typeof options.validation.show === \"boolean\") {\n\t return options.validation.show;\n\t } else if (customExpression) {\n\t return formlyUtil.formlyEval(scope, customExpression, fc.$modelValue, fc.$viewValue);\n\t } else {\n\t var noTouchedButDirty = angular.isUndefined(fc.$touched) && fc.$dirty;\n\t return scope.fc.$touched || noTouchedButDirty;\n\t }\n\t }, function onShowValidationChange(show) {\n\t scope.options.validation.errorExistsAndShouldBeVisible = show;\n\t scope.showError = show; // shortcut for template authors\n\t });\n\t }\n\t }\n\t\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 // stateless util functions\n\t function asHtml(el) {\n\t var wrapper = angular.element(\"\");\n\t return wrapper.append(el).html();\n\t }\n\t\n\t function getFieldType(options) {\n\t return options.type && formlyConfig.getType(options.type);\n\t }\n\t\n\t function getFieldTemplate(options) {\n\t function fromOptionsOrType(key, type) {\n\t if (angular.isDefined(options[key])) {\n\t return options[key];\n\t } else if (type && angular.isDefined(type[key])) {\n\t return type[key];\n\t }\n\t }\n\t\n\t var type = formlyConfig.getType(options.type, true, options);\n\t var template = fromOptionsOrType(\"template\", type);\n\t var templateUrl = fromOptionsOrType(\"templateUrl\", type);\n\t if (angular.isUndefined(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(templateUrl || template, angular.isUndefined(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(\"\"); // 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\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 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 fieldRootEl = getFieldRootEl();\n\t var formId = \"formly_\" + currentFormId++;\n\t var parentFormAttributes = \"\";\n\t if (attrs.hasOwnProperty(\"isFieldGroup\") && el.parent().parent().hasClass(\"formly\")) {\n\t parentFormAttributes = copyAttributes(el.parent().parent()[0].attributes);\n\t }\n\t return \"\\n <\" + rootEl + \" class=\\\"formly\\\"\\n name=\\\"\" + getFormName() + \"\\\"\\n role=\\\"form\\\" \" + parentFormAttributes + \">\\n <\" + fieldRootEl + \" formly-field\\n ng-repeat=\\\"field in fields \" + getTrackBy() + \"\\\"\\n \" + getHideDirective() + \"=\\\"!field.hide\\\"\\n class=\\\"formly-field\\\"\\n options=\\\"field\\\"\\n model=\\\"field.model || model\\\"\\n fields=\\\"fields\\\"\\n form=\\\"theFormlyForm\\\"\\n form-id=\\\"\" + getFormName() + \"\\\"\\n form-state=\\\"options.formState\\\"\\n index=\\\"$index\\\">\\n \\n
\\n \\n \";\n\t\n\t function getRootEl() {\n\t return attrs.rootEl || \"ng-form\";\n\t }\n\t\n\t function getFieldRootEl() {\n\t return attrs.fieldRootEl || \"div\";\n\t }\n\t\n\t function getHideDirective() {\n\t return attrs.hideDirective || formlyConfig.extras.defaultHideDirective || \"ng-if\";\n\t }\n\t\n\t function getTrackBy() {\n\t if (!attrs.trackBy) {\n\t return \"\";\n\t } else {\n\t return \"track by \" + attrs.trackBy;\n\t }\n\t }\n\t\n\t function getFormName() {\n\t var formName = formId;\n\t var bindName = attrs.bindName;\n\t if (bindName) {\n\t if (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 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\", \"formlyUtil\", function FormlyFormController($scope, formlyUtil) {\n\t setupOptions();\n\t $scope.model = $scope.model || {};\n\t $scope.fields = $scope.fields || [];\n\t\n\t angular.forEach($scope.fields, initModel); // initializes the model property if set to 'formState'\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\", onModelOrFormStateChange, true);\n\t if ($scope.options.formState) {\n\t $scope.$watch(\"options.formState\", onModelOrFormStateChange, true);\n\t }\n\t\n\t function onModelOrFormStateChange() {\n\t angular.forEach($scope.fields, function runFieldExpressionProperties(field, index) {\n\t /*jshint -W030 */\n\t var model = field.model || $scope.model;\n\t field.runExpressions && field.runExpressions(model);\n\t if (field.hideExpression) {\n\t // can't use hide with expressionProperties reliably\n\t var val = model[field.key];\n\t // this makes it closer to what a regular expressionProperty would be\n\t var extraLocals = {\n\t options: field,\n\t index: index,\n\t formState: $scope.options.formState,\n\t formId: $scope.formId\n\t };\n\t field.hide = formlyUtil.formlyEval($scope, field.hideExpression, val, val, extraLocals);\n\t }\n\t });\n\t }\n\t\n\t function setupOptions() {\n\t formlyApiCheck[\"throw\"]([formlyApiCheck.formOptionsApi.optional], [$scope.options], { prefix: \"formly-form options check\" });\n\t $scope.options = $scope.options || {};\n\t $scope.options.formState = $scope.options.formState || {};\n\t\n\t 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 if (isFieldGroup(field)) {\n\t field.options.updateInitialValue();\n\t } else {\n\t field.updateInitialValue();\n\t }\n\t });\n\t }\n\t\n\t function resetModel() {\n\t angular.forEach($scope.fields, function (field) {\n\t if (isFieldGroup(field)) {\n\t field.options.resetModel();\n\t } else {\n\t field.resetModel();\n\t }\n\t });\n\t }\n\t\n\t function initModel(field) {\n\t if (field.model && field.model === \"formState\") {\n\t field.model = $scope.options.formState;\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 var formId = attrs.name;\n\t scope.formId = formId;\n\t scope.theFormlyForm = scope[formId];\n\t if (attrs.form) {\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.8.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 expressionProperties = apiCheck.objectOf(apiCheck.oneOfType([formlyExpression, apiCheck.shape({\n\t expression: formlyExpression,\n\t message: formlyExpression.optional\n\t}).strict]));\n\t\n\tvar modelChecker = apiCheck.oneOfType([apiCheck.oneOf([\"formState\"]), apiCheck.object]);\n\t\n\tvar fieldOptionsApiShape = {\n\t $$hashKey: apiCheck.any.optional,\n\t type: apiCheck.shape.ifNot([\"template\", \"templateUrl\"], apiCheck.string).optional,\n\t template: apiCheck.shape.ifNot([\"type\", \"templateUrl\"], apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n\t templateUrl: apiCheck.shape.ifNot([\"type\", \"template\"], apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n\t key: apiCheck.oneOfType([apiCheck.string, apiCheck.number]).optional,\n\t model: modelChecker.optional,\n\t className: apiCheck.string.optional,\n\t id: apiCheck.string.optional,\n\t expressionProperties: expressionProperties.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 hideExpression: formlyExpression.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 elementAttributes: apiCheck.objectOf(apiCheck.string).optional,\n\t optionsTypes: apiCheck.typeOrArrayOf(apiCheck.string).optional,\n\t link: apiCheck.func.optional,\n\t controller: apiCheck.oneOfType([apiCheck.string, apiCheck.func, apiCheck.array]).optional,\n\t validation: apiCheck.shape({\n\t show: apiCheck.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 formOptionsApi = apiCheck.shape({\n\t formState: apiCheck.object.optional,\n\t resetModel: apiCheck.func.optional,\n\t updateInitialValue: apiCheck.func.optional,\n\t removeChromeAutoComplete: apiCheck.bool.optional\n\t}).strict;\n\t\n\tvar fieldGroup = apiCheck.shape({\n\t $$hashKey: apiCheck.any.optional,\n\t // danger. Nested field groups wont get api-checked...\n\t fieldGroup: apiCheck.arrayOf(apiCheck.oneOfType([formlyFieldOptions, apiCheck.object])),\n\t className: apiCheck.string.optional,\n\t options: formOptionsApi.optional,\n\t hide: apiCheck.bool.optional,\n\t hideExpression: formlyExpression.optional,\n\t model: modelChecker.optional,\n\t form: apiCheck.object.optional,\n\t elementAttributes: apiCheck.objectOf(apiCheck.string).optional\n\t}).strict;\n\t\n\tvar typeOptionsDefaultOptions = 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\tangular.extend(apiCheck, {\n\t formlyTypeOptions: formlyTypeOptions, formlyFieldOptions: formlyFieldOptions, formlyExpression: formlyExpression, formlyWrapperType: formlyWrapperType, fieldGroup: fieldGroup, formOptionsApi: formOptionsApi\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 getFieldId: null\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 extendTemplate(options, extendsType);\n\t }\n\t\n\t function extendTemplate(options, extendsType) {\n\t if (options.template && extendsType.templateUrl) {\n\t delete options.templateUrl;\n\t } else if (options.templateUrl && extendsType.template) {\n\t delete options.template;\n\t }\n\t }\n\t\n\t function extendTypeControllerFunction(options, extendsType) {\n\t var extendsCtrl = extendsType.controller;\n\t if (!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 = \"\";\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 \\\"\\\" 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 = \"\";\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], [data-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 0d2222e7aab3a72e2975\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, arrayify, extendFunction};\n\nfunction formlyEval(scope, expression, $modelValue, $viewValue, extraLocals) {\n if (angular.isFunction(expression)) {\n return expression($viewValue, $modelValue, scope, extraLocals);\n } else {\n return scope.$eval(expression, angular.extend({$viewValue, $modelValue}, extraLocals));\n }\n}\n\nfunction getFieldId(formId, options, index) {\n if (options.id) {\n return options.id;\n }\n 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\nfunction arrayify(obj) {\n if (obj && !angular.isArray(obj)) {\n obj = [obj];\n } else if (!obj) {\n obj = [];\n }\n return obj;\n}\n\n\nfunction extendFunction(...fns) {\n return function extendedFunction() {\n var args = arguments;\n fns.forEach(fn => fn.apply(null, args));\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 const {arrayify} = formlyUtil;\n\n return {\n restrict: 'AE',\n transclude: true,\n scope: {\n options: '=',\n model: '=',\n formId: '@', // TODO remove formId in a breaking release\n index: '=?',\n fields: '=?',\n formState: '=?',\n form: '=?' // TODO require form in a breaking release\n },\n controller: FormlyFieldController,\n link: fieldLink\n };\n\n\n // @ngInject\n function FormlyFieldController($scope, $timeout, $parse, $controller) {\n /* jshint maxstatements:31 */\n if ($scope.options.fieldGroup) {\n setupFieldGroup();\n return;\n }\n\n var fieldType = getFieldType($scope.options);\n simplifyLife($scope.options);\n mergeFieldOptionsWithTypeDefaults($scope.options, fieldType);\n extendOptionsWithDefaults($scope.options, $scope.index);\n checkApi($scope.options);\n // set field id to link labels and fields\n\n // initalization\n setFieldId();\n setDefaultValue();\n setInitialValue();\n runExpressions();\n addModelWatcher($scope, $scope.options);\n addValidationMessages($scope.options);\n invokeControllers($scope, $scope.options, fieldType);\n\n // function definitions\n function runExpressions() {\n // must run on next tick to make sure that the current value is correct.\n $timeout(function runExpressionsOnNextTick() {\n var field = $scope.options;\n var currentValue = valueGetterSetter();\n 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 // create $scope.to so template authors can reference to instead of $scope.options.templateOptions\n $scope.to = $scope.options.templateOptions;\n }\n\n function setFieldId() {\n if (angular.isFunction(formlyConfig.extras.getFieldId)) {\n $scope.id = formlyConfig.extras.getFieldId($scope.options, $scope.model, $scope);\n } else {\n const formName = ($scope.form && $scope.form.$name) || $scope.formId;\n $scope.id = formlyUtil.getFieldId(formName, $scope.options, $scope.index);\n }\n $scope.options.id = $scope.id;\n }\n\n function setDefaultValue() {\n if (angular.isDefined($scope.options.defaultValue) && !angular.isDefined($scope.model[$scope.options.key])) {\n $scope.model[$scope.options.key] = $scope.options.defaultValue;\n }\n }\n\n function setInitialValue() {\n $scope.options.initialValue = $scope.model && $scope.model[$scope.options.key];\n }\n\n function mergeFieldOptionsWithTypeDefaults(options, type) {\n if (type) {\n mergeOptions(options, type.defaultOptions);\n }\n var properOrder = arrayify(options.optionsTypes).reverse(); // so the right things are overridden\n 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 $scope.options.formControl.$setUntouched();\n $scope.options.formControl.$setPristine();\n }\n }\n\n function updateInitialValue() {\n $scope.options.initialValue = $scope.model[$scope.options.key];\n }\n\n function addValidationMessages(options) {\n options.validation.messages = options.validation.messages || {};\n angular.forEach(formlyValidationMessages.messages, function createFunctionForMessage(expression, name) {\n if (!options.validation.messages[name]) {\n options.validation.messages[name] = function evaluateMessage(viewValue, modelValue, scope) {\n return formlyUtil.formlyEval(scope, expression, modelValue, viewValue);\n };\n }\n });\n }\n\n function invokeControllers(scope, options = {}, type = {}) {\n angular.forEach([type.controller, options.controller], controller => {\n if (controller) {\n $controller(controller, {$scope: scope});\n }\n });\n }\n\n function setupFieldGroup() {\n $scope.options.options = $scope.options.options || {};\n $scope.options.options.formState = $scope.formState;\n }\n }\n\n\n\n // link function\n function fieldLink(scope, el) {\n if (scope.options.fieldGroup) {\n setFieldGroupTemplate();\n return;\n }\n\n addAttributes();\n addClasses();\n\n var type = getFieldType(scope.options);\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 setFieldGroupTemplate() {\n checkFieldGroupApi(scope.options);\n el.addClass('formly-field-group');\n let extraAttributes = '';\n if (scope.options.elementAttributes) {\n extraAttributes = Object.keys(scope.options.elementAttributes).map(key => {\n return `${key}=\"${scope.options.elementAttributes[key]}\"`;\n }).join(' ');\n }\n setElementTemplate(`\n \n \n `);\n }\n\n function addAttributes() {\n if (scope.options.elementAttributes) {\n el.attr(scope.options.elementAttributes);\n }\n }\n\n function addClasses() {\n if (scope.options.className) {\n el.addClass(scope.options.className);\n }\n if (scope.options.type) {\n el.addClass(`formly-field-${scope.options.type}`);\n }\n }\n\n function setElementTemplate(templateString) {\n el.html(asHtml(templateString));\n $compile(el.contents())(scope);\n return templateString;\n }\n\n function watchFormControl(templateString) {\n let stopWatchingField = angular.noop;\n let stopWatchingShowError = angular.noop;\n if (scope.options.noFormControl) {\n return;\n }\n const templateEl = angular.element(`
${templateString}
`);\n const ngModelNode = templateEl[0].querySelector('[ng-model],[data-ng-model]');\n if (ngModelNode && ngModelNode.getAttribute('name')) {\n watchFieldNameOrExistence(ngModelNode.getAttribute('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 const customExpression = formlyConfig.extras.errorExistsAndShouldBeVisibleExpression;\n const {options, fc} = scope;\n if (!fc.$invalid) {\n return false;\n } else if (typeof options.validation.show === 'boolean') {\n return options.validation.show;\n } else if (customExpression) {\n return formlyUtil.formlyEval(scope, customExpression, fc.$modelValue, fc.$viewValue);\n } else {\n let noTouchedButDirty = (angular.isUndefined(fc.$touched) && fc.$dirty);\n return (scope.fc.$touched || noTouchedButDirty);\n }\n }, function onShowValidationChange(show) {\n scope.options.validation.errorExistsAndShouldBeVisible = show;\n scope.showError = show; // shortcut for template authors\n });\n }\n }\n\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 // stateless util functions\n function asHtml(el) {\n var wrapper = angular.element('');\n return wrapper.append(el).html();\n }\n\n function getFieldType(options) {\n return options.type && formlyConfig.getType(options.type);\n }\n\n function getFieldTemplate(options) {\n function fromOptionsOrType(key, type){\n if(angular.isDefined(options[key])){\n return options[key];\n } else if(type && angular.isDefined(type[key])){\n return type[key];\n }\n }\n\n let type = formlyConfig.getType(options.type, true, options);\n let template = fromOptionsOrType('template', type);\n let templateUrl = fromOptionsOrType('templateUrl', type);\n if (angular.isUndefined(template) && !templateUrl) {\n throw formlyUsability.getFieldError(\n 'type-type-has-no-template',\n `Type '${options.type}' has not template. On element:`, options\n );\n }\n\n return getTemplate(templateUrl || template, angular.isUndefined(template), options);\n }\n\n\n function getTemplate(template, isUrl, options) {\n let templatePromise;\n if (angular.isFunction(template)) {\n templatePromise = $q.when(template(options));\n } else {\n templatePromise = $q.when(template);\n }\n\n if (!isUrl) {\n return templatePromise;\n } else {\n 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(''); // 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\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 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 fieldRootEl = getFieldRootEl();\n const formId = `formly_${currentFormId++}`;\n let parentFormAttributes = '';\n if (attrs.hasOwnProperty('isFieldGroup') && el.parent().parent().hasClass('formly')) {\n parentFormAttributes = copyAttributes(el.parent().parent()[0].attributes);\n }\n return `\n <${rootEl} class=\"formly\"\n name=\"${getFormName()}\"\n role=\"form\" ${parentFormAttributes}>\n <${fieldRootEl} formly-field\n ng-repeat=\"field in fields ${getTrackBy()}\"\n ${getHideDirective()}=\"!field.hide\"\n class=\"formly-field\"\n options=\"field\"\n model=\"field.model || model\"\n fields=\"fields\"\n form=\"theFormlyForm\"\n form-id=\"${getFormName()}\"\n form-state=\"options.formState\"\n index=\"$index\">\n \n
\n \n `;\n\n function getRootEl() {\n return attrs.rootEl || 'ng-form';\n }\n\n function getFieldRootEl() {\n return attrs.fieldRootEl || 'div';\n }\n\n function getHideDirective() {\n return attrs.hideDirective || formlyConfig.extras.defaultHideDirective || 'ng-if';\n }\n\n function getTrackBy() {\n if (!attrs.trackBy) {\n return '';\n } else {\n return `track by ${attrs.trackBy}`;\n }\n }\n\n function getFormName() {\n let formName = formId;\n const bindName = attrs.bindName;\n if (bindName) {\n if (angular.version.minor < 3) {\n throw formlyUsability.getFormlyError('bind-name attribute on formly-form not allowed in > angular 1.3');\n }\n // we can do a one-time binding here because we know we're in 1.3.x territory\n formName = `{{::'formly_' + ${bindName}}}`;\n }\n return formName;\n }\n\n function copyAttributes(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, formlyUtil) {\n setupOptions();\n $scope.model = $scope.model || {};\n $scope.fields = $scope.fields || [];\n\n angular.forEach($scope.fields, initModel); // initializes the model property if set to 'formState'\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', onModelOrFormStateChange, true);\n if ($scope.options.formState) {\n $scope.$watch('options.formState', onModelOrFormStateChange, true);\n }\n\n function onModelOrFormStateChange() {\n angular.forEach($scope.fields, function runFieldExpressionProperties(field, index) {\n /*jshint -W030 */\n const model = field.model || $scope.model;\n field.runExpressions && field.runExpressions(model);\n if (field.hideExpression) { // can't use hide with expressionProperties reliably\n const val = model[field.key];\n // this makes it closer to what a regular expressionProperty would be\n const extraLocals = {\n options: field,\n index: index,\n formState: $scope.options.formState,\n formId: $scope.formId\n };\n field.hide = formlyUtil.formlyEval($scope, field.hideExpression, val, val, extraLocals);\n }\n });\n }\n\n function setupOptions() {\n formlyApiCheck.throw(\n [formlyApiCheck.formOptionsApi.optional], [$scope.options], {prefix: 'formly-form options check'}\n );\n $scope.options = $scope.options || {};\n $scope.options.formState = $scope.options.formState || {};\n\n angular.extend($scope.options, {\n updateInitialValue,\n resetModel\n });\n\n }\n\n function updateInitialValue() {\n angular.forEach($scope.fields, field => {\n if (isFieldGroup(field)) {\n field.options.updateInitialValue();\n } else {\n field.updateInitialValue();\n }\n });\n }\n\n function resetModel() {\n angular.forEach($scope.fields, field => {\n if (isFieldGroup(field)) {\n field.options.resetModel();\n } else {\n field.resetModel();\n }\n });\n }\n\n function initModel(field) {\n if (field.model && field.model === 'formState') {\n field.model = $scope.options.formState;\n }\n }\n\n function attachKey(field, index) {\n if (!isFieldGroup(field)) {\n field.key = field.key || index || 0;\n }\n }\n\n function setupWatchers(field, index) {\n if (isFieldGroup(field) || !angular.isDefined(field.watcher)) {\n return;\n }\n 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 const formId = attrs.name;\n scope.formId = formId;\n scope.theFormlyForm = scope[formId];\n if (attrs.form) {\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\nconst expressionProperties = apiCheck.objectOf(apiCheck.oneOfType([\n formlyExpression,\n apiCheck.shape({\n expression: formlyExpression,\n message: formlyExpression.optional\n }).strict\n]));\n\nconst modelChecker = apiCheck.oneOfType([apiCheck.oneOf(['formState']), apiCheck.object]);\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: modelChecker.optional,\n className: apiCheck.string.optional,\n id: apiCheck.string.optional,\n expressionProperties: expressionProperties.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 hideExpression: formlyExpression.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 elementAttributes: apiCheck.objectOf(apiCheck.string).optional,\n optionsTypes: apiCheck.typeOrArrayOf(apiCheck.string).optional,\n link: apiCheck.func.optional,\n controller: apiCheck.oneOfType([\n apiCheck.string, apiCheck.func, apiCheck.array\n ]).optional,\n validation: apiCheck.shape({\n show: apiCheck.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\n\nconst formOptionsApi = apiCheck.shape({\n formState: apiCheck.object.optional,\n resetModel: apiCheck.func.optional,\n updateInitialValue: apiCheck.func.optional,\n removeChromeAutoComplete: apiCheck.bool.optional\n}).strict;\n\n\nconst fieldGroup = apiCheck.shape({\n $$hashKey: apiCheck.any.optional,\n // danger. Nested field groups wont get api-checked...\n fieldGroup: apiCheck.arrayOf(apiCheck.oneOfType([formlyFieldOptions, apiCheck.object])),\n className: apiCheck.string.optional,\n options: formOptionsApi.optional,\n hide: apiCheck.bool.optional,\n hideExpression: formlyExpression.optional,\n model: modelChecker.optional,\n form: apiCheck.object.optional,\n elementAttributes: apiCheck.objectOf(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;\nangular.extend(apiCheck, {\n formlyTypeOptions, formlyFieldOptions, formlyExpression, formlyWrapperType, fieldGroup, formOptionsApi\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 getFieldId: null\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 extendTemplate(options, extendsType);\n }\n\n function extendTemplate(options, extendsType){\n if(options.template && extendsType.templateUrl){\n delete options.templateUrl;\n } else if(options.templateUrl && extendsType.template){\n delete options.template;\n }\n }\n\n function extendTypeControllerFunction(options, extendsType) {\n const extendsCtrl = extendsType.controller;\n if (!angular.isDefined(extendsCtrl)) {\n return;\n }\n const optionsCtrl = options.controller;\n if (angular.isDefined(optionsCtrl)) {\n options.controller = function ($scope, $controller) {\n $controller(extendsCtrl, {$scope});\n $controller(optionsCtrl, {$scope});\n };\n options.controller.$inject = ['$scope', '$controller'];\n } else {\n options.controller = extendsCtrl;\n }\n }\n\n function extendTypeLinkFunction(options, extendsType) {\n const extendsFn = extendsType.link;\n if (!angular.isDefined(extendsFn)) {\n return;\n }\n const optionsFn = options.link;\n if (angular.isDefined(optionsFn)) {\n options.link = function () {\n extendsFn(...arguments);\n optionsFn(...arguments);\n };\n } else {\n options.link = extendsFn;\n }\n }\n\n function 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 = '';\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 \"\" 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 = '';\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], [data-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":""}