repo_description: A lightweight Vue.js UI library with a simple API, inspired by Google's Material Design.
repo_topics: components javascript material-design ui vue vue3
code: /*!
   * Keen UI v1.4.0 (https://github.com/JosephusPaye/keen-ui)
   * (c) 2022 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["UiModal"] = factory();
  	else
  		root["KeenUI"] = root["KeenUI"] || {}, root["KeenUI"]["UiModal"] = 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 = 245);
  /******/ })
  /************************************************************************/
  /******/ ({
  
  /***/ 0:
  /***/ (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;
  };
  
  
  /***/ }),
  
  /***/ 1:
  /***/ (function(module, exports) {
  
  /* globals __VUE_SSR_CONTEXT__ */
  
  // this module is a runtime utility for cleaner component module output and will
  // be included in the final webpack user bundle
  
  module.exports = function normalizeComponent (
    rawScriptExports,
    compiledTemplate,
    injectStyles,
    scopeId,
    moduleIdentifier /* server only */
  ) {
    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
    }
  
    var hook
    if (moduleIdentifier) { // server build
      hook = function (context) {
        // 2.3 injection
        context =
          context || // cached call
          (this.$vnode && this.$vnode.ssrContext) || // stateful
          (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
        // 2.2 with runInNewContext: true
        if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
          context = __VUE_SSR_CONTEXT__
        }
        // inject component styles
        if (injectStyles) {
          injectStyles.call(this, context)
        }
        // register component module identifier for async chunk inferrence
        if (context && context._registeredComponents) {
          context._registeredComponents.add(moduleIdentifier)
        }
      }
      // used by ssr in case component is cached and beforeCreate
      // never gets called
      options._ssrRegister = hook
    } else if (injectStyles) {
      hook = injectStyles
    }
  
    if (hook) {
      var functional = options.functional
      var existing = functional
        ? options.render
        : options.beforeCreate
      if (!functional) {
        // inject component registration as beforeCreate hook
        options.beforeCreate = existing
          ? [].concat(existing, hook)
          : [hook]
      } else {
        // register for functioal component in vue file
        options.render = function renderWithStyleInjection (h, context) {
          hook.call(context)
          return existing(h, context)
        }
      }
    }
  
    return {
      esModule: esModule,
      exports: scriptExports,
      options: options
    }
  }
  
  
  /***/ }),
  
  /***/ 10:
  /***/ (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__(8);
  if(typeof content === 'string') content = [[module.i, content, '']];
  if(content.locals) module.exports = content.locals;
  // add the styles to the DOM
  var update = __webpack_require__(2)("2dd10f28", content, false);
  // 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-compiler/index.js?{\"vue\":true,\"id\":\"data-v-39a27af7\",\"scoped\":false,\"hasInlineConfig\":true}!../node_modules/sass-loader/dist/cjs.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-compiler/index.js?{\"vue\":true,\"id\":\"data-v-39a27af7\",\"scoped\":false,\"hasInlineConfig\":true}!../node_modules/sass-loader/dist/cjs.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(); });
  }
  
  /***/ }),
  
  /***/ 11:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_UiRippleInk_vue__ = __webpack_require__(12);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_5ef65288_hasScoped_false_node_modules_vue_loader_lib_selector_type_template_index_0_UiRippleInk_vue__ = __webpack_require__(14);
  var disposed = false
  function injectStyle (ssrContext) {
    if (disposed) return
    __webpack_require__(15)
  }
  var normalizeComponent = __webpack_require__(1)
  /* script */
  
  /* template */
  
  /* styles */
  var __vue_styles__ = injectStyle
  /* scopeId */
  var __vue_scopeId__ = null
  /* moduleIdentifier (server only) */
  var __vue_module_identifier__ = null
  var Component = normalizeComponent(
    __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_UiRippleInk_vue__["a" /* default */],
    __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_5ef65288_hasScoped_false_node_modules_vue_loader_lib_selector_type_template_index_0_UiRippleInk_vue__["a" /* default */],
    __vue_styles__,
    __vue_scopeId__,
    __vue_module_identifier__
  )
  Component.options.__file = "src\\UiRippleInk.vue"
  if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key.substr(0, 2) !== "__"})) {console.error("named exports are not supported in *.vue files.")}
  if (Component.options.functional) {console.error("[vue-loader] UiRippleInk.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-5ef65288", Component.options)
    } else {
      hotAPI.reload("data-v-5ef65288", Component.options)
    }
    module.hot.dispose(function (data) {
      disposed = true
    })
  })()}
  
  /* harmony default export */ __webpack_exports__["default"] = Component.exports;
  
  
  /***/ }),
  
  /***/ 12:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__helpers_classlist__ = __webpack_require__(5);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__helpers_element_ref__ = __webpack_require__(4);
  
  
  
  
  var startRipple = function startRipple(eventType, event) {
      var holder = event.currentTarget || event.target;
  
      if (holder && !__WEBPACK_IMPORTED_MODULE_0__helpers_classlist__["a" /* default */].has(holder, 'ui-ripple-ink')) {
          holder = holder.querySelector('.ui-ripple-ink');
      }
  
      if (!holder) {
          return;
      }
  
      var prev = holder.getAttribute('data-ui-event');
  
      if (prev && prev !== eventType) {
          return;
      }
  
      holder.setAttribute('data-ui-event', eventType);
  
      var rect = holder.getBoundingClientRect();
      var x = event.clientX - rect.left;
      var y = event.clientY - rect.top;
  
      var ripple = document.createElement('div');
      var max = void 0;
  
      if (rect.width === rect.height) {
          max = rect.width * 1.412;
      } else {
          max = Math.sqrt(rect.width * rect.width + rect.height * rect.height);
      }
  
      var size = max * 2 + 'px';
  
      ripple.style.width = size;
      ripple.style.height = size;
      ripple.style.marginLeft = -max + x + 'px';
      ripple.style.marginTop = -max + y + 'px';
  
      ripple.className = 'ui-ripple-ink__ink';
      holder.appendChild(ripple);
  
      setTimeout(function () {
          __WEBPACK_IMPORTED_MODULE_0__helpers_classlist__["a" /* default */].add(ripple, 'is-held');
      }, 0);
  
      var releaseEvent = eventType === 'mousedown' ? 'mouseup' : 'touchend';
  
      var handleRelease = function handleRelease() {
          document.removeEventListener(releaseEvent, handleRelease);
  
          __WEBPACK_IMPORTED_MODULE_0__helpers_classlist__["a" /* default */].add(ripple, 'is-done');
  
          var timeout = 650;
  
          setTimeout(function () {
              holder.removeChild(ripple);
  
              if (holder.children.length === 0) {
                  holder.removeAttribute('data-ui-event');
              }
          }, timeout);
      };
  
      document.addEventListener(releaseEvent, handleRelease);
  };
  
  var handleMouseDown = function handleMouseDown(e) {
      if (e.button === 0) {
          startRipple(e.type, e);
      }
  };
  
  var handleTouchStart = function handleTouchStart(e) {
      if (e.changedTouches) {
          for (var i = 0; i < e.changedTouches.length; ++i) {
              startRipple(e.type, e.changedTouches[i]);
          }
      }
  };
  
  /* harmony default export */ __webpack_exports__["a"] = {
      name: 'ui-ripple-ink',
  
      props: {
          trigger: {
              validator: function validator(value) {
                  return __WEBPACK_IMPORTED_MODULE_1__helpers_element_ref__["a" /* default */].validate(value, '[UiRippleInk]: Invalid prop: "trigger". Expected Element, VueComponent or CSS selector string.');
              }
          }
      },
  
      watch: {
          trigger: function trigger() {
              this.setupRipple();
          }
      },
  
      created: function created() {
          this.triggerEl = null;
      },
      mounted: function mounted() {
          this.setupRipple();
      },
      beforeDestroy: function beforeDestroy() {
          this.destroyRipple();
      },
  
  
      methods: {
          setupRipple: function setupRipple() {
              this.triggerEl = __WEBPACK_IMPORTED_MODULE_1__helpers_element_ref__["a" /* default */].resolve(this.trigger, this.$el.parentElement);
  
              if (!this.triggerEl) {
                  console.error('[UiRippleInk]: Trigger element not found.');
                  return;
              }
  
              this.triggerEl.addEventListener('touchstart', handleTouchStart);
              this.triggerEl.addEventListener('mousedown', handleMouseDown);
          },
          destroyRipple: function destroyRipple() {
              if (!this.triggerEl) {
                  return;
              }
  
              this.triggerEl.removeEventListener('mousedown', handleMouseDown);
              this.triggerEl.removeEventListener('touchstart', handleTouchStart);
          }
      }
  };
  
  /***/ }),
  
  /***/ 13:
  /***/ (function(module, exports, __webpack_require__) {
  
  exports = module.exports = __webpack_require__(0)();
  // imports
  
  
  // module
  exports.push([module.i, "\n.ui-ripple-ink{border-radius:inherit;bottom:0;display:block;left:0;overflow:hidden;position:absolute;right:0;top:0;-webkit-mask-image:-webkit-radial-gradient(circle, white, black)\n}\n.ui-ripple-ink__ink{background-clip:padding-box;background-color:currentColor;border-radius:50%;height:0;opacity:.2;pointer-events:none;position:absolute;-webkit-transform:scale(0);transform:scale(0);-webkit-transition:opacity .6s ease-out,-webkit-transform .6s ease-out;transition:opacity .6s ease-out,-webkit-transform .6s ease-out;transition:transform .6s ease-out,opacity .6s ease-out;transition:transform .6s ease-out,opacity .6s ease-out,-webkit-transform .6s ease-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:0\n}\n.ui-ripple-ink__ink.is-held{opacity:.4;-webkit-transform:scale(1);transform:scale(1)\n}\n.ui-ripple-ink__ink.is-done{opacity:0 !important\n}", ""]);
  
  // exports
  
  
  /***/ }),
  
  /***/ 14:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
    return _c('div', {
      staticClass: "ui-ripple-ink"
    })
  }
  var staticRenderFns = []
  render._withStripped = true
  var esExports = { render: render, staticRenderFns: staticRenderFns }
  /* harmony default export */ __webpack_exports__["a"] = esExports;
  if (false) {
    module.hot.accept()
    if (module.hot.data) {
       require("vue-hot-reload-api").rerender("data-v-5ef65288", esExports)
    }
  }
  
  /***/ }),
  
  /***/ 15:
  /***/ (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__(13);
  if(typeof content === 'string') content = [[module.i, content, '']];
  if(content.locals) module.exports = content.locals;
  // add the styles to the DOM
  var update = __webpack_require__(2)("24865d2e", content, false);
  // 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-compiler/index.js?{\"vue\":true,\"id\":\"data-v-5ef65288\",\"scoped\":false,\"hasInlineConfig\":true}!../node_modules/sass-loader/dist/cjs.js!../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./UiRippleInk.vue", function() {
       var newContent = require("!!../node_modules/css-loader/index.js!../node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-5ef65288\",\"scoped\":false,\"hasInlineConfig\":true}!../node_modules/sass-loader/dist/cjs.js!../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./UiRippleInk.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(); });
  }
  
  /***/ }),
  
  /***/ 17:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_UiFocusContainer_vue__ = __webpack_require__(18);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_6c26f987_hasScoped_false_node_modules_vue_loader_lib_selector_type_template_index_0_UiFocusContainer_vue__ = __webpack_require__(21);
  var disposed = false
  function injectStyle (ssrContext) {
    if (disposed) return
    __webpack_require__(22)
  }
  var normalizeComponent = __webpack_require__(1)
  /* script */
  
  /* template */
  
  /* styles */
  var __vue_styles__ = injectStyle
  /* scopeId */
  var __vue_scopeId__ = null
  /* moduleIdentifier (server only) */
  var __vue_module_identifier__ = null
  var Component = normalizeComponent(
    __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_UiFocusContainer_vue__["a" /* default */],
    __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_6c26f987_hasScoped_false_node_modules_vue_loader_lib_selector_type_template_index_0_UiFocusContainer_vue__["a" /* default */],
    __vue_styles__,
    __vue_scopeId__,
    __vue_module_identifier__
  )
  Component.options.__file = "src\\UiFocusContainer.vue"
  if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key.substr(0, 2) !== "__"})) {console.error("named exports are not supported in *.vue files.")}
  if (Component.options.functional) {console.error("[vue-loader] UiFocusContainer.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-6c26f987", Component.options)
    } else {
      hotAPI.reload("data-v-6c26f987", Component.options)
    }
    module.hot.dispose(function (data) {
      disposed = true
    })
  })()}
  
  /* harmony default export */ __webpack_exports__["a"] = Component.exports;
  
  
  /***/ }),
  
  /***/ 18:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  
  
  /* harmony default export */ __webpack_exports__["a"] = {
      name: 'ui-focus-container',
  
      props: {
          containFocus: {
              type: Boolean,
              default: true
          },
          focusRedirector: Function,
          disabled: {
              type: Boolean,
              default: false
          },
          tag: {
              type: String,
              default: 'div'
          },
          lazy: {
              type: Boolean,
              default: false }
      },
  
      computed: {
          renderRedirector: function renderRedirector() {
              if (this.disabled) {
                  return false;
              }
  
              return this.lazy ? this.containFocus : true;
          }
      },
  
      methods: {
          focus: function focus() {
              this.$refs.content.focus();
          },
          redirectFocus: function redirectFocus(e, options) {
              if (!this.containFocus) {
                  this.$emit('focus-overflow', e, options);
                  return;
              }
  
              e.stopPropagation();
  
              if (this.focusRedirector) {
                  this.focusRedirector(e, options);
                  return;
              }
  
              if (options.isTabbingForward) {
                  this.$refs.content.focus();
              } else {
                  this.$refs.lastFocusable.focus();
              }
          }
      }
  };
  
  /***/ }),
  
  /***/ 19:
  /***/ (function(module, exports, __webpack_require__) {
  
  exports = module.exports = __webpack_require__(0)();
  // imports
  
  
  // module
  exports.push([module.i, "\n.ui-focus-container__focus-redirector,.ui-focus-container__last-focusable{opacity:0;position:absolute\n}\n.ui-focus-container__content{outline:none\n}", ""]);
  
  // exports
  
  
  /***/ }),
  
  /***/ 2:
  /***/ (function(module, exports, __webpack_require__) {
  
  /*
    MIT License http://www.opensource.org/licenses/mit-license.php
    Author Tobias Koppers @sokra
    Modified by Evan You @yyx990803
  */
  
  var hasDocument = typeof document !== 'undefined'
  
  if (typeof DEBUG !== 'undefined' && DEBUG) {
    if (!hasDocument) {
      throw new Error(
      'vue-style-loader cannot be used in a non-browser environment. ' +
      "Use { target: 'node' } in your Webpack config to indicate a server-rendering environment."
    ) }
  }
  
  var listToStyles = __webpack_require__(3)
  
  /*
  type StyleObject = {
    id: number;
    parts: Array<StyleObjectPart>
  }
  
  type StyleObjectPart = {
    css: string;
    media: string;
    sourceMap: ?string
  }
  */
  
  var stylesInDom = {/*
    [id: number]: {
      id: number,
      refs: number,
      parts: Array<(obj?: StyleObjectPart) => void>
    }
  */}
  
  var head = hasDocument && (document.head || document.getElementsByTagName('head')[0])
  var singletonElement = null
  var singletonCounter = 0
  var isProduction = false
  var noop = function () {}
  
  // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
  // tags it will allow on a page
  var isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\b/.test(navigator.userAgent.toLowerCase())
  
  module.exports = function (parentId, list, _isProduction) {
    isProduction = _isProduction
  
    var styles = listToStyles(parentId, list)
    addStylesToDom(styles)
  
    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) {
        styles = listToStyles(parentId, newList)
        addStylesToDom(styles)
      } else {
        styles = []
      }
      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 /* Array<StyleObject> */) {
    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]))
        }
        if (domStyle.parts.length > item.parts.length) {
          domStyle.parts.length = item.parts.length
        }
      } else {
        var parts = []
        for (var j = 0; j < item.parts.length; j++) {
          parts.push(addStyle(item.parts[j]))
        }
        stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }
      }
    }
  }
  
  function createStyleElement () {
    var styleElement = document.createElement('style')
    styleElement.type = 'text/css'
    head.appendChild(styleElement)
    return styleElement
  }
  
  function addStyle (obj /* StyleObjectPart */) {
    var update, remove
    var styleElement = document.querySelector('style[data-vue-ssr-id~="' + obj.id + '"]')
  
    if (styleElement) {
      if (isProduction) {
        // has SSR styles and in production mode.
        // simply do nothing.
        return noop
      } else {
        // has SSR styles but in dev mode.
        // for some reason Chrome can't handle source map in server-rendered
        // style tags - source maps in <style> only works if the style tag is
        // created and inserted dynamically. So we remove the server rendered
        // styles and inject new ones.
        styleElement.parentNode.removeChild(styleElement)
      }
    }
  
    if (isOldIE) {
      // use singleton mode for IE9.
      var styleIndex = singletonCounter++
      styleElement = singletonElement || (singletonElement = createStyleElement())
      update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)
      remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)
    } else {
      // use multi-style-tag mode in all other cases
      styleElement = createStyleElement()
      update = applyToTag.bind(null, styleElement)
      remove = function () {
        styleElement.parentNode.removeChild(styleElement)
      }
    }
  
    update(obj)
  
    return function updateStyle (newObj /* StyleObjectPart */) {
      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))
    }
  }
  
  
  /***/ }),
  
  /***/ 21:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
    return _c(_vm.tag, {
      tag: "component",
      staticClass: "ui-focus-container"
    }, [(_vm.renderRedirector) ? _c('span', {
      staticClass: "ui-focus-container__focus-redirector",
      attrs: {
        "tabindex": "0"
      },
      on: {
        "focus": function($event) {
          _vm.redirectFocus($event, {
            isTabbingForward: false
          })
        }
      }
    }) : _vm._e(), _vm._v(" "), _c('div', {
      ref: "content",
      staticClass: "ui-focus-container__content",
      attrs: {
        "tabindex": "-1"
      }
    }, [_vm._t("default")], 2), _vm._v(" "), (!_vm.disabled && _vm.containFocus) ? _c('span', {
      ref: "lastFocusable",
      staticClass: "ui-focus-container__last-focusable",
      attrs: {
        "tabindex": "-1"
      }
    }) : _vm._e(), _vm._v(" "), (_vm.renderRedirector) ? _c('span', {
      staticClass: "ui-focus-container__focus-redirector",
      attrs: {
        "tabindex": "0"
      },
      on: {
        "focus": function($event) {
          _vm.redirectFocus($event, {
            isTabbingForward: true
          })
        }
      }
    }) : _vm._e()])
  }
  var staticRenderFns = []
  render._withStripped = true
  var esExports = { render: render, staticRenderFns: staticRenderFns }
  /* harmony default export */ __webpack_exports__["a"] = esExports;
  if (false) {
    module.hot.accept()
    if (module.hot.data) {
       require("vue-hot-reload-api").rerender("data-v-6c26f987", esExports)
    }
  }
  
  /***/ }),
  
  /***/ 22:
  /***/ (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__(19);
  if(typeof content === 'string') content = [[module.i, content, '']];
  if(content.locals) module.exports = content.locals;
  // add the styles to the DOM
  var update = __webpack_require__(2)("f4694a26", content, false);
  // 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-compiler/index.js?{\"vue\":true,\"id\":\"data-v-6c26f987\",\"scoped\":false,\"hasInlineConfig\":true}!../node_modules/sass-loader/dist/cjs.js!../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./UiFocusContainer.vue", function() {
       var newContent = require("!!../node_modules/css-loader/index.js!../node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-6c26f987\",\"scoped\":false,\"hasInlineConfig\":true}!../node_modules/sass-loader/dist/cjs.js!../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./UiFocusContainer.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(); });
  }
  
  /***/ }),
  
  /***/ 245:
  /***/ (function(module, exports, __webpack_require__) {
  
  module.exports = __webpack_require__(56);
  
  
  /***/ }),
  
  /***/ 3:
  /***/ (function(module, exports) {
  
  /**
   * Translates the list format produced by css-loader into something
   * easier to manipulate.
   */
  module.exports = function listToStyles (parentId, 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 = {
        id: parentId + ':' + i,
        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
  }
  
  
  /***/ }),
  
  /***/ 4:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* unused harmony export validate */
  /* unused harmony export resolve */
  function validate(ref, warning) {
      var isValid = ref instanceof Element || ref && ref._isVue || typeof ref === 'string';
  
      if (!isValid && warning) {
          console.warn(warning);
      }
  
      return isValid;
  }
  
  function resolve(ref, fallback) {
      if (ref instanceof Element) {
          return ref;
      } else if (ref && ref._isVue) {
          return ref.$el;
      } else if (typeof ref === 'string') {
          return document.querySelector(ref);
      }
  
      return fallback;
  }
  
  /* harmony default export */ __webpack_exports__["a"] = {
      validate: validate,
      resolve: resolve
  };
  
  /***/ }),
  
  /***/ 42:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_UiCloseButton_vue__ = __webpack_require__(45);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_7ba5f488_hasScoped_false_node_modules_vue_loader_lib_selector_type_template_index_0_UiCloseButton_vue__ = __webpack_require__(51);
  var disposed = false
  function injectStyle (ssrContext) {
    if (disposed) return
    __webpack_require__(54)
  }
  var normalizeComponent = __webpack_require__(1)
  /* script */
  
  /* template */
  
  /* styles */
  var __vue_styles__ = injectStyle
  /* scopeId */
  var __vue_scopeId__ = null
  /* moduleIdentifier (server only) */
  var __vue_module_identifier__ = null
  var Component = normalizeComponent(
    __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_UiCloseButton_vue__["a" /* default */],
    __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_7ba5f488_hasScoped_false_node_modules_vue_loader_lib_selector_type_template_index_0_UiCloseButton_vue__["a" /* default */],
    __vue_styles__,
    __vue_scopeId__,
    __vue_module_identifier__
  )
  Component.options.__file = "src\\UiCloseButton.vue"
  if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key.substr(0, 2) !== "__"})) {console.error("named exports are not supported in *.vue files.")}
  if (Component.options.functional) {console.error("[vue-loader] UiCloseButton.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-7ba5f488", Component.options)
    } else {
      hotAPI.reload("data-v-7ba5f488", Component.options)
    }
    module.hot.dispose(function (data) {
      disposed = true
    })
  })()}
  
  /* harmony default export */ __webpack_exports__["default"] = Component.exports;
  
  
  /***/ }),
  
  /***/ 45:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__UiIcon_vue__ = __webpack_require__(6);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__UiRippleInk_vue__ = __webpack_require__(11);
  
  
  
  
  
  /* harmony default export */ __webpack_exports__["a"] = {
      name: 'ui-close-button',
  
      props: {
          size: {
              type: String,
              default: 'normal' },
          color: {
              type: String,
              default: 'black' },
          disableRipple: {
              type: Boolean,
              default: false
          },
          disabled: {
              type: Boolean,
              default: false
          }
      },
  
      computed: {
          classes: function classes() {
              return ['ui-close-button--size-' + this.size, 'ui-close-button--color-' + this.color, { 'is-disabled': this.disabled || this.loading }];
          }
      },
  
      methods: {
          onClick: function onClick(e) {
              this.$emit('click', e);
          }
      },
  
      components: {
          UiIcon: __WEBPACK_IMPORTED_MODULE_0__UiIcon_vue__["default"],
          UiRippleInk: __WEBPACK_IMPORTED_MODULE_1__UiRippleInk_vue__["default"]
      }
  };
  
  /***/ }),
  
  /***/ 48:
  /***/ (function(module, exports, __webpack_require__) {
  
  exports = module.exports = __webpack_require__(0)();
  // imports
  
  
  // module
  exports.push([module.i, "\n.ui-close-button{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:transparent;background:none;border-radius:50%;border:none;cursor:default;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin:0;outline:none;overflow:hidden;padding:0;position:relative;-webkit-mask-image:-webkit-radial-gradient(circle, white, black)\n}\n.ui-close-button::-moz-focus-inner{border:0\n}\n.ui-close-button:hover:not(.is-disabled){background-color:rgba(0,0,0,.1)\n}\nbody[modality=keyboard] .ui-close-button:focus .ui-close-button__focus-ring{opacity:1;-webkit-transform:scale(1);transform:scale(1)\n}\n.ui-close-button.is-disabled{opacity:.6\n}\n.ui-close-button__icon{color:currentColor;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative;width:100%;z-index:1\n}\n.ui-close-button__focus-ring{background-color:rgba(0,0,0,.15);border-radius:50%;left:0;opacity:0;position:absolute;top:0;-webkit-transform-origin:center;transform-origin:center;-webkit-transform:scale(0);transform:scale(0);-webkit-transition:opacity .3s ease,-webkit-transform .3s ease;transition:opacity .3s ease,-webkit-transform .3s ease;transition:transform .3s ease,opacity .3s ease;transition:transform .3s ease,opacity .3s ease,-webkit-transform .3s ease\n}\n.ui-close-button--size-mini,.ui-close-button--size-mini .ui-close-button__focus-ring{height:1.5rem;width:1.5rem\n}\n.ui-close-button--size-mini .ui-icon{font-size:1.125rem\n}\n.ui-close-button--size-small,.ui-close-button--size-small .ui-close-button__focus-ring{height:2rem;width:2rem\n}\n.ui-close-button--size-small .ui-icon{font-size:1.125rem\n}\n.ui-close-button--size-normal,.ui-close-button--size-normal .ui-close-button__focus-ring{height:2.25rem;width:2.25rem\n}\n.ui-close-button--size-normal .ui-icon{font-size:1.25rem\n}\n.ui-close-button--size-large,.ui-close-button--size-large .ui-close-button__focus-ring{height:3rem;width:3rem\n}\n.ui-close-button--size-large .ui-icon{font-size:1.5rem\n}\n.ui-close-button--color-black{color:rgba(0,0,0,.38)\n}\nbody[modality=keyboard] .ui-close-button--color-black:focus .ui-close-button__icon,.ui-close-button--color-black:hover:not(.is-disabled) .ui-close-button__icon{color:rgba(0,0,0,.87)\n}\n.ui-close-button--color-white{color:#fff\n}", ""]);
  
  // exports
  
  
  /***/ }),
  
  /***/ 5:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  
  var trim = /^\s+|\s+$/g;
  var whitespace = /\s+/g;
  
  function interpret(input) {
      return typeof input === 'string' ? input.replace(trim, '').split(whitespace) : input;
  }
  
  function classes(el) {
      if (isElement(el)) {
          return (el.getAttribute('class') || '').replace(trim, '').split(whitespace);
      }
  
      return [];
  }
  
  function set(el, input) {
      if (isElement(el)) {
          el.setAttribute('class', interpret(input).join(' '));
      }
  }
  
  function add(el, input) {
      var current = remove(el, input);
      var values = interpret(input);
  
      current.push.apply(current, values);
      set(el, current);
  
      return current;
  }
  
  function remove(el, input) {
      var current = classes(el);
      var values = interpret(input);
  
      values.forEach(function (value) {
          var i = current.indexOf(value);
          if (i !== -1) {
              current.splice(i, 1);
          }
      });
  
      set(el, current);
  
      return current;
  }
  
  function contains(el, input) {
      var current = classes(el);
      var values = interpret(input);
  
      return values.every(function (value) {
          return current.indexOf(value) !== -1;
      });
  }
  
  function isElement(o) {
      var elementObjects = (typeof HTMLElement === 'undefined' ? 'undefined' : _typeof(HTMLElement)) === 'object';
      return elementObjects ? o instanceof HTMLElement : isElementObject(o);
  }
  
  function isElementObject(o) {
      return o && (typeof o === 'undefined' ? 'undefined' : _typeof(o)) === 'object' && typeof o.nodeName === 'string' && o.nodeType === 1;
  }
  
  /* harmony default export */ __webpack_exports__["a"] = {
      add: add,
      remove: remove,
      contains: contains,
      has: contains,
      set: set,
      get: classes
  };
  
  /***/ }),
  
  /***/ 51:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
    return _c('button', {
      staticClass: "ui-close-button",
      class: _vm.classes,
      attrs: {
        "aria-label": "Close",
        "type": "button",
        "disabled": _vm.disabled
      },
      on: {
        "click": _vm.onClick
      }
    }, [_c('div', {
      staticClass: "ui-close-button__icon"
    }, [_c('ui-icon', [_c('svg', {
      attrs: {
        "xmlns": "http://www.w3.org/2000/svg",
        "width": "24",
        "height": "24",
        "viewBox": "0 0 24 24"
      }
    }, [_c('path', {
      attrs: {
        "d": "M18.984 6.422L13.406 12l5.578 5.578-1.406 1.406L12 13.406l-5.578 5.578-1.406-1.406L10.594 12 5.016 6.422l1.406-1.406L12 10.594l5.578-5.578z"
      }
    })])])], 1), _vm._v(" "), _c('span', {
      staticClass: "ui-close-button__focus-ring"
    }), _vm._v(" "), (!_vm.disableRipple && !_vm.disabled) ? _c('ui-ripple-ink') : _vm._e()], 1)
  }
  var staticRenderFns = []
  render._withStripped = true
  var esExports = { render: render, staticRenderFns: staticRenderFns }
  /* harmony default export */ __webpack_exports__["a"] = esExports;
  if (false) {
    module.hot.accept()
    if (module.hot.data) {
       require("vue-hot-reload-api").rerender("data-v-7ba5f488", esExports)
    }
  }
  
  /***/ }),
  
  /***/ 54:
  /***/ (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__(48);
  if(typeof content === 'string') content = [[module.i, content, '']];
  if(content.locals) module.exports = content.locals;
  // add the styles to the DOM
  var update = __webpack_require__(2)("96be6b2c", content, false);
  // 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-compiler/index.js?{\"vue\":true,\"id\":\"data-v-7ba5f488\",\"scoped\":false,\"hasInlineConfig\":true}!../node_modules/sass-loader/dist/cjs.js!../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./UiCloseButton.vue", function() {
       var newContent = require("!!../node_modules/css-loader/index.js!../node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-7ba5f488\",\"scoped\":false,\"hasInlineConfig\":true}!../node_modules/sass-loader/dist/cjs.js!../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./UiCloseButton.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(); });
  }
  
  /***/ }),
  
  /***/ 56:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_UiModal_vue__ = __webpack_require__(60);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_5cfba9c2_hasScoped_false_node_modules_vue_loader_lib_selector_type_template_index_0_UiModal_vue__ = __webpack_require__(71);
  var disposed = false
  function injectStyle (ssrContext) {
    if (disposed) return
    __webpack_require__(75)
  }
  var normalizeComponent = __webpack_require__(1)
  /* script */
  
  /* template */
  
  /* styles */
  var __vue_styles__ = injectStyle
  /* scopeId */
  var __vue_scopeId__ = null
  /* moduleIdentifier (server only) */
  var __vue_module_identifier__ = null
  var Component = normalizeComponent(
    __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_UiModal_vue__["a" /* default */],
    __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_5cfba9c2_hasScoped_false_node_modules_vue_loader_lib_selector_type_template_index_0_UiModal_vue__["a" /* default */],
    __vue_styles__,
    __vue_scopeId__,
    __vue_module_identifier__
  )
  Component.options.__file = "src\\UiModal.vue"
  if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key.substr(0, 2) !== "__"})) {console.error("named exports are not supported in *.vue files.")}
  if (Component.options.functional) {console.error("[vue-loader] UiModal.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-5cfba9c2", Component.options)
    } else {
      hotAPI.reload("data-v-5cfba9c2", Component.options)
    }
    module.hot.dispose(function (data) {
      disposed = true
    })
  })()}
  
  /* harmony default export */ __webpack_exports__["default"] = Component.exports;
  
  
  /***/ }),
  
  /***/ 6:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_UiIcon_vue__ = __webpack_require__(7);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_39a27af7_hasScoped_false_node_modules_vue_loader_lib_selector_type_template_index_0_UiIcon_vue__ = __webpack_require__(9);
  var disposed = false
  function injectStyle (ssrContext) {
    if (disposed) return
    __webpack_require__(10)
  }
  var normalizeComponent = __webpack_require__(1)
  /* script */
  
  /* template */
  
  /* styles */
  var __vue_styles__ = injectStyle
  /* scopeId */
  var __vue_scopeId__ = null
  /* moduleIdentifier (server only) */
  var __vue_module_identifier__ = null
  var Component = normalizeComponent(
    __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_UiIcon_vue__["a" /* default */],
    __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_39a27af7_hasScoped_false_node_modules_vue_loader_lib_selector_type_template_index_0_UiIcon_vue__["a" /* default */],
    __vue_styles__,
    __vue_scopeId__,
    __vue_module_identifier__
  )
  Component.options.__file = "src\\UiIcon.vue"
  if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key.substr(0, 2) !== "__"})) {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-39a27af7", Component.options)
    } else {
      hotAPI.reload("data-v-39a27af7", Component.options)
    }
    module.hot.dispose(function (data) {
      disposed = true
    })
  })()}
  
  /* harmony default export */ __webpack_exports__["default"] = Component.exports;
  
  
  /***/ }),
  
  /***/ 60:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__UiCloseButton_vue__ = __webpack_require__(42);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__UiFocusContainer_vue__ = __webpack_require__(17);
  /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__helpers_classlist__ = __webpack_require__(5);
  
  
  
  
  
  
  
  /* harmony default export */ __webpack_exports__["a"] = {
      name: 'ui-modal',
  
      props: {
          title: {
              type: String,
              default: 'UiModal title'
          },
          alignTop: {
              type: Boolean,
              default: false
          },
          alignTopMargin: {
              type: Number,
              default: 60
          },
          size: {
              type: String,
              default: 'normal' },
          role: {
              type: String,
              default: 'dialog' },
          transition: {
              type: String,
              default: 'scale-down' },
          removeHeader: {
              type: Boolean,
              default: false
          },
          removeCloseButton: {
              type: Boolean,
              default: false
          },
          preventShift: {
              type: Boolean,
              default: false
          },
          dismissible: {
              type: Boolean,
              default: true
          },
          dismissOn: {
              type: String,
              default: 'backdrop esc close-button'
          },
          beforeClose: Function
      },
  
      data: function data() {
          return {
              isOpen: false,
              lastFocusedElement: null
          };
      },
  
  
      computed: {
          classes: function classes() {
              return ['ui-modal--size-' + this.size, { 'has-footer': this.hasFooter }, { 'is-open': this.isOpen }, { 'is-aligned-top': this.alignTop }];
          },
          alignTopStyle: function alignTopStyle() {
              if (this.alignTop) {
                  return { 'padding-top': this.alignTopMargin + 'px' };
              }
  
              return null;
          },
          toggleTransition: function toggleTransition() {
              return 'ui-modal--transition-' + this.transition;
          },
          hasFooter: function hasFooter() {
              return Boolean(this.$slots.footer);
          },
          dismissOnBackdrop: function dismissOnBackdrop() {
              return this.dismissOn.indexOf('backdrop') > -1;
          },
          dismissOnCloseButton: function dismissOnCloseButton() {
              return this.dismissOn.indexOf('close-button') > -1;
          },
          dismissOnEsc: function dismissOnEsc() {
              return this.dismissOn.indexOf('esc') > -1;
          }
      },
  
      watch: {
          isOpen: function isOpen() {
              var _this = this;
  
              this.$nextTick(function () {
                  _this[_this.isOpen ? 'onOpen' : 'onClose']();
              });
          }
      },
  
      beforeDestroy: function beforeDestroy() {
          if (this.isOpen) {
              this.returnFocus();
          }
      },
  
  
      methods: {
          open: function open() {
              this.isOpen = true;
          },
          close: function close() {
              if (!this.dismissible) {
                  return;
              }
  
              if (this.beforeClose && this.beforeClose(this) === false) {
                  return;
              }
  
              this.isOpen = false;
          },
          redirectFocus: function redirectFocus() {
              this.$refs.focusContainer.focus();
          },
          returnFocus: function returnFocus() {
              if (this.lastFocusedElement) {
                  this.lastFocusedElement.focus();
              }
          },
          onBackdropMouseDown: function onBackdropMouseDown() {
              this.mouseDownSource = 'backdrop';
          },
          onBackdropMouseUp: function onBackdropMouseUp() {
              if (this.dismissOnBackdrop && this.mouseDownSource === 'backdrop') {
                  this.close();
              } else {
                  this.redirectFocus();
              }
  
              this.mouseDownSource = undefined;
          },
          onEsc: function onEsc() {
              if (this.dismissOnEsc) {
                  this.close();
              }
          },
          onOpen: function onOpen() {
              this.lastFocusedElement = document.activeElement;
              this.$refs.focusContainer.focus();
  
              __WEBPACK_IMPORTED_MODULE_2__helpers_classlist__["a" /* default */].add(document.body, 'ui-modal--is-open');
              this.incrementOpenModalCount();
  
              this.$emit('open');
          },
          onClose: function onClose() {
              this.returnFocus();
              this.$emit('close');
          },
          onEnter: function onEnter() {
              this.$emit('reveal');
          },
          onLeave: function onLeave() {
              this.$emit('hide');
              var newCount = this.decrementOpenModalCount();
  
              if (newCount === 0) {
                  __WEBPACK_IMPORTED_MODULE_2__helpers_classlist__["a" /* default */].remove(document.body, 'ui-modal--is-open');
              }
          },
          getOpenModalCount: function getOpenModalCount() {
              var count = document.body.getAttribute('data-ui-open-modals');
              return count === undefined ? 0 : Number(count);
          },
          setOpenModalCount: function setOpenModalCount(count) {
              var normalizedCount = Math.max(0, count);
  
              if (normalizedCount === 0) {
                  document.body.removeAttribute('data-ui-open-modals');
              } else {
                  document.body.setAttribute('data-ui-open-modals', normalizedCount);
              }
  
              return normalizedCount;
          },
          incrementOpenModalCount: function incrementOpenModalCount() {
              return this.setOpenModalCount(this.getOpenModalCount() + 1);
          },
          decrementOpenModalCount: function decrementOpenModalCount() {
              return this.setOpenModalCount(this.getOpenModalCount() - 1);
          }
      },
  
      components: {
          UiCloseButton: __WEBPACK_IMPORTED_MODULE_0__UiCloseButton_vue__["default"],
          UiFocusContainer: __WEBPACK_IMPORTED_MODULE_1__UiFocusContainer_vue__["a" /* default */]
      }
  };
  
  /***/ }),
  
  /***/ 64:
  /***/ (function(module, exports, __webpack_require__) {
  
  exports = module.exports = __webpack_require__(0)();
  // imports
  
  
  // module
  exports.push([module.i, "\n.ui-modal{font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen,Ubuntu,Cantarell,\"Fira Sans\",\"Droid Sans\",Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-size:.875rem\n}\n.ui-modal.is-aligned-top .ui-modal__wrapper{vertical-align:initial\n}\n.ui-modal.is-aligned-top.has-footer .ui-modal__body{max-height:calc(100vh - 7.875rem)\n}\n.ui-modal.has-footer .ui-modal__body{max-height:calc(100vh - 7.875rem)\n}\n.ui-modal:not(.has-footer) .ui-modal__body{padding:1rem 1.5rem 1.5rem\n}\n.ui-modal--is-open{overflow:hidden\n}\n.ui-modal__mask{background-color:rgba(0,0,0,.5);display:table;height:100%;left:0;position:fixed;top:0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease;width:100%;z-index:50\n}\n.ui-modal__wrapper{display:table-cell;vertical-align:middle;overflow-x:hidden;text-align:center\n}\n.ui-modal__wrapper.has-dummy-scrollbar{overflow-y:scroll\n}\n.ui-modal__container{background-color:#fff;border-radius:.125rem;box-shadow:0 2px 8px rgba(0,0,0,.33);display:inline-block;margin:0 auto;max-height:100vh;max-width:100vw;outline:none;overflow:hidden;padding:0;text-align:initial;-webkit-transition:all .3s ease;transition:all .3s ease;width:33rem\n}\n.ui-modal__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#f5f5f5;box-shadow:0 1px 1px rgba(0,0,0,.16);display:-webkit-box;display:-ms-flexbox;display:flex;height:3.5rem;padding:0 1.5rem;position:relative;z-index:1\n}\n.ui-modal__header-text{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;font-size:1.125rem;font-weight:normal;margin:0\n}\n.ui-modal__close-button{margin-left:auto;margin-right:-0.5rem\n}\n.ui-modal__body{max-height:calc(100vh - 3.5rem);overflow-y:auto;padding:1rem 1.5rem\n}\n.ui-modal__footer{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:4.375rem;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:0 1.5rem\n}\n.ui-modal__footer .ui-button{margin-left:.5rem\n}\n.ui-modal__footer .ui-button:first-child{margin-left:0\n}\n.ui-modal--size-small>.ui-modal__wrapper>.ui-modal__container{width:20rem\n}\n.ui-modal--size-large>.ui-modal__wrapper>.ui-modal__container{width:53rem\n}\n.ui-modal--size-fullscreen>.ui-modal__wrapper>.ui-modal__container{width:100vw\n}\n.ui-modal--size-fullscreen>.ui-modal__wrapper>.ui-modal__container .ui-modal__body{height:calc(100vh - 3.5rem)\n}\n.ui-modal--size-auto>.ui-modal__wrapper>.ui-modal__container{width:initial\n}\n.ui-modal--transition-fade-enter,.ui-modal--transition-fade-leave-active{opacity:0\n}\n.ui-modal--transition-scale-down-enter,.ui-modal--transition-scale-down-leave-active{opacity:0\n}\n.ui-modal--transition-scale-down-enter .ui-modal__container,.ui-modal--transition-scale-down-leave-active .ui-modal__container{-webkit-transform:scale(1.1);transform:scale(1.1)\n}\n.ui-modal--transition-scale-up-enter,.ui-modal--transition-scale-up-leave-active{opacity:0\n}\n.ui-modal--transition-scale-up-enter .ui-modal__container,.ui-modal--transition-scale-up-leave-active .ui-modal__container{-webkit-transform:scale(0.8);transform:scale(0.8)\n}", ""]);
  
  // exports
  
  
  /***/ }),
  
  /***/ 7:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  
  
  /* harmony default export */ __webpack_exports__["a"] = {
      name: 'ui-icon',
  
      props: {
          icon: String,
          iconSet: {
              type: String,
              default: 'material-icons'
          },
          ariaLabel: String,
          removeText: {
              type: Boolean,
              default: false
          },
          useSvg: {
              type: Boolean,
              default: false
          }
      }
  };
  
  /***/ }),
  
  /***/ 71:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
    return _c('transition', {
      attrs: {
        "name": _vm.toggleTransition
      },
      on: {
        "after-enter": _vm.onEnter,
        "after-leave": _vm.onLeave
      }
    }, [_c('div', {
      directives: [{
        name: "show",
        rawName: "v-show",
        value: (_vm.isOpen),
        expression: "isOpen"
      }],
      staticClass: "ui-modal ui-modal__mask",
      class: _vm.classes,
      attrs: {
        "role": _vm.role
      },
      on: {
        "mousedown": function($event) {
          if ($event.target !== $event.currentTarget) { return null; }
          return _vm.onBackdropMouseDown($event)
        },
        "mouseup": function($event) {
          if ($event.target !== $event.currentTarget) { return null; }
          return _vm.onBackdropMouseUp($event)
        }
      }
    }, [_c('div', {
      staticClass: "ui-modal__wrapper",
      class: {
        'has-dummy-scrollbar': _vm.preventShift
      },
      style: (_vm.alignTopStyle),
      on: {
        "mousedown": function($event) {
          if ($event.target !== $event.currentTarget) { return null; }
          return _vm.onBackdropMouseDown($event)
        },
        "mouseup": function($event) {
          if ($event.target !== $event.currentTarget) { return null; }
          return _vm.onBackdropMouseUp($event)
        }
      }
    }, [_c('ui-focus-container', {
      ref: "focusContainer",
      staticClass: "ui-modal__container",
      attrs: {
        "tabindex": "-1"
      },
      nativeOn: {
        "keydown": function($event) {
          if (!('button' in $event) && _vm._k($event.keyCode, "esc", 27, $event.key, ["Esc", "Escape"])) { return null; }
          $event.stopPropagation();
          return _vm.onEsc($event)
        }
      }
    }, [(!_vm.removeHeader) ? _c('div', {
      staticClass: "ui-modal__header"
    }, [_vm._t("header", [_c('h1', {
      staticClass: "ui-modal__header-text"
    }, [_vm._v(_vm._s(_vm.title))])]), _vm._v(" "), _c('div', {
      staticClass: "ui-modal__close-button"
    }, [(_vm.dismissOnCloseButton && !_vm.removeCloseButton && _vm.dismissible) ? _c('ui-close-button', {
      on: {
        "click": _vm.close
      }
    }) : _vm._e()], 1)], 2) : _vm._e(), _vm._v(" "), _c('div', {
      staticClass: "ui-modal__body"
    }, [_vm._t("default")], 2), _vm._v(" "), (_vm.hasFooter) ? _c('div', {
      staticClass: "ui-modal__footer"
    }, [_vm._t("footer")], 2) : _vm._e()])], 1)])])
  }
  var staticRenderFns = []
  render._withStripped = true
  var esExports = { render: render, staticRenderFns: staticRenderFns }
  /* harmony default export */ __webpack_exports__["a"] = esExports;
  if (false) {
    module.hot.accept()
    if (module.hot.data) {
       require("vue-hot-reload-api").rerender("data-v-5cfba9c2", esExports)
    }
  }
  
  /***/ }),
  
  /***/ 75:
  /***/ (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__(64);
  if(typeof content === 'string') content = [[module.i, content, '']];
  if(content.locals) module.exports = content.locals;
  // add the styles to the DOM
  var update = __webpack_require__(2)("29e43983", content, false);
  // 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-compiler/index.js?{\"vue\":true,\"id\":\"data-v-5cfba9c2\",\"scoped\":false,\"hasInlineConfig\":true}!../node_modules/sass-loader/dist/cjs.js!../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./UiModal.vue", function() {
       var newContent = require("!!../node_modules/css-loader/index.js!../node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-5cfba9c2\",\"scoped\":false,\"hasInlineConfig\":true}!../node_modules/sass-loader/dist/cjs.js!../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./UiModal.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, __webpack_require__) {
  
  exports = module.exports = __webpack_require__(0)();
  // imports
  
  
  // module
  exports.push([module.i, "\n.ui-icon{cursor:inherit;display:inline-block;font-size:1.5rem;height:1em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;width:1em\n}\n.ui-icon svg{display:block;fill:currentColor;height:1em;margin:0;padding:0;width:1em\n}", ""]);
  
  // exports
  
  
  /***/ }),
  
  /***/ 9:
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  var 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)
  }
  var staticRenderFns = []
  render._withStripped = true
  var esExports = { render: render, staticRenderFns: staticRenderFns }
  /* harmony default export */ __webpack_exports__["a"] = esExports;
  if (false) {
    module.hot.accept()
    if (module.hot.data) {
       require("vue-hot-reload-api").rerender("data-v-39a27af7", esExports)
    }
  }
  
  /***/ })
  
  /******/ });
  });