{"version":3,"file":"main.js","sources":["../../../node_modules/x/js/elements/icon.js","../icons.js","../../../node_modules/x/js/mixins/persist.js","../../../node_modules/x/js/mixins/router.js","../../../node_modules/page/page.mjs","../../../node_modules/x/css/input.js","../../../node_modules/x/css/base.js","../app.js","../../../node_modules/x/js/elements/router.js","../main.js"],"sourcesContent":["import { html } from 'lit-html';\nimport X from '../x.js';\n\nclass Icon extends X {\n static get props() {\n return {\n name: String,\n fills: Array\n };\n }\n\n constructor() {\n super();\n\n this.name = 'logo';\n this.fills = ['currentColor'];\n }\n\n _template() {\n const icon = Icon.icons[this.name](this.fills);\n\n return html`\n \n\n ${icon}\n `;\n }\n}\n\nexport default Icon;\n","import { svg } from 'lit-html';\n\nexport default {\n settings: fills => svg`\n \n \n \n `,\n\n star: fills => svg`\n \n \n \n `,\n\n 'star-border': fills => svg`\n \n \n \n `,\n\n 'arrow-back': fills => svg`\n \n \n \n `,\n\n 'swap-vert': fills => svg`\n \n \n \n `,\n\n loader: fills => svg`\n \n \n \n \n \n `\n};\n","const PersistMixin = element =>\n class extends element {\n static get _persistProps() {\n return {};\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n Object.keys(this.constructor._persistProps).forEach(propName => {\n try {\n const saved = localStorage.getItem(propName);\n this[propName] = saved !== null ? JSON.parse(saved) : this[propName];\n } catch (error) {}\n });\n }\n\n _onRender(triggers) {\n super._onRender(triggers);\n\n Object.keys(this.constructor._persistProps).forEach(propName => {\n if (triggers[propName]) {\n localStorage.setItem(propName, JSON.stringify(this[propName]));\n }\n });\n }\n };\n\nexport default PersistMixin;\n","const RouterMixin = element =>\n class extends element {\n static get props() {\n return {\n ...super.props,\n route: Object,\n routes: Object\n };\n }\n\n constructor() {\n super();\n\n this.route = {};\n this.routes = [];\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.addEventListener('x-update-route', this.onUpdateRoute);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n\n this.removeEventListener('x-update-route', this.onUpdateRoute);\n }\n\n onUpdateRoute(event) {\n const { route } = event.detail;\n\n this.route = route;\n }\n };\n\nexport default RouterMixin;\n","var isarray = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n/**\n * Expose `pathToRegexp`.\n */\nvar pathToRegexp_1 = pathToRegexp;\nvar parse_1 = parse;\nvar compile_1 = compile;\nvar tokensToFunction_1 = tokensToFunction;\nvar tokensToRegExp_1 = tokensToRegExp;\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g');\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {String} str\n * @return {Array}\n */\nfunction parse (str) {\n var tokens = [];\n var key = 0;\n var index = 0;\n var path = '';\n var res;\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0];\n var escaped = res[1];\n var offset = res.index;\n path += str.slice(index, offset);\n index = offset + m.length;\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1];\n continue\n }\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path);\n path = '';\n }\n\n var prefix = res[2];\n var name = res[3];\n var capture = res[4];\n var group = res[5];\n var suffix = res[6];\n var asterisk = res[7];\n\n var repeat = suffix === '+' || suffix === '*';\n var optional = suffix === '?' || suffix === '*';\n var delimiter = prefix || '/';\n var pattern = capture || group || (asterisk ? '.*' : '[^' + delimiter + ']+?');\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n pattern: escapeGroup(pattern)\n });\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index);\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path);\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {String} str\n * @return {Function}\n */\nfunction compile (str) {\n return tokensToFunction(parse(str))\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length);\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^' + tokens[i].pattern + '$');\n }\n }\n\n return function (obj) {\n var path = '';\n var data = obj || {};\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n path += token;\n\n continue\n }\n\n var value = data[token.name];\n var segment;\n\n if (value == null) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received \"' + value + '\"')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encodeURIComponent(value[j]);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment;\n }\n\n continue\n }\n\n segment = encodeURIComponent(value);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment;\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {String} group\n * @return {String}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {RegExp} re\n * @param {Array} keys\n * @return {RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys;\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {String}\n */\nfunction flags (options) {\n return options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {RegExp} path\n * @param {Array} keys\n * @return {RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n pattern: null\n });\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {Array} path\n * @param {Array} keys\n * @param {Object} options\n * @return {RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = [];\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source);\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {String} path\n * @param {Array} keys\n * @param {Object} options\n * @return {RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n var tokens = parse(path);\n var re = tokensToRegExp(tokens, options);\n\n // Attach keys back to the regexp.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] !== 'string') {\n keys.push(tokens[i]);\n }\n }\n\n return attachKeys(re, keys)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {Array} tokens\n * @param {Array} keys\n * @param {Object} options\n * @return {RegExp}\n */\nfunction tokensToRegExp (tokens, options) {\n options = options || {};\n\n var strict = options.strict;\n var end = options.end !== false;\n var route = '';\n var lastToken = tokens[tokens.length - 1];\n var endsWithSlash = typeof lastToken === 'string' && /\\/$/.test(lastToken);\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n route += escapeString(token);\n } else {\n var prefix = escapeString(token.prefix);\n var capture = token.pattern;\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*';\n }\n\n if (token.optional) {\n if (prefix) {\n capture = '(?:' + prefix + '(' + capture + '))?';\n } else {\n capture = '(' + capture + ')?';\n }\n } else {\n capture = prefix + '(' + capture + ')';\n }\n\n route += capture;\n }\n }\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithSlash ? route.slice(0, -2) : route) + '(?:\\\\/(?=$))?';\n }\n\n if (end) {\n route += '$';\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithSlash ? '' : '(?=\\\\/|$)';\n }\n\n return new RegExp('^' + route, flags(options))\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(String|RegExp|Array)} path\n * @param {Array} [keys]\n * @param {Object} [options]\n * @return {RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n keys = keys || [];\n\n if (!isarray(keys)) {\n options = keys;\n keys = [];\n } else if (!options) {\n options = {};\n }\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, keys, options)\n }\n\n if (isarray(path)) {\n return arrayToRegexp(path, keys, options)\n }\n\n return stringToRegexp(path, keys, options)\n}\n\npathToRegexp_1.parse = parse_1;\npathToRegexp_1.compile = compile_1;\npathToRegexp_1.tokensToFunction = tokensToFunction_1;\npathToRegexp_1.tokensToRegExp = tokensToRegExp_1;\n\n/**\n * Module dependencies.\n */\n\n \n\n /**\n * Short-cuts for global-object checks\n */\n\n var hasDocument = ('undefined' !== typeof document);\n var hasWindow = ('undefined' !== typeof window);\n var hasHistory = ('undefined' !== typeof history);\n var hasProcess = typeof process !== 'undefined';\n\n /**\n * Detect click event\n */\n var clickEvent = hasDocument && document.ontouchstart ? 'touchstart' : 'click';\n\n /**\n * To work properly with the URL\n * history.location generated polyfill in https://github.com/devote/HTML5-History-API\n */\n\n var isLocation = hasWindow && !!(window.history.location || window.location);\n\n /**\n * The page instance\n * @api private\n */\n function Page() {\n // public things\n this.callbacks = [];\n this.exits = [];\n this.current = '';\n this.len = 0;\n\n // private things\n this._decodeURLComponents = true;\n this._base = '';\n this._strict = false;\n this._running = false;\n this._hashbang = false;\n\n // bound functions\n this.clickHandler = this.clickHandler.bind(this);\n this._onpopstate = this._onpopstate.bind(this);\n }\n\n /**\n * Configure the instance of page. This can be called multiple times.\n *\n * @param {Object} options\n * @api public\n */\n\n Page.prototype.configure = function(options) {\n var opts = options || {};\n\n this._window = opts.window || (hasWindow && window);\n this._decodeURLComponents = opts.decodeURLComponents !== false;\n this._popstate = opts.popstate !== false && hasWindow;\n this._click = opts.click !== false && hasDocument;\n this._hashbang = !!opts.hashbang;\n\n var _window = this._window;\n if(this._popstate) {\n _window.addEventListener('popstate', this._onpopstate, false);\n } else if(hasWindow) {\n _window.removeEventListener('popstate', this._onpopstate, false);\n }\n\n if (this._click) {\n _window.document.addEventListener(clickEvent, this.clickHandler, false);\n } else if(hasDocument) {\n _window.document.removeEventListener(clickEvent, this.clickHandler, false);\n }\n\n if(this._hashbang && hasWindow && !hasHistory) {\n _window.addEventListener('hashchange', this._onpopstate, false);\n } else if(hasWindow) {\n _window.removeEventListener('hashchange', this._onpopstate, false);\n }\n };\n\n /**\n * Get or set basepath to `path`.\n *\n * @param {string} path\n * @api public\n */\n\n Page.prototype.base = function(path) {\n if (0 === arguments.length) return this._base;\n this._base = path;\n };\n\n /**\n * Gets the `base`, which depends on whether we are using History or\n * hashbang routing.\n\n * @api private\n */\n Page.prototype._getBase = function() {\n var base = this._base;\n if(!!base) return base;\n var loc = hasWindow && this._window && this._window.location;\n\n if(hasWindow && this._hashbang && loc && loc.protocol === 'file:') {\n base = loc.pathname;\n }\n\n return base;\n };\n\n /**\n * Get or set strict path matching to `enable`\n *\n * @param {boolean} enable\n * @api public\n */\n\n Page.prototype.strict = function(enable) {\n if (0 === arguments.length) return this._strict;\n this._strict = enable;\n };\n\n\n /**\n * Bind with the given `options`.\n *\n * Options:\n *\n * - `click` bind to click events [true]\n * - `popstate` bind to popstate [true]\n * - `dispatch` perform initial dispatch [true]\n *\n * @param {Object} options\n * @api public\n */\n\n Page.prototype.start = function(options) {\n var opts = options || {};\n this.configure(opts);\n\n if (false === opts.dispatch) return;\n this._running = true;\n\n var url;\n if(isLocation) {\n var window = this._window;\n var loc = window.location;\n\n if(this._hashbang && ~loc.hash.indexOf('#!')) {\n url = loc.hash.substr(2) + loc.search;\n } else if (this._hashbang) {\n url = loc.search + loc.hash;\n } else {\n url = loc.pathname + loc.search + loc.hash;\n }\n }\n\n this.replace(url, null, true, opts.dispatch);\n };\n\n /**\n * Unbind click and popstate event handlers.\n *\n * @api public\n */\n\n Page.prototype.stop = function() {\n if (!this._running) return;\n this.current = '';\n this.len = 0;\n this._running = false;\n\n var window = this._window;\n this._click && window.document.removeEventListener(clickEvent, this.clickHandler, false);\n hasWindow && window.removeEventListener('popstate', this._onpopstate, false);\n hasWindow && window.removeEventListener('hashchange', this._onpopstate, false);\n };\n\n /**\n * Show `path` with optional `state` object.\n *\n * @param {string} path\n * @param {Object=} state\n * @param {boolean=} dispatch\n * @param {boolean=} push\n * @return {!Context}\n * @api public\n */\n\n Page.prototype.show = function(path, state, dispatch, push) {\n var ctx = new Context(path, state, this),\n prev = this.prevContext;\n this.prevContext = ctx;\n this.current = ctx.path;\n if (false !== dispatch) this.dispatch(ctx, prev);\n if (false !== ctx.handled && false !== push) ctx.pushState();\n return ctx;\n };\n\n /**\n * Goes back in the history\n * Back should always let the current route push state and then go back.\n *\n * @param {string} path - fallback path to go back if no more history exists, if undefined defaults to page.base\n * @param {Object=} state\n * @api public\n */\n\n Page.prototype.back = function(path, state) {\n var page = this;\n if (this.len > 0) {\n var window = this._window;\n // this may need more testing to see if all browsers\n // wait for the next tick to go back in history\n hasHistory && window.history.back();\n this.len--;\n } else if (path) {\n setTimeout(function() {\n page.show(path, state);\n });\n } else {\n setTimeout(function() {\n page.show(page._getBase(), state);\n });\n }\n };\n\n /**\n * Register route to redirect from one path to other\n * or just redirect to another route\n *\n * @param {string} from - if param 'to' is undefined redirects to 'from'\n * @param {string=} to\n * @api public\n */\n Page.prototype.redirect = function(from, to) {\n var inst = this;\n\n // Define route from a path to another\n if ('string' === typeof from && 'string' === typeof to) {\n page.call(this, from, function(e) {\n setTimeout(function() {\n inst.replace(/** @type {!string} */ (to));\n }, 0);\n });\n }\n\n // Wait for the push state and replace it with another\n if ('string' === typeof from && 'undefined' === typeof to) {\n setTimeout(function() {\n inst.replace(from);\n }, 0);\n }\n };\n\n /**\n * Replace `path` with optional `state` object.\n *\n * @param {string} path\n * @param {Object=} state\n * @param {boolean=} init\n * @param {boolean=} dispatch\n * @return {!Context}\n * @api public\n */\n\n\n Page.prototype.replace = function(path, state, init, dispatch) {\n var ctx = new Context(path, state, this),\n prev = this.prevContext;\n this.prevContext = ctx;\n this.current = ctx.path;\n ctx.init = init;\n ctx.save(); // save before dispatching, which may redirect\n if (false !== dispatch) this.dispatch(ctx, prev);\n return ctx;\n };\n\n /**\n * Dispatch the given `ctx`.\n *\n * @param {Context} ctx\n * @api private\n */\n\n Page.prototype.dispatch = function(ctx, prev) {\n var i = 0, j = 0, page = this;\n\n function nextExit() {\n var fn = page.exits[j++];\n if (!fn) return nextEnter();\n fn(prev, nextExit);\n }\n\n function nextEnter() {\n var fn = page.callbacks[i++];\n\n if (ctx.path !== page.current) {\n ctx.handled = false;\n return;\n }\n if (!fn) return unhandled.call(page, ctx);\n fn(ctx, nextEnter);\n }\n\n if (prev) {\n nextExit();\n } else {\n nextEnter();\n }\n };\n\n /**\n * Register an exit route on `path` with\n * callback `fn()`, which will be called\n * on the previous context when a new\n * page is visited.\n */\n Page.prototype.exit = function(path, fn) {\n if (typeof path === 'function') {\n return this.exit('*', path);\n }\n\n var route = new Route(path, null, this);\n for (var i = 1; i < arguments.length; ++i) {\n this.exits.push(route.middleware(arguments[i]));\n }\n };\n\n /**\n * Handle \"click\" events.\n */\n\n /* jshint +W054 */\n Page.prototype.clickHandler = function(e) {\n if (1 !== this._which(e)) return;\n\n if (e.metaKey || e.ctrlKey || e.shiftKey) return;\n if (e.defaultPrevented) return;\n\n // ensure link\n // use shadow dom when available if not, fall back to composedPath()\n // for browsers that only have shady\n var el = e.target;\n var eventPath = e.path || (e.composedPath ? e.composedPath() : null);\n\n if(eventPath) {\n for (var i = 0; i < eventPath.length; i++) {\n if (!eventPath[i].nodeName) continue;\n if (eventPath[i].nodeName.toUpperCase() !== 'A') continue;\n if (!eventPath[i].href) continue;\n\n el = eventPath[i];\n break;\n }\n }\n\n // continue ensure link\n // el.nodeName for svg links are 'a' instead of 'A'\n while (el && 'A' !== el.nodeName.toUpperCase()) el = el.parentNode;\n if (!el || 'A' !== el.nodeName.toUpperCase()) return;\n\n // check if link is inside an svg\n // in this case, both href and target are always inside an object\n var svg = (typeof el.href === 'object') && el.href.constructor.name === 'SVGAnimatedString';\n\n // Ignore if tag has\n // 1. \"download\" attribute\n // 2. rel=\"external\" attribute\n if (el.hasAttribute('download') || el.getAttribute('rel') === 'external') return;\n\n // ensure non-hash for the same path\n var link = el.getAttribute('href');\n if(!this._hashbang && this._samePath(el) && (el.hash || '#' === link)) return;\n\n // Check for mailto: in the href\n if (link && link.indexOf('mailto:') > -1) return;\n\n // check target\n // svg target is an object and its desired value is in .baseVal property\n if (svg ? el.target.baseVal : el.target) return;\n\n // x-origin\n // note: svg links that are not relative don't call click events (and skip page.js)\n // consequently, all svg links tested inside page.js are relative and in the same origin\n if (!svg && !this.sameOrigin(el.href)) return;\n\n // rebuild path\n // There aren't .pathname and .search properties in svg links, so we use href\n // Also, svg href is an object and its desired value is in .baseVal property\n var path = svg ? el.href.baseVal : (el.pathname + el.search + (el.hash || ''));\n\n path = path[0] !== '/' ? '/' + path : path;\n\n // strip leading \"/[drive letter]:\" on NW.js on Windows\n if (hasProcess && path.match(/^\\/[a-zA-Z]:\\//)) {\n path = path.replace(/^\\/[a-zA-Z]:\\//, '/');\n }\n\n // same page\n var orig = path;\n var pageBase = this._getBase();\n\n if (path.indexOf(pageBase) === 0) {\n path = path.substr(pageBase.length);\n }\n\n if (this._hashbang) path = path.replace('#!', '');\n\n if (pageBase && orig === path && (!isLocation || this._window.location.protocol !== 'file:')) {\n return;\n }\n\n e.preventDefault();\n this.show(orig);\n };\n\n /**\n * Handle \"populate\" events.\n * @api private\n */\n\n Page.prototype._onpopstate = (function () {\n var loaded = false;\n if ( ! hasWindow ) {\n return function () {};\n }\n if (hasDocument && document.readyState === 'complete') {\n loaded = true;\n } else {\n window.addEventListener('load', function() {\n setTimeout(function() {\n loaded = true;\n }, 0);\n });\n }\n return function onpopstate(e) {\n if (!loaded) return;\n var page = this;\n if (e.state) {\n var path = e.state.path;\n page.replace(path, e.state);\n } else if (isLocation) {\n var loc = page._window.location;\n page.show(loc.pathname + loc.search + loc.hash, undefined, undefined, false);\n }\n };\n })();\n\n /**\n * Event button.\n */\n Page.prototype._which = function(e) {\n e = e || (hasWindow && this._window.event);\n return null == e.which ? e.button : e.which;\n };\n\n /**\n * Convert to a URL object\n * @api private\n */\n Page.prototype._toURL = function(href) {\n var window = this._window;\n if(typeof URL === 'function' && isLocation) {\n return new URL(href, window.location.toString());\n } else if (hasDocument) {\n var anc = window.document.createElement('a');\n anc.href = href;\n return anc;\n }\n };\n\n /**\n * Check if `href` is the same origin.\n * @param {string} href\n * @api public\n */\n\n Page.prototype.sameOrigin = function(href) {\n if(!href || !isLocation) return false;\n\n var url = this._toURL(href);\n var window = this._window;\n\n var loc = window.location;\n return loc.protocol === url.protocol &&\n loc.hostname === url.hostname &&\n loc.port === url.port;\n };\n\n /**\n * @api private\n */\n Page.prototype._samePath = function(url) {\n if(!isLocation) return false;\n var window = this._window;\n var loc = window.location;\n return url.pathname === loc.pathname &&\n url.search === loc.search;\n };\n\n /**\n * Remove URL encoding from the given `str`.\n * Accommodates whitespace in both x-www-form-urlencoded\n * and regular percent-encoded form.\n *\n * @param {string} val - URL component to decode\n * @api private\n */\n Page.prototype._decodeURLEncodedURIComponent = function(val) {\n if (typeof val !== 'string') { return val; }\n return this._decodeURLComponents ? decodeURIComponent(val.replace(/\\+/g, ' ')) : val;\n };\n\n /**\n * Create a new `page` instance and function\n */\n function createPage() {\n var pageInstance = new Page();\n\n function pageFn(/* args */) {\n return page.apply(pageInstance, arguments);\n }\n\n // Copy all of the things over. In 2.0 maybe we use setPrototypeOf\n pageFn.callbacks = pageInstance.callbacks;\n pageFn.exits = pageInstance.exits;\n pageFn.base = pageInstance.base.bind(pageInstance);\n pageFn.strict = pageInstance.strict.bind(pageInstance);\n pageFn.start = pageInstance.start.bind(pageInstance);\n pageFn.stop = pageInstance.stop.bind(pageInstance);\n pageFn.show = pageInstance.show.bind(pageInstance);\n pageFn.back = pageInstance.back.bind(pageInstance);\n pageFn.redirect = pageInstance.redirect.bind(pageInstance);\n pageFn.replace = pageInstance.replace.bind(pageInstance);\n pageFn.dispatch = pageInstance.dispatch.bind(pageInstance);\n pageFn.exit = pageInstance.exit.bind(pageInstance);\n pageFn.configure = pageInstance.configure.bind(pageInstance);\n pageFn.sameOrigin = pageInstance.sameOrigin.bind(pageInstance);\n pageFn.clickHandler = pageInstance.clickHandler.bind(pageInstance);\n\n pageFn.create = createPage;\n\n Object.defineProperty(pageFn, 'len', {\n get: function(){\n return pageInstance.len;\n },\n set: function(val) {\n pageInstance.len = val;\n }\n });\n\n Object.defineProperty(pageFn, 'current', {\n get: function(){\n return pageInstance.current;\n },\n set: function(val) {\n pageInstance.current = val;\n }\n });\n\n // In 2.0 these can be named exports\n pageFn.Context = Context;\n pageFn.Route = Route;\n\n return pageFn;\n }\n\n /**\n * Register `path` with callback `fn()`,\n * or route `path`, or redirection,\n * or `page.start()`.\n *\n * page(fn);\n * page('*', fn);\n * page('/user/:id', load, user);\n * page('/user/' + user.id, { some: 'thing' });\n * page('/user/' + user.id);\n * page('/from', '/to')\n * page();\n *\n * @param {string|!Function|!Object} path\n * @param {Function=} fn\n * @api public\n */\n\n function page(path, fn) {\n // \n if ('function' === typeof path) {\n return page.call(this, '*', path);\n }\n\n // route to \n if ('function' === typeof fn) {\n var route = new Route(/** @type {string} */ (path), null, this);\n for (var i = 1; i < arguments.length; ++i) {\n this.callbacks.push(route.middleware(arguments[i]));\n }\n // show with [state]\n } else if ('string' === typeof path) {\n this['string' === typeof fn ? 'redirect' : 'show'](path, fn);\n // start [options]\n } else {\n this.start(path);\n }\n }\n\n /**\n * Unhandled `ctx`. When it's not the initial\n * popstate then redirect. If you wish to handle\n * 404s on your own use `page('*', callback)`.\n *\n * @param {Context} ctx\n * @api private\n */\n function unhandled(ctx) {\n if (ctx.handled) return;\n var current;\n var page = this;\n var window = page._window;\n\n if (page._hashbang) {\n current = isLocation && this._getBase() + window.location.hash.replace('#!', '');\n } else {\n current = isLocation && window.location.pathname + window.location.search;\n }\n\n if (current === ctx.canonicalPath) return;\n page.stop();\n ctx.handled = false;\n isLocation && (window.location.href = ctx.canonicalPath);\n }\n\n /**\n * Escapes RegExp characters in the given string.\n *\n * @param {string} s\n * @api private\n */\n function escapeRegExp(s) {\n return s.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, '\\\\$1');\n }\n\n /**\n * Initialize a new \"request\" `Context`\n * with the given `path` and optional initial `state`.\n *\n * @constructor\n * @param {string} path\n * @param {Object=} state\n * @api public\n */\n\n function Context(path, state, pageInstance) {\n var _page = this.page = pageInstance || page;\n var window = _page._window;\n var hashbang = _page._hashbang;\n\n var pageBase = _page._getBase();\n if ('/' === path[0] && 0 !== path.indexOf(pageBase)) path = pageBase + (hashbang ? '#!' : '') + path;\n var i = path.indexOf('?');\n\n this.canonicalPath = path;\n var re = new RegExp('^' + escapeRegExp(pageBase));\n this.path = path.replace(re, '') || '/';\n if (hashbang) this.path = this.path.replace('#!', '') || '/';\n\n this.title = (hasDocument && window.document.title);\n this.state = state || {};\n this.state.path = path;\n this.querystring = ~i ? _page._decodeURLEncodedURIComponent(path.slice(i + 1)) : '';\n this.pathname = _page._decodeURLEncodedURIComponent(~i ? path.slice(0, i) : path);\n this.params = {};\n\n // fragment\n this.hash = '';\n if (!hashbang) {\n if (!~this.path.indexOf('#')) return;\n var parts = this.path.split('#');\n this.path = this.pathname = parts[0];\n this.hash = _page._decodeURLEncodedURIComponent(parts[1]) || '';\n this.querystring = this.querystring.split('#')[0];\n }\n }\n\n /**\n * Push state.\n *\n * @api private\n */\n\n Context.prototype.pushState = function() {\n var page = this.page;\n var window = page._window;\n var hashbang = page._hashbang;\n\n page.len++;\n if (hasHistory) {\n window.history.pushState(this.state, this.title,\n hashbang && this.path !== '/' ? '#!' + this.path : this.canonicalPath);\n }\n };\n\n /**\n * Save the context state.\n *\n * @api public\n */\n\n Context.prototype.save = function() {\n var page = this.page;\n if (hasHistory) {\n page._window.history.replaceState(this.state, this.title,\n page._hashbang && this.path !== '/' ? '#!' + this.path : this.canonicalPath);\n }\n };\n\n /**\n * Initialize `Route` with the given HTTP `path`,\n * and an array of `callbacks` and `options`.\n *\n * Options:\n *\n * - `sensitive` enable case-sensitive routes\n * - `strict` enable strict matching for trailing slashes\n *\n * @constructor\n * @param {string} path\n * @param {Object=} options\n * @api private\n */\n\n function Route(path, options, page) {\n var _page = this.page = page || globalPage;\n var opts = options || {};\n opts.strict = opts.strict || page._strict;\n this.path = (path === '*') ? '(.*)' : path;\n this.method = 'GET';\n this.regexp = pathToRegexp_1(this.path, this.keys = [], opts);\n }\n\n /**\n * Return route middleware with\n * the given callback `fn()`.\n *\n * @param {Function} fn\n * @return {Function}\n * @api public\n */\n\n Route.prototype.middleware = function(fn) {\n var self = this;\n return function(ctx, next) {\n if (self.match(ctx.path, ctx.params)) return fn(ctx, next);\n next();\n };\n };\n\n /**\n * Check if this route matches `path`, if so\n * populate `params`.\n *\n * @param {string} path\n * @param {Object} params\n * @return {boolean}\n * @api private\n */\n\n Route.prototype.match = function(path, params) {\n var keys = this.keys,\n qsIndex = path.indexOf('?'),\n pathname = ~qsIndex ? path.slice(0, qsIndex) : path,\n m = this.regexp.exec(decodeURIComponent(pathname));\n\n if (!m) return false;\n\n for (var i = 1, len = m.length; i < len; ++i) {\n var key = keys[i - 1];\n var val = this.page._decodeURLEncodedURIComponent(m[i]);\n if (val !== undefined || !(hasOwnProperty.call(params, key.name))) {\n params[key.name] = val;\n }\n }\n\n return true;\n };\n\n\n /**\n * Module exports.\n */\n\n var globalPage = createPage();\n var page_js = globalPage;\n var default_1 = globalPage;\n\npage_js.default = default_1;\n\nexport default page_js;\n","import { html } from 'lit-html';\n\nexport default html`\n \n`;\n","import { html } from 'lit-html';\n\nimport button from './button.js';\nimport input from './input.js';\n\nexport default html`\n ${button} ${input}\n`;\n","import { html } from 'lit-html';\n\nimport X from 'x/js/x.js';\nimport { defineElement } from 'x/js/utility/elements.js';\nimport PersitMixin from 'x/js/mixins/persist.js';\nimport RouterMixin from 'x/js/mixins/router.js';\nimport Router from 'x/js/elements/router.js';\ndefineElement('x-router', Router);\n\nimport cssBase from 'x/css/base.js';\nimport cssAnimation from 'x/css/animations.js';\n\nimport { Currencies, loadRateData } from './utility/currency.js';\n\nclass App extends PersitMixin(RouterMixin(X)) {\n static get props() {\n return {\n ...super.props,\n base: String,\n data: Object,\n currencies: Array,\n amount: Number,\n starred: Object\n };\n }\n\n static get _persistProps() {\n return {\n ...super._persistProps,\n base: true,\n starred: true,\n amount: true\n };\n }\n\n constructor() {\n super();\n\n this.base = 'EUR';\n this.data = null;\n this.currencies = [];\n this.amount = 10;\n this.starred = {};\n\n this.router = null;\n this.routes = [\n {\n path: '/:base?',\n module: '/js/dist/listview.js',\n component: 'x-listview',\n content: params => {\n if (params.base) {\n this.base = params.base;\n }\n\n return html`\n \n `;\n }\n },\n {\n path: '/:base/:code',\n module: '/js/dist/currencyview.js',\n component: 'x-currencyview',\n content: params => {\n this.base = params.base;\n\n return html`\n currency.code === params.code\n )}\n .starred=${this.starred}\n >\n `;\n }\n }\n ];\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.addEventListener('cc-star', this.onStar);\n this.addEventListener('cc-update-item', this.onUpdateItem);\n }\n\n _template() {\n let content = null;\n\n if (this.route) {\n const route = this.routes.find(\n route => route.path === this.route.routePath\n );\n\n if (route) {\n content = route.content(this.route.params);\n } else {\n // 404?\n }\n }\n\n return html`\n ${cssBase} ${cssAnimation}\n\n \n\n \n\n
\n
\n \n
\n
\n
\n
\n \"\"\n ${this.base}\n
\n\n \n
\n\n
\n ${Currencies[this.base].symbol}\n \n
\n
\n
\n \"\"\n
\n
\n\n
\n ${content}\n
\n `;\n }\n\n _onFirstRender() {\n this.router = this.shadowRoot.querySelector('x-router');\n }\n\n async _onRender(triggers) {\n super._onRender(triggers);\n\n if (triggers.base && triggers.base.new) {\n this.data = await loadRateData(this.base);\n if (this.data) {\n this.data.rates[this.base] = 1;\n }\n }\n\n if (\n (triggers.data && triggers.data.new) ||\n (triggers.amount && triggers.amount.new)\n ) {\n this.currencies = this.data\n ? Object.keys(this.data.rates)\n .sort((a, b) => {\n return a.localeCompare(b);\n })\n .map(code => {\n return {\n code,\n rate: this.data.rates[code],\n amount: this.amount ? this.amount * this.data.rates[code] : ''\n };\n })\n : [];\n }\n }\n\n onChangeBase(event) {\n switch (this.route.routePath) {\n case '/:base?':\n this.router.navigate(`/${event.target.value}`);\n break;\n case '/:base/:code':\n this.router.navigate(\n `/${event.target.value}/${this.route.params.code}`\n );\n break;\n }\n }\n\n onUpdateItem(event) {\n const { code } = event.detail;\n this.router.navigate(`/${this.route.params.base}/${code}`);\n }\n\n onInputAmount(event) {\n const value = event.target.value.trim();\n\n this.amount = parseInt(value, 10);\n }\n\n onStar(event) {\n const { code } = event.detail;\n\n this.starred = {\n ...this.starred,\n [code]: !this.starred[code]\n };\n }\n}\n\nexport default App;\n","import page from 'page';\n\nimport X from '../x.js';\nimport { defineElement } from '../utility/elements.js';\n\nclass Router extends X {\n static get props() {\n return {\n routes: Array,\n route: Object\n };\n }\n\n constructor() {\n super();\n\n this.routes = [];\n this.route = {};\n\n this._scrollTops = {};\n }\n\n _onRender(triggers) {\n super._onRender(triggers);\n\n if (triggers.routes) {\n this.updateRoutes(triggers.routes.new);\n }\n\n if (triggers.route) {\n this.onUpdateRoute(triggers.route.new);\n\n if (triggers.route.new) {\n if (this._scrollTops[this.route.canonicalPath]) {\n requestAnimationFrame(() => {\n document.querySelector('html').scrollTop = this._scrollTops[\n this.route.canonicalPath\n ];\n });\n }\n }\n }\n }\n\n updateRoutes(routes) {\n routes.forEach(route => {\n page(route.path, async context => {\n this.route = {\n ...context,\n routePath: route.path\n };\n\n const component = await import(route.module);\n defineElement(route.component, component.default);\n });\n\n page.exit(route.path, (context, next) => {\n this._scrollTops[context.canonicalPath] = document.querySelector(\n 'html'\n ).scrollTop;\n next();\n });\n });\n\n page();\n }\n\n navigate(to) {\n page(to);\n }\n\n onUpdateRoute(route) {\n this.dispatchEvent(\n new CustomEvent('x-update-route', {\n bubbles: true,\n composed: true,\n detail: { route }\n })\n );\n }\n}\n\nexport default Router;\n","import { defineElement } from 'x/js/utility/elements.js';\n\nimport Icon from 'x/js/elements/icon.js';\ndefineElement('x-icon', Icon);\nimport icons from './icons.js';\nIcon.icons = icons;\n\nimport App from './app.js';\ndefineElement('x-app', App);\n"],"names":["Icon","X","props","name","String","fills","Array","[object Object]","super","this","icon","icons","html","settings","svg","star","star-border","arrow-back","swap-vert","loader","PersistMixin","element","_persistProps","connectedCallback","Object","keys","constructor","forEach","propName","saved","localStorage","getItem","JSON","parse","error","triggers","_onRender","setItem","stringify","RouterMixin","route","routes","addEventListener","onUpdateRoute","disconnectedCallback","removeEventListener","event","detail","isarray","isArray","arr","prototype","toString","call","pathToRegexp_1","pathToRegexp","parse_1","compile_1","str","tokensToFunction","tokensToFunction_1","tokensToRegExp_1","tokensToRegExp","PATH_REGEXP","RegExp","join","res","tokens","key","index","path","exec","m","escaped","offset","slice","length","push","prefix","capture","group","suffix","asterisk","repeat","optional","delimiter","pattern","escapeGroup","substr","matches","i","obj","data","token","segment","value","TypeError","j","encodeURIComponent","test","escapeString","replace","attachKeys","re","flags","options","sensitive","strict","end","lastToken","endsWithSlash","groups","source","match","regexpToRegexp","parts","arrayToRegexp","stringToRegexp","compile","loaded","hasDocument","document","hasWindow","window","hasHistory","history","hasProcess","process","clickEvent","ontouchstart","isLocation","location","Page","callbacks","exits","current","len","_decodeURLComponents","_base","_strict","_running","_hashbang","clickHandler","bind","_onpopstate","page","fn","Route","arguments","middleware","start","Context","state","pageInstance","_page","_window","hashbang","pageBase","_getBase","indexOf","canonicalPath","title","querystring","_decodeURLEncodedURIComponent","pathname","params","hash","split","globalPage","opts","method","regexp","configure","decodeURLComponents","_popstate","popstate","_click","click","base","loc","protocol","enable","dispatch","url","search","stop","show","ctx","prev","prevContext","handled","pushState","back","setTimeout","redirect","from","to","inst","e","init","save","nextEnter","href","nextExit","exit","_which","metaKey","ctrlKey","shiftKey","defaultPrevented","el","target","eventPath","composedPath","nodeName","toUpperCase","parentNode","hasAttribute","getAttribute","link","_samePath","baseVal","sameOrigin","orig","preventDefault","readyState","undefined","which","button","_toURL","URL","anc","createElement","hostname","port","val","decodeURIComponent","replaceState","self","next","qsIndex","hasOwnProperty","createPage","pageFn","apply","create","defineProperty","get","set","page_js","default_1","default","input","defineElement","_scrollTops","updateRoutes","new","requestAnimationFrame","querySelector","scrollTop","async","context","routePath","component","import","module","dispatchEvent","CustomEvent","bubbles","composed","PersitMixin","currencies","amount","Number","starred","router","content","find","currency","code","onStar","onUpdateItem","cssBase","cssAnimation","onChangeBase","map","Currencies","symbol","onInputAmount","shadowRoot","loadRateData","rates","sort","a","b","localeCompare","rate","navigate","trim","parseInt"],"mappings":"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"}