wj-elements 0.3.4 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/packages/index.d.ts +0 -1
- package/dist/packages/wje-button/button.element.d.ts +1 -12
- package/dist/packages/wje-menu-item/menu-item.element.d.ts +2 -3
- package/dist/packages/wje-router-link/router-link.element.d.ts +1 -2
- package/dist/packages/wje-sliding-container/sliding-container.element.d.ts +2 -2
- package/dist/packages/wje-tab/tab.element.d.ts +1 -2
- package/dist/{router-links-DU0wTw84.js → router-links-wjqCnncc.js} +8 -14
- package/dist/router-links-wjqCnncc.js.map +1 -0
- package/dist/wje-button.js +18 -43
- package/dist/wje-button.js.map +1 -1
- package/dist/wje-dialog.js +7 -4
- package/dist/wje-dialog.js.map +1 -1
- package/dist/wje-master.js +1 -1
- package/dist/wje-menu-item.js +3 -17
- package/dist/wje-menu-item.js.map +1 -1
- package/dist/wje-router-link.js +2 -12
- package/dist/wje-router-link.js.map +1 -1
- package/dist/wje-routerx.js +8 -69
- package/dist/wje-routerx.js.map +1 -1
- package/dist/wje-tab.js +2 -12
- package/dist/wje-tab.js.map +1 -1
- package/package.json +5 -5
- package/dist/packages/utils/router-links.d.ts +0 -8
- package/dist/router-links-DU0wTw84.js.map +0 -1
package/dist/wje-routerx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-routerx.js","sources":["../node_modules/slick-router/lib/utils.js","../node_modules/slick-router/lib/invariant.js","../node_modules/slick-router/lib/function-dsl.js","../node_modules/slick-router/lib/array-dsl.js","../node_modules/slick-router/lib/path.js","../node_modules/slick-router/lib/events.js","../node_modules/slick-router/lib/locations/location-bar.js","../node_modules/slick-router/lib/locations/browser.js","../node_modules/slick-router/lib/locations/memory.js","../node_modules/slick-router/lib/constants.js","../node_modules/slick-router/lib/transition.js","../node_modules/slick-router/lib/links.js","../node_modules/slick-router/lib/logger.js","../node_modules/slick-router/lib/qs.js","../node_modules/regexparam/dist/index.mjs","../node_modules/slick-router/lib/patternCompiler.js","../node_modules/slick-router/lib/router.js","../node_modules/slick-router/lib/middlewares/wc.js","../node_modules/slick-router/lib/middlewares/router-links.js","../node_modules/slick-router/lib/wc-router.js","../node_modules/slick-router/lib/middlewares/events.js","../packages/wje-router/router.element.js","../packages/wje-router/router.js"],"sourcesContent":["const assoc = (obj, attr, val) => {\n obj[attr] = val\n return obj\n}\nconst isArray = Array.isArray\n\nexport const keys = Object.keys\n\nexport const clone = (obj) => (obj ? (isArray(obj) ? obj.slice(0) : extend({}, obj)) : obj)\n\nexport const pick = (obj, attrs) =>\n attrs.reduce((acc, attr) => (obj[attr] === undefined ? acc : assoc(acc, attr, obj[attr])), {})\n\nexport const isEqual = (obj1, obj2) => {\n const keys1 = keys(obj1)\n return keys1.length === keys(obj2).length && keys1.every((key) => obj2[key] === obj1[key])\n}\n\nexport const extend = Object.assign\n","export default function invariant(condition, format, ...args) {\n if (!condition) {\n let argIndex = 0\n throw new Error('Invariant Violation: ' + format.replace(/%s/g, () => args[argIndex++]))\n }\n}\n","import invariant from './invariant.js'\n\n/**\n * @typedef {import(\"./router.js\").Route} Route\n */\n\n/**\n * @callback registerRoute\n * @param {string} name\n * @param {Object} [options]\n * @param {routeCallback} [childrenCallback]\n */\n\n/**\n * @callback routeCallback\n * @param {registerRoute} route\n */\n\n/**\n * @export\n * @param {routeCallback} callback\n * @return {Route[]}\n */\nexport default function functionDsl(callback) {\n let ancestors = []\n const matches = {}\n const names = {}\n\n callback(function route(name, options, childrenCallback) {\n let routes\n\n invariant(\n !names[name],\n 'Route names must be unique, but route \"%s\" is declared multiple times',\n name,\n )\n\n names[name] = true\n\n if (arguments.length === 1) {\n options = {}\n }\n\n if (arguments.length === 2 && typeof options === 'function') {\n childrenCallback = options\n options = {}\n }\n\n if (typeof options.path !== 'string') {\n const parts = name.split('.')\n options.path = parts[parts.length - 1]\n }\n\n // go to the next level\n if (childrenCallback) {\n ancestors = ancestors.concat(name)\n childrenCallback()\n routes = pop()\n ancestors.splice(-1)\n }\n\n // add the node to the tree\n push({\n name,\n path: options.path,\n routes: routes || [],\n options,\n })\n })\n\n function pop() {\n return matches[currentLevel()] || []\n }\n\n function push(route) {\n const level = currentLevel()\n matches[level] = matches[level] || []\n matches[level].push(route)\n }\n\n function currentLevel() {\n return ancestors.join('.')\n }\n\n return pop()\n}\n","/**\n * @typedef {import(\"./router.js\").Route} Route\n */\n\n/**\n * @typedef RouteDef\n * @property {string} name\n * @property {string} path\n * @property {RouteDef[]} children\n */\n\n/**\n * @export\n * @param {RouteDef[]} routes\n * @return {Route[]}\n */\nexport default function arrayDsl(routes) {\n const result = []\n\n routes.forEach(({ name, children, ...options }) => {\n if (typeof options.path !== 'string') {\n const parts = name.split('.')\n options.path = parts[parts.length - 1]\n }\n result.push({\n name,\n path: options.path,\n options,\n routes: children ? arrayDsl(children) : [],\n })\n })\n\n return result\n}\n","import invariant from './invariant.js'\n\nconst paramInjectMatcher = /:([a-zA-Z_$][a-zA-Z0-9_$?]*[?+*]?)/g\nconst specialParamChars = /[+*?]$/g\nconst queryMatcher = /\\?(.+)/\n\nconst _compiledPatterns = {}\n\nfunction compilePattern(pattern, compiler) {\n if (!(pattern in _compiledPatterns)) {\n _compiledPatterns[pattern] = compiler(pattern)\n }\n\n return _compiledPatterns[pattern]\n}\n\nexport function clearPatternCompilerCache() {\n for (const x in _compiledPatterns) {\n delete _compiledPatterns[x]\n }\n}\n\n/**\n * Returns an array of the names of all parameters in the given pattern.\n */\nexport function extractParamNames(pattern, compiler) {\n return compilePattern(pattern, compiler).paramNames\n}\n\n/**\n * Extracts the portions of the given URL path that match the given pattern\n * and returns an object of param name => value pairs. Returns null if the\n * pattern does not match the given path.\n */\nexport function extractParams(pattern, path, compiler) {\n const cp = compilePattern(pattern, compiler)\n const matcher = cp.matcher\n const paramNames = cp.paramNames\n const match = path.match(matcher)\n\n if (!match) {\n return null\n }\n\n const params = {}\n\n paramNames.forEach(function (paramName, index) {\n params[paramName] = match[index + 1] && decodeURIComponent(match[index + 1])\n })\n\n return params\n}\n\n/**\n * Returns a version of the given route path with params interpolated. Throws\n * if there is a dynamic segment of the route path for which there is no param.\n */\nexport function injectParams(pattern, params) {\n params = params || {}\n\n return pattern.replace(paramInjectMatcher, function (match, param) {\n const paramName = param.replace(specialParamChars, '')\n const lastChar = param.slice(-1)\n\n // If param is optional don't check for existence\n if (lastChar === '?' || lastChar === '*') {\n if (params[paramName] == null) {\n return ''\n }\n } else {\n invariant(\n params[paramName] != null,\n \"Missing '%s' parameter for path '%s'\",\n paramName,\n pattern,\n )\n }\n\n let paramValue = encodeURIComponent(params[paramName])\n if (lastChar === '*' || lastChar === '+') {\n // restore / for splats\n paramValue = paramValue.replace('%2F', '/')\n }\n return paramValue\n })\n}\n\n/**\n * Returns an object that is the result of parsing any query string contained\n * in the given path, null if the path contains no query string.\n */\nexport function extractQuery(qs, path) {\n const match = path.match(queryMatcher)\n return match && qs.parse(match[1])\n}\n\n/**\n * Returns a version of the given path with the parameters in the given\n * query merged into the query string.\n */\nexport function withQuery(qs, path, query) {\n const queryString = qs.stringify(query, { indices: false })\n\n if (queryString) {\n return withoutQuery(path) + '?' + queryString\n }\n\n return path\n}\n\n/**\n * Returns a version of the given path without the query string.\n */\nexport function withoutQuery(path) {\n return path.replace(queryMatcher, '')\n}\n","/**\n * Bind `el` event `type` to `fn`.\n *\n * @param {Element} el\n * @param {String} type\n * @param {Function} fn\n * @return {Function}\n * @api public\n */\n\nexport function bindEvent(el, type, fn) {\n el.addEventListener(type, fn)\n return fn\n}\n\n/**\n * Unbind `el` event `type`'s callback `fn`.\n *\n * @param {Element} el\n * @param {String} type\n * @param {Function} fn\n * @return {Function}\n * @api public\n */\n\nexport function unbindEvent(el, type, fn) {\n el.removeEventListener(type, fn)\n return fn\n}\n","/* eslint-disable */\n// LocationBar module extracted from Backbone.js 1.1.0\n//\n// the dependency on backbone, underscore and jquery have been removed to turn\n// this into a small standalone library for handling browser's history API\n// cross browser and with a fallback to hashchange events or polling.\n\nimport {bindEvent, unbindEvent} from '../events.js'\n\n// this is mostly original code with minor modifications\n// to avoid dependency on 3rd party libraries\n//\n// Backbone.History\n// ----------------\n\n// Handles cross-browser history management, based on either\n// [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n// [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n// and URL fragments.\nexport class History {\n constructor() {\n this.handlers = [];\n this.checkUrl = this.checkUrl.bind(this);\n this.location = window.location;\n this.history = window.history;\n }\n\n // Set up all inheritable **Backbone.History** properties and methods.\n // Are we at the app root?\n atRoot() {\n return this.location.pathname.replace(/[^\\/]$/, '$&/') === this.root;\n }\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash() {\n const match = this.location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n }\n\n // Get the cross-browser normalized URL fragment, either from the URL,\n // the hash, or the override.\n getFragment(fragment, forcePushState) {\n if (fragment == null) {\n if (this._hasPushState || !this._wantsHashChange || forcePushState) {\n fragment = decodeURI(this.location.pathname + this.location.search);\n const root = this.root.replace(trailingSlash, '');\n if (!fragment.indexOf(root)) fragment = fragment.slice(root.length);\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n }\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start(options) {\n // MODIFICATION OF ORIGINAL BACKBONE.HISTORY\n // if (History.started) throw new Error(\"LocationBar has already been started\");\n // History.started = true;\n this.started = true;\n\n // Figure out the initial configuration.\n \n const _wantsPushState = !!options.pushState;\n this.location = options.location || this.location;\n this.history = options.history || this.history;\n this.root = options.root;\n this._wantsHashChange = options.hashChange !== false; \n this._hasPushState = _wantsPushState;\n const fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = (`/${this.root}/`).replace(rootStripper, '/');\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n bindEvent(window, this._hasPushState ? 'popstate' : 'hashchange', this.checkUrl);\n\n // Determine if we need to change the base url, for a pushState link\n // opened by a non-pushState browser.\n this.fragment = fragment;\n const loc = this.location;\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && _wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n this.fragment = this.getFragment(null, true);\n this.location.replace(`${this.root}#${this.fragment}`);\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot() && loc.hash) {\n this.fragment = this.getHash().replace(routeStripper, '');\n this.history.replaceState({}, document.title, this.root + this.fragment);\n }\n\n }\n\n if (!options.silent) return this.loadUrl();\n }\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop() {\n unbindEvent(window, this._hasPushState ? 'popstate' : 'hashchange', this.checkUrl);\n this.started = false;\n }\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route(route, callback) {\n this.handlers.unshift({route, callback});\n }\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`.\n checkUrl() {\n const current = this.getFragment();\n if (current === this.fragment) return false;\n this.loadUrl();\n }\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl(fragment) {\n fragment = this.fragment = this.getFragment(fragment);\n return this.handlers.some(handler => {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n });\n }\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n update(fragment, options) {\n if (!this.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n let url = this.root + (fragment = this.getFragment(fragment || ''));\n\n // Strip the hash for matching.\n fragment = fragment.replace(pathStripper, '');\n\n if (this.fragment === fragment) return;\n this.fragment = fragment;\n\n // Don't include a trailing slash on the root.\n if (fragment === '' && url !== '/') url = url.slice(0, -1);\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._hasPushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `update` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n }\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash(location, fragment, replace) {\n if (replace) {\n const href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(`${href}#${fragment}`);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = `#${fragment}`;\n }\n }\n\n // add some features to History\n\n // a generic callback for any changes\n onChange(callback) {\n this.route(/^(.*?)$/, callback);\n } \n}\n\n// Cached regex for stripping a leading hash/slash and trailing space.\nconst routeStripper = /^[#\\/]|\\s+$/g;\n\n// Cached regex for stripping leading and trailing slashes.\nconst rootStripper = /^\\/+|\\/+$/g;\n\n// Cached regex for removing a trailing slash.\nconst trailingSlash = /\\/$/;\n\n// Cached regex for stripping urls of hash.\nconst pathStripper = /#.*$/;","import { extend } from '../utils.js'\nimport { History } from './location-bar.js'\n\n/**\n * @typedef BrowserLocationOptions\n * @property {boolean} [pushState=false] Whether to use pushState or hashchange\n * @property {string} [root='/'] The root URL path to use when using pushState\n */\n\nclass BrowserLocation {\n /**\n * @param {BrowserLocationOptions} options\n */\n constructor(options = {}) {\n this.path = options.path || ''\n\n this.options = extend(\n {\n pushState: false,\n root: '/',\n },\n options,\n )\n\n // we're using the location-bar module for actual\n // URL management\n this.history = new History()\n }\n\n /**\n * Get the current URL\n */\n\n getURL() {\n return this.path\n }\n\n /**\n * Set the current URL without triggering any events\n * back to the router. Add a new entry in browser's history.\n */\n\n setURL(path, options = {}) {\n if (this.path !== path) {\n this.path = path\n this.history.update(path, extend({ trigger: true }, options))\n }\n }\n\n /**\n * Set the current URL without triggering any events\n * back to the router. Replace the latest entry in broser's history.\n */\n\n replaceURL(path, options = {}) {\n if (this.path !== path) {\n this.path = path\n this.history.update(path, extend({ trigger: true, replace: true }, options))\n }\n }\n\n /**\n * Setup a URL change handler\n * @param {(url: string) => void} callback\n */\n onChange(callback) {\n this.callback = callback\n }\n\n /**\n * Given a path, generate a URL appending root\n * if pushState is used and # if hash state is used\n */\n formatURL(path) {\n const { root, pushState } = this.options\n if (pushState) {\n let rootURL = root\n if (path !== '') {\n rootURL = rootURL.replace(/\\/$/, '')\n }\n return rootURL + path\n } else {\n if (path[0] === '/') {\n path = path.substr(1)\n }\n return `#${path}`\n }\n }\n\n /**\n * When we use pushState with a custom root option,\n * we need to take care of removingRoot at certain points.\n * Specifically\n * - browserLocation.update() can be called with the full URL by router\n * - LocationBar expects all .update() calls to be called without root\n * - this method is public so that we could dispatch URLs without root in router\n */\n removeRoot(url) {\n const { root, pushState } = this.options\n if (pushState && root && root !== '/') {\n return url.replace(root, '')\n } else {\n return url\n }\n }\n\n /**\n * Stop listening to URL changes and link clicks\n */\n destroy() {\n this.history.stop()\n }\n\n /**\n initially, the changeCallback won't be defined yet, but that's good\n because we dont' want to kick off routing right away, the router\n does that later by manually calling this handleURL method with the\n url it reads of the location. But it's important this is called\n first by Backbone, because we wanna set a correct this.path value\n\n @private\n */\n handleURL(url) {\n this.path = url\n if (this.callback) {\n this.callback(url)\n }\n }\n\n start(path) {\n this.path = path\n this.history.onChange((path) => {\n this.handleURL(`/${path || ''}`)\n })\n\n this.history.start(this.options)\n }\n}\n\nexport default BrowserLocation\n","class MemoryLocation {\n constructor() {\n this.path = ''\n }\n\n getURL() {\n return this.path\n }\n\n setURL(path, options) {\n if (this.path !== path) {\n this.path = path\n this.handleURL(this.getURL(), options)\n }\n }\n\n replaceURL(path, options) {\n if (this.path !== path) {\n this.setURL(path, options)\n }\n }\n\n onChange(callback) {\n this.callback = callback\n }\n\n handleURL(url, options) {\n this.path = url\n const shouldTrigger = options?.trigger !== false\n if (this.callback && shouldTrigger) {\n this.callback(url)\n }\n }\n\n removeRoot(url) {\n return url\n }\n\n formatURL(url) {\n return url\n }\n\n start(path) {\n this.path = path\n }\n}\n\nexport default MemoryLocation\n","export const TRANSITION_REDIRECTED = 'TransitionRedirected'\n\nexport const TRANSITION_CANCELLED = 'TransitionCancelled'\n","import { clone } from './utils.js'\nimport invariant from './invariant.js'\nimport { TRANSITION_CANCELLED, TRANSITION_REDIRECTED } from './constants.js'\n\n/**\n * @typedef {import(\"./router.js\").Route} Route\n */\n\n/**\n * @typedef {Pick<Transition, 'routes' | 'pathname' | 'path' | 'params' | 'query' >} TransitionData\n */\n\n/**\n * @typedef Transition\n * @property {Route[]} routes\n * @property {string} pathname\n * @property {string} path\n * @property {Object} params\n * @property {Object} query\n * @property {TransitionData} prev\n * @property {(name: string, params?: any, query?: any) => Transition} redirectTo\n * @property {(name: string, params?: any, query?: any) => Transition} retry\n * @property {(error: string | Error) => void} cancel\n * @property {() => Promise<any>} followRedirects\n * @property {function} then\n * @property {function} catch\n * @property {boolean} noop\n * @property {boolean} isCancelled\n */\n\n/**\n * @param {*} router\n * @param {Transition} transition\n * @param {*} err\n */\nfunction runError(router, transition, err) {\n router.middleware.forEach((m) => {\n m.error && m.error(transition, err)\n })\n}\n\n/**\n * @export\n * @param {*} options\n * @return {Transition}\n */\nexport default function transition(options) {\n options = options || {}\n\n const router = options.router\n const log = router.log\n const logError = router.logError\n\n const path = options.path\n const match = options.match\n const routes = match.routes\n const params = match.params\n const pathname = match.pathname\n const query = match.query\n\n const id = options.id\n const startTime = Date.now()\n log('---')\n log('Transition #' + id, 'to', path)\n log(\n 'Transition #' + id,\n 'routes:',\n routes.map((r) => r.name),\n )\n log('Transition #' + id, 'params:', params)\n log('Transition #' + id, 'query:', query)\n\n // create the transition promise\n let resolve, reject\n const promise = new Promise(function (res, rej) {\n resolve = res\n reject = rej\n })\n\n // 1. make transition errors loud\n // 2. by adding this handler we make sure\n // we don't trigger the default 'Potentially\n // unhandled rejection' for cancellations\n promise\n .then(function () {\n log('Transition #' + id, 'completed in', Date.now() - startTime + 'ms')\n })\n .catch(function (err) {\n if (err.type !== TRANSITION_REDIRECTED && err.type !== TRANSITION_CANCELLED) {\n log('Transition #' + id, 'FAILED')\n logError(err)\n }\n })\n\n let cancelled = false\n\n const transition = {\n id,\n prev: {\n routes: clone(router.state.routes) || [],\n path: router.state.path || '',\n pathname: router.state.pathname || '',\n params: clone(router.state.params) || {},\n query: clone(router.state.query) || {},\n },\n routes: clone(routes),\n path,\n pathname,\n params: clone(params),\n query: clone(query),\n redirectTo: function (...args) {\n return router.transitionTo(...args)\n },\n retry: function () {\n return router.transitionTo(path)\n },\n cancel: function (err) {\n if (router.state.activeTransition !== transition) {\n return\n }\n\n if (transition.isCancelled) {\n return\n }\n\n router.state.activeTransition = null\n transition.isCancelled = true\n cancelled = true\n\n if (!err) {\n err = new Error(TRANSITION_CANCELLED)\n err.type = TRANSITION_CANCELLED\n }\n if (err.type === TRANSITION_CANCELLED) {\n log('Transition #' + id, 'cancelled')\n }\n if (err.type === TRANSITION_REDIRECTED) {\n log('Transition #' + id, 'redirected')\n }\n\n router.middleware.forEach((m) => {\n m.cancel && m.cancel(transition, err)\n })\n reject(err)\n },\n followRedirects: function () {\n return promise.catch(function (reason) {\n if (router.state.activeTransition) {\n return router.state.activeTransition.followRedirects()\n }\n return Promise.reject(reason)\n })\n },\n\n then: promise.then.bind(promise),\n catch: promise.catch.bind(promise),\n }\n\n router.middleware.forEach((m) => {\n m.before && m.before(transition)\n })\n\n // here we handle calls to all of the middlewares\n function callNext(i, prevResult) {\n let middleware\n let middlewareName\n // if transition has been cancelled - nothing left to do\n if (cancelled) {\n return\n }\n // done\n if (i < router.middleware.length) {\n middleware = router.middleware[i]\n middlewareName = middleware.name || 'anonymous'\n log('Transition #' + id, 'resolving middleware:', middlewareName)\n let middlewarePromise\n try {\n middlewarePromise = middleware.resolve\n ? middleware.resolve(transition, prevResult)\n : prevResult\n invariant(\n transition !== middlewarePromise,\n 'Middleware %s returned a transition which resulted in a deadlock',\n middlewareName,\n )\n } catch (err) {\n router.state.activeTransition = null\n runError(router, transition, err)\n return reject(err)\n }\n Promise.resolve(middlewarePromise)\n .then(function (result) {\n callNext(i + 1, result)\n })\n .catch(function (err) {\n log('Transition #' + id, 'resolving middleware:', middlewareName, 'FAILED')\n router.state.activeTransition = null\n runError(router, transition, err)\n reject(err)\n })\n } else {\n router.state = {\n activeTransition: null,\n routes,\n path,\n pathname,\n params,\n query,\n }\n router.middleware.forEach((m) => {\n m.done && m.done(transition)\n })\n resolve()\n }\n }\n\n if (!options.noop) {\n Promise.resolve().then(() => callNext(0))\n } else {\n resolve()\n }\n\n if (options.noop) {\n transition.noop = true\n }\n\n return transition\n}\n","import { bindEvent, unbindEvent } from './events.js'\n\n/**\n * Handle link delegation on `el` or the document,\n * and invoke `fn(e)` when clickable.\n *\n * @param {Element} el\n * @param {(e: Event, el: HTMLElement) => void} fn\n * @return {Function} dispose\n * @api public\n */\n\nexport function intercept(el, fn) {\n const cb = delegate(el, 'click', function (e, el) {\n if (clickable(e, el)) fn(e, el)\n })\n\n return function dispose() {\n unbindEvent(el, 'click', cb)\n }\n}\n\n/**\n * Delegate event `type` to links\n * and invoke `fn(e)`. A callback function\n * is returned which may be passed to `.unbind()`.\n *\n * @param {HTMLElement} el\n * @param {String} selector\n * @param {String} type\n * @param {(e: Event, el: HTMLElement) => void} fn\n * @return {Function}\n * @api public\n */\n\nfunction delegate(el, type, fn) {\n return bindEvent(el, type, function (e) {\n const el = e.target.closest('a')\n if (el) {\n fn(e, el)\n }\n })\n}\n\n/**\n * Check if `e` is clickable.\n */\n\n/**\n * @param {Event} e\n * @param {HTMLElement} el\n * @return {Boolean | undefined}\n */\nfunction clickable(e, el) {\n if (which(e) !== 1) return\n if (e.metaKey || e.ctrlKey || e.shiftKey) return\n if (e.defaultPrevented) return\n\n // check target\n if (el.target) return\n\n // check for data-bypass attribute\n if (el.getAttribute('data-bypass') !== null) return\n\n // inspect the href\n const href = el.getAttribute('href')\n if (!href || href.length === 0) return\n\n // don't handle hash links, external/absolute links, email links and javascript links\n if (/^(#|https{0,1}:\\/\\/|mailto|javascript:)/i.test(href)) return\n\n return true\n}\n\n/**\n * Event button.\n */\n\nfunction which(e) {\n e = e || window.event\n return e.which === null ? e.button : e.which\n}\n","export default function defineLogger(router, method, fn) {\n if (fn === true) return\n router[method] = typeof fn === 'function' ? fn : () => {}\n}\n","export default {\n parse(querystring) {\n return querystring.split('&').reduce((acc, pair) => {\n const parts = pair.split('=')\n acc[parts[0]] = decodeURIComponent(parts[1])\n return acc\n }, {})\n },\n\n stringify(params) {\n return Object.keys(params)\n .reduce((acc, key) => {\n if (params[key] !== undefined) {\n acc.push(key + '=' + encodeURIComponent(params[key]))\n }\n return acc\n }, [])\n .join('&')\n },\n}\n","/**\n * @param {string|RegExp} input The route pattern\n * @param {boolean} [loose] Allow open-ended matching. Ignored with `RegExp` input.\n */\nexport function parse(input, loose) {\n\tif (input instanceof RegExp) return { keys:false, pattern:input };\n\tvar c, o, tmp, ext, keys=[], pattern='', arr = input.split('/');\n\tarr[0] || arr.shift();\n\n\twhile (tmp = arr.shift()) {\n\t\tc = tmp[0];\n\t\tif (c === '*') {\n\t\t\tkeys.push(c);\n\t\t\tpattern += tmp[1] === '?' ? '(?:/(.*))?' : '/(.*)';\n\t\t} else if (c === ':') {\n\t\t\to = tmp.indexOf('?', 1);\n\t\t\text = tmp.indexOf('.', 1);\n\t\t\tkeys.push( tmp.substring(1, !!~o ? o : !!~ext ? ext : tmp.length) );\n\t\t\tpattern += !!~o && !~ext ? '(?:/([^/]+?))?' : '/([^/]+?)';\n\t\t\tif (!!~ext) pattern += (!!~o ? '?' : '') + '\\\\' + tmp.substring(ext);\n\t\t} else {\n\t\t\tpattern += '/' + tmp;\n\t\t}\n\t}\n\n\treturn {\n\t\tkeys: keys,\n\t\tpattern: new RegExp('^' + pattern + (loose ? '(?=$|\\/)' : '\\/?$'), 'i')\n\t};\n}\n\nvar RGX = /(\\/|^)([:*][^/]*?)(\\?)?(?=[/.]|$)/g;\n\n// error if key missing?\nexport function inject(route, values) {\n\treturn route.replace(RGX, (x, lead, key, optional) => {\n\t\tx = values[key=='*' ? key : key.substring(1)];\n\t\treturn x ? '/'+x : (optional || key=='*') ? '' : '/' + key;\n\t});\n}\n","import { parse } from 'regexparam'\n\nconst splatRegex = /:(\\w+)\\*/\n\nexport function patternCompiler(pattern) {\n // hack to add (partial) named splat support\n const splatMatch = splatRegex.exec(pattern)\n const normalizedPattern = splatMatch ? pattern.replace(splatRegex, '*') : pattern\n\n const { pattern: matcher, keys } = parse(normalizedPattern)\n\n const paramNames = splatMatch ? keys.map((key) => (key === '*' ? splatMatch[1] : key)) : keys\n\n return {\n matcher,\n paramNames,\n }\n}\n","/* eslint-disable array-callback-return */\nimport { pick, clone, extend, isEqual, keys } from './utils.js'\nimport functionDsl from './function-dsl.js'\nimport arrayDsl from './array-dsl.js'\nimport {\n withQuery,\n withoutQuery,\n injectParams,\n extractParams,\n extractParamNames,\n extractQuery,\n} from './path.js'\nimport BrowserLocation from './locations/browser.js'\nimport MemoryLocation from './locations/memory.js'\nimport transition from './transition.js'\nimport { intercept } from './links.js'\nimport defineLogger from './logger.js'\nimport qs from './qs.js'\nimport { patternCompiler } from './patternCompiler.js'\nimport { TRANSITION_CANCELLED, TRANSITION_REDIRECTED } from './constants.js'\n\n/**\n * @typedef {import('./function-dsl.js').routeCallback} routeCallback\n * @typedef {import('./array-dsl.js').RouteDef} RouteDef\n * @typedef {import('./transition.js').Transition} Transition\n *\n * @typedef Route\n * @property {String} name\n * @property {String} path\n * @property {Object} options\n * @property {Route[]} routes\n *\n * @typedef RouterLocation\n * @property {(url: string) => string} formatURL\n * @property {(url: string) => string} removeRoot\n * @property {(path: string, options?: Object) => void} setURL\n * @property {(path: string, options?: Object) => void} replaceURL\n * @property {(callback: (url: string) => void) => void} onChange\n * @property {() => string} getURL\n * @property {(path?: string) => void} start\n\n * @typedef {RouterLocation | 'browser' | 'memory'} LocationParam\n *\n * @typedef RouterMiddleware\n * @property {(router: Router) => void} [create]\n * @property {() => void} [destroy]\n * @property {(transition: Transition) => void} [resolve]\n * @property {(transition: Transition) => void} [before]\n * @property {(transition: Transition) => void} [after]\n * @property {(transition: Transition, error: any) => void} [error]\n * @property {(transition: Transition, error: any) => void} [cancel]\n *\n * @typedef RouterOptions\n * @property {routeCallback | RouteDef[]} [routes]\n * @property {LocationParam} [location]\n * @property {Boolean} [logError]\n * @property {Object} [qs]\n * @property {Object} [patternCompiler]\n *\n */\n\n/**\n * Create the default location.\n * This is used when no custom location is passed to\n * the listen call.\n * @param {RouterOptions} options\n * @return {RouterLocation} location\n */\nfunction createLocation(options) {\n const location = options.location\n if (typeof location !== 'string') {\n return location\n }\n if (location === 'browser') {\n const { pushState, root } = options\n return new BrowserLocation({ pushState, root })\n } else if (location === 'memory') {\n return new MemoryLocation()\n } else {\n throw new Error('Location can be `browser`, `memory` or a custom implementation')\n }\n}\n\nclass Router {\n /**\n * @param {RouterOptions} [options]\n */\n constructor(options = {}) {\n this.nextId = 1\n this.state = {}\n this.middleware = []\n this.options = extend(\n {\n location: 'browser',\n logError: true,\n qs,\n patternCompiler,\n },\n options,\n )\n defineLogger(this, 'log', this.options.log)\n defineLogger(this, 'logError', this.options.logError)\n if (options.routes) {\n this.map(options.routes)\n }\n this.location = createLocation(this.options)\n }\n\n /**\n * Add a middleware\n * @param {((transition: Transition) => void) | RouterMiddleware} middleware\n * @param {object} [options]\n * @param {number} [options.at] position to insert the middleware\n * @return {Router}\n * @api public\n */\n use(middleware, options = {}) {\n const m = typeof middleware === 'function' ? { resolve: middleware } : middleware\n typeof options.at === 'number'\n ? this.middleware.splice(options.at, 0, m)\n : this.middleware.push(m)\n m.create && m.create(this)\n return this\n }\n\n /**\n * Add the route map\n * @param {routeCallback | RouteDef[]} routes\n * @return {Router}\n * @api public\n */\n map(routes) {\n // create the route tree\n this.routes = Array.isArray(routes) ? arrayDsl(routes) : functionDsl(routes)\n\n // create the matcher list, which is like a flattened\n // list of routes = a list of all branches of the route tree\n const matchers = (this.matchers = [])\n // keep track of whether duplicate paths have been created,\n // in which case we'll warn the dev\n const dupes = {}\n // keep track of abstract routes to build index route forwarding\n const abstracts = {}\n\n eachBranch({ routes: this.routes }, [], (routes) => {\n // concatenate the paths of the list of routes\n let path = routes.reduce(\n (\n memo,\n r, // reset if there's a leading slash, otherwise concat\n ) =>\n // and keep resetting the trailing slash\n (r.path[0] === '/' ? r.path : `${memo}/${r.path}`).replace(/\\/$/, ''),\n '',\n )\n // ensure we have a leading slash\n if (path === '') {\n path = '/'\n }\n\n const lastRoute = routes[routes.length - 1]\n\n if (lastRoute.options.abstract) {\n abstracts[path] = lastRoute.name\n return\n }\n\n if (lastRoute.path === '') {\n let matcher\n matchers.some((m) => {\n if (m.path === path) {\n matcher = m\n return true\n }\n })\n\n if (matcher) {\n // remap the matcher of a parent route\n matcher.routes = routes\n } else if (abstracts[path]) {\n matchers.push({\n routes,\n name: abstracts[path],\n path,\n })\n }\n }\n\n // register routes\n matchers.push({\n routes,\n name: lastRoute.name,\n path,\n })\n\n // dupe detection\n if (dupes[path] && lastRoute.path !== '') {\n throw new Error(\n `Routes ${dupes[path]} and ${lastRoute.name} have the same url path '${path}'`,\n )\n }\n dupes[path] = lastRoute.name\n })\n\n function eachBranch(node, memo, fn) {\n node.routes.forEach((route) => {\n fn(memo.concat(route))\n\n if (route.routes.length) {\n eachBranch(route, memo.concat(route), fn)\n }\n })\n }\n\n return this\n }\n\n /**\n * Starts listening to the location changes.\n * @param {String} [path]\n * @return {Transition} initial transition\n *\n * @api public\n */\n listen(path) {\n const location = this.location\n location.start(path)\n // setup the location onChange handler\n location.onChange((url) => {\n const previousUrl = this.state.path\n this.dispatch(url).catch((err) => {\n if (err && err.type === TRANSITION_CANCELLED) {\n // reset the URL in case the transition has been cancelled\n this.location.replaceURL(previousUrl, { trigger: false })\n }\n return err\n })\n })\n // and also kick off the initial transition\n return this.dispatch(location.getURL())\n }\n\n /**\n * Transition to a different route. Passe in url or a route name followed by params and query\n * @param {String} name url or route name\n * @param {Object} [params] Optional\n * @param {Object} [query] Optional\n * @return {Transition} transition\n *\n * @api public\n */\n transitionTo(name, params, query) {\n if (this.state.activeTransition) {\n return this.replaceWith(name, params, query)\n }\n return this.doTransition('setURL', name, params, query)\n }\n\n /**\n * Like transitionTo, but doesn't leave an entry in the browser's history,\n * so clicking back will skip this route\n * @param {String} name url or route name followed by params and query\n * @param {Record<string, any>} [params]\n * @param {Record<string, any>} [query]\n * @return {Transition} transition\n *\n * @api public\n */\n replaceWith(name, params, query) {\n return this.doTransition('replaceURL', name, params, query)\n }\n\n /**\n * Create an href\n * @param {String} name target route name\n * @param {Object} [params]\n * @param {Object} [query]\n * @return {String} href\n *\n * @api public\n */\n generate(name, params, query) {\n let matcher\n\n query = query || {}\n\n this.matchers.forEach((m) => {\n if (m.name === name) {\n matcher = m\n }\n })\n\n if (!matcher) {\n throw new Error(`No route is named ${name}`)\n }\n\n const url = withQuery(this.options.qs, injectParams(matcher.path, params), query)\n return this.location.formatURL(url)\n }\n\n /**\n * Stop listening to URL changes\n * @api public\n */\n destroy() {\n if (this.location && this.location.destroy) {\n this.location.destroy()\n }\n if (this.state.activeTransition) {\n this.state.activeTransition.cancel()\n }\n this.state = {}\n this.middleware.forEach((m) => {\n m.destroy && m.destroy(this)\n })\n }\n\n /**\n * Check if the given route/params/query combo is active\n * @param {String} name target route name\n * @param {Record<string, any>} [params]\n * @param {Record<string, any>} [query]\n * @param {Boolean} [exact]\n * @return {Boolean}\n *\n * @api public\n */\n isActive(name, params, query, exact) {\n const activeRoutes = this.state.routes || []\n const activeParams = this.state.params\n const activeQuery = this.state.query\n\n let isActive =\n activeRoutes.some((route) => route.name === name) &&\n (!exact || activeRoutes[activeRoutes.length - 1].name === name)\n isActive =\n isActive && (!params || keys(params).every((key) => activeParams[key] === params[key]))\n isActive = isActive && (!query || keys(query).every((key) => activeQuery[key] === query[key]))\n\n return isActive\n }\n\n /**\n * @api private\n * @param {String} method pushState or replaceState\n * @param {String} name target route name\n * @param {Object} [params]\n * @param {Object} [query]\n * @return {Transition} transition\n */\n doTransition(method, name, params, query) {\n const previousUrl = this.location.getURL()\n\n let url = name\n if (url[0] !== '/') {\n url = this.generate(name, params, query)\n url = url.replace(/^#/, '/')\n }\n\n if (this.options.pushState) {\n url = this.location.removeRoot(url)\n }\n\n const transition = this.dispatch(url)\n\n transition.catch((err) => {\n if (err && err.type === TRANSITION_CANCELLED) {\n // reset the URL in case the transition has been cancelled\n this.location.replaceURL(previousUrl, { trigger: false })\n }\n return err\n })\n\n this.location[method](url, { trigger: false })\n\n return transition\n }\n\n /**\n * Match the path against the routes\n * @param {String} path\n * @return {Object} the list of matching routes and params\n *\n * @api private\n */\n match(path) {\n path = (path || '').replace(/\\/$/, '') || '/'\n let params\n let routes = []\n const pathWithoutQuery = withoutQuery(path)\n const { qs, patternCompiler } = this.options\n this.matchers.some((matcher) => {\n params = extractParams(matcher.path, pathWithoutQuery, patternCompiler)\n if (params) {\n routes = matcher.routes\n return true\n }\n })\n return {\n routes: routes.map(descriptor),\n params: params || {},\n pathname: pathWithoutQuery,\n query: extractQuery(qs, path) || {},\n }\n\n // clone the data (only a shallow clone of options)\n // to make sure the internal route store is not mutated\n // by the middleware. The middleware can mutate data\n // before it gets passed into the resolve middleware, but\n // only within the same transition. New transitions\n // will get to use pristine data.\n function descriptor(route) {\n return {\n name: route.name,\n path: route.path,\n params: pick(params, extractParamNames(route.path, patternCompiler)),\n options: clone(route.options),\n }\n }\n }\n\n /**\n *\n * @param {string} path\n * @returns {Transition}\n */\n dispatch(path) {\n const match = this.match(path)\n const query = match.query\n const pathname = match.pathname\n\n const activeTransition = this.state.activeTransition\n\n // if we already have an active transition with all the same\n // params - return that and don't do anything else\n if (\n activeTransition &&\n activeTransition.pathname === pathname &&\n isEqual(activeTransition.query, query)\n ) {\n return activeTransition\n }\n\n // otherwise, cancel the active transition since we're\n // redirecting (or initiating a brand new transition)\n if (activeTransition) {\n const err = new Error(TRANSITION_REDIRECTED)\n err.type = TRANSITION_REDIRECTED\n err.nextPath = path\n activeTransition.cancel(err)\n }\n\n // if there is no active transition, check if\n // this is a noop transition, in which case, return\n // a transition to respect the function signature,\n // but don't actually run any of the middleware\n if (!activeTransition) {\n if (this.state.pathname === pathname && isEqual(this.state.query, query)) {\n return transition({\n id: this.nextId++,\n path,\n match,\n noop: true,\n router: this,\n })\n }\n }\n\n const t = transition({\n id: this.nextId++,\n path,\n match,\n router: this,\n })\n\n this.state.activeTransition = t\n\n return t\n }\n\n log(...args) {\n console.info(...args)\n }\n\n logError(...args) {\n console.error(...args)\n }\n}\n\n/**\n *\n * @param {Event} event\n * @param {HTMLAnchorElement} link\n * @param {Router} router\n */\nfunction defaultClickHandler(event, link, router) {\n event.preventDefault()\n router.transitionTo(router.location.removeRoot(link.getAttribute('href')))\n}\n\n/**\n * @description Helper to intercept links when using pushState but server is not configured for it\n * Link clicks are handled via the router avoiding browser page reload\n * @param {Router} router\n * @param {HTMLElement} el\n * @param {(e: Event, link: HTMLAnchorElement, router: Router) => void} clickHandler\n * @returns {Function} dispose\n */\nfunction interceptLinks(router, el = document, clickHandler = defaultClickHandler) {\n return intercept(el, (event, link) => clickHandler(event, link, router))\n}\n\nexport { Router, interceptLinks }\n","const resolved = Promise.resolve()\nlet routeElMap = Object.create(null)\nlet routeComponentMap = Object.create(null)\nlet routePropertiesMap = Object.create(null)\n\nlet router, rootOutlet, rootOutletEl\n\n/**\n * @typedef {import(\"../transition.js\").Transition} Transition\n *\n * @typedef WCRouteDef\n * @property {string} name\n * @property {string} path\n * @property {string | Function} component\n * @property {Record<string, PropertyHook | PropertyHook[]>} [properties]\n * @property {boolean} [reuse]\n * @property {function(Transition): Promise<boolean> | boolean} [beforeEnter]\n * @property {function(Transition): Promise<boolean> | boolean} [beforeLeave]\n * @property {function(Transition): Promise<void> | void} [afterEnter]\n * @property {function(Transition): Promise<void> | void} [afterLeave]\n * @property {WCRouteDef[]} [children]\n */\n\n/**\n * @callback PropertySetter\n * @param {*} value\n * @returns {void}\n */\n\n/**\n * @typedef PropertyHook\n * @property {function(PropertySetter): void} [init]\n * @property {function(Transition, PropertySetter): void} [enter]\n * @property {function(Transition, PropertySetter): void} [leave]\n * @property {function(*, HTMLElement): void} [update]\n */\n\n/**\n * @param {*} value\n * @return {*}\n */\nfunction parseNumber(value) {\n const n = parseFloat(value)\n const isNumeric = value == n // eslint-disable-line eqeqeq\n return isNumeric ? n : value\n}\n\nfunction getFormattedValue(value, format) {\n let v = value\n if (v !== undefined) {\n if (format === 'number') {\n v = parseNumber(value)\n } else if (typeof format === 'function') {\n v = format(value)\n }\n }\n return v\n}\n\n/**\n * @param {*} value\n * @returns {PropertyHook}\n */\nexport function fromValue(value) {\n return {\n init(setValue) {\n setValue(value)\n },\n }\n}\n\n/**\n * @param {string} key\n * @param {string | Function} [format]\n * @returns {PropertyHook}\n */\nexport function fromQuery(queryKey, format) {\n return {\n enter(transition, setValue) {\n setValue(transition.query[queryKey], format)\n },\n }\n}\n\n/**\n *\n * @param {string} paramKey\n * @param {string | Function} format\n * @returns {PropertyHook}\n */\nexport function fromParam(paramKey, format) {\n return {\n enter(transition, setValue) {\n setValue(transition.params[paramKey], format)\n },\n }\n}\n\nexport function getRouteEl(route) {\n return routeElMap[route.name]\n}\n\nfunction create(instance) {\n router = instance\n rootOutlet = instance.options.outlet\n}\n\nfunction destroy() {\n router = null\n routeElMap = Object.create(null)\n routeComponentMap = Object.create(null)\n routePropertiesMap = Object.create(null)\n rootOutletEl = null\n}\n\nfunction isEqual(obj1, obj2) {\n const keys1 = Object.keys(obj1)\n return keys1.length === Object.keys(obj2).length && keys1.every((key) => obj2[key] === obj1[key])\n}\n\nfunction getOutlet(el) {\n const renderRoot = el.shadowRoot || el\n return renderRoot.querySelector(el.constructor.outlet || 'router-outlet')\n}\n\nfunction resolveRootOutlet() {\n if (rootOutletEl) return rootOutletEl\n if (!rootOutlet) return document.body\n rootOutletEl = typeof rootOutlet === 'string' ? document.querySelector(rootOutlet) : rootOutlet\n if (!rootOutletEl) {\n throw new Error(`slick-router(wc): Invalid outlet option ${rootOutlet}`)\n }\n return rootOutletEl\n}\n\nfunction getParentEl(transition, parentIndex) {\n let parent = transition.routes[parentIndex]\n while (parent) {\n if (parent.options.component) {\n return routeElMap[parent.name]\n }\n parent = transition.routes[--parentIndex]\n }\n}\n\nfunction getChangingIndex(prevRoutes, currentRoutes) {\n let index, prev, current\n const count = Math.max(prevRoutes.length, currentRoutes.length)\n for (index = 0; index < count; index++) {\n prev = prevRoutes[index]\n current = currentRoutes[index]\n if (!(prev && current) || prev.name !== current.name || !isEqual(prev.params, current.params)) {\n break\n }\n }\n return index\n}\n\nfunction runPropertyHookMethod(transition, routes, method) {\n for (let i = 0; i < routes.length; i++) {\n const { route } = routes[i]\n const propertiesData = routePropertiesMap[route.name]\n for (const { hooks, set } of Object.values(propertiesData)) {\n hooks.forEach((hook) => {\n if (typeof hook[method] === 'function') {\n hook[method](transition, set)\n }\n })\n }\n }\n}\n\nasync function runLifeCycle(transition, routes, prefix, suffix) {\n for (let i = 0; i < routes.length; i++) {\n let result\n const { route, el } = routes[i]\n const routeMethod = route.options[`${prefix}${suffix}`]\n if (typeof routeMethod === 'function') {\n result = await routeMethod(transition)\n if (result === false) {\n transition.cancel()\n }\n }\n if (transition.isCancelled) break\n const elMethod = el && el[`${prefix}Route${suffix}`]\n if (typeof elMethod === 'function') {\n result = await elMethod.call(el, transition)\n if (result === false) {\n transition.cancel()\n }\n }\n if (transition.isCancelled) break\n }\n}\n\nfunction resolveModule(value) {\n return value && value.__esModule ? value.default : value\n}\n\nfunction initPropertyHook(value) {\n if (value && typeof value === 'object') return value\n return fromValue(value)\n}\n\nfunction initProperties(route) {\n let propertiesData = routePropertiesMap[route.name]\n if (!propertiesData) {\n propertiesData = routePropertiesMap[route.name] = Object.create(null)\n const properties = route.options.properties\n if (properties) {\n for (const [name, hookOrValue] of Object.entries(properties)) {\n const hooks = Array.isArray(hookOrValue)\n ? hookOrValue.map(initPropertyHook)\n : [initPropertyHook(hookOrValue)]\n\n const set = (v, format) => {\n const propertyData = propertiesData[name]\n const newValue = getFormattedValue(v, format)\n if (propertyData.value === newValue) return\n propertyData.value = newValue\n const el = routeElMap[route.name]\n if (el) {\n el[name] = newValue\n }\n hooks.forEach((hook) => {\n if (typeof hook.update === 'function') {\n hook.update(newValue, el)\n }\n })\n }\n propertiesData[name] = { hooks, set }\n hooks.forEach((hook) => {\n if (typeof hook.init === 'function') {\n hook.init(set)\n }\n })\n }\n }\n }\n}\n\nasync function resolveRoutes(routes) {\n const result = []\n\n for (const route of routes) {\n let el = route.options.reuse ? routeElMap[route.name] : undefined\n let Component = route.options.component\n if (!el && Component) {\n if (typeof Component === 'function' && !(Component.prototype instanceof HTMLElement)) {\n Component =\n routeComponentMap[route.name] ||\n (routeComponentMap[route.name] = resolveModule(await Component(route)))\n }\n el = typeof Component === 'string' ? document.createElement(Component) : new Component()\n routeElMap[route.name] = el\n el.$router = router\n }\n\n initProperties(route)\n\n result.push({ el, route })\n }\n return result\n}\n\nfunction applyProperties(el, route) {\n const propertiesData = routePropertiesMap[route.name]\n Object.entries(propertiesData).forEach(([name, { value }]) => {\n el[name] = value\n })\n}\n\nconst removedEls = new WeakSet()\nconst outletCurrentEl = new WeakMap()\n\nasync function renderElements(transition, activated, changingIndex) {\n // set properties of not activated elements\n const { path, pathname, routes, params, query } = transition\n const routeState = { path, pathname, routes, params, query }\n for (let k = 0; k < changingIndex; k++) {\n const route = transition.routes[k]\n const el = routeElMap[route.name]\n if (el) {\n el.$route = routeState\n applyProperties(el, route)\n }\n }\n for (let i = 0; i < activated.length; i++) {\n const { el, route } = activated[i]\n if (el) {\n const parentEl = getParentEl(transition, changingIndex + i - 1)\n const outletEl = parentEl ? getOutlet(parentEl) : resolveRootOutlet()\n if (outletEl) {\n const currentEl = outletCurrentEl.get(outletEl) || outletEl.firstElementChild\n if (currentEl) {\n outletEl.removeChild(currentEl)\n removedEls.add(currentEl)\n }\n el.$route = routeState\n applyProperties(el, route)\n outletEl.appendChild(el)\n outletCurrentEl.set(outletEl, el)\n await (el.updateComplete || resolved)\n }\n }\n }\n}\n\nfunction updateDOMTree(activated, deactivated) {\n let parentElRemoved\n for (let routeIndex = deactivated.length - 1; routeIndex >= 0; routeIndex--) {\n const { route, el } = deactivated[routeIndex]\n if (!activated.some(({ route: activeRoute }) => activeRoute.name === route.name)) {\n if (el) {\n // removes only the parent el from the deactivated els\n // and don't remove elements that were queued to be removed\n // necessary for lazy removal done in animations\n if (!parentElRemoved && !removedEls.has(el)) el.remove()\n parentElRemoved = true\n }\n routeElMap[route.name] = undefined\n }\n }\n}\n\nasync function resolve(transition) {\n const prevRoutes = transition.prev.routes\n const changingIndex = getChangingIndex(prevRoutes, transition.routes)\n const deactivated = []\n\n // deactivate previous routes from child to parent\n for (let routeIndex = prevRoutes.length - 1; routeIndex >= changingIndex; routeIndex--) {\n const route = prevRoutes[routeIndex]\n deactivated.push({ el: routeElMap[route.name], route })\n }\n\n await runLifeCycle(transition, deactivated, 'before', 'Leave')\n\n if (transition.isCancelled) return\n\n const activated = await resolveRoutes(transition.routes.slice(changingIndex))\n\n await runLifeCycle(transition, activated, 'before', 'Enter')\n\n if (transition.isCancelled) return\n\n runPropertyHookMethod(transition, activated, 'enter')\n\n await renderElements(transition, activated, changingIndex)\n\n updateDOMTree(activated, deactivated)\n\n transition.activated = activated\n transition.deactivated = deactivated\n}\n\nfunction done(transition) {\n runPropertyHookMethod(transition, transition.deactivated, 'leave')\n runLifeCycle(transition, transition.deactivated, 'after', 'Leave')\n runLifeCycle(transition, transition.activated, 'after', 'Enter')\n}\n\nexport const wc = {\n create,\n destroy,\n resolve,\n done,\n}\n","const routerLinksData = Symbol('routerLinksData')\nconst linkContainers = new Set()\nlet router\n\n/**\n * @callback RoutePropCallback\n * @param {string} routeName\n * @param {HTMLElement} routeEl\n * @return {Record<string, any>}\n *\n * @typedef RouterLinksOptions\n * @property {Record<string, any> | RoutePropCallback} [params]\n * @property {Record<string, any> | RoutePropCallback} [query]\n * @property {string} [event='click']\n */\n\n// Make a event delegation handler for the given `eventName` and `selector`\n// and attach it to `el`.\n// If selector is empty, the listener will be bound to `el`. If not, a\n// new handler that will recursively traverse up the event target's DOM\n// hierarchy looking for a node that matches the selector. If one is found,\n// the event's `delegateTarget` property is set to it and the return the\n// result of calling bound `listener` with the parameters given to the\n// handler.\n\n/**\n * @param {HTMLElement} el\n * @param {string} eventName\n * @param {string} selector\n * @param {Function} listener\n * @param {*} context\n * @return {Function}\n */\nconst delegate = function (el, eventName, selector, listener, context) {\n const handler = function (e) {\n let node = e.target\n for (; node && node !== el; node = node.parentNode) {\n if (node.matches && node.matches(selector)) {\n e.selectorTarget = node\n listener.call(context, e)\n }\n }\n }\n\n handler.eventName = eventName\n el.addEventListener(eventName, handler, false)\n return handler\n}\n\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey)\n}\n\nconst undelegate = function (el, handler) {\n const eventName = handler.eventName\n el.removeEventListener(eventName, handler, false)\n}\n\nconst camelize = (str) => {\n if (str.indexOf('-') === -1) return str\n const words = str.split('-')\n let result = ''\n for (let i = 0; i < words.length; i++) {\n const word = words[i]\n result += i ? word.charAt(0).toUpperCase() + word.slice(1) : word\n }\n return result\n}\n\nfunction mutationHandler(mutations, observer) {\n mutations.forEach(function (mutation) {\n if (mutation.type === 'attributes') {\n const attr = mutation.attributeName\n if (attr.indexOf('param-') === 0 || attr.indexOf('query-') === 0) {\n updateLink(mutation.target, observer.rootEl)\n }\n } else {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === 1) {\n if (node.getAttribute('route')) updateLink(node, observer.rootEl)\n createLinks(observer.rootEl, node)\n }\n })\n }\n })\n}\n\nconst elementsObserverConfig = { childList: true, subtree: true, attributes: true }\n\nfunction getAttributeValues(el, prefix, result) {\n const attributes = el.attributes\n\n for (let i = 0; i < attributes.length; i++) {\n const attr = attributes[i]\n if (attr.name.indexOf(prefix) === 0) {\n const paramName = camelize(attr.name.slice(prefix.length))\n result[paramName] = attr.value\n }\n }\n return result\n}\n\nfunction getDefaults(rootEl, routeName, propName, routeEl, options) {\n let result = options[propName]\n if (typeof result === 'function') result = result.call(rootEl, routeName, routeEl)\n return result || {}\n}\n\nfunction getRouteProp(rootEl, routeName, routeEl, propName, attrPrefix) {\n const options = rootEl[routerLinksData].options\n const defaults = getDefaults(rootEl, routeName, propName, routeEl, options)\n getAttributeValues(rootEl, attrPrefix, defaults)\n return getAttributeValues(routeEl, attrPrefix, defaults)\n}\n\nfunction updateActiveClass(el, routeName, params, query) {\n const activeClass = el.hasAttribute('active-class') ? el.getAttribute('active-class') : 'active'\n if (activeClass) {\n const isActive = router.isActive(routeName, params, query, el.hasAttribute('exact'))\n el.classList.toggle(activeClass, isActive)\n }\n}\n\nfunction updateLink(el, rootEl) {\n const routeName = el.getAttribute('route')\n if (!routeName) return\n const params = getRouteProp(rootEl, routeName, el, 'params', 'param-')\n const query = getRouteProp(rootEl, routeName, el, 'query', 'query-')\n try {\n const href = router.generate(routeName, params, query)\n const anchorEl = el.tagName === 'A' ? el : el.querySelector('a')\n if (anchorEl) anchorEl.setAttribute('href', href)\n if (!router.state.activeTransition) {\n updateActiveClass(el, routeName, params, query)\n }\n } catch (error) {\n console.warn(`Error generating link for \"${routeName}\": ${error}`)\n }\n}\n\n/**\n * @param {HTMLElement} rootEl\n */\nfunction createLinks(rootEl) {\n const routeEls = rootEl.querySelectorAll('[route]')\n\n routeEls.forEach((el) => {\n updateLink(el, rootEl)\n })\n}\n\n/**\n * @param {Event} e\n * @returns\n */\nfunction linkClickHandler(e) {\n if (e.type === 'click' && (e.button !== 0 || isModifiedEvent(e))) return\n e.preventDefault()\n const el = e.selectorTarget\n const routeName = el.getAttribute('route')\n if (!routeName) return\n const params = getRouteProp(this, routeName, el, 'params', 'param-')\n const query = getRouteProp(this, routeName, el, 'query', 'query-')\n const method = el.hasAttribute('replace') ? 'replaceWith' : 'transitionTo'\n router[method](routeName, params, query)\n}\n\n/**\n * @export\n * @param {HTMLElement} rootEl\n * @param {RouterLinksOptions} [options={}]\n * @return {Function}\n */\nexport function bindRouterLinks(rootEl, options = {}) {\n const observer = new MutationObserver(mutationHandler)\n\n observer.rootEl = rootEl\n rootEl[routerLinksData] = { options, observer }\n\n const eventHandler = delegate(\n rootEl,\n options.event || 'click',\n '[route]',\n linkClickHandler,\n rootEl,\n )\n createLinks(rootEl)\n observer.observe(rootEl, elementsObserverConfig)\n\n linkContainers.add(rootEl)\n\n return function () {\n linkContainers.delete(rootEl)\n undelegate(rootEl, eventHandler)\n }\n}\n\nfunction create(instance) {\n router = instance\n}\n\nfunction done() {\n linkContainers.forEach((rootEl) => {\n rootEl.querySelectorAll('[route]').forEach((el) => {\n const routeName = el.getAttribute('route')\n if (!routeName) return\n const params = getRouteProp(rootEl, routeName, el, 'params', 'param-')\n const query = getRouteProp(rootEl, routeName, el, 'query', 'query-')\n updateActiveClass(el, routeName, params, query)\n })\n })\n}\n\nexport const routerLinks = {\n create,\n done,\n}\n","import { Router as CoreRouter, interceptLinks } from './router.js'\nimport { wc, fromParam, fromQuery, fromValue, getRouteEl } from './middlewares/wc.js'\nimport { routerLinks } from './middlewares/router-links.js'\nimport './components/router-links.js'\n\n/**\n * @typedef {import(\"./middlewares/wc.js\").WCRouteDef} WCRouteDef\n * @typedef {import(\"./middlewares/wc.js\").PropertyHook} PropertyHook\n * @typedef {import(\"./transition.js\").Transition} Transition\n */\n\nclass Router extends CoreRouter {\n constructor(options) {\n super(options)\n this.use(wc)\n this.use(routerLinks)\n }\n}\n\nexport { Router, interceptLinks, fromParam, fromQuery, fromValue, getRouteEl }\n","let eventPrefix\n\nfunction trigger(name, detail) {\n window.dispatchEvent(new CustomEvent(`${eventPrefix}${name}`, { detail }))\n}\n\nexport const events = {\n create: function (router) {\n eventPrefix = router.options.eventPrefix || 'router-'\n },\n\n before: function (transition) {\n trigger('before:transition', { transition })\n },\n\n done: function (transition) {\n trigger('transition', { transition })\n },\n\n cancel: function (transition, error) {\n if (error.type !== 'TransitionRedirected') {\n trigger('abort', { transition, error })\n }\n },\n\n error: function (transition, error) {\n trigger('abort', { transition, error })\n trigger('error', { transition, error })\n },\n}\n","import { interceptLinks, Router } from 'slick-router';\n//import {Router as CoreRouter, interceptLinks} from 'slick-router/core.js';\nimport { events } from 'slick-router/middlewares/events.js';\nimport { routerLinks } from '../utils/router-links.js';\n\nimport { default as WJElement } from '../wje-element/element.js';\n\n/**\n * `Routerx` is a custom web component that represents a router in a routing system.\n * @summary This element represents a router in a routing system.\n * @documentation https://elements.webjet.sk/components/router\n * @status stable\n * @augments {WJElement}\n * @tag wje-router\n */\nexport default class Routerx extends WJElement {\n\t#routes;\n\n\t/**\n\t * Creates an instance of Routerx.\n\t * @class\n\t */\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tset routes(value) {\n\t\tthis.#routes = value;\n\t}\n\n\tget routes() {\n\t\treturn this.parseElement(this.rootElement).root;\n\t}\n\n\tget rootElement() {\n\t\tconst htmlString = this.outerHTML;\n\n\t\tconst parser = new DOMParser();\n\t\tconst htmlDocument = parser.parseFromString(htmlString, 'text/html');\n\t\treturn htmlDocument.querySelector('wje-router');\n\t}\n\n\tclassName = 'Routerx';\n\n\t/**\n\t * Returns the list of attributes to observe for changes.\n\t * @static\n\t * @returns {Array<string>}\n\t */\n\tstatic get observedAttributes() {\n\t\treturn [];\n\t}\n\n\t/**\n\t * Sets up the attributes for the component.\n\t */\n\tsetupAttributes() {\n\t\tthis.isShadowRoot = 'open';\n\t}\n\n\t/**\n\t * Sets up the router after the component is drawn.\n\t */\n\tbeforeDraw() {\n\t\tthis.router = new Router({\n\t\t\toutlet: this.outlet || 'wje-router-outlet',\n\t\t\tlog: false,\n\t\t\tlogError: false,\n\t\t\troot: this.root || '/',\n\t\t\tpushState: true,\n\t\t});\n\n\t\tthis.router.map(this.routes);\n\t\tthis.router.use(this.setBreadcrumb);\n\t\tthis.router.use(routerLinks);\n\t\tthis.router.use(events);\n\t\tthis.router.use(this.resetScrollPosition);\n\t\tthis.router.listen();\n\n\t\tthis.unbindIntercept = interceptLinks(this.router);\n\t}\n\n\t/**\n\t * Parses an element and returns an object representation.\n\t * @param {Element} element The element to parse.\n\t * @returns {object} The object representation of the element.\n\t */\n\tparseElement(element) {\n\t\tconst obj = {};\n\t\tconst attributes = element.attributes;\n\n\t\tfor (let i = 0; i < attributes.length; i++) {\n\t\t\tconst attributeName = attributes[i].name;\n\t\t\tconst attributeValue = attributes[i].value;\n\n\t\t\tif (attributeName === 'component' && attributeValue.indexOf('.js') > -1) {\n\t\t\t\t// eslint-disable-next-line jsdoc/no-bad-blocks\n\t\t\t\tobj.component = () => import(/* @vite-ignore */ attributeValue);\n\t\t\t} else {\n\t\t\t\tif (attributeName !== 'shadow') {\n\t\t\t\t\tconst camelCase = attributeName.replace(/-([a-z])/g, (g) => g[1].toUpperCase());\n\t\t\t\t\tobj[camelCase] = attributeValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst children = [];\n\t\tconst childElements = Array.from(element.children);\n\n\t\tchildElements.forEach((childElement) => {\n\t\t\tchildren.push(this.parseElement(childElement));\n\t\t});\n\n\t\tif (children.length > 0 && element.tagName === 'WJE-ROUTE') {\n\t\t\tobj.children = children;\n\t\t} else {\n\t\t\tobj.root = children;\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\t/**\n\t * Sets the breadcrumb for the transition.\n\t * @param {object} transition The transition object.\n\t */\n\tsetBreadcrumb = (transition) => {\n\t\tlet breadcrumb = [\n\t\t\t...transition.routes\n\t\t\t\t.filter((obj) => 'breadcrumb' in obj.options)\n\t\t\t\t.map((b, i) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: b.options.breadcrumbPath || b.name,\n\t\t\t\t\t\ttext:\n\t\t\t\t\t\t\tb.options.breadcrumb instanceof Function\n\t\t\t\t\t\t\t\t? b.options.breadcrumb?.(transition)\n\t\t\t\t\t\t\t\t: b.options.breadcrumb,\n\t\t\t\t\t\tparams: { ...b.params, ...transition.params },\n\t\t\t\t\t\tpath: this.router.generate(b.name, { ...b.params, ...transition.params }),\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t];\n\n\t\ttransition.breadcrumbs = breadcrumb;\n\t};\n\n\t/**\n\t * Resets the scroll position.\n\t * @param {object} transition The transition object.\n\t */\n\tresetScrollPosition = (transition) => {\n\t\twindow.scrollTo(0, 0);\n\t};\n\n\t/**\n\t * Cleans up before the component is disconnected.\n\t */\n\tbeforeDisconnect() {\n\t\tthis.unbindIntercept();\n\t\tthis.router.destroy();\n\t}\n}\n","import Routerx from './router.element.js';\n\nexport default Routerx;\n\nRouterx.define('wje-router', Routerx);\n"],"names":["isEqual","qs","path","router","transition","resolve","el","keys","routes","patternCompiler","create","done","Router","CoreRouter","routerLinks"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]}
|
|
1
|
+
{"version":3,"file":"wje-routerx.js","sources":["../node_modules/slick-router/lib/utils.js","../node_modules/slick-router/lib/invariant.js","../node_modules/slick-router/lib/function-dsl.js","../node_modules/slick-router/lib/array-dsl.js","../node_modules/slick-router/lib/path.js","../node_modules/slick-router/lib/events.js","../node_modules/slick-router/lib/locations/location-bar.js","../node_modules/slick-router/lib/locations/browser.js","../node_modules/slick-router/lib/locations/memory.js","../node_modules/slick-router/lib/constants.js","../node_modules/slick-router/lib/transition.js","../node_modules/slick-router/lib/links.js","../node_modules/slick-router/lib/logger.js","../node_modules/slick-router/lib/qs.js","../node_modules/regexparam/dist/index.mjs","../node_modules/slick-router/lib/patternCompiler.js","../node_modules/slick-router/lib/router.js","../node_modules/slick-router/lib/middlewares/wc.js","../node_modules/slick-router/lib/wc-router.js","../node_modules/slick-router/lib/middlewares/events.js","../packages/wje-router/router.element.js","../packages/wje-router/router.js"],"sourcesContent":["const assoc = (obj, attr, val) => {\n obj[attr] = val\n return obj\n}\nconst isArray = Array.isArray\n\nexport const keys = Object.keys\n\nexport const clone = (obj) => (obj ? (isArray(obj) ? obj.slice(0) : extend({}, obj)) : obj)\n\nexport const pick = (obj, attrs) =>\n attrs.reduce((acc, attr) => (obj[attr] === undefined ? acc : assoc(acc, attr, obj[attr])), {})\n\nexport const isEqual = (obj1, obj2) => {\n const keys1 = keys(obj1)\n return keys1.length === keys(obj2).length && keys1.every((key) => obj2[key] === obj1[key])\n}\n\nexport const extend = Object.assign\n","export default function invariant(condition, format, ...args) {\n if (!condition) {\n let argIndex = 0\n throw new Error('Invariant Violation: ' + format.replace(/%s/g, () => args[argIndex++]))\n }\n}\n","import invariant from './invariant.js'\n\n/**\n * @typedef {import(\"./router.js\").Route} Route\n */\n\n/**\n * @callback registerRoute\n * @param {string} name\n * @param {Object} [options]\n * @param {routeCallback} [childrenCallback]\n */\n\n/**\n * @callback routeCallback\n * @param {registerRoute} route\n */\n\n/**\n * @export\n * @param {routeCallback} callback\n * @return {Route[]}\n */\nexport default function functionDsl(callback) {\n let ancestors = []\n const matches = {}\n const names = {}\n\n callback(function route(name, options, childrenCallback) {\n let routes\n\n invariant(\n !names[name],\n 'Route names must be unique, but route \"%s\" is declared multiple times',\n name,\n )\n\n names[name] = true\n\n if (arguments.length === 1) {\n options = {}\n }\n\n if (arguments.length === 2 && typeof options === 'function') {\n childrenCallback = options\n options = {}\n }\n\n if (typeof options.path !== 'string') {\n const parts = name.split('.')\n options.path = parts[parts.length - 1]\n }\n\n // go to the next level\n if (childrenCallback) {\n ancestors = ancestors.concat(name)\n childrenCallback()\n routes = pop()\n ancestors.splice(-1)\n }\n\n // add the node to the tree\n push({\n name,\n path: options.path,\n routes: routes || [],\n options,\n })\n })\n\n function pop() {\n return matches[currentLevel()] || []\n }\n\n function push(route) {\n const level = currentLevel()\n matches[level] = matches[level] || []\n matches[level].push(route)\n }\n\n function currentLevel() {\n return ancestors.join('.')\n }\n\n return pop()\n}\n","/**\n * @typedef {import(\"./router.js\").Route} Route\n */\n\n/**\n * @typedef RouteDef\n * @property {string} name\n * @property {string} path\n * @property {RouteDef[]} children\n */\n\n/**\n * @export\n * @param {RouteDef[]} routes\n * @return {Route[]}\n */\nexport default function arrayDsl(routes) {\n const result = []\n\n routes.forEach(({ name, children, ...options }) => {\n if (typeof options.path !== 'string') {\n const parts = name.split('.')\n options.path = parts[parts.length - 1]\n }\n result.push({\n name,\n path: options.path,\n options,\n routes: children ? arrayDsl(children) : [],\n })\n })\n\n return result\n}\n","import invariant from './invariant.js'\n\nconst paramInjectMatcher = /:([a-zA-Z_$][a-zA-Z0-9_$?]*[?+*]?)/g\nconst specialParamChars = /[+*?]$/g\nconst queryMatcher = /\\?(.+)/\n\nconst _compiledPatterns = {}\n\nfunction compilePattern(pattern, compiler) {\n if (!(pattern in _compiledPatterns)) {\n _compiledPatterns[pattern] = compiler(pattern)\n }\n\n return _compiledPatterns[pattern]\n}\n\nexport function clearPatternCompilerCache() {\n for (const x in _compiledPatterns) {\n delete _compiledPatterns[x]\n }\n}\n\n/**\n * Returns an array of the names of all parameters in the given pattern.\n */\nexport function extractParamNames(pattern, compiler) {\n return compilePattern(pattern, compiler).paramNames\n}\n\n/**\n * Extracts the portions of the given URL path that match the given pattern\n * and returns an object of param name => value pairs. Returns null if the\n * pattern does not match the given path.\n */\nexport function extractParams(pattern, path, compiler) {\n const cp = compilePattern(pattern, compiler)\n const matcher = cp.matcher\n const paramNames = cp.paramNames\n const match = path.match(matcher)\n\n if (!match) {\n return null\n }\n\n const params = {}\n\n paramNames.forEach(function (paramName, index) {\n params[paramName] = match[index + 1] && decodeURIComponent(match[index + 1])\n })\n\n return params\n}\n\n/**\n * Returns a version of the given route path with params interpolated. Throws\n * if there is a dynamic segment of the route path for which there is no param.\n */\nexport function injectParams(pattern, params) {\n params = params || {}\n\n return pattern.replace(paramInjectMatcher, function (match, param) {\n const paramName = param.replace(specialParamChars, '')\n const lastChar = param.slice(-1)\n\n // If param is optional don't check for existence\n if (lastChar === '?' || lastChar === '*') {\n if (params[paramName] == null) {\n return ''\n }\n } else {\n invariant(\n params[paramName] != null,\n \"Missing '%s' parameter for path '%s'\",\n paramName,\n pattern,\n )\n }\n\n let paramValue = encodeURIComponent(params[paramName])\n if (lastChar === '*' || lastChar === '+') {\n // restore / for splats\n paramValue = paramValue.replace('%2F', '/')\n }\n return paramValue\n })\n}\n\n/**\n * Returns an object that is the result of parsing any query string contained\n * in the given path, null if the path contains no query string.\n */\nexport function extractQuery(qs, path) {\n const match = path.match(queryMatcher)\n return match && qs.parse(match[1])\n}\n\n/**\n * Returns a version of the given path with the parameters in the given\n * query merged into the query string.\n */\nexport function withQuery(qs, path, query) {\n const queryString = qs.stringify(query, { indices: false })\n\n if (queryString) {\n return withoutQuery(path) + '?' + queryString\n }\n\n return path\n}\n\n/**\n * Returns a version of the given path without the query string.\n */\nexport function withoutQuery(path) {\n return path.replace(queryMatcher, '')\n}\n","/**\n * Bind `el` event `type` to `fn`.\n *\n * @param {Element} el\n * @param {String} type\n * @param {Function} fn\n * @return {Function}\n * @api public\n */\n\nexport function bindEvent(el, type, fn) {\n el.addEventListener(type, fn)\n return fn\n}\n\n/**\n * Unbind `el` event `type`'s callback `fn`.\n *\n * @param {Element} el\n * @param {String} type\n * @param {Function} fn\n * @return {Function}\n * @api public\n */\n\nexport function unbindEvent(el, type, fn) {\n el.removeEventListener(type, fn)\n return fn\n}\n","/* eslint-disable */\n// LocationBar module extracted from Backbone.js 1.1.0\n//\n// the dependency on backbone, underscore and jquery have been removed to turn\n// this into a small standalone library for handling browser's history API\n// cross browser and with a fallback to hashchange events or polling.\n\nimport {bindEvent, unbindEvent} from '../events.js'\n\n// this is mostly original code with minor modifications\n// to avoid dependency on 3rd party libraries\n//\n// Backbone.History\n// ----------------\n\n// Handles cross-browser history management, based on either\n// [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n// [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n// and URL fragments.\nexport class History {\n constructor() {\n this.handlers = [];\n this.checkUrl = this.checkUrl.bind(this);\n this.location = window.location;\n this.history = window.history;\n }\n\n // Set up all inheritable **Backbone.History** properties and methods.\n // Are we at the app root?\n atRoot() {\n return this.location.pathname.replace(/[^\\/]$/, '$&/') === this.root;\n }\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash() {\n const match = this.location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n }\n\n // Get the cross-browser normalized URL fragment, either from the URL,\n // the hash, or the override.\n getFragment(fragment, forcePushState) {\n if (fragment == null) {\n if (this._hasPushState || !this._wantsHashChange || forcePushState) {\n fragment = decodeURI(this.location.pathname + this.location.search);\n const root = this.root.replace(trailingSlash, '');\n if (!fragment.indexOf(root)) fragment = fragment.slice(root.length);\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n }\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start(options) {\n // MODIFICATION OF ORIGINAL BACKBONE.HISTORY\n // if (History.started) throw new Error(\"LocationBar has already been started\");\n // History.started = true;\n this.started = true;\n\n // Figure out the initial configuration.\n \n const _wantsPushState = !!options.pushState;\n this.location = options.location || this.location;\n this.history = options.history || this.history;\n this.root = options.root;\n this._wantsHashChange = options.hashChange !== false; \n this._hasPushState = _wantsPushState;\n const fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = (`/${this.root}/`).replace(rootStripper, '/');\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n bindEvent(window, this._hasPushState ? 'popstate' : 'hashchange', this.checkUrl);\n\n // Determine if we need to change the base url, for a pushState link\n // opened by a non-pushState browser.\n this.fragment = fragment;\n const loc = this.location;\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && _wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n this.fragment = this.getFragment(null, true);\n this.location.replace(`${this.root}#${this.fragment}`);\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot() && loc.hash) {\n this.fragment = this.getHash().replace(routeStripper, '');\n this.history.replaceState({}, document.title, this.root + this.fragment);\n }\n\n }\n\n if (!options.silent) return this.loadUrl();\n }\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop() {\n unbindEvent(window, this._hasPushState ? 'popstate' : 'hashchange', this.checkUrl);\n this.started = false;\n }\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route(route, callback) {\n this.handlers.unshift({route, callback});\n }\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`.\n checkUrl() {\n const current = this.getFragment();\n if (current === this.fragment) return false;\n this.loadUrl();\n }\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl(fragment) {\n fragment = this.fragment = this.getFragment(fragment);\n return this.handlers.some(handler => {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n });\n }\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n update(fragment, options) {\n if (!this.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n let url = this.root + (fragment = this.getFragment(fragment || ''));\n\n // Strip the hash for matching.\n fragment = fragment.replace(pathStripper, '');\n\n if (this.fragment === fragment) return;\n this.fragment = fragment;\n\n // Don't include a trailing slash on the root.\n if (fragment === '' && url !== '/') url = url.slice(0, -1);\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._hasPushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `update` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n }\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash(location, fragment, replace) {\n if (replace) {\n const href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(`${href}#${fragment}`);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = `#${fragment}`;\n }\n }\n\n // add some features to History\n\n // a generic callback for any changes\n onChange(callback) {\n this.route(/^(.*?)$/, callback);\n } \n}\n\n// Cached regex for stripping a leading hash/slash and trailing space.\nconst routeStripper = /^[#\\/]|\\s+$/g;\n\n// Cached regex for stripping leading and trailing slashes.\nconst rootStripper = /^\\/+|\\/+$/g;\n\n// Cached regex for removing a trailing slash.\nconst trailingSlash = /\\/$/;\n\n// Cached regex for stripping urls of hash.\nconst pathStripper = /#.*$/;","import { extend } from '../utils.js'\nimport { History } from './location-bar.js'\n\n/**\n * @typedef BrowserLocationOptions\n * @property {boolean} [pushState=false] Whether to use pushState or hashchange\n * @property {string} [root='/'] The root URL path to use when using pushState\n */\n\nclass BrowserLocation {\n /**\n * @param {BrowserLocationOptions} options\n */\n constructor(options = {}) {\n this.path = options.path || ''\n\n this.options = extend(\n {\n pushState: false,\n root: '/',\n },\n options,\n )\n\n // we're using the location-bar module for actual\n // URL management\n this.history = new History()\n }\n\n /**\n * Get the current URL\n */\n\n getURL() {\n return this.path\n }\n\n /**\n * Set the current URL without triggering any events\n * back to the router. Add a new entry in browser's history.\n */\n\n setURL(path, options = {}) {\n if (this.path !== path) {\n this.path = path\n this.history.update(path, extend({ trigger: true }, options))\n }\n }\n\n /**\n * Set the current URL without triggering any events\n * back to the router. Replace the latest entry in broser's history.\n */\n\n replaceURL(path, options = {}) {\n if (this.path !== path) {\n this.path = path\n this.history.update(path, extend({ trigger: true, replace: true }, options))\n }\n }\n\n /**\n * Setup a URL change handler\n * @param {(url: string) => void} callback\n */\n onChange(callback) {\n this.callback = callback\n }\n\n /**\n * Given a path, generate a URL appending root\n * if pushState is used and # if hash state is used\n */\n formatURL(path) {\n const { root, pushState } = this.options\n if (pushState) {\n let rootURL = root\n if (path !== '') {\n rootURL = rootURL.replace(/\\/$/, '')\n }\n return rootURL + path\n } else {\n if (path[0] === '/') {\n path = path.substr(1)\n }\n return `#${path}`\n }\n }\n\n /**\n * When we use pushState with a custom root option,\n * we need to take care of removingRoot at certain points.\n * Specifically\n * - browserLocation.update() can be called with the full URL by router\n * - LocationBar expects all .update() calls to be called without root\n * - this method is public so that we could dispatch URLs without root in router\n */\n removeRoot(url) {\n const { root, pushState } = this.options\n if (pushState && root && root !== '/') {\n return url.replace(root, '')\n } else {\n return url\n }\n }\n\n /**\n * Stop listening to URL changes and link clicks\n */\n destroy() {\n this.history.stop()\n }\n\n /**\n initially, the changeCallback won't be defined yet, but that's good\n because we dont' want to kick off routing right away, the router\n does that later by manually calling this handleURL method with the\n url it reads of the location. But it's important this is called\n first by Backbone, because we wanna set a correct this.path value\n\n @private\n */\n handleURL(url) {\n this.path = url\n if (this.callback) {\n this.callback(url)\n }\n }\n\n start(path) {\n this.path = path\n this.history.onChange((path) => {\n this.handleURL(`/${path || ''}`)\n })\n\n this.history.start(this.options)\n }\n}\n\nexport default BrowserLocation\n","class MemoryLocation {\n constructor() {\n this.path = ''\n }\n\n getURL() {\n return this.path\n }\n\n setURL(path, options) {\n if (this.path !== path) {\n this.path = path\n this.handleURL(this.getURL(), options)\n }\n }\n\n replaceURL(path, options) {\n if (this.path !== path) {\n this.setURL(path, options)\n }\n }\n\n onChange(callback) {\n this.callback = callback\n }\n\n handleURL(url, options) {\n this.path = url\n const shouldTrigger = options?.trigger !== false\n if (this.callback && shouldTrigger) {\n this.callback(url)\n }\n }\n\n removeRoot(url) {\n return url\n }\n\n formatURL(url) {\n return url\n }\n\n start(path) {\n this.path = path\n }\n}\n\nexport default MemoryLocation\n","export const TRANSITION_REDIRECTED = 'TransitionRedirected'\n\nexport const TRANSITION_CANCELLED = 'TransitionCancelled'\n","import { clone } from './utils.js'\nimport invariant from './invariant.js'\nimport { TRANSITION_CANCELLED, TRANSITION_REDIRECTED } from './constants.js'\n\n/**\n * @typedef {import(\"./router.js\").Route} Route\n */\n\n/**\n * @typedef {Pick<Transition, 'routes' | 'pathname' | 'path' | 'params' | 'query' >} TransitionData\n */\n\n/**\n * @typedef Transition\n * @property {Route[]} routes\n * @property {string} pathname\n * @property {string} path\n * @property {Object} params\n * @property {Object} query\n * @property {TransitionData} prev\n * @property {(name: string, params?: any, query?: any) => Transition} redirectTo\n * @property {(name: string, params?: any, query?: any) => Transition} retry\n * @property {(error: string | Error) => void} cancel\n * @property {() => Promise<any>} followRedirects\n * @property {function} then\n * @property {function} catch\n * @property {boolean} noop\n * @property {boolean} isCancelled\n */\n\n/**\n * @param {*} router\n * @param {Transition} transition\n * @param {*} err\n */\nfunction runError(router, transition, err) {\n router.middleware.forEach((m) => {\n m.error && m.error(transition, err)\n })\n}\n\n/**\n * @export\n * @param {*} options\n * @return {Transition}\n */\nexport default function transition(options) {\n options = options || {}\n\n const router = options.router\n const log = router.log\n const logError = router.logError\n\n const path = options.path\n const match = options.match\n const routes = match.routes\n const params = match.params\n const pathname = match.pathname\n const query = match.query\n\n const id = options.id\n const startTime = Date.now()\n log('---')\n log('Transition #' + id, 'to', path)\n log(\n 'Transition #' + id,\n 'routes:',\n routes.map((r) => r.name),\n )\n log('Transition #' + id, 'params:', params)\n log('Transition #' + id, 'query:', query)\n\n // create the transition promise\n let resolve, reject\n const promise = new Promise(function (res, rej) {\n resolve = res\n reject = rej\n })\n\n // 1. make transition errors loud\n // 2. by adding this handler we make sure\n // we don't trigger the default 'Potentially\n // unhandled rejection' for cancellations\n promise\n .then(function () {\n log('Transition #' + id, 'completed in', Date.now() - startTime + 'ms')\n })\n .catch(function (err) {\n if (err.type !== TRANSITION_REDIRECTED && err.type !== TRANSITION_CANCELLED) {\n log('Transition #' + id, 'FAILED')\n logError(err)\n }\n })\n\n let cancelled = false\n\n const transition = {\n id,\n prev: {\n routes: clone(router.state.routes) || [],\n path: router.state.path || '',\n pathname: router.state.pathname || '',\n params: clone(router.state.params) || {},\n query: clone(router.state.query) || {},\n },\n routes: clone(routes),\n path,\n pathname,\n params: clone(params),\n query: clone(query),\n redirectTo: function (...args) {\n return router.transitionTo(...args)\n },\n retry: function () {\n return router.transitionTo(path)\n },\n cancel: function (err) {\n if (router.state.activeTransition !== transition) {\n return\n }\n\n if (transition.isCancelled) {\n return\n }\n\n router.state.activeTransition = null\n transition.isCancelled = true\n cancelled = true\n\n if (!err) {\n err = new Error(TRANSITION_CANCELLED)\n err.type = TRANSITION_CANCELLED\n }\n if (err.type === TRANSITION_CANCELLED) {\n log('Transition #' + id, 'cancelled')\n }\n if (err.type === TRANSITION_REDIRECTED) {\n log('Transition #' + id, 'redirected')\n }\n\n router.middleware.forEach((m) => {\n m.cancel && m.cancel(transition, err)\n })\n reject(err)\n },\n followRedirects: function () {\n return promise.catch(function (reason) {\n if (router.state.activeTransition) {\n return router.state.activeTransition.followRedirects()\n }\n return Promise.reject(reason)\n })\n },\n\n then: promise.then.bind(promise),\n catch: promise.catch.bind(promise),\n }\n\n router.middleware.forEach((m) => {\n m.before && m.before(transition)\n })\n\n // here we handle calls to all of the middlewares\n function callNext(i, prevResult) {\n let middleware\n let middlewareName\n // if transition has been cancelled - nothing left to do\n if (cancelled) {\n return\n }\n // done\n if (i < router.middleware.length) {\n middleware = router.middleware[i]\n middlewareName = middleware.name || 'anonymous'\n log('Transition #' + id, 'resolving middleware:', middlewareName)\n let middlewarePromise\n try {\n middlewarePromise = middleware.resolve\n ? middleware.resolve(transition, prevResult)\n : prevResult\n invariant(\n transition !== middlewarePromise,\n 'Middleware %s returned a transition which resulted in a deadlock',\n middlewareName,\n )\n } catch (err) {\n router.state.activeTransition = null\n runError(router, transition, err)\n return reject(err)\n }\n Promise.resolve(middlewarePromise)\n .then(function (result) {\n callNext(i + 1, result)\n })\n .catch(function (err) {\n log('Transition #' + id, 'resolving middleware:', middlewareName, 'FAILED')\n router.state.activeTransition = null\n runError(router, transition, err)\n reject(err)\n })\n } else {\n router.state = {\n activeTransition: null,\n routes,\n path,\n pathname,\n params,\n query,\n }\n router.middleware.forEach((m) => {\n m.done && m.done(transition)\n })\n resolve()\n }\n }\n\n if (!options.noop) {\n Promise.resolve().then(() => callNext(0))\n } else {\n resolve()\n }\n\n if (options.noop) {\n transition.noop = true\n }\n\n return transition\n}\n","import { bindEvent, unbindEvent } from './events.js'\n\n/**\n * Handle link delegation on `el` or the document,\n * and invoke `fn(e)` when clickable.\n *\n * @param {Element} el\n * @param {(e: Event, el: HTMLElement) => void} fn\n * @return {Function} dispose\n * @api public\n */\n\nexport function intercept(el, fn) {\n const cb = delegate(el, 'click', function (e, el) {\n if (clickable(e, el)) fn(e, el)\n })\n\n return function dispose() {\n unbindEvent(el, 'click', cb)\n }\n}\n\n/**\n * Delegate event `type` to links\n * and invoke `fn(e)`. A callback function\n * is returned which may be passed to `.unbind()`.\n *\n * @param {HTMLElement} el\n * @param {String} selector\n * @param {String} type\n * @param {(e: Event, el: HTMLElement) => void} fn\n * @return {Function}\n * @api public\n */\n\nfunction delegate(el, type, fn) {\n return bindEvent(el, type, function (e) {\n const el = e.target.closest('a')\n if (el) {\n fn(e, el)\n }\n })\n}\n\n/**\n * Check if `e` is clickable.\n */\n\n/**\n * @param {Event} e\n * @param {HTMLElement} el\n * @return {Boolean | undefined}\n */\nfunction clickable(e, el) {\n if (which(e) !== 1) return\n if (e.metaKey || e.ctrlKey || e.shiftKey) return\n if (e.defaultPrevented) return\n\n // check target\n if (el.target) return\n\n // check for data-bypass attribute\n if (el.getAttribute('data-bypass') !== null) return\n\n // inspect the href\n const href = el.getAttribute('href')\n if (!href || href.length === 0) return\n\n // don't handle hash links, external/absolute links, email links and javascript links\n if (/^(#|https{0,1}:\\/\\/|mailto|javascript:)/i.test(href)) return\n\n return true\n}\n\n/**\n * Event button.\n */\n\nfunction which(e) {\n e = e || window.event\n return e.which === null ? e.button : e.which\n}\n","export default function defineLogger(router, method, fn) {\n if (fn === true) return\n router[method] = typeof fn === 'function' ? fn : () => {}\n}\n","export default {\n parse(querystring) {\n return querystring.split('&').reduce((acc, pair) => {\n const parts = pair.split('=')\n acc[parts[0]] = decodeURIComponent(parts[1])\n return acc\n }, {})\n },\n\n stringify(params) {\n return Object.keys(params)\n .reduce((acc, key) => {\n if (params[key] !== undefined) {\n acc.push(key + '=' + encodeURIComponent(params[key]))\n }\n return acc\n }, [])\n .join('&')\n },\n}\n","/**\n * @param {string|RegExp} input The route pattern\n * @param {boolean} [loose] Allow open-ended matching. Ignored with `RegExp` input.\n */\nexport function parse(input, loose) {\n\tif (input instanceof RegExp) return { keys:false, pattern:input };\n\tvar c, o, tmp, ext, keys=[], pattern='', arr = input.split('/');\n\tarr[0] || arr.shift();\n\n\twhile (tmp = arr.shift()) {\n\t\tc = tmp[0];\n\t\tif (c === '*') {\n\t\t\tkeys.push(c);\n\t\t\tpattern += tmp[1] === '?' ? '(?:/(.*))?' : '/(.*)';\n\t\t} else if (c === ':') {\n\t\t\to = tmp.indexOf('?', 1);\n\t\t\text = tmp.indexOf('.', 1);\n\t\t\tkeys.push( tmp.substring(1, !!~o ? o : !!~ext ? ext : tmp.length) );\n\t\t\tpattern += !!~o && !~ext ? '(?:/([^/]+?))?' : '/([^/]+?)';\n\t\t\tif (!!~ext) pattern += (!!~o ? '?' : '') + '\\\\' + tmp.substring(ext);\n\t\t} else {\n\t\t\tpattern += '/' + tmp;\n\t\t}\n\t}\n\n\treturn {\n\t\tkeys: keys,\n\t\tpattern: new RegExp('^' + pattern + (loose ? '(?=$|\\/)' : '\\/?$'), 'i')\n\t};\n}\n\nvar RGX = /(\\/|^)([:*][^/]*?)(\\?)?(?=[/.]|$)/g;\n\n// error if key missing?\nexport function inject(route, values) {\n\treturn route.replace(RGX, (x, lead, key, optional) => {\n\t\tx = values[key=='*' ? key : key.substring(1)];\n\t\treturn x ? '/'+x : (optional || key=='*') ? '' : '/' + key;\n\t});\n}\n","import { parse } from 'regexparam'\n\nconst splatRegex = /:(\\w+)\\*/\n\nexport function patternCompiler(pattern) {\n // hack to add (partial) named splat support\n const splatMatch = splatRegex.exec(pattern)\n const normalizedPattern = splatMatch ? pattern.replace(splatRegex, '*') : pattern\n\n const { pattern: matcher, keys } = parse(normalizedPattern)\n\n const paramNames = splatMatch ? keys.map((key) => (key === '*' ? splatMatch[1] : key)) : keys\n\n return {\n matcher,\n paramNames,\n }\n}\n","/* eslint-disable array-callback-return */\nimport { pick, clone, extend, isEqual, keys } from './utils.js'\nimport functionDsl from './function-dsl.js'\nimport arrayDsl from './array-dsl.js'\nimport {\n withQuery,\n withoutQuery,\n injectParams,\n extractParams,\n extractParamNames,\n extractQuery,\n} from './path.js'\nimport BrowserLocation from './locations/browser.js'\nimport MemoryLocation from './locations/memory.js'\nimport transition from './transition.js'\nimport { intercept } from './links.js'\nimport defineLogger from './logger.js'\nimport qs from './qs.js'\nimport { patternCompiler } from './patternCompiler.js'\nimport { TRANSITION_CANCELLED, TRANSITION_REDIRECTED } from './constants.js'\n\n/**\n * @typedef {import('./function-dsl.js').routeCallback} routeCallback\n * @typedef {import('./array-dsl.js').RouteDef} RouteDef\n * @typedef {import('./transition.js').Transition} Transition\n *\n * @typedef Route\n * @property {String} name\n * @property {String} path\n * @property {Object} options\n * @property {Route[]} routes\n *\n * @typedef RouterLocation\n * @property {(url: string) => string} formatURL\n * @property {(url: string) => string} removeRoot\n * @property {(path: string, options?: Object) => void} setURL\n * @property {(path: string, options?: Object) => void} replaceURL\n * @property {(callback: (url: string) => void) => void} onChange\n * @property {() => string} getURL\n * @property {(path?: string) => void} start\n\n * @typedef {RouterLocation | 'browser' | 'memory'} LocationParam\n *\n * @typedef RouterMiddleware\n * @property {(router: Router) => void} [create]\n * @property {() => void} [destroy]\n * @property {(transition: Transition) => void} [resolve]\n * @property {(transition: Transition) => void} [before]\n * @property {(transition: Transition) => void} [after]\n * @property {(transition: Transition, error: any) => void} [error]\n * @property {(transition: Transition, error: any) => void} [cancel]\n *\n * @typedef RouterOptions\n * @property {routeCallback | RouteDef[]} [routes]\n * @property {LocationParam} [location]\n * @property {Boolean} [logError]\n * @property {Object} [qs]\n * @property {Object} [patternCompiler]\n *\n */\n\n/**\n * Create the default location.\n * This is used when no custom location is passed to\n * the listen call.\n * @param {RouterOptions} options\n * @return {RouterLocation} location\n */\nfunction createLocation(options) {\n const location = options.location\n if (typeof location !== 'string') {\n return location\n }\n if (location === 'browser') {\n const { pushState, root } = options\n return new BrowserLocation({ pushState, root })\n } else if (location === 'memory') {\n return new MemoryLocation()\n } else {\n throw new Error('Location can be `browser`, `memory` or a custom implementation')\n }\n}\n\nclass Router {\n /**\n * @param {RouterOptions} [options]\n */\n constructor(options = {}) {\n this.nextId = 1\n this.state = {}\n this.middleware = []\n this.options = extend(\n {\n location: 'browser',\n logError: true,\n qs,\n patternCompiler,\n },\n options,\n )\n defineLogger(this, 'log', this.options.log)\n defineLogger(this, 'logError', this.options.logError)\n if (options.routes) {\n this.map(options.routes)\n }\n this.location = createLocation(this.options)\n }\n\n /**\n * Add a middleware\n * @param {((transition: Transition) => void) | RouterMiddleware} middleware\n * @param {object} [options]\n * @param {number} [options.at] position to insert the middleware\n * @return {Router}\n * @api public\n */\n use(middleware, options = {}) {\n const m = typeof middleware === 'function' ? { resolve: middleware } : middleware\n typeof options.at === 'number'\n ? this.middleware.splice(options.at, 0, m)\n : this.middleware.push(m)\n m.create && m.create(this)\n return this\n }\n\n /**\n * Add the route map\n * @param {routeCallback | RouteDef[]} routes\n * @return {Router}\n * @api public\n */\n map(routes) {\n // create the route tree\n this.routes = Array.isArray(routes) ? arrayDsl(routes) : functionDsl(routes)\n\n // create the matcher list, which is like a flattened\n // list of routes = a list of all branches of the route tree\n const matchers = (this.matchers = [])\n // keep track of whether duplicate paths have been created,\n // in which case we'll warn the dev\n const dupes = {}\n // keep track of abstract routes to build index route forwarding\n const abstracts = {}\n\n eachBranch({ routes: this.routes }, [], (routes) => {\n // concatenate the paths of the list of routes\n let path = routes.reduce(\n (\n memo,\n r, // reset if there's a leading slash, otherwise concat\n ) =>\n // and keep resetting the trailing slash\n (r.path[0] === '/' ? r.path : `${memo}/${r.path}`).replace(/\\/$/, ''),\n '',\n )\n // ensure we have a leading slash\n if (path === '') {\n path = '/'\n }\n\n const lastRoute = routes[routes.length - 1]\n\n if (lastRoute.options.abstract) {\n abstracts[path] = lastRoute.name\n return\n }\n\n if (lastRoute.path === '') {\n let matcher\n matchers.some((m) => {\n if (m.path === path) {\n matcher = m\n return true\n }\n })\n\n if (matcher) {\n // remap the matcher of a parent route\n matcher.routes = routes\n } else if (abstracts[path]) {\n matchers.push({\n routes,\n name: abstracts[path],\n path,\n })\n }\n }\n\n // register routes\n matchers.push({\n routes,\n name: lastRoute.name,\n path,\n })\n\n // dupe detection\n if (dupes[path] && lastRoute.path !== '') {\n throw new Error(\n `Routes ${dupes[path]} and ${lastRoute.name} have the same url path '${path}'`,\n )\n }\n dupes[path] = lastRoute.name\n })\n\n function eachBranch(node, memo, fn) {\n node.routes.forEach((route) => {\n fn(memo.concat(route))\n\n if (route.routes.length) {\n eachBranch(route, memo.concat(route), fn)\n }\n })\n }\n\n return this\n }\n\n /**\n * Starts listening to the location changes.\n * @param {String} [path]\n * @return {Transition} initial transition\n *\n * @api public\n */\n listen(path) {\n const location = this.location\n location.start(path)\n // setup the location onChange handler\n location.onChange((url) => {\n const previousUrl = this.state.path\n this.dispatch(url).catch((err) => {\n if (err && err.type === TRANSITION_CANCELLED) {\n // reset the URL in case the transition has been cancelled\n this.location.replaceURL(previousUrl, { trigger: false })\n }\n return err\n })\n })\n // and also kick off the initial transition\n return this.dispatch(location.getURL())\n }\n\n /**\n * Transition to a different route. Passe in url or a route name followed by params and query\n * @param {String} name url or route name\n * @param {Object} [params] Optional\n * @param {Object} [query] Optional\n * @return {Transition} transition\n *\n * @api public\n */\n transitionTo(name, params, query) {\n if (this.state.activeTransition) {\n return this.replaceWith(name, params, query)\n }\n return this.doTransition('setURL', name, params, query)\n }\n\n /**\n * Like transitionTo, but doesn't leave an entry in the browser's history,\n * so clicking back will skip this route\n * @param {String} name url or route name followed by params and query\n * @param {Record<string, any>} [params]\n * @param {Record<string, any>} [query]\n * @return {Transition} transition\n *\n * @api public\n */\n replaceWith(name, params, query) {\n return this.doTransition('replaceURL', name, params, query)\n }\n\n /**\n * Create an href\n * @param {String} name target route name\n * @param {Object} [params]\n * @param {Object} [query]\n * @return {String} href\n *\n * @api public\n */\n generate(name, params, query) {\n let matcher\n\n query = query || {}\n\n this.matchers.forEach((m) => {\n if (m.name === name) {\n matcher = m\n }\n })\n\n if (!matcher) {\n throw new Error(`No route is named ${name}`)\n }\n\n const url = withQuery(this.options.qs, injectParams(matcher.path, params), query)\n return this.location.formatURL(url)\n }\n\n /**\n * Stop listening to URL changes\n * @api public\n */\n destroy() {\n if (this.location && this.location.destroy) {\n this.location.destroy()\n }\n if (this.state.activeTransition) {\n this.state.activeTransition.cancel()\n }\n this.state = {}\n this.middleware.forEach((m) => {\n m.destroy && m.destroy(this)\n })\n }\n\n /**\n * Check if the given route/params/query combo is active\n * @param {String} name target route name\n * @param {Record<string, any>} [params]\n * @param {Record<string, any>} [query]\n * @param {Boolean} [exact]\n * @return {Boolean}\n *\n * @api public\n */\n isActive(name, params, query, exact) {\n const activeRoutes = this.state.routes || []\n const activeParams = this.state.params\n const activeQuery = this.state.query\n\n let isActive =\n activeRoutes.some((route) => route.name === name) &&\n (!exact || activeRoutes[activeRoutes.length - 1].name === name)\n isActive =\n isActive && (!params || keys(params).every((key) => activeParams[key] === params[key]))\n isActive = isActive && (!query || keys(query).every((key) => activeQuery[key] === query[key]))\n\n return isActive\n }\n\n /**\n * @api private\n * @param {String} method pushState or replaceState\n * @param {String} name target route name\n * @param {Object} [params]\n * @param {Object} [query]\n * @return {Transition} transition\n */\n doTransition(method, name, params, query) {\n const previousUrl = this.location.getURL()\n\n let url = name\n if (url[0] !== '/') {\n url = this.generate(name, params, query)\n url = url.replace(/^#/, '/')\n }\n\n if (this.options.pushState) {\n url = this.location.removeRoot(url)\n }\n\n const transition = this.dispatch(url)\n\n transition.catch((err) => {\n if (err && err.type === TRANSITION_CANCELLED) {\n // reset the URL in case the transition has been cancelled\n this.location.replaceURL(previousUrl, { trigger: false })\n }\n return err\n })\n\n this.location[method](url, { trigger: false })\n\n return transition\n }\n\n /**\n * Match the path against the routes\n * @param {String} path\n * @return {Object} the list of matching routes and params\n *\n * @api private\n */\n match(path) {\n path = (path || '').replace(/\\/$/, '') || '/'\n let params\n let routes = []\n const pathWithoutQuery = withoutQuery(path)\n const { qs, patternCompiler } = this.options\n this.matchers.some((matcher) => {\n params = extractParams(matcher.path, pathWithoutQuery, patternCompiler)\n if (params) {\n routes = matcher.routes\n return true\n }\n })\n return {\n routes: routes.map(descriptor),\n params: params || {},\n pathname: pathWithoutQuery,\n query: extractQuery(qs, path) || {},\n }\n\n // clone the data (only a shallow clone of options)\n // to make sure the internal route store is not mutated\n // by the middleware. The middleware can mutate data\n // before it gets passed into the resolve middleware, but\n // only within the same transition. New transitions\n // will get to use pristine data.\n function descriptor(route) {\n return {\n name: route.name,\n path: route.path,\n params: pick(params, extractParamNames(route.path, patternCompiler)),\n options: clone(route.options),\n }\n }\n }\n\n /**\n *\n * @param {string} path\n * @returns {Transition}\n */\n dispatch(path) {\n const match = this.match(path)\n const query = match.query\n const pathname = match.pathname\n\n const activeTransition = this.state.activeTransition\n\n // if we already have an active transition with all the same\n // params - return that and don't do anything else\n if (\n activeTransition &&\n activeTransition.pathname === pathname &&\n isEqual(activeTransition.query, query)\n ) {\n return activeTransition\n }\n\n // otherwise, cancel the active transition since we're\n // redirecting (or initiating a brand new transition)\n if (activeTransition) {\n const err = new Error(TRANSITION_REDIRECTED)\n err.type = TRANSITION_REDIRECTED\n err.nextPath = path\n activeTransition.cancel(err)\n }\n\n // if there is no active transition, check if\n // this is a noop transition, in which case, return\n // a transition to respect the function signature,\n // but don't actually run any of the middleware\n if (!activeTransition) {\n if (this.state.pathname === pathname && isEqual(this.state.query, query)) {\n return transition({\n id: this.nextId++,\n path,\n match,\n noop: true,\n router: this,\n })\n }\n }\n\n const t = transition({\n id: this.nextId++,\n path,\n match,\n router: this,\n })\n\n this.state.activeTransition = t\n\n return t\n }\n\n log(...args) {\n console.info(...args)\n }\n\n logError(...args) {\n console.error(...args)\n }\n}\n\n/**\n *\n * @param {Event} event\n * @param {HTMLAnchorElement} link\n * @param {Router} router\n */\nfunction defaultClickHandler(event, link, router) {\n event.preventDefault()\n router.transitionTo(router.location.removeRoot(link.getAttribute('href')))\n}\n\n/**\n * @description Helper to intercept links when using pushState but server is not configured for it\n * Link clicks are handled via the router avoiding browser page reload\n * @param {Router} router\n * @param {HTMLElement} el\n * @param {(e: Event, link: HTMLAnchorElement, router: Router) => void} clickHandler\n * @returns {Function} dispose\n */\nfunction interceptLinks(router, el = document, clickHandler = defaultClickHandler) {\n return intercept(el, (event, link) => clickHandler(event, link, router))\n}\n\nexport { Router, interceptLinks }\n","const resolved = Promise.resolve()\nlet routeElMap = Object.create(null)\nlet routeComponentMap = Object.create(null)\nlet routePropertiesMap = Object.create(null)\n\nlet router, rootOutlet, rootOutletEl\n\n/**\n * @typedef {import(\"../transition.js\").Transition} Transition\n *\n * @typedef WCRouteDef\n * @property {string} name\n * @property {string} path\n * @property {string | Function} component\n * @property {Record<string, PropertyHook | PropertyHook[]>} [properties]\n * @property {boolean} [reuse]\n * @property {function(Transition): Promise<boolean> | boolean} [beforeEnter]\n * @property {function(Transition): Promise<boolean> | boolean} [beforeLeave]\n * @property {function(Transition): Promise<void> | void} [afterEnter]\n * @property {function(Transition): Promise<void> | void} [afterLeave]\n * @property {WCRouteDef[]} [children]\n */\n\n/**\n * @callback PropertySetter\n * @param {*} value\n * @returns {void}\n */\n\n/**\n * @typedef PropertyHook\n * @property {function(PropertySetter): void} [init]\n * @property {function(Transition, PropertySetter): void} [enter]\n * @property {function(Transition, PropertySetter): void} [leave]\n * @property {function(*, HTMLElement): void} [update]\n */\n\n/**\n * @param {*} value\n * @return {*}\n */\nfunction parseNumber(value) {\n const n = parseFloat(value)\n const isNumeric = value == n // eslint-disable-line eqeqeq\n return isNumeric ? n : value\n}\n\nfunction getFormattedValue(value, format) {\n let v = value\n if (v !== undefined) {\n if (format === 'number') {\n v = parseNumber(value)\n } else if (typeof format === 'function') {\n v = format(value)\n }\n }\n return v\n}\n\n/**\n * @param {*} value\n * @returns {PropertyHook}\n */\nexport function fromValue(value) {\n return {\n init(setValue) {\n setValue(value)\n },\n }\n}\n\n/**\n * @param {string} key\n * @param {string | Function} [format]\n * @returns {PropertyHook}\n */\nexport function fromQuery(queryKey, format) {\n return {\n enter(transition, setValue) {\n setValue(transition.query[queryKey], format)\n },\n }\n}\n\n/**\n *\n * @param {string} paramKey\n * @param {string | Function} format\n * @returns {PropertyHook}\n */\nexport function fromParam(paramKey, format) {\n return {\n enter(transition, setValue) {\n setValue(transition.params[paramKey], format)\n },\n }\n}\n\nexport function getRouteEl(route) {\n return routeElMap[route.name]\n}\n\nfunction create(instance) {\n router = instance\n rootOutlet = instance.options.outlet\n}\n\nfunction destroy() {\n router = null\n routeElMap = Object.create(null)\n routeComponentMap = Object.create(null)\n routePropertiesMap = Object.create(null)\n rootOutletEl = null\n}\n\nfunction isEqual(obj1, obj2) {\n const keys1 = Object.keys(obj1)\n return keys1.length === Object.keys(obj2).length && keys1.every((key) => obj2[key] === obj1[key])\n}\n\nfunction getOutlet(el) {\n const renderRoot = el.shadowRoot || el\n return renderRoot.querySelector(el.constructor.outlet || 'router-outlet')\n}\n\nfunction resolveRootOutlet() {\n if (rootOutletEl) return rootOutletEl\n if (!rootOutlet) return document.body\n rootOutletEl = typeof rootOutlet === 'string' ? document.querySelector(rootOutlet) : rootOutlet\n if (!rootOutletEl) {\n throw new Error(`slick-router(wc): Invalid outlet option ${rootOutlet}`)\n }\n return rootOutletEl\n}\n\nfunction getParentEl(transition, parentIndex) {\n let parent = transition.routes[parentIndex]\n while (parent) {\n if (parent.options.component) {\n return routeElMap[parent.name]\n }\n parent = transition.routes[--parentIndex]\n }\n}\n\nfunction getChangingIndex(prevRoutes, currentRoutes) {\n let index, prev, current\n const count = Math.max(prevRoutes.length, currentRoutes.length)\n for (index = 0; index < count; index++) {\n prev = prevRoutes[index]\n current = currentRoutes[index]\n if (!(prev && current) || prev.name !== current.name || !isEqual(prev.params, current.params)) {\n break\n }\n }\n return index\n}\n\nfunction runPropertyHookMethod(transition, routes, method) {\n for (let i = 0; i < routes.length; i++) {\n const { route } = routes[i]\n const propertiesData = routePropertiesMap[route.name]\n for (const { hooks, set } of Object.values(propertiesData)) {\n hooks.forEach((hook) => {\n if (typeof hook[method] === 'function') {\n hook[method](transition, set)\n }\n })\n }\n }\n}\n\nasync function runLifeCycle(transition, routes, prefix, suffix) {\n for (let i = 0; i < routes.length; i++) {\n let result\n const { route, el } = routes[i]\n const routeMethod = route.options[`${prefix}${suffix}`]\n if (typeof routeMethod === 'function') {\n result = await routeMethod(transition)\n if (result === false) {\n transition.cancel()\n }\n }\n if (transition.isCancelled) break\n const elMethod = el && el[`${prefix}Route${suffix}`]\n if (typeof elMethod === 'function') {\n result = await elMethod.call(el, transition)\n if (result === false) {\n transition.cancel()\n }\n }\n if (transition.isCancelled) break\n }\n}\n\nfunction resolveModule(value) {\n return value && value.__esModule ? value.default : value\n}\n\nfunction initPropertyHook(value) {\n if (value && typeof value === 'object') return value\n return fromValue(value)\n}\n\nfunction initProperties(route) {\n let propertiesData = routePropertiesMap[route.name]\n if (!propertiesData) {\n propertiesData = routePropertiesMap[route.name] = Object.create(null)\n const properties = route.options.properties\n if (properties) {\n for (const [name, hookOrValue] of Object.entries(properties)) {\n const hooks = Array.isArray(hookOrValue)\n ? hookOrValue.map(initPropertyHook)\n : [initPropertyHook(hookOrValue)]\n\n const set = (v, format) => {\n const propertyData = propertiesData[name]\n const newValue = getFormattedValue(v, format)\n if (propertyData.value === newValue) return\n propertyData.value = newValue\n const el = routeElMap[route.name]\n if (el) {\n el[name] = newValue\n }\n hooks.forEach((hook) => {\n if (typeof hook.update === 'function') {\n hook.update(newValue, el)\n }\n })\n }\n propertiesData[name] = { hooks, set }\n hooks.forEach((hook) => {\n if (typeof hook.init === 'function') {\n hook.init(set)\n }\n })\n }\n }\n }\n}\n\nasync function resolveRoutes(routes) {\n const result = []\n\n for (const route of routes) {\n let el = route.options.reuse ? routeElMap[route.name] : undefined\n let Component = route.options.component\n if (!el && Component) {\n if (typeof Component === 'function' && !(Component.prototype instanceof HTMLElement)) {\n Component =\n routeComponentMap[route.name] ||\n (routeComponentMap[route.name] = resolveModule(await Component(route)))\n }\n el = typeof Component === 'string' ? document.createElement(Component) : new Component()\n routeElMap[route.name] = el\n el.$router = router\n }\n\n initProperties(route)\n\n result.push({ el, route })\n }\n return result\n}\n\nfunction applyProperties(el, route) {\n const propertiesData = routePropertiesMap[route.name]\n Object.entries(propertiesData).forEach(([name, { value }]) => {\n el[name] = value\n })\n}\n\nconst removedEls = new WeakSet()\nconst outletCurrentEl = new WeakMap()\n\nasync function renderElements(transition, activated, changingIndex) {\n // set properties of not activated elements\n const { path, pathname, routes, params, query } = transition\n const routeState = { path, pathname, routes, params, query }\n for (let k = 0; k < changingIndex; k++) {\n const route = transition.routes[k]\n const el = routeElMap[route.name]\n if (el) {\n el.$route = routeState\n applyProperties(el, route)\n }\n }\n for (let i = 0; i < activated.length; i++) {\n const { el, route } = activated[i]\n if (el) {\n const parentEl = getParentEl(transition, changingIndex + i - 1)\n const outletEl = parentEl ? getOutlet(parentEl) : resolveRootOutlet()\n if (outletEl) {\n const currentEl = outletCurrentEl.get(outletEl) || outletEl.firstElementChild\n if (currentEl) {\n outletEl.removeChild(currentEl)\n removedEls.add(currentEl)\n }\n el.$route = routeState\n applyProperties(el, route)\n outletEl.appendChild(el)\n outletCurrentEl.set(outletEl, el)\n await (el.updateComplete || resolved)\n }\n }\n }\n}\n\nfunction updateDOMTree(activated, deactivated) {\n let parentElRemoved\n for (let routeIndex = deactivated.length - 1; routeIndex >= 0; routeIndex--) {\n const { route, el } = deactivated[routeIndex]\n if (!activated.some(({ route: activeRoute }) => activeRoute.name === route.name)) {\n if (el) {\n // removes only the parent el from the deactivated els\n // and don't remove elements that were queued to be removed\n // necessary for lazy removal done in animations\n if (!parentElRemoved && !removedEls.has(el)) el.remove()\n parentElRemoved = true\n }\n routeElMap[route.name] = undefined\n }\n }\n}\n\nasync function resolve(transition) {\n const prevRoutes = transition.prev.routes\n const changingIndex = getChangingIndex(prevRoutes, transition.routes)\n const deactivated = []\n\n // deactivate previous routes from child to parent\n for (let routeIndex = prevRoutes.length - 1; routeIndex >= changingIndex; routeIndex--) {\n const route = prevRoutes[routeIndex]\n deactivated.push({ el: routeElMap[route.name], route })\n }\n\n await runLifeCycle(transition, deactivated, 'before', 'Leave')\n\n if (transition.isCancelled) return\n\n const activated = await resolveRoutes(transition.routes.slice(changingIndex))\n\n await runLifeCycle(transition, activated, 'before', 'Enter')\n\n if (transition.isCancelled) return\n\n runPropertyHookMethod(transition, activated, 'enter')\n\n await renderElements(transition, activated, changingIndex)\n\n updateDOMTree(activated, deactivated)\n\n transition.activated = activated\n transition.deactivated = deactivated\n}\n\nfunction done(transition) {\n runPropertyHookMethod(transition, transition.deactivated, 'leave')\n runLifeCycle(transition, transition.deactivated, 'after', 'Leave')\n runLifeCycle(transition, transition.activated, 'after', 'Enter')\n}\n\nexport const wc = {\n create,\n destroy,\n resolve,\n done,\n}\n","import { Router as CoreRouter, interceptLinks } from './router.js'\nimport { wc, fromParam, fromQuery, fromValue, getRouteEl } from './middlewares/wc.js'\nimport { routerLinks } from './middlewares/router-links.js'\nimport './components/router-links.js'\n\n/**\n * @typedef {import(\"./middlewares/wc.js\").WCRouteDef} WCRouteDef\n * @typedef {import(\"./middlewares/wc.js\").PropertyHook} PropertyHook\n * @typedef {import(\"./transition.js\").Transition} Transition\n */\n\nclass Router extends CoreRouter {\n constructor(options) {\n super(options)\n this.use(wc)\n this.use(routerLinks)\n }\n}\n\nexport { Router, interceptLinks, fromParam, fromQuery, fromValue, getRouteEl }\n","let eventPrefix\n\nfunction trigger(name, detail) {\n window.dispatchEvent(new CustomEvent(`${eventPrefix}${name}`, { detail }))\n}\n\nexport const events = {\n create: function (router) {\n eventPrefix = router.options.eventPrefix || 'router-'\n },\n\n before: function (transition) {\n trigger('before:transition', { transition })\n },\n\n done: function (transition) {\n trigger('transition', { transition })\n },\n\n cancel: function (transition, error) {\n if (error.type !== 'TransitionRedirected') {\n trigger('abort', { transition, error })\n }\n },\n\n error: function (transition, error) {\n trigger('abort', { transition, error })\n trigger('error', { transition, error })\n },\n}\n","import { interceptLinks, Router } from 'slick-router';\n//import {Router as CoreRouter, interceptLinks} from 'slick-router/core.js';\nimport { events } from 'slick-router/middlewares/events.js';\n\nimport { default as WJElement } from '../wje-element/element.js';\n\n/**\n * `Routerx` is a custom web component that represents a router in a routing system.\n * @summary This element represents a router in a routing system.\n * @documentation https://elements.webjet.sk/components/router\n * @status stable\n * @augments {WJElement}\n * @tag wje-router\n */\nexport default class Routerx extends WJElement {\n\t#routes;\n\n\t/**\n\t * Creates an instance of Routerx.\n\t * @class\n\t */\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tset routes(value) {\n\t\tthis.#routes = value;\n\t}\n\n\tget routes() {\n\t\treturn this.parseElement(this.rootElement).root;\n\t}\n\n\tget rootElement() {\n\t\tconst htmlString = this.outerHTML;\n\n\t\tconst parser = new DOMParser();\n\t\tconst htmlDocument = parser.parseFromString(htmlString, 'text/html');\n\t\treturn htmlDocument.querySelector('wje-router');\n\t}\n\n\tclassName = 'Routerx';\n\n\t/**\n\t * Returns the list of attributes to observe for changes.\n\t * @static\n\t * @returns {Array<string>}\n\t */\n\tstatic get observedAttributes() {\n\t\treturn [];\n\t}\n\n\t/**\n\t * Sets up the attributes for the component.\n\t */\n\tsetupAttributes() {\n\t\tthis.isShadowRoot = 'open';\n\t}\n\n\t/**\n\t * Sets up the router after the component is drawn.\n\t */\n\tbeforeDraw() {\n\t\tthis.router = new Router({\n\t\t\toutlet: this.outlet || 'wje-router-outlet',\n\t\t\tlog: false,\n\t\t\tlogError: false,\n\t\t\troot: this.root || '/',\n\t\t\tpushState: true,\n\t\t});\n\n\t\tthis.router.map(this.routes);\n\t\tthis.router.use(this.setBreadcrumb);\n\t\tthis.router.use(events);\n\t\tthis.router.use(this.resetScrollPosition);\n\t\tthis.router.listen();\n\n\t\tthis.unbindIntercept = interceptLinks(this.router);\n\t}\n\n\t/**\n\t * Parses an element and returns an object representation.\n\t * @param {Element} element The element to parse.\n\t * @returns {object} The object representation of the element.\n\t */\n\tparseElement(element) {\n\t\tconst obj = {};\n\t\tconst attributes = element.attributes;\n\n\t\tfor (let i = 0; i < attributes.length; i++) {\n\t\t\tconst attributeName = attributes[i].name;\n\t\t\tconst attributeValue = attributes[i].value;\n\n\t\t\tif (attributeName === 'component' && attributeValue.indexOf('.js') > -1) {\n\t\t\t\t// eslint-disable-next-line jsdoc/no-bad-blocks\n\t\t\t\tobj.component = () => import(/* @vite-ignore */ attributeValue);\n\t\t\t} else {\n\t\t\t\tif (attributeName !== 'shadow') {\n\t\t\t\t\tconst camelCase = attributeName.replace(/-([a-z])/g, (g) => g[1].toUpperCase());\n\t\t\t\t\tobj[camelCase] = attributeValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst children = [];\n\t\tconst childElements = Array.from(element.children);\n\n\t\tchildElements.forEach((childElement) => {\n\t\t\tchildren.push(this.parseElement(childElement));\n\t\t});\n\n\t\tif (children.length > 0 && element.tagName === 'WJE-ROUTE') {\n\t\t\tobj.children = children;\n\t\t} else {\n\t\t\tobj.root = children;\n\t\t}\n\n\t\treturn obj;\n\t}\n\n\t/**\n\t * Sets the breadcrumb for the transition.\n\t * @param {object} transition The transition object.\n\t */\n\tsetBreadcrumb = (transition) => {\n\t\tlet breadcrumb = [\n\t\t\t...transition.routes\n\t\t\t\t.filter((obj) => 'breadcrumb' in obj.options)\n\t\t\t\t.map((b, i) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: b.options.breadcrumbPath || b.name,\n\t\t\t\t\t\ttext:\n\t\t\t\t\t\t\tb.options.breadcrumb instanceof Function\n\t\t\t\t\t\t\t\t? b.options.breadcrumb?.(transition)\n\t\t\t\t\t\t\t\t: b.options.breadcrumb,\n\t\t\t\t\t\tparams: { ...b.params, ...transition.params },\n\t\t\t\t\t\tpath: this.router.generate(b.name, { ...b.params, ...transition.params }),\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t];\n\n\t\ttransition.breadcrumbs = breadcrumb;\n\t};\n\n\t/**\n\t * Resets the scroll position.\n\t * @param {object} transition The transition object.\n\t */\n\tresetScrollPosition = (transition) => {\n\t\twindow.scrollTo(0, 0);\n\t};\n\n\t/**\n\t * Cleans up before the component is disconnected.\n\t */\n\tbeforeDisconnect() {\n\t\tthis.unbindIntercept();\n\t\tthis.router.destroy();\n\t}\n}\n","import Routerx from './router.element.js';\n\nexport default Routerx;\n\nRouterx.define('wje-router', Routerx);\n"],"names":["isEqual","qs","path","router","transition","resolve","el","keys","routes","patternCompiler","Router","CoreRouter"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}
|
package/dist/wje-tab.js
CHANGED
|
@@ -2,7 +2,7 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
4
|
import WJElement from "./wje-element.js";
|
|
5
|
-
import { b as bindRouterLinks } from "./router-links-
|
|
5
|
+
import { b as bindRouterLinks } from "./router-links-wjqCnncc.js";
|
|
6
6
|
import { event } from "./event.js";
|
|
7
7
|
const styles = `/*
|
|
8
8
|
[ WJ Tab ]
|
|
@@ -195,21 +195,11 @@ class Tab extends WJElement {
|
|
|
195
195
|
*/
|
|
196
196
|
afterDraw() {
|
|
197
197
|
var _a;
|
|
198
|
-
this.bindRouterLinks();
|
|
199
|
-
if (!this.unbindRouterLinks) {
|
|
200
|
-
queueMicrotask(() => this.bindRouterLinks());
|
|
201
|
-
}
|
|
198
|
+
this.unbindRouterLinks = bindRouterLinks(this.parentElement, { selector: false });
|
|
202
199
|
event.addListener(this, "click", "wje-tab:change");
|
|
203
200
|
this.syncAriaLabel();
|
|
204
201
|
(_a = this.slotEl) == null ? void 0 : _a.addEventListener("slotchange", () => this.syncAriaLabel());
|
|
205
202
|
}
|
|
206
|
-
bindRouterLinks() {
|
|
207
|
-
var _a;
|
|
208
|
-
const parent = this.parentElement;
|
|
209
|
-
if (!parent) return;
|
|
210
|
-
(_a = this.unbindRouterLinks) == null ? void 0 : _a.call(this);
|
|
211
|
-
this.unbindRouterLinks = bindRouterLinks(parent, { selector: false });
|
|
212
|
-
}
|
|
213
203
|
/**
|
|
214
204
|
* Sync aria-label on host based on slotted text when not provided.
|
|
215
205
|
*/
|
package/dist/wje-tab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-tab.js","sources":["../packages/wje-tab/tab.element.js","../packages/wje-tab/tab.js"],"sourcesContent":["import { default as WJElement, event } from '../wje-element/element.js';\nimport { bindRouterLinks } from '
|
|
1
|
+
{"version":3,"file":"wje-tab.js","sources":["../packages/wje-tab/tab.element.js","../packages/wje-tab/tab.js"],"sourcesContent":["import { default as WJElement, event } from '../wje-element/element.js';\nimport { bindRouterLinks } from 'slick-router/middlewares/router-links.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * `Tab` is a custom web component that represents a tab.\n * @summary This element represents a tab.\n * @documentation https://elements.webjet.sk/components/tab\n * @status stable\n * @augments {WJElement}\n * @param {string} panel The name of the tab panel. This is used to identify the corresponding tab panel.\n * @param {string} route The route to navigate to when the tab is clicked.\n * @cssproperty [--wje-tab-text-transform=uppercase] - The text transformation for the tab (e.g., uppercase, lowercase).\n * @cssproperty [--wje-tab-font-weight=500] - The font weight of the tab text.\n * @cssproperty [--wje-tab-letter-spacing=0.06em] - The letter spacing of the tab text.\n * @cssproperty [--wje-tab-padding-inline=1rem] - The horizontal padding of the tab.\n * @cssproperty [--wje-tab-padding-top=.75rem] - The top padding of the tab text.\n * @cssproperty [--wje-tab-padding-bottom=.75rem] - The bottom padding of the tab text.\n * @cssproperty [--wje-tab-color-active=var(--wje-color-primary-11)] - The text color of the active tab.\n * @cssproperty [--wje-tab-color-hover=var(--wje-color-primary-1)] - The text color of the tab when hovered.\n * //@fires wje-tab:change - Dispatched when the tab is changed.\n * @tag wje-tab\n */\nexport default class Tab extends WJElement {\n /**\n * Creates an instance of Tab.\n */\n constructor() {\n super();\n\n /**\n * Indicates whether this is the last tab.\n * @type {boolean}\n */\n this.last = false;\n this._hasPanel = false;\n }\n\n /**\n * Sets the panel attribute to the specified value.\n * @param {string} value The value to set for the panel attribute.\n */\n set panel(value) {\n this.setAttribute('panel', value);\n }\n\n /**\n * Retrieves the value of the 'panel' attribute of the element.\n * @returns {string|null} Returns the 'panel' attribute value if it exists; otherwise, returns null.\n */\n get panel() {\n return this.getAttribute('panel') || null;\n }\n\n /**\n * Sets the value of the 'route' attribute for the current object.\n * @param {string} value The new value to set for the 'route' attribute.\n */\n set route(value) {\n this.setAttribute('route', value);\n }\n\n /**\n * Retrieves the value of the 'route' attribute.\n * If the 'route' attribute is not set, it returns null.\n * @returns {string|null} The value of the 'route' attribute or null if not set.\n */\n get route() {\n return this.getAttribute('route') || null;\n }\n\n /**\n * The class name for the component.\n */\n className = 'Tab';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n this.setAttribute('active-class', 'active');\n\n this.setAriaState({\n role: 'tab',\n selected: false,\n disabled: this.hasAttribute('disabled'),\n });\n }\n\n\n /**\n * Draws the component for the tab.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let slot = document.createElement('slot');\n\n let href = this.panel || this.route || \"#\";\n\n let a = document.createElement('a');\n a.setAttribute('href', (this.panel ? \"#\" : \"\") + href);\n a.setAttribute('part', 'native');\n a.classList.add('native-tab');\n a.appendChild(slot);\n\n fragment.appendChild(a);\n\n this.slotEl = slot;\n\n return fragment;\n }\n\n /**\n * Sets up event listeners after the component is rendered.\n * // @fires wje-tab:change - Dispatched when the component is clicked, indicating a tab change.\n */\n afterDraw() {\n this.unbindRouterLinks = bindRouterLinks(this.parentElement, { selector: false });\n event.addListener(this, 'click', 'wje-tab:change');\n this.syncAriaLabel();\n this.slotEl?.addEventListener('slotchange', () => this.syncAriaLabel());\n }\n\n /**\n * Sync aria-label on host based on slotted text when not provided.\n */\n syncAriaLabel() {\n if (this.hasAttribute('aria-label') || this.hasAttribute('aria-labelledby')) return;\n const text = (this.slotEl?.assignedNodes({ flatten: true }) || [])\n .map((node) => node.textContent || '')\n .join('')\n .trim();\n if (text) {\n this.setAttribute('aria-label', text);\n }\n }\n\n /**\n * Sets the roving tabindex on the internal focusable anchor.\n * @param {number} value\n */\n setRovingTabIndex(value) {\n const anchor = this.context?.querySelector('a');\n if (!anchor) return;\n anchor.setAttribute('tabindex', String(value));\n }\n\n /**\n * Cleans up before the component is disconnected.\n */\n beforeDisconnect() {\n this.unbindRouterLinks?.();\n }\n}\n","import Tab from './tab.element.js';\n\nexport default Tab;\n\nTab.define('wje-tab', Tab);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBe,MAAM,YAAY,UAAU;AAAA;AAAA;AAAA;AAAA,EAIvC,cAAc;AACV,UAAK;AA8CT;AAAA;AAAA;AAAA,qCAAY;AAxCR,SAAK,OAAO;AACZ,SAAK,YAAY;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,MAAM,OAAO;AACb,SAAK,aAAa,SAAS,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,QAAQ;AACR,WAAO,KAAK,aAAa,OAAO,KAAK;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,MAAM,OAAO;AACb,SAAK,aAAa,SAAS,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAQ;AACR,WAAO,KAAK,aAAa,OAAO,KAAK;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,WAAW,gBAAgB;AACvB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB;AACd,SAAK,eAAe;AACpB,SAAK,aAAa,gBAAgB,QAAQ;AAE1C,SAAK,aAAa;AAAA,MACd,MAAM;AAAA,MACN,UAAU;AAAA,MACV,UAAU,KAAK,aAAa,UAAU;AAAA,IAClD,CAAS;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO;AACH,QAAI,WAAW,SAAS,uBAAsB;AAE9C,QAAI,OAAO,SAAS,cAAc,MAAM;AAExC,QAAI,OAAO,KAAK,SAAS,KAAK,SAAS;AAEvC,QAAI,IAAI,SAAS,cAAc,GAAG;AAClC,MAAE,aAAa,SAAS,KAAK,QAAQ,MAAM,MAAM,IAAI;AACrD,MAAE,aAAa,QAAQ,QAAQ;AAC/B,MAAE,UAAU,IAAI,YAAY;AAC5B,MAAE,YAAY,IAAI;AAElB,aAAS,YAAY,CAAC;AAEtB,SAAK,SAAS;AAEd,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY;;AACR,SAAK,oBAAoB,gBAAgB,KAAK,eAAe,EAAE,UAAU,OAAO;AAChF,UAAM,YAAY,MAAM,SAAS,gBAAgB;AACjD,SAAK,cAAa;AAClB,eAAK,WAAL,mBAAa,iBAAiB,cAAc,MAAM,KAAK;EAC3D;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB;;AACZ,QAAI,KAAK,aAAa,YAAY,KAAK,KAAK,aAAa,iBAAiB,EAAG;AAC7E,UAAM,UAAQ,UAAK,WAAL,mBAAa,cAAc,EAAE,SAAS,KAAI,OAAO,CAAA,GAC1D,IAAI,CAAC,SAAS,KAAK,eAAe,EAAE,EACpC,KAAK,EAAE,EACP,KAAI;AACT,QAAI,MAAM;AACN,WAAK,aAAa,cAAc,IAAI;AAAA,IACxC;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB,OAAO;;AACrB,UAAM,UAAS,UAAK,YAAL,mBAAc,cAAc;AAC3C,QAAI,CAAC,OAAQ;AACb,WAAO,aAAa,YAAY,OAAO,KAAK,CAAC;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB;;AACf,eAAK,sBAAL;AAAA,EACJ;AACJ;ACjKA,IAAI,OAAO,WAAW,GAAG;"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wj-elements",
|
|
3
3
|
"description": "WebJET Elements is a modern set of user interface tools harnessing the power of web components designed to simplify web application development.",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.6",
|
|
5
5
|
"homepage": "https://github.com/lencys/wj-elements",
|
|
6
6
|
"author": "Lukáš Ondrejček <lukas.ondrejcek@gmail.com>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -104,11 +104,11 @@
|
|
|
104
104
|
},
|
|
105
105
|
"devDependencies": {
|
|
106
106
|
"@babel/eslint-parser": "^7.26.5",
|
|
107
|
-
"@crowdin/cli": "^
|
|
107
|
+
"@crowdin/cli": "^4.14.0",
|
|
108
108
|
"@custom-elements-manifest/analyzer": "^0.9.3",
|
|
109
|
-
"@docusaurus/core": "^3.
|
|
109
|
+
"@docusaurus/core": "^3.5.2",
|
|
110
110
|
"@docusaurus/mdx-loader": "^3.8.0",
|
|
111
|
-
"@docusaurus/plugin-client-redirects": "^3.
|
|
111
|
+
"@docusaurus/plugin-client-redirects": "^3.5.2",
|
|
112
112
|
"@eslint/js": "^9.13.0",
|
|
113
113
|
"@faker-js/faker": "^8.0.0",
|
|
114
114
|
"@open-wc/semantic-dom-diff": "^0.20.1",
|
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
"prettier": "^3.3.3",
|
|
133
133
|
"rollup-plugin-dts": "^6.1.1",
|
|
134
134
|
"sass": "^1.83.0",
|
|
135
|
-
"sinon": "^
|
|
135
|
+
"sinon": "^21.0.2",
|
|
136
136
|
"typescript": "^5.8.2",
|
|
137
137
|
"vite": "^6.4.1",
|
|
138
138
|
"vite-plugin-dts": "^4.5.0",
|