text: /*!
   * Keen UI v1.0.0 (https://github.com/JosephusPaye/keen-ui)
   * (c) 2017 Josephus Paye II
   * Released under the MIT License.
   */
  (function webpackUniversalModuleDefinition(root, factory) {
  	if(typeof exports === 'object' && typeof module === 'object')
  		module.exports = factory();
  	else if(typeof define === 'function' && define.amd)
  		define([], factory);
  	else if(typeof exports === 'object')
  		exports["UiTextbox"] = factory();
  	else
  		root["KeenUI"] = root["KeenUI"] || {}, root["KeenUI"]["UiTextbox"] = factory();
  })(this, function() {
  return /******/ (function(modules) { // webpackBootstrap
  /******/ 	// The module cache
  /******/ 	var installedModules = {};
  /******/
  /******/ 	// The require function
  /******/ 	function __webpack_require__(moduleId) {
  /******/
  /******/ 		// Check if module is in cache
  /******/ 		if(installedModules[moduleId]) {
  /******/ 			return installedModules[moduleId].exports;
  /******/ 		}
  /******/ 		// Create a new module (and put it into the cache)
  /******/ 		var module = installedModules[moduleId] = {
  /******/ 			i: moduleId,
  /******/ 			l: false,
  /******/ 			exports: {}
  /******/ 		};
  /******/
  /******/ 		// Execute the module function
  /******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  /******/
  /******/ 		// Flag the module as loaded
  /******/ 		module.l = true;
  /******/
  /******/ 		// Return the exports of the module
  /******/ 		return module.exports;
  /******/ 	}
  /******/
  /******/
  /******/ 	// expose the modules object (__webpack_modules__)
  /******/ 	__webpack_require__.m = modules;
  /******/
  /******/ 	// expose the module cache
  /******/ 	__webpack_require__.c = installedModules;
  /******/
  /******/ 	// identity function for calling harmony imports with the correct context
  /******/ 	__webpack_require__.i = function(value) { return value; };
  /******/
  /******/ 	// define getter function for harmony exports
  /******/ 	__webpack_require__.d = function(exports, name, getter) {
  /******/ 		if(!__webpack_require__.o(exports, name)) {
  /******/ 			Object.defineProperty(exports, name, {
  /******/ 				configurable: false,
  /******/ 				enumerable: true,
  /******/ 				get: getter
  /******/ 			});
  /******/ 		}
  /******/ 	};
  /******/
  /******/ 	// getDefaultExport function for compatibility with non-harmony modules
  /******/ 	__webpack_require__.n = function(module) {
  /******/ 		var getter = module && module.__esModule ?
  /******/ 			function getDefault() { return module['default']; } :
  /******/ 			function getModuleExports() { return module; };
  /******/ 		__webpack_require__.d(getter, 'a', getter);
  /******/ 		return getter;
  /******/ 	};
  /******/
  /******/ 	// Object.prototype.hasOwnProperty.call
  /******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  /******/
  /******/ 	// __webpack_public_path__
  /******/ 	__webpack_require__.p = "";
  /******/
  /******/ 	// Load entry module and return exports
  /******/ 	return __webpack_require__(__webpack_require__.s = 325);
  /******/ })
  /************************************************************************/
  /******/ ({
  
  /***/ 149:
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  
  Object.defineProperty(exports, "__esModule", {
      value: true
  });
  exports.default = {
      inserted: function inserted(el, _ref) {
          var value = _ref.value;
  
          if (value) {
              el.focus();
          }
      }
  };
  
  /***/ }),
  
  /***/ 197:
  /***/ (function(module, exports, __webpack_require__) {
  
  
  /* styles */
  __webpack_require__(289)
  
  var Component = __webpack_require__(8)(
    /* script */
    __webpack_require__(221),
    /* template */
    __webpack_require__(266),
    /* scopeId */
    null,
    /* cssModules */
    null
  )
  Component.options.__file = "/Users/anthonyhell/Developer/Keen-UI/src/UiTextbox.vue"
  if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")}
  if (Component.options.functional) {console.error("[vue-loader] UiTextbox.vue: functional components are not supported with templates, they should use render functions.")}
  
  /* hot reload */
  if (false) {(function () {
    var hotAPI = require("vue-hot-reload-api")
    hotAPI.install(require("vue"), false)
    if (!hotAPI.compatible) return
    module.hot.accept()
    if (!module.hot.data) {
      hotAPI.createRecord("data-v-7a6d9ad0", Component.options)
    } else {
      hotAPI.reload("data-v-7a6d9ad0", Component.options)
    }
  })()}
  
  module.exports = Component.exports
  
  
  /***/ }),
  
  /***/ 199:
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
  	Autosize 3.0.21
  	license: MIT
  	http://www.jacklmoore.com/autosize
  */
  (function (global, factory) {
  	if (true) {
  		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, module], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  	} else if (typeof exports !== 'undefined' && typeof module !== 'undefined') {
  		factory(exports, module);
  	} else {
  		var mod = {
  			exports: {}
  		};
  		factory(mod.exports, mod);
  		global.autosize = mod.exports;
  	}
  })(this, function (exports, module) {
  	'use strict';
  
  	var map = typeof Map === "function" ? new Map() : (function () {
  		var keys = [];
  		var values = [];
  
  		return {
  			has: function has(key) {
  				return keys.indexOf(key) > -1;
  			},
  			get: function get(key) {
  				return values[keys.indexOf(key)];
  			},
  			set: function set(key, value) {
  				if (keys.indexOf(key) === -1) {
  					keys.push(key);
  					values.push(value);
  				}
  			},
  			'delete': function _delete(key) {
  				var index = keys.indexOf(key);
  				if (index > -1) {
  					keys.splice(index, 1);
  					values.splice(index, 1);
  				}
  			}
  		};
  	})();
  
  	var createEvent = function createEvent(name) {
  		return new Event(name, { bubbles: true });
  	};
  	try {
  		new Event('test');
  	} catch (e) {
  		// IE does not support `new Event()`
  		createEvent = function (name) {
  			var evt = document.createEvent('Event');
  			evt.initEvent(name, true, false);
  			return evt;
  		};
  	}
  
  	function assign(ta) {
  		if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return;
  
  		var heightOffset = null;
  		var clientWidth = ta.clientWidth;
  		var cachedHeight = null;
  
  		function init() {
  			var style = window.getComputedStyle(ta, null);
  
  			if (style.resize === 'vertical') {
  				ta.style.resize = 'none';
  			} else if (style.resize === 'both') {
  				ta.style.resize = 'horizontal';
  			}
  
  			if (style.boxSizing === 'content-box') {
  				heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
  			} else {
  				heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
  			}
  			// Fix when a textarea is not on document body and heightOffset is Not a Number
  			if (isNaN(heightOffset)) {
  				heightOffset = 0;
  			}
  
  			update();
  		}
  
  		function changeOverflow(value) {
  			{
  				// Chrome/Safari-specific fix:
  				// When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
  				// made available by removing the scrollbar. The following forces the necessary text reflow.
  				var width = ta.style.width;
  				ta.style.width = '0px';
  				// Force reflow:
  				/* jshint ignore:start */
  				ta.offsetWidth;
  				/* jshint ignore:end */
  				ta.style.width = width;
  			}
  
  			ta.style.overflowY = value;
  		}
  
  		function getParentOverflows(el) {
  			var arr = [];
  
  			while (el && el.parentNode && el.parentNode instanceof Element) {
  				if (el.parentNode.scrollTop) {
  					arr.push({
  						node: el.parentNode,
  						scrollTop: el.parentNode.scrollTop
  					});
  				}
  				el = el.parentNode;
  			}
  
  			return arr;
  		}
  
  		function resize() {
  			var originalHeight = ta.style.height;
  			var overflows = getParentOverflows(ta);
  			var docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)
  
  			ta.style.height = 'auto';
  
  			var endHeight = ta.scrollHeight + heightOffset;
  
  			if (ta.scrollHeight === 0) {
  				// If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
  				ta.style.height = originalHeight;
  				return;
  			}
  
  			ta.style.height = endHeight + 'px';
  
  			// used to check if an update is actually necessary on window.resize
  			clientWidth = ta.clientWidth;
  
  			// prevents scroll-position jumping
  			overflows.forEach(function (el) {
  				el.node.scrollTop = el.scrollTop;
  			});
  
  			if (docTop) {
  				document.documentElement.scrollTop = docTop;
  			}
  		}
  
  		function update() {
  			resize();
  
  			var styleHeight = Math.round(parseFloat(ta.style.height));
  			var computed = window.getComputedStyle(ta, null);
  
  			// Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box
  			var actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight;
  
  			// The actual height not matching the style height (set via the resize method) indicates that
  			// the max-height has been exceeded, in which case the overflow should be allowed.
  			if (actualHeight !== styleHeight) {
  				if (computed.overflowY === 'hidden') {
  					changeOverflow('scroll');
  					resize();
  					actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
  				}
  			} else {
  				// Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.
  				if (computed.overflowY !== 'hidden') {
  					changeOverflow('hidden');
  					resize();
  					actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
  				}
  			}
  
  			if (cachedHeight !== actualHeight) {
  				cachedHeight = actualHeight;
  				var evt = createEvent('autosize:resized');
  				try {
  					ta.dispatchEvent(evt);
  				} catch (err) {
  					// Firefox will throw an error on dispatchEvent for a detached element
  					// https://bugzilla.mozilla.org/show_bug.cgi?id=889376
  				}
  			}
  		}
  
  		var pageResize = function pageResize() {
  			if (ta.clientWidth !== clientWidth) {
  				update();
  			}
  		};
  
  		var destroy = (function (style) {
  			window.removeEventListener('resize', pageResize, false);
  			ta.removeEventListener('input', update, false);
  			ta.removeEventListener('keyup', update, false);
  			ta.removeEventListener('autosize:destroy', destroy, false);
  			ta.removeEventListener('autosize:update', update, false);
  
  			Object.keys(style).forEach(function (key) {
  				ta.style[key] = style[key];
  			});
  
  			map['delete'](ta);
  		}).bind(ta, {
  			height: ta.style.height,
  			resize: ta.style.resize,
  			overflowY: ta.style.overflowY,
  			overflowX: ta.style.overflowX,
  			wordWrap: ta.style.wordWrap
  		});
  
  		ta.addEventListener('autosize:destroy', destroy, false);
  
  		// IE9 does not fire onpropertychange or oninput for deletions,
  		// so binding to onkeyup to catch most of those events.
  		// There is no way that I know of to detect something like 'cut' in IE9.
  		if ('onpropertychange' in ta && 'oninput' in ta) {
  			ta.addEventListener('keyup', update, false);
  		}
  
  		window.addEventListener('resize', pageResize, false);
  		ta.addEventListener('input', update, false);
  		ta.addEventListener('autosize:update', update, false);
  		ta.style.overflowX = 'hidden';
  		ta.style.wordWrap = 'break-word';
  
  		map.set(ta, {
  			destroy: destroy,
  			update: update
  		});
  
  		init();
  	}
  
  	function destroy(ta) {
  		var methods = map.get(ta);
  		if (methods) {
  			methods.destroy();
  		}
  	}
  
  	function update(ta) {
  		var methods = map.get(ta);
  		if (methods) {
  			methods.update();
  		}
  	}
  
  	var autosize = null;
  
  	// Do nothing in Node.js environment and IE8 (or lower)
  	if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {
  		autosize = function (el) {
  			return el;
  		};
  		autosize.destroy = function (el) {
  			return el;
  		};
  		autosize.update = function (el) {
  			return el;
  		};
  	} else {
  		autosize = function (el, options) {
  			if (el) {
  				Array.prototype.forEach.call(el.length ? el : [el], function (x) {
  					return assign(x, options);
  				});
  			}
  			return el;
  		};
  		autosize.destroy = function (el) {
  			if (el) {
  				Array.prototype.forEach.call(el.length ? el : [el], destroy);
  			}
  			return el;
  		};
  		autosize.update = function (el) {
  			if (el) {
  				Array.prototype.forEach.call(el.length ? el : [el], update);
  			}
  			return el;
  		};
  	}
  
  	module.exports = autosize;
  });
  
  /***/ }),
  
  /***/ 221:
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  
  Object.defineProperty(exports, "__esModule", {
      value: true
  });
  
  var _autofocus = __webpack_require__(149);
  
  var _autofocus2 = _interopRequireDefault(_autofocus);
  
  var _UiIcon = __webpack_require__(39);
  
  var _UiIcon2 = _interopRequireDefault(_UiIcon);
  
  var _autosize = __webpack_require__(199);
  
  var _autosize2 = _interopRequireDefault(_autosize);
  
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  
  exports.default = {
      name: 'ui-textbox',
  
      props: {
          name: String,
          placeholder: String,
          value: {
              type: [String, Number],
              required: true
          },
          icon: String,
          iconPosition: {
              type: String,
              default: 'left' },
          label: String,
          floatingLabel: {
              type: Boolean,
              default: false
          },
          type: {
              type: String,
              default: 'text' },
          multiLine: {
              type: Boolean,
              default: false
          },
          rows: {
              type: Number,
              default: 2
          },
          autocomplete: String,
          autofocus: {
              type: Boolean,
              default: false
          },
          autosize: {
              type: Boolean,
              default: true
          },
          min: Number,
          max: Number,
          step: {
              type: String,
              default: 'any'
          },
          maxlength: Number,
          enforceMaxlength: {
              type: Boolean,
              default: false
          },
          required: {
              type: Boolean,
              default: false
          },
          readonly: {
              type: Boolean,
              default: false
          },
          help: String,
          error: String,
          invalid: {
              type: Boolean,
              default: false
          },
          disabled: {
              type: Boolean,
              default: false
          }
      },
  
      data: function data() {
          return {
              isActive: false,
              isTouched: false,
              initialValue: this.value,
              autosizeInitialized: false
          };
      },
  
  
      computed: {
          classes: function classes() {
              return ['ui-textbox--icon-position-' + this.iconPosition, { 'is-active': this.isActive }, { 'is-invalid': this.invalid }, { 'is-touched': this.isTouched }, { 'is-multi-line': this.multiLine }, { 'has-counter': this.maxlength }, { 'is-disabled': this.disabled }, { 'has-label': this.hasLabel }, { 'has-floating-label': this.hasFloatingLabel }];
          },
          labelClasses: function labelClasses() {
              return {
                  'is-inline': this.hasFloatingLabel && this.isLabelInline,
                  'is-floating': this.hasFloatingLabel && !this.isLabelInline
              };
          },
          hasLabel: function hasLabel() {
              return Boolean(this.label) || Boolean(this.$slots.default);
          },
          hasFloatingLabel: function hasFloatingLabel() {
              return this.hasLabel && this.floatingLabel;
          },
          isLabelInline: function isLabelInline() {
              return this.value.length === 0 && !this.isActive;
          },
          minValue: function minValue() {
              if (this.type === 'number' && this.min !== undefined) {
                  return this.min;
              }
  
              return null;
          },
          maxValue: function maxValue() {
              if (this.type === 'number' && this.max !== undefined) {
                  return this.max;
              }
  
              return null;
          },
          stepValue: function stepValue() {
              return this.type === 'number' ? this.step : null;
          },
          hasFeedback: function hasFeedback() {
              return Boolean(this.help) || Boolean(this.error);
          },
          showError: function showError() {
              return this.invalid && Boolean(this.error);
          },
          showHelp: function showHelp() {
              return !this.showError && Boolean(this.help);
          }
      },
  
      mounted: function mounted() {
          if (this.multiLine && this.autosize) {
              (0, _autosize2.default)(this.$refs.textarea);
              this.autosizeInitialized = true;
          }
      },
      beforeDestroy: function beforeDestroy() {
          if (this.autosizeInitialized) {
              _autosize2.default.destroy(this.$refs.textarea);
          }
      },
  
  
      methods: {
          updateValue: function updateValue(value) {
              this.$emit('input', value);
          },
          onChange: function onChange(e) {
              this.$emit('change', this.value, e);
          },
          onFocus: function onFocus(e) {
              this.isActive = true;
              this.$emit('focus', e);
          },
          onBlur: function onBlur(e) {
              this.isActive = false;
              this.$emit('blur', e);
  
              if (!this.isTouched) {
                  this.isTouched = true;
                  this.$emit('touch');
              }
          },
          onKeydown: function onKeydown(e) {
              this.$emit('keydown', e);
          },
          onKeydownEnter: function onKeydownEnter(e) {
              this.$emit('keydown-enter', e);
          },
          reset: function reset() {
              if (document.activeElement === this.$refs.input || document.activeElement === this.$refs.textarea) {
                  document.activeElement.blur();
              }
  
              this.updateValue(this.initialValue);
              this.resetTouched();
          },
          resetTouched: function resetTouched() {
              var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { touched: false };
  
              this.isTouched = options.touched;
          },
          refreshSize: function refreshSize() {
              if (this.autosizeInitialized) {
                  _autosize2.default.update(this.$refs.textarea);
              }
          }
      },
  
      components: {
          UiIcon: _UiIcon2.default
      },
  
      directives: {
          autofocus: _autofocus2.default
      }
  };
  
  /***/ }),
  
  /***/ 239:
  /***/ (function(module, exports, __webpack_require__) {
  
  exports = module.exports = __webpack_require__(7)();
  // imports
  
  
  // module
  exports.push([module.i, "\n.ui-textbox {\n  -ms-flex-align: start;\n      align-items: flex-start;\n  display: -ms-flexbox;\n  display: flex;\n  font-family: Roboto, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Oxygen, Ubuntu, Cantarell, \"Fira Sans\", \"Droid Sans\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  margin-bottom: 1rem;\n}\n.ui-textbox:hover:not(.is-disabled) .ui-textbox__label-text {\n    color: rgba(0, 0, 0, 0.75);\n}\n.ui-textbox:hover:not(.is-disabled) .ui-textbox__input,\n  .ui-textbox:hover:not(.is-disabled) .ui-textbox__textarea {\n    border-bottom-color: rgba(0, 0, 0, 0.3);\n}\n.ui-textbox.is-active:not(.is-disabled) .ui-textbox__input,\n  .ui-textbox.is-active:not(.is-disabled) .ui-textbox__textarea {\n    border-bottom-color: #2196f3;\n    border-bottom-width: 2px;\n}\n.ui-textbox.is-active:not(.is-disabled) .ui-textbox__label-text,\n  .ui-textbox.is-active:not(.is-disabled) .ui-textbox__icon-wrapper .ui-icon {\n    color: #2196f3;\n}\n.ui-textbox.has-label .ui-textbox__icon-wrapper {\n    padding-top: 1.5rem;\n}\n.ui-textbox.has-counter .ui-textbox__feedback-text {\n    padding-right: 3rem;\n}\n.ui-textbox.has-floating-label .ui-textbox__label-text {\n    display: table;\n}\n.ui-textbox.has-floating-label .ui-textbox__label-text.is-inline {\n      color: rgba(0, 0, 0, 0.54);\n      cursor: text;\n      transform: translateY(1.625rem) scale(1.1);\n}\n.ui-textbox.has-floating-label .ui-textbox__label-text.is-floating {\n      transform: translateY(0) scale(1);\n}\n.ui-textbox.is-invalid:not(.is-disabled) .ui-textbox__label-text,\n  .ui-textbox.is-invalid:not(.is-disabled) .ui-textbox__icon-wrapper .ui-icon,\n  .ui-textbox.is-invalid:not(.is-disabled) .ui-textbox__counter {\n    color: #f44336;\n}\n.ui-textbox.is-invalid:not(.is-disabled) .ui-textbox__input,\n  .ui-textbox.is-invalid:not(.is-disabled) .ui-textbox__textarea {\n    border-bottom-color: #f44336;\n}\n.ui-textbox.is-invalid:not(.is-disabled) .ui-textbox__feedback {\n    color: #f44336;\n}\n.ui-textbox.is-disabled .ui-textbox__input,\n  .ui-textbox.is-disabled .ui-textbox__textarea {\n    border-bottom-style: dotted;\n    border-bottom-width: 2px;\n    color: rgba(0, 0, 0, 0.38);\n}\n.ui-textbox.is-disabled .ui-textbox__icon-wrapper .ui-icon {\n    opacity: 0.6;\n}\n.ui-textbox.is-disabled .ui-textbox__feedback {\n    opacity: 0.8;\n}\n.ui-textbox__label {\n  display: block;\n  margin: 0;\n  padding: 0;\n  width: 100%;\n}\n.ui-textbox__icon-wrapper {\n  -ms-flex-negative: 0;\n      flex-shrink: 0;\n  margin-right: 0.75rem;\n  padding-top: 0.25rem;\n}\n.ui-textbox__icon-wrapper .ui-icon {\n    color: rgba(0, 0, 0, 0.54);\n}\n.ui-textbox__content {\n  -ms-flex-positive: 1;\n      flex-grow: 1;\n}\n.ui-textbox__label-text {\n  color: rgba(0, 0, 0, 0.54);\n  font-size: 0.9375rem;\n  line-height: normal;\n  margin-bottom: 0;\n  transform-origin: left;\n  transition: color 0.1s ease, transform 0.2s ease;\n}\n.ui-textbox__input,\n.ui-textbox__textarea {\n  background: none;\n  border: none;\n  border-bottom-color: rgba(0, 0, 0, 0.12);\n  border-bottom-style: solid;\n  border-bottom-width: 1px;\n  border-radius: 0;\n  color: rgba(0, 0, 0, 0.87);\n  cursor: auto;\n  display: block;\n  font-family: Roboto, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Oxygen, Ubuntu, Cantarell, \"Fira Sans\", \"Droid Sans\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  font-size: 1rem;\n  font-weight: normal;\n  margin: 0;\n  outline: none;\n  padding: 0;\n  transition: border 0.1s ease;\n  width: 100%;\n}\n.ui-textbox__input {\n  height: 2rem;\n}\n.ui-textbox__textarea {\n  overflow-x: hidden;\n  overflow-y: auto;\n  padding-bottom: 0.375rem;\n  resize: vertical;\n}\n.ui-textbox__feedback {\n  color: rgba(0, 0, 0, 0.54);\n  font-size: 0.875rem;\n  line-height: 1.2;\n  margin: 0;\n  padding-top: 0.25rem;\n  position: relative;\n}\n.ui-textbox__counter {\n  position: absolute;\n  right: 0;\n  top: 0.25rem;\n}\n.ui-textbox--icon-position-right .ui-textbox__icon-wrapper {\n  margin-left: 0.5rem;\n  margin-right: 0;\n  -ms-flex-order: 1;\n      order: 1;\n}\n", ""]);
  
  // exports
  
  
  /***/ }),
  
  /***/ 266:
  /***/ (function(module, exports, __webpack_require__) {
  
  module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
    return _c('div', {
      staticClass: "ui-textbox",
      class: _vm.classes
    }, [(_vm.icon || _vm.$slots.icon) ? _c('div', {
      staticClass: "ui-textbox__icon-wrapper"
    }, [_vm._t("icon", [_c('ui-icon', {
      attrs: {
        "icon": _vm.icon
      }
    })])], 2) : _vm._e(), _vm._v(" "), _c('div', {
      staticClass: "ui-textbox__content"
    }, [_c('label', {
      staticClass: "ui-textbox__label"
    }, [(_vm.label || _vm.$slots.default) ? _c('div', {
      staticClass: "ui-textbox__label-text",
      class: _vm.labelClasses
    }, [_vm._t("default", [_vm._v(_vm._s(_vm.label))])], 2) : _vm._e(), _vm._v(" "), (!_vm.multiLine) ? _c('input', {
      directives: [{
        name: "autofocus",
        rawName: "v-autofocus",
        value: (_vm.autofocus),
        expression: "autofocus"
      }],
      ref: "input",
      staticClass: "ui-textbox__input",
      attrs: {
        "autocomplete": _vm.autocomplete ? _vm.autocomplete : null,
        "disabled": _vm.disabled,
        "max": _vm.maxValue,
        "maxlength": _vm.enforceMaxlength ? _vm.maxlength : null,
        "min": _vm.minValue,
        "name": _vm.name,
        "number": _vm.type === 'number' ? true : null,
        "placeholder": _vm.hasFloatingLabel ? null : _vm.placeholder,
        "readonly": _vm.readonly,
        "required": _vm.required,
        "step": _vm.stepValue,
        "type": _vm.type
      },
      domProps: {
        "value": _vm.value
      },
      on: {
        "blur": _vm.onBlur,
        "change": _vm.onChange,
        "focus": _vm.onFocus,
        "input": function($event) {
          _vm.updateValue($event.target.value)
        },
        "keydown": [function($event) {
          if (!('button' in $event) && _vm._k($event.keyCode, "enter", 13)) { return null; }
          _vm.onKeydownEnter($event)
        }, _vm.onKeydown]
      }
    }) : _c('textarea', {
      directives: [{
        name: "autofocus",
        rawName: "v-autofocus",
        value: (_vm.autofocus),
        expression: "autofocus"
      }],
      ref: "textarea",
      staticClass: "ui-textbox__textarea",
      attrs: {
        "autocomplete": _vm.autocomplete ? _vm.autocomplete : null,
        "disabled": _vm.disabled,
        "maxlength": _vm.enforceMaxlength ? _vm.maxlength : null,
        "name": _vm.name,
        "placeholder": _vm.hasFloatingLabel ? null : _vm.placeholder,
        "readonly": _vm.readonly,
        "required": _vm.required,
        "rows": _vm.rows
      },
      domProps: {
        "value": _vm.value
      },
      on: {
        "blur": _vm.onBlur,
        "change": _vm.onChange,
        "focus": _vm.onFocus,
        "input": function($event) {
          _vm.updateValue($event.target.value)
        },
        "keydown": [function($event) {
          if (!('button' in $event) && _vm._k($event.keyCode, "enter", 13)) { return null; }
          _vm.onKeydownEnter($event)
        }, _vm.onKeydown]
      }
    }, [_vm._v(_vm._s(_vm.value))])]), _vm._v(" "), (_vm.hasFeedback || _vm.maxlength) ? _c('div', {
      staticClass: "ui-textbox__feedback"
    }, [(_vm.showError) ? _c('div', {
      staticClass: "ui-textbox__feedback-text"
    }, [_vm._t("error", [_vm._v(_vm._s(_vm.error))])], 2) : (_vm.showHelp) ? _c('div', {
      staticClass: "ui-textbox__feedback-text"
    }, [_vm._t("help", [_vm._v(_vm._s(_vm.help))])], 2) : _vm._e(), _vm._v(" "), (_vm.maxlength) ? _c('div', {
      staticClass: "ui-textbox__counter"
    }, [_vm._v("\n                " + _vm._s(_vm.value.length + '/' + _vm.maxlength) + "\n            ")]) : _vm._e()]) : _vm._e()])])
  },staticRenderFns: []}
  module.exports.render._withStripped = true
  if (false) {
    module.hot.accept()
    if (module.hot.data) {
       require("vue-hot-reload-api").rerender("data-v-7a6d9ad0", module.exports)
    }
  }
  
  /***/ }),
  
  /***/ 289:
  /***/ (function(module, exports, __webpack_require__) {
  
  // style-loader: Adds some css to the DOM by adding a <style> tag
  
  // load the styles
  var content = __webpack_require__(239);
  if(typeof content === 'string') content = [[module.i, content, '']];
  // add the styles to the DOM
  var update = __webpack_require__(9)(content, {});
  if(content.locals) module.exports = content.locals;
  // Hot Module Replacement
  if(false) {
  	// When the styles change, update the <style> tags
  	if(!content.locals) {
  		module.hot.accept("!!../node_modules/css-loader/index.js!../node_modules/vue-loader/lib/style-rewriter.js?id=data-v-7a6d9ad0!../node_modules/sass-loader/index.js!../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./UiTextbox.vue", function() {
  			var newContent = require("!!../node_modules/css-loader/index.js!../node_modules/vue-loader/lib/style-rewriter.js?id=data-v-7a6d9ad0!../node_modules/sass-loader/index.js!../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./UiTextbox.vue");
  			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
  			update(newContent);
  		});
  	}
  	// When the module is disposed, remove the <style> tags
  	module.hot.dispose(function() { update(); });
  }
  
  /***/ }),
  
  /***/ 325:
  /***/ (function(module, exports, __webpack_require__) {
  
  module.exports = __webpack_require__(197);
  
  
  /***/ }),
  
  /***/ 39:
  /***/ (function(module, exports, __webpack_require__) {
  
  
  /* styles */
  __webpack_require__(78)
  
  var Component = __webpack_require__(8)(
    /* script */
    __webpack_require__(74),
    /* template */
    __webpack_require__(77),
    /* scopeId */
    null,
    /* cssModules */
    null
  )
  Component.options.__file = "/Users/anthonyhell/Developer/Keen-UI/src/UiIcon.vue"
  if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")}
  if (Component.options.functional) {console.error("[vue-loader] UiIcon.vue: functional components are not supported with templates, they should use render functions.")}
  
  /* hot reload */
  if (false) {(function () {
    var hotAPI = require("vue-hot-reload-api")
    hotAPI.install(require("vue"), false)
    if (!hotAPI.compatible) return
    module.hot.accept()
    if (!module.hot.data) {
      hotAPI.createRecord("data-v-2173ab17", Component.options)
    } else {
      hotAPI.reload("data-v-2173ab17", Component.options)
    }
  })()}
  
  module.exports = Component.exports
  
  
  /***/ }),
  
  /***/ 7:
  /***/ (function(module, exports) {
  
  /*
  	MIT License http://www.opensource.org/licenses/mit-license.php
  	Author Tobias Koppers @sokra
  */
  // css base code, injected by the css-loader
  module.exports = function() {
  	var list = [];
  
  	// return the list of modules as css string
  	list.toString = function toString() {
  		var result = [];
  		for(var i = 0; i < this.length; i++) {
  			var item = this[i];
  			if(item[2]) {
  				result.push("@media " + item[2] + "{" + item[1] + "}");
  			} else {
  				result.push(item[1]);
  			}
  		}
  		return result.join("");
  	};
  
  	// import a list of modules into the list
  	list.i = function(modules, mediaQuery) {
  		if(typeof modules === "string")
  			modules = [[null, modules, ""]];
  		var alreadyImportedModules = {};
  		for(var i = 0; i < this.length; i++) {
  			var id = this[i][0];
  			if(typeof id === "number")
  				alreadyImportedModules[id] = true;
  		}
  		for(i = 0; i < modules.length; i++) {
  			var item = modules[i];
  			// skip already imported module
  			// this implementation is not 100% perfect for weird media query combinations
  			//  when a module is imported multiple times with different media queries.
  			//  I hope this will never occur (Hey this way we have smaller bundles)
  			if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
  				if(mediaQuery && !item[2]) {
  					item[2] = mediaQuery;
  				} else if(mediaQuery) {
  					item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
  				}
  				list.push(item);
  			}
  		}
  	};
  	return list;
  };
  
  
  /***/ }),
  
  /***/ 74:
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  
  Object.defineProperty(exports, "__esModule", {
      value: true
  });
  exports.default = {
      name: 'ui-icon',
  
      props: {
          icon: String,
          iconSet: {
              type: String,
              default: 'material-icons'
          },
          ariaLabel: String,
          removeText: {
              type: Boolean,
              default: false
          },
          useSvg: {
              type: Boolean,
              default: false
          }
      }
  };
  
  /***/ }),
  
  /***/ 76:
  /***/ (function(module, exports, __webpack_require__) {
  
  exports = module.exports = __webpack_require__(7)();
  // imports
  
  
  // module
  exports.push([module.i, "\n.ui-icon {\n  cursor: inherit;\n  display: inline-block;\n  font-size: 1.5rem;\n  height: 1em;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  vertical-align: middle;\n  width: 1em;\n}\n.ui-icon svg {\n    fill: currentColor;\n    height: 1em;\n    margin: 0;\n    padding: 0;\n    width: 1em;\n}\n", ""]);
  
  // exports
  
  
  /***/ }),
  
  /***/ 77:
  /***/ (function(module, exports, __webpack_require__) {
  
  module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
    return _c('span', {
      staticClass: "ui-icon",
      class: [_vm.iconSet, _vm.icon],
      attrs: {
        "aria-label": _vm.ariaLabel
      }
    }, [(_vm.useSvg) ? _c('svg', {
      staticClass: "ui-icon__svg"
    }, [_c('use', {
      attrs: {
        "xmlns:xlink": "http://www.w3.org/1999/xlink",
        "xlink:href": '#' + _vm.icon
      }
    })]) : _vm._t("default", [_vm._v(_vm._s(_vm.removeText ? null : _vm.icon))])], 2)
  },staticRenderFns: []}
  module.exports.render._withStripped = true
  if (false) {
    module.hot.accept()
    if (module.hot.data) {
       require("vue-hot-reload-api").rerender("data-v-2173ab17", module.exports)
    }
  }
  
  /***/ }),
  
  /***/ 78:
  /***/ (function(module, exports, __webpack_require__) {
  
  // style-loader: Adds some css to the DOM by adding a <style> tag
  
  // load the styles
  var content = __webpack_require__(76);
  if(typeof content === 'string') content = [[module.i, content, '']];
  // add the styles to the DOM
  var update = __webpack_require__(9)(content, {});
  if(content.locals) module.exports = content.locals;
  // Hot Module Replacement
  if(false) {
  	// When the styles change, update the <style> tags
  	if(!content.locals) {
  		module.hot.accept("!!../node_modules/css-loader/index.js!../node_modules/vue-loader/lib/style-rewriter.js?id=data-v-2173ab17!../node_modules/sass-loader/index.js!../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./UiIcon.vue", function() {
  			var newContent = require("!!../node_modules/css-loader/index.js!../node_modules/vue-loader/lib/style-rewriter.js?id=data-v-2173ab17!../node_modules/sass-loader/index.js!../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./UiIcon.vue");
  			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
  			update(newContent);
  		});
  	}
  	// When the module is disposed, remove the <style> tags
  	module.hot.dispose(function() { update(); });
  }
  
  /***/ }),
  
  /***/ 8:
  /***/ (function(module, exports) {
  
  module.exports = function normalizeComponent (
    rawScriptExports,
    compiledTemplate,
    scopeId,
    cssModules
  ) {
    var esModule
    var scriptExports = rawScriptExports = rawScriptExports || {}
  
    // ES6 modules interop
    var type = typeof rawScriptExports.default
    if (type === 'object' || type === 'function') {
      esModule = rawScriptExports
      scriptExports = rawScriptExports.default
    }
  
    // Vue.extend constructor export interop
    var options = typeof scriptExports === 'function'
      ? scriptExports.options
      : scriptExports
  
    // render functions
    if (compiledTemplate) {
      options.render = compiledTemplate.render
      options.staticRenderFns = compiledTemplate.staticRenderFns
    }
  
    // scopedId
    if (scopeId) {
      options._scopeId = scopeId
    }
  
    // inject cssModules
    if (cssModules) {
      var computed = options.computed || (options.computed = {})
      Object.keys(cssModules).forEach(function (key) {
        var module = cssModules[key]
        computed[key] = function () { return module }
      })
    }
  
    return {
      esModule: esModule,
      exports: scriptExports,
      options: options
    }
  }
  
  
  /***/ }),
  
  /***/ 9:
  /***/ (function(module, exports) {
  
  /*
  	MIT License http://www.opensource.org/licenses/mit-license.php
  	Author Tobias Koppers @sokra
  */
  var stylesInDom = {},
  	memoize = function(fn) {
  		var memo;
  		return function () {
  			if (typeof memo === "undefined") memo = fn.apply(this, arguments);
  			return memo;
  		};
  	},
  	isOldIE = memoize(function() {
  		return /msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase());
  	}),
  	getHeadElement = memoize(function () {
  		return document.head || document.getElementsByTagName("head")[0];
  	}),
  	singletonElement = null,
  	singletonCounter = 0,
  	styleElementsInsertedAtTop = [];
  
  module.exports = function(list, options) {
  	if(typeof DEBUG !== "undefined" && DEBUG) {
  		if(typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
  	}
  
  	options = options || {};
  	// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
  	// tags it will allow on a page
  	if (typeof options.singleton === "undefined") options.singleton = isOldIE();
  
  	// By default, add <style> tags to the bottom of <head>.
  	if (typeof options.insertAt === "undefined") options.insertAt = "bottom";
  
  	var styles = listToStyles(list);
  	addStylesToDom(styles, options);
  
  	return function update(newList) {
  		var mayRemove = [];
  		for(var i = 0; i < styles.length; i++) {
  			var item = styles[i];
  			var domStyle = stylesInDom[item.id];
  			domStyle.refs--;
  			mayRemove.push(domStyle);
  		}
  		if(newList) {
  			var newStyles = listToStyles(newList);
  			addStylesToDom(newStyles, options);
  		}
  		for(var i = 0; i < mayRemove.length; i++) {
  			var domStyle = mayRemove[i];
  			if(domStyle.refs === 0) {
  				for(var j = 0; j < domStyle.parts.length; j++)
  					domStyle.parts[j]();
  				delete stylesInDom[domStyle.id];
  			}
  		}
  	};
  }
  
  function addStylesToDom(styles, options) {
  	for(var i = 0; i < styles.length; i++) {
  		var item = styles[i];
  		var domStyle = stylesInDom[item.id];
  		if(domStyle) {
  			domStyle.refs++;
  			for(var j = 0; j < domStyle.parts.length; j++) {
  				domStyle.parts[j](item.parts[j]);
  			}
  			for(; j < item.parts.length; j++) {
  				domStyle.parts.push(addStyle(item.parts[j], options));
  			}
  		} else {
  			var parts = [];
  			for(var j = 0; j < item.parts.length; j++) {
  				parts.push(addStyle(item.parts[j], options));
  			}
  			stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
  		}
  	}
  }
  
  function listToStyles(list) {
  	var styles = [];
  	var newStyles = {};
  	for(var i = 0; i < list.length; i++) {
  		var item = list[i];
  		var id = item[0];
  		var css = item[1];
  		var media = item[2];
  		var sourceMap = item[3];
  		var part = {css: css, media: media, sourceMap: sourceMap};
  		if(!newStyles[id])
  			styles.push(newStyles[id] = {id: id, parts: [part]});
  		else
  			newStyles[id].parts.push(part);
  	}
  	return styles;
  }
  
  function insertStyleElement(options, styleElement) {
  	var head = getHeadElement();
  	var lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];
  	if (options.insertAt === "top") {
  		if(!lastStyleElementInsertedAtTop) {
  			head.insertBefore(styleElement, head.firstChild);
  		} else if(lastStyleElementInsertedAtTop.nextSibling) {
  			head.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);
  		} else {
  			head.appendChild(styleElement);
  		}
  		styleElementsInsertedAtTop.push(styleElement);
  	} else if (options.insertAt === "bottom") {
  		head.appendChild(styleElement);
  	} else {
  		throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");
  	}
  }
  
  function removeStyleElement(styleElement) {
  	styleElement.parentNode.removeChild(styleElement);
  	var idx = styleElementsInsertedAtTop.indexOf(styleElement);
  	if(idx >= 0) {
  		styleElementsInsertedAtTop.splice(idx, 1);
  	}
  }
  
  function createStyleElement(options) {
  	var styleElement = document.createElement("style");
  	styleElement.type = "text/css";
  	insertStyleElement(options, styleElement);
  	return styleElement;
  }
  
  function addStyle(obj, options) {
  	var styleElement, update, remove;
  
  	if (options.singleton) {
  		var styleIndex = singletonCounter++;
  		styleElement = singletonElement || (singletonElement = createStyleElement(options));
  		update = applyToSingletonTag.bind(null, styleElement, styleIndex, false);
  		remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);
  	} else {
  		styleElement = createStyleElement(options);
  		update = applyToTag.bind(null, styleElement);
  		remove = function() {
  			removeStyleElement(styleElement);
  		};
  	}
  
  	update(obj);
  
  	return function updateStyle(newObj) {
  		if(newObj) {
  			if(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)
  				return;
  			update(obj = newObj);
  		} else {
  			remove();
  		}
  	};
  }
  
  var replaceText = (function () {
  	var textStore = [];
  
  	return function (index, replacement) {
  		textStore[index] = replacement;
  		return textStore.filter(Boolean).join('\n');
  	};
  })();
  
  function applyToSingletonTag(styleElement, index, remove, obj) {
  	var css = remove ? "" : obj.css;
  
  	if (styleElement.styleSheet) {
  		styleElement.styleSheet.cssText = replaceText(index, css);
  	} else {
  		var cssNode = document.createTextNode(css);
  		var childNodes = styleElement.childNodes;
  		if (childNodes[index]) styleElement.removeChild(childNodes[index]);
  		if (childNodes.length) {
  			styleElement.insertBefore(cssNode, childNodes[index]);
  		} else {
  			styleElement.appendChild(cssNode);
  		}
  	}
  }
  
  function applyToTag(styleElement, obj) {
  	var css = obj.css;
  	var media = obj.media;
  	var sourceMap = obj.sourceMap;
  
  	if (media) {
  		styleElement.setAttribute("media", media);
  	}
  
  	if (sourceMap) {
  		// https://developer.chrome.com/devtools/docs/javascript-debugging
  		// this makes source maps inside style tags work properly in Chrome
  		css += '\n/*# sourceURL=' + sourceMap.sources[0] + ' */';
  		// http://stackoverflow.com/a/26603875
  		css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";
  	}
  
  	if (styleElement.styleSheet) {
  		styleElement.styleSheet.cssText = css;
  	} else {
  		while(styleElement.firstChild) {
  			styleElement.removeChild(styleElement.firstChild);
  		}
  		styleElement.appendChild(document.createTextNode(css));
  	}
  }
  
  
  /***/ })
  
  /******/ });
  });