wj-elements 0.1.188 → 0.1.190

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.
@@ -224,6 +224,7 @@ export class Select extends FormAssociatedElement {
224
224
  * @returns {Array<object>} An array containing all the available options, combining the loaded, added, and HTML-based options, with duplicates removed where applicable.
225
225
  */
226
226
  get options(): Array<object>;
227
+ beforeDraw(): void;
227
228
  /**
228
229
  * Draws the component for the select.
229
230
  * @returns {DocumentFragment}
@@ -362,5 +363,6 @@ export class Select extends FormAssociatedElement {
362
363
  * @returns {boolean} Returns true if all elements in the `elements` array are found within the `options` array, otherwise returns false.
363
364
  */
364
365
  areAllElementsInOptions(elements: any[], options: any[]): boolean;
366
+ clearSelections(): void;
365
367
  #private;
366
368
  }
@@ -1374,7 +1374,7 @@ class Routerx extends WJElement {
1374
1374
  const rootElement = htmlDocument.querySelector("wje-router");
1375
1375
  const routes = this.parseElement(rootElement).root;
1376
1376
  this.router = new Router2({
1377
- outlet: this.outlet || "wje-router-outlet",
1377
+ outlet: this.outlet,
1378
1378
  log: false,
1379
1379
  logError: true,
1380
1380
  root: this.root || "/",
@@ -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/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) => {\r\n obj[attr] = val\r\n return obj\r\n}\r\nconst isArray = Array.isArray\r\n\r\nexport const keys = Object.keys\r\n\r\nexport const clone = (obj) => (obj ? (isArray(obj) ? obj.slice(0) : extend({}, obj)) : obj)\r\n\r\nexport const pick = (obj, attrs) =>\r\n attrs.reduce((acc, attr) => (obj[attr] === undefined ? acc : assoc(acc, attr, obj[attr])), {})\r\n\r\nexport const isEqual = (obj1, obj2) => {\r\n const keys1 = keys(obj1)\r\n return keys1.length === keys(obj2).length && keys1.every((key) => obj2[key] === obj1[key])\r\n}\r\n\r\nexport const extend = Object.assign\r\n","export default function invariant(condition, format, ...args) {\r\n if (!condition) {\r\n let argIndex = 0\r\n throw new Error('Invariant Violation: ' + format.replace(/%s/g, () => args[argIndex++]))\r\n }\r\n}\r\n","import invariant from './invariant.js'\r\n\r\n/**\r\n * @typedef {import(\"./router.js\").Route} Route\r\n */\r\n\r\n/**\r\n * @callback registerRoute\r\n * @param {string} name\r\n * @param {Object} options\r\n * @param {routeCallback} childrenCallback\r\n */\r\n\r\n/**\r\n * @callback routeCallback\r\n * @param {registerRoute} route\r\n */\r\n\r\n/**\r\n * @export\r\n * @param {routeCallback} callback\r\n * @return {Route[]}\r\n */\r\nexport default function functionDsl(callback) {\r\n let ancestors = []\r\n const matches = {}\r\n const names = {}\r\n\r\n callback(function route(name, options, childrenCallback) {\r\n let routes\r\n\r\n invariant(\r\n !names[name],\r\n 'Route names must be unique, but route \"%s\" is declared multiple times',\r\n name,\r\n )\r\n\r\n names[name] = true\r\n\r\n if (arguments.length === 1) {\r\n options = {}\r\n }\r\n\r\n if (arguments.length === 2 && typeof options === 'function') {\r\n childrenCallback = options\r\n options = {}\r\n }\r\n\r\n if (typeof options.path !== 'string') {\r\n const parts = name.split('.')\r\n options.path = parts[parts.length - 1]\r\n }\r\n\r\n // go to the next level\r\n if (childrenCallback) {\r\n ancestors = ancestors.concat(name)\r\n childrenCallback()\r\n routes = pop()\r\n ancestors.splice(-1)\r\n }\r\n\r\n // add the node to the tree\r\n push({\r\n name,\r\n path: options.path,\r\n routes: routes || [],\r\n options,\r\n })\r\n })\r\n\r\n function pop() {\r\n return matches[currentLevel()] || []\r\n }\r\n\r\n function push(route) {\r\n const level = currentLevel()\r\n matches[level] = matches[level] || []\r\n matches[level].push(route)\r\n }\r\n\r\n function currentLevel() {\r\n return ancestors.join('.')\r\n }\r\n\r\n return pop()\r\n}\r\n","/**\r\n * @typedef {import(\"./router.js\").Route} Route\r\n */\r\n\r\n/**\r\n * @typedef RouteDef\r\n * @property {string} name\r\n * @property {string} path\r\n * @property {RouteDef[]} children\r\n */\r\n\r\n/**\r\n * @export\r\n * @param {RouteDef[]} routes\r\n * @return {Route[]}\r\n */\r\nexport default function arrayDsl(routes) {\r\n const result = []\r\n\r\n routes.forEach(({ name, children, ...options }) => {\r\n if (typeof options.path !== 'string') {\r\n const parts = name.split('.')\r\n options.path = parts[parts.length - 1]\r\n }\r\n result.push({\r\n name,\r\n path: options.path,\r\n options,\r\n routes: children ? arrayDsl(children) : [],\r\n })\r\n })\r\n\r\n return result\r\n}\r\n","import invariant from './invariant.js'\r\n\r\nconst paramInjectMatcher = /:([a-zA-Z_$][a-zA-Z0-9_$?]*[?+*]?)/g\r\nconst specialParamChars = /[+*?]$/g\r\nconst queryMatcher = /\\?(.+)/\r\n\r\nconst _compiledPatterns = {}\r\n\r\nfunction compilePattern(pattern, compiler) {\r\n if (!(pattern in _compiledPatterns)) {\r\n _compiledPatterns[pattern] = compiler(pattern)\r\n }\r\n\r\n return _compiledPatterns[pattern]\r\n}\r\n\r\nexport function clearPatternCompilerCache() {\r\n for (const x in _compiledPatterns) {\r\n delete _compiledPatterns[x]\r\n }\r\n}\r\n\r\n/**\r\n * Returns an array of the names of all parameters in the given pattern.\r\n */\r\nexport function extractParamNames(pattern, compiler) {\r\n return compilePattern(pattern, compiler).paramNames\r\n}\r\n\r\n/**\r\n * Extracts the portions of the given URL path that match the given pattern\r\n * and returns an object of param name => value pairs. Returns null if the\r\n * pattern does not match the given path.\r\n */\r\nexport function extractParams(pattern, path, compiler) {\r\n const cp = compilePattern(pattern, compiler)\r\n const matcher = cp.matcher\r\n const paramNames = cp.paramNames\r\n const match = path.match(matcher)\r\n\r\n if (!match) {\r\n return null\r\n }\r\n\r\n const params = {}\r\n\r\n paramNames.forEach(function (paramName, index) {\r\n params[paramName] = match[index + 1] && decodeURIComponent(match[index + 1])\r\n })\r\n\r\n return params\r\n}\r\n\r\n/**\r\n * Returns a version of the given route path with params interpolated. Throws\r\n * if there is a dynamic segment of the route path for which there is no param.\r\n */\r\nexport function injectParams(pattern, params) {\r\n params = params || {}\r\n\r\n return pattern.replace(paramInjectMatcher, function (match, param) {\r\n const paramName = param.replace(specialParamChars, '')\r\n const lastChar = param.slice(-1)\r\n\r\n // If param is optional don't check for existence\r\n if (lastChar === '?' || lastChar === '*') {\r\n if (params[paramName] == null) {\r\n return ''\r\n }\r\n } else {\r\n invariant(\r\n params[paramName] != null,\r\n \"Missing '%s' parameter for path '%s'\",\r\n paramName,\r\n pattern,\r\n )\r\n }\r\n\r\n let paramValue = encodeURIComponent(params[paramName])\r\n if (lastChar === '*' || lastChar === '+') {\r\n // restore / for splats\r\n paramValue = paramValue.replace('%2F', '/')\r\n }\r\n return paramValue\r\n })\r\n}\r\n\r\n/**\r\n * Returns an object that is the result of parsing any query string contained\r\n * in the given path, null if the path contains no query string.\r\n */\r\nexport function extractQuery(qs, path) {\r\n const match = path.match(queryMatcher)\r\n return match && qs.parse(match[1])\r\n}\r\n\r\n/**\r\n * Returns a version of the given path with the parameters in the given\r\n * query merged into the query string.\r\n */\r\nexport function withQuery(qs, path, query) {\r\n const queryString = qs.stringify(query, { indices: false })\r\n\r\n if (queryString) {\r\n return withoutQuery(path) + '?' + queryString\r\n }\r\n\r\n return path\r\n}\r\n\r\n/**\r\n * Returns a version of the given path without the query string.\r\n */\r\nexport function withoutQuery(path) {\r\n return path.replace(queryMatcher, '')\r\n}\r\n","/**\r\n * Bind `el` event `type` to `fn`.\r\n *\r\n * @param {Element} el\r\n * @param {String} type\r\n * @param {Function} fn\r\n * @return {Function}\r\n * @api public\r\n */\r\n\r\nexport function bindEvent(el, type, fn) {\r\n el.addEventListener(type, fn)\r\n return fn\r\n}\r\n\r\n/**\r\n * Unbind `el` event `type`'s callback `fn`.\r\n *\r\n * @param {Element} el\r\n * @param {String} type\r\n * @param {Function} fn\r\n * @return {Function}\r\n * @api public\r\n */\r\n\r\nexport function unbindEvent(el, type, fn) {\r\n el.removeEventListener(type, fn)\r\n return fn\r\n}\r\n","/* eslint-disable */\r\n// LocationBar module extracted from Backbone.js 1.1.0\r\n//\r\n// the dependency on backbone, underscore and jquery have been removed to turn\r\n// this into a small standalone library for handling browser's history API\r\n// cross browser and with a fallback to hashchange events or polling.\r\n\r\nimport {extend} from '../utils.js'\r\nimport {bindEvent, unbindEvent} from '../events.js'\r\n\r\n// this is mostly original code with minor modifications\r\n// to avoid dependency on 3rd party libraries\r\n//\r\n// Backbone.History\r\n// ----------------\r\n\r\n// Handles cross-browser history management, based on either\r\n// [pushState](http://diveintohtml5.info/history.html) and real URLs, or\r\n// [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\r\n// and URL fragments.\r\nclass History {\r\n constructor() {\r\n this.handlers = [];\r\n this.checkUrl = this.checkUrl.bind(this);\r\n this.location = window.location;\r\n this.history = window.history;\r\n }\r\n\r\n // Set up all inheritable **Backbone.History** properties and methods.\r\n // Are we at the app root?\r\n atRoot() {\r\n return this.location.pathname.replace(/[^\\/]$/, '$&/') === this.root;\r\n }\r\n\r\n // Gets the true hash value. Cannot use location.hash directly due to bug\r\n // in Firefox where location.hash will always be decoded.\r\n getHash() {\r\n const match = this.location.href.match(/#(.*)$/);\r\n return match ? match[1] : '';\r\n }\r\n\r\n // Get the cross-browser normalized URL fragment, either from the URL,\r\n // the hash, or the override.\r\n getFragment(fragment, forcePushState) {\r\n if (fragment == null) {\r\n if (this._hasPushState || !this._wantsHashChange || forcePushState) {\r\n fragment = decodeURI(this.location.pathname + this.location.search);\r\n const root = this.root.replace(trailingSlash, '');\r\n if (!fragment.indexOf(root)) fragment = fragment.slice(root.length);\r\n } else {\r\n fragment = this.getHash();\r\n }\r\n }\r\n return fragment.replace(routeStripper, '');\r\n }\r\n\r\n // Start the hash change handling, returning `true` if the current URL matches\r\n // an existing route, and `false` otherwise.\r\n start(options = {}) {\r\n // MODIFICATION OF ORIGINAL BACKBONE.HISTORY\r\n // if (History.started) throw new Error(\"LocationBar has already been started\");\r\n // History.started = true;\r\n this.started = true;\r\n\r\n // Figure out the initial configuration.\r\n // Is pushState desired ... is it available?\r\n this.options = extend({root: '/'}, options);\r\n this.location = this.options.location || this.location;\r\n this.history = this.options.history || this.history;\r\n this.root = this.options.root;\r\n this._wantsHashChange = this.options.hashChange !== false;\r\n this._wantsPushState = !!this.options.pushState;\r\n this._hasPushState = this._wantsPushState;\r\n const fragment = this.getFragment();\r\n\r\n // Normalize root to always include a leading and trailing slash.\r\n this.root = (`/${this.root}/`).replace(rootStripper, '/');\r\n\r\n // Depending on whether we're using pushState or hashes, and whether\r\n // 'onhashchange' is supported, determine how we check the URL state.\r\n bindEvent(window, this._hasPushState ? 'popstate' : 'hashchange', this.checkUrl);\r\n\r\n // Determine if we need to change the base url, for a pushState link\r\n // opened by a non-pushState browser.\r\n this.fragment = fragment;\r\n const loc = this.location;\r\n\r\n // Transition from hashChange to pushState or vice versa if both are\r\n // requested.\r\n if (this._wantsHashChange && this._wantsPushState) {\r\n\r\n // If we've started off with a route from a `pushState`-enabled\r\n // browser, but we're currently in a browser that doesn't support it...\r\n if (!this._hasPushState && !this.atRoot()) {\r\n this.fragment = this.getFragment(null, true);\r\n this.location.replace(`${this.root}#${this.fragment}`);\r\n // Return immediately as browser will do redirect to new url\r\n return true;\r\n\r\n // Or if we've started out with a hash-based route, but we're currently\r\n // in a browser where it could be `pushState`-based instead...\r\n } else if (this._hasPushState && this.atRoot() && loc.hash) {\r\n this.fragment = this.getHash().replace(routeStripper, '');\r\n this.history.replaceState({}, document.title, this.root + this.fragment);\r\n }\r\n\r\n }\r\n\r\n if (!this.options.silent) return this.loadUrl();\r\n }\r\n\r\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\r\n // but possibly useful for unit testing Routers.\r\n stop() {\r\n unbindEvent(window, this._hasPushState ? 'popstate' : 'hashchange', this.checkUrl);\r\n this.started = false;\r\n }\r\n\r\n // Add a route to be tested when the fragment changes. Routes added later\r\n // may override previous routes.\r\n route(route, callback) {\r\n this.handlers.unshift({route, callback});\r\n }\r\n\r\n // Checks the current URL to see if it has changed, and if it has,\r\n // calls `loadUrl`.\r\n checkUrl() {\r\n const current = this.getFragment();\r\n if (current === this.fragment) return false;\r\n this.loadUrl();\r\n }\r\n\r\n // Attempt to load the current URL fragment. If a route succeeds with a\r\n // match, returns `true`. If no defined routes matches the fragment,\r\n // returns `false`.\r\n loadUrl(fragment) {\r\n fragment = this.fragment = this.getFragment(fragment);\r\n return this.handlers.some(handler => {\r\n if (handler.route.test(fragment)) {\r\n handler.callback(fragment);\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n // Save a fragment into the hash history, or replace the URL state if the\r\n // 'replace' option is passed. You are responsible for properly URL-encoding\r\n // the fragment in advance.\r\n //\r\n // The options object can contain `trigger: true` if you wish to have the\r\n // route callback be fired (not usually desirable), or `replace: true`, if\r\n // you wish to modify the current URL without adding an entry to the history.\r\n update(fragment, options) {\r\n if (!this.started) return false;\r\n if (!options || options === true) options = {trigger: !!options};\r\n\r\n let url = this.root + (fragment = this.getFragment(fragment || ''));\r\n\r\n // Strip the hash for matching.\r\n fragment = fragment.replace(pathStripper, '');\r\n\r\n if (this.fragment === fragment) return;\r\n this.fragment = fragment;\r\n\r\n // Don't include a trailing slash on the root.\r\n if (fragment === '' && url !== '/') url = url.slice(0, -1);\r\n\r\n // If pushState is available, we use it to set the fragment as a real URL.\r\n if (this._hasPushState) {\r\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\r\n\r\n // If hash changes haven't been explicitly disabled, update the hash\r\n // fragment to store history.\r\n } else if (this._wantsHashChange) {\r\n this._updateHash(this.location, fragment, options.replace);\r\n // If you've told us that you explicitly don't want fallback hashchange-\r\n // based history, then `update` becomes a page refresh.\r\n } else {\r\n return this.location.assign(url);\r\n }\r\n if (options.trigger) return this.loadUrl(fragment);\r\n }\r\n\r\n // Update the hash location, either replacing the current entry, or adding\r\n // a new one to the browser history.\r\n _updateHash(location, fragment, replace) {\r\n if (replace) {\r\n const href = location.href.replace(/(javascript:|#).*$/, '');\r\n location.replace(`${href}#${fragment}`);\r\n } else {\r\n // Some browsers require that `hash` contains a leading #.\r\n location.hash = `#${fragment}`;\r\n }\r\n }\r\n\r\n // add some features to History\r\n\r\n // a generic callback for any changes\r\n onChange(callback) {\r\n this.route(/^(.*?)$/, callback);\r\n }\r\n\r\n // checks if the browser has pushstate support\r\n hasPushState() {\r\n // MODIFICATION OF ORIGINAL BACKBONE.HISTORY\r\n if (!this.started) {\r\n throw new Error(\"only available after LocationBar.start()\");\r\n }\r\n return this._hasPushState;\r\n }\r\n}\r\n\r\n// Cached regex for stripping a leading hash/slash and trailing space.\r\nconst routeStripper = /^[#\\/]|\\s+$/g;\r\n\r\n// Cached regex for stripping leading and trailing slashes.\r\nconst rootStripper = /^\\/+|\\/+$/g;\r\n\r\n// Cached regex for removing a trailing slash.\r\nconst trailingSlash = /\\/$/;\r\n\r\n// Cached regex for stripping urls of hash.\r\nconst pathStripper = /#.*$/;\r\n\r\n\r\n// export\r\nexport default History;\r\n","import { extend } from '../utils.js'\r\nimport LocationBar from './location-bar.js'\r\n\r\nclass BrowserLocation {\r\n constructor(options = {}) {\r\n this.path = options.path || ''\r\n\r\n this.options = extend(\r\n {\r\n pushState: false,\r\n root: '/',\r\n },\r\n options,\r\n )\r\n\r\n // we're using the location-bar module for actual\r\n // URL management\r\n this.locationBar = new LocationBar()\r\n this.locationBar.onChange((path) => {\r\n this.handleURL(`/${path || ''}`)\r\n })\r\n\r\n this.locationBar.start(options)\r\n }\r\n\r\n /**\r\n * Get the current URL\r\n */\r\n\r\n getURL() {\r\n return this.path\r\n }\r\n\r\n /**\r\n * Set the current URL without triggering any events\r\n * back to the router. Add a new entry in browser's history.\r\n */\r\n\r\n setURL(path, options = {}) {\r\n if (this.path !== path) {\r\n this.path = path\r\n this.locationBar.update(path, extend({ trigger: true }, options))\r\n }\r\n }\r\n\r\n /**\r\n * Set the current URL without triggering any events\r\n * back to the router. Replace the latest entry in broser's history.\r\n */\r\n\r\n replaceURL(path, options = {}) {\r\n if (this.path !== path) {\r\n this.path = path\r\n this.locationBar.update(path, extend({ trigger: true, replace: true }, options))\r\n }\r\n }\r\n\r\n /**\r\n * Setup a URL change handler\r\n * @param {Function} callback\r\n */\r\n onChange(callback) {\r\n this.changeCallback = callback\r\n }\r\n\r\n /**\r\n * Given a path, generate a URL appending root\r\n * if pushState is used and # if hash state is used\r\n */\r\n formatURL(path) {\r\n if (this.locationBar.hasPushState()) {\r\n let rootURL = this.options.root\r\n if (path !== '') {\r\n rootURL = rootURL.replace(/\\/$/, '')\r\n }\r\n return rootURL + path\r\n } else {\r\n if (path[0] === '/') {\r\n path = path.substr(1)\r\n }\r\n return `#${path}`\r\n }\r\n }\r\n\r\n /**\r\n * When we use pushState with a custom root option,\r\n * we need to take care of removingRoot at certain points.\r\n * Specifically\r\n * - browserLocation.update() can be called with the full URL by router\r\n * - LocationBar expects all .update() calls to be called without root\r\n * - this method is public so that we could dispatch URLs without root in router\r\n */\r\n removeRoot(url) {\r\n if (this.options.pushState && this.options.root && this.options.root !== '/') {\r\n return url.replace(this.options.root, '')\r\n } else {\r\n return url\r\n }\r\n }\r\n\r\n /**\r\n * Stop listening to URL changes and link clicks\r\n */\r\n destroy() {\r\n this.locationBar.stop()\r\n }\r\n\r\n /**\r\n initially, the changeCallback won't be defined yet, but that's good\r\n because we dont' want to kick off routing right away, the router\r\n does that later by manually calling this handleURL method with the\r\n url it reads of the location. But it's important this is called\r\n first by Backbone, because we wanna set a correct this.path value\r\n\r\n @private\r\n */\r\n handleURL(url) {\r\n this.path = url\r\n if (this.changeCallback) {\r\n this.changeCallback(url)\r\n }\r\n }\r\n}\r\n\r\nexport default BrowserLocation\r\n","import { extend } from '../utils.js'\r\n\r\nclass MemoryLocation {\r\n constructor({ path }) {\r\n this.path = path || ''\r\n }\r\n\r\n getURL() {\r\n return this.path\r\n }\r\n\r\n setURL(path, options) {\r\n if (this.path !== path) {\r\n this.path = path\r\n this.handleURL(this.getURL(), options)\r\n }\r\n }\r\n\r\n replaceURL(path, options) {\r\n if (this.path !== path) {\r\n this.setURL(path, options)\r\n }\r\n }\r\n\r\n onChange(callback) {\r\n this.changeCallback = callback\r\n }\r\n\r\n handleURL(url, options = {}) {\r\n this.path = url\r\n options = extend({ trigger: true }, options)\r\n if (this.changeCallback && options.trigger) {\r\n this.changeCallback(url)\r\n }\r\n }\r\n\r\n removeRoot(url) {\r\n return url\r\n }\r\n\r\n formatURL(url) {\r\n return url\r\n }\r\n}\r\n\r\nexport default MemoryLocation\r\n","export const TRANSITION_REDIRECTED = 'TransitionRedirected'\r\n\r\nexport const TRANSITION_CANCELLED = 'TransitionCancelled'\r\n","import { clone } from './utils.js'\r\nimport invariant from './invariant.js'\r\nimport { TRANSITION_CANCELLED, TRANSITION_REDIRECTED } from './constants.js'\r\n\r\n/**\r\n * @typedef {import(\"./router.js\").Route} Route\r\n */\r\n\r\n/**\r\n * @typedef {Pick<Transition, 'routes' | 'pathname' | 'path' | 'params' | 'query' >} TransitionData\r\n */\r\n\r\n/**\r\n * @typedef Transition\r\n * @property {Route[]} routes\r\n * @property {string} pathname\r\n * @property {string} path\r\n * @property {Object} params\r\n * @property {Object} query\r\n * @property {TransitionData} prev\r\n * @property {(name: string, params?: any, query?: any) => Transition} redirectTo\r\n * @property {(name: string, params?: any, query?: any) => Transition} retry\r\n * @property {(error: string | Error) => void} cancel\r\n * @property {() => Promise<any>} followRedirects\r\n * @property {function} then\r\n * @property {function} catch\r\n * @property {boolean} noop\r\n * @property {boolean} isCancelled\r\n */\r\n\r\n/**\r\n * @param {*} router\r\n * @param {Transition} transition\r\n * @param {*} err\r\n */\r\nfunction runError(router, transition, err) {\r\n router.middleware.forEach((m) => {\r\n m.error && m.error(transition, err)\r\n })\r\n}\r\n\r\n/**\r\n * @export\r\n * @param {*} options\r\n * @return {Transition}\r\n */\r\nexport default function transition(options) {\r\n options = options || {}\r\n\r\n const router = options.router\r\n const log = router.log\r\n const logError = router.logError\r\n\r\n const path = options.path\r\n const match = options.match\r\n const routes = match.routes\r\n const params = match.params\r\n const pathname = match.pathname\r\n const query = match.query\r\n\r\n const id = options.id\r\n const startTime = Date.now()\r\n log('---')\r\n log('Transition #' + id, 'to', path)\r\n log(\r\n 'Transition #' + id,\r\n 'routes:',\r\n routes.map((r) => r.name),\r\n )\r\n log('Transition #' + id, 'params:', params)\r\n log('Transition #' + id, 'query:', query)\r\n\r\n // create the transition promise\r\n let resolve, reject\r\n const promise = new Promise(function (res, rej) {\r\n resolve = res\r\n reject = rej\r\n })\r\n\r\n // 1. make transition errors loud\r\n // 2. by adding this handler we make sure\r\n // we don't trigger the default 'Potentially\r\n // unhandled rejection' for cancellations\r\n promise\r\n .then(function () {\r\n log('Transition #' + id, 'completed in', Date.now() - startTime + 'ms')\r\n })\r\n .catch(function (err) {\r\n if (err.type !== TRANSITION_REDIRECTED && err.type !== TRANSITION_CANCELLED) {\r\n log('Transition #' + id, 'FAILED')\r\n logError(err)\r\n }\r\n })\r\n\r\n let cancelled = false\r\n\r\n const transition = {\r\n id,\r\n prev: {\r\n routes: clone(router.state.routes) || [],\r\n path: router.state.path || '',\r\n pathname: router.state.pathname || '',\r\n params: clone(router.state.params) || {},\r\n query: clone(router.state.query) || {},\r\n },\r\n routes: clone(routes),\r\n path,\r\n pathname,\r\n params: clone(params),\r\n query: clone(query),\r\n redirectTo: function (...args) {\r\n return router.transitionTo(...args)\r\n },\r\n retry: function () {\r\n return router.transitionTo(path)\r\n },\r\n cancel: function (err) {\r\n if (router.state.activeTransition !== transition) {\r\n return\r\n }\r\n\r\n if (transition.isCancelled) {\r\n return\r\n }\r\n\r\n router.state.activeTransition = null\r\n transition.isCancelled = true\r\n cancelled = true\r\n\r\n if (!err) {\r\n err = new Error(TRANSITION_CANCELLED)\r\n err.type = TRANSITION_CANCELLED\r\n }\r\n if (err.type === TRANSITION_CANCELLED) {\r\n log('Transition #' + id, 'cancelled')\r\n }\r\n if (err.type === TRANSITION_REDIRECTED) {\r\n log('Transition #' + id, 'redirected')\r\n }\r\n\r\n router.middleware.forEach((m) => {\r\n m.cancel && m.cancel(transition, err)\r\n })\r\n reject(err)\r\n },\r\n followRedirects: function () {\r\n return promise.catch(function (reason) {\r\n if (router.state.activeTransition) {\r\n return router.state.activeTransition.followRedirects()\r\n }\r\n return Promise.reject(reason)\r\n })\r\n },\r\n\r\n then: promise.then.bind(promise),\r\n catch: promise.catch.bind(promise),\r\n }\r\n\r\n router.middleware.forEach((m) => {\r\n m.before && m.before(transition)\r\n })\r\n\r\n // here we handle calls to all of the middlewares\r\n function callNext(i, prevResult) {\r\n let middleware\r\n let middlewareName\r\n // if transition has been cancelled - nothing left to do\r\n if (cancelled) {\r\n return\r\n }\r\n // done\r\n if (i < router.middleware.length) {\r\n middleware = router.middleware[i]\r\n middlewareName = middleware.name || 'anonymous'\r\n log('Transition #' + id, 'resolving middleware:', middlewareName)\r\n let middlewarePromise\r\n try {\r\n middlewarePromise = middleware.resolve\r\n ? middleware.resolve(transition, prevResult)\r\n : prevResult\r\n invariant(\r\n transition !== middlewarePromise,\r\n 'Middleware %s returned a transition which resulted in a deadlock',\r\n middlewareName,\r\n )\r\n } catch (err) {\r\n router.state.activeTransition = null\r\n runError(router, transition, err)\r\n return reject(err)\r\n }\r\n Promise.resolve(middlewarePromise)\r\n .then(function (result) {\r\n callNext(i + 1, result)\r\n })\r\n .catch(function (err) {\r\n log('Transition #' + id, 'resolving middleware:', middlewareName, 'FAILED')\r\n router.state.activeTransition = null\r\n runError(router, transition, err)\r\n reject(err)\r\n })\r\n } else {\r\n router.state = {\r\n activeTransition: null,\r\n routes,\r\n path,\r\n pathname,\r\n params,\r\n query,\r\n }\r\n router.middleware.forEach((m) => {\r\n m.done && m.done(transition)\r\n })\r\n resolve()\r\n }\r\n }\r\n\r\n if (!options.noop) {\r\n Promise.resolve().then(() => callNext(0))\r\n } else {\r\n resolve()\r\n }\r\n\r\n if (options.noop) {\r\n transition.noop = true\r\n }\r\n\r\n return transition\r\n}\r\n","import { bindEvent, unbindEvent } from './events.js'\r\n\r\n/**\r\n * Handle link delegation on `el` or the document,\r\n * and invoke `fn(e)` when clickable.\r\n *\r\n * @param {Element} el\r\n * @param {(e: Event, el: HTMLElement) => void} fn\r\n * @return {Function} dispose\r\n * @api public\r\n */\r\n\r\nexport function intercept(el, fn) {\r\n const cb = delegate(el, 'click', function (e, el) {\r\n if (clickable(e, el)) fn(e, el)\r\n })\r\n\r\n return function dispose() {\r\n unbindEvent(el, 'click', cb)\r\n }\r\n}\r\n\r\n/**\r\n * Delegate event `type` to links\r\n * and invoke `fn(e)`. A callback function\r\n * is returned which may be passed to `.unbind()`.\r\n *\r\n * @param {HTMLElement} el\r\n * @param {String} selector\r\n * @param {String} type\r\n * @param {(e: Event, el: HTMLElement) => void} fn\r\n * @return {Function}\r\n * @api public\r\n */\r\n\r\nfunction delegate(el, type, fn) {\r\n return bindEvent(el, type, function (e) {\r\n const el = e.target.closest('a')\r\n if (el) {\r\n fn(e, el)\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * Check if `e` is clickable.\r\n */\r\n\r\n/**\r\n * @param {Event} e\r\n * @param {HTMLElement} el\r\n * @return {Boolean | undefined}\r\n */\r\nfunction clickable(e, el) {\r\n if (which(e) !== 1) return\r\n if (e.metaKey || e.ctrlKey || e.shiftKey) return\r\n if (e.defaultPrevented) return\r\n\r\n // check target\r\n if (el.target) return\r\n\r\n // check for data-bypass attribute\r\n if (el.getAttribute('data-bypass') !== null) return\r\n\r\n // inspect the href\r\n const href = el.getAttribute('href')\r\n if (!href || href.length === 0) return\r\n\r\n // don't handle hash links, external/absolute links, email links and javascript links\r\n if (/^(#|https{0,1}:\\/\\/|mailto|javascript:)/i.test(href)) return\r\n\r\n return true\r\n}\r\n\r\n/**\r\n * Event button.\r\n */\r\n\r\nfunction which(e) {\r\n e = e || window.event\r\n return e.which === null ? e.button : e.which\r\n}\r\n","export default function defineLogger(router, method, fn) {\r\n if (fn === true) return\r\n router[method] = typeof fn === 'function' ? fn : () => {}\r\n}\r\n","export default {\r\n parse(querystring) {\r\n return querystring.split('&').reduce((acc, pair) => {\r\n const parts = pair.split('=')\r\n acc[parts[0]] = decodeURIComponent(parts[1])\r\n return acc\r\n }, {})\r\n },\r\n\r\n stringify(params) {\r\n return Object.keys(params)\r\n .reduce((acc, key) => {\r\n if (params[key] !== undefined) {\r\n acc.push(key + '=' + encodeURIComponent(params[key]))\r\n }\r\n return acc\r\n }, [])\r\n .join('&')\r\n },\r\n}\r\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'\r\n\r\nconst splatRegex = /:(\\w+)\\*/\r\n\r\nexport function patternCompiler(pattern) {\r\n // hack to add (partial) named splat support\r\n const splatMatch = splatRegex.exec(pattern)\r\n const normalizedPattern = splatMatch ? pattern.replace(splatRegex, '*') : pattern\r\n\r\n const { pattern: matcher, keys } = parse(normalizedPattern)\r\n\r\n const paramNames = splatMatch ? keys.map((key) => (key === '*' ? splatMatch[1] : key)) : keys\r\n\r\n return {\r\n matcher,\r\n paramNames,\r\n }\r\n}\r\n","/* eslint-disable array-callback-return */\r\nimport { pick, clone, extend, isEqual, keys } from './utils.js'\r\nimport functionDsl from './function-dsl.js'\r\nimport arrayDsl from './array-dsl.js'\r\nimport {\r\n withQuery,\r\n withoutQuery,\r\n injectParams,\r\n extractParams,\r\n extractParamNames,\r\n extractQuery,\r\n} from './path.js'\r\nimport invariant from './invariant.js'\r\nimport BrowserLocation from './locations/browser.js'\r\nimport MemoryLocation from './locations/memory.js'\r\nimport transition from './transition.js'\r\nimport { intercept } from './links.js'\r\nimport defineLogger from './logger.js'\r\nimport qs from './qs.js'\r\nimport { patternCompiler } from './patternCompiler.js'\r\nimport { TRANSITION_CANCELLED, TRANSITION_REDIRECTED } from './constants.js'\r\n\r\n/**\r\n * @typedef {import('./function-dsl.js').routeCallback} routeCallback\r\n * @typedef {import('./array-dsl.js').RouteDef} RouteDef\r\n * @typedef {import('./transition.js').Transition} Transition\r\n *\r\n * @typedef Route\r\n * @property {String} name\r\n * @property {String} path\r\n * @property {Object} options\r\n * @property {Route[]} routes\r\n *\r\n\r\n * @typedef {Object | 'browser' | 'memory'} LocationParam\r\n *\r\n *\r\n * @typedef RouterOptions\r\n * @property {routeCallback | RouteDef[]} [routes]\r\n * @property {LocationParam} [location]\r\n * @property {Boolean} [logError]\r\n * @property {Object} [qs]\r\n * @property {Object} [patternCompiler]\r\n *\r\n */\r\n\r\nclass Router {\r\n /**\r\n * @param {RouterOptions} [options]\r\n */\r\n constructor(options = {}) {\r\n this.nextId = 1\r\n this.state = {}\r\n this.middleware = []\r\n this.options = extend(\r\n {\r\n location: 'browser',\r\n logError: true,\r\n qs,\r\n patternCompiler,\r\n },\r\n options,\r\n )\r\n defineLogger(this, 'log', this.options.log)\r\n defineLogger(this, 'logError', this.options.logError)\r\n if (options.routes) {\r\n this.map(options.routes)\r\n }\r\n }\r\n\r\n /**\r\n * Add a middleware\r\n * @param {Function} middleware\r\n * @return {Router}\r\n * @api public\r\n */\r\n use(middleware, options = {}) {\r\n const m = typeof middleware === 'function' ? { resolve: middleware } : middleware\r\n typeof options.at === 'number'\r\n ? this.middleware.splice(options.at, 0, m)\r\n : this.middleware.push(m)\r\n m.create && m.create(this)\r\n return this\r\n }\r\n\r\n /**\r\n * Add the route map\r\n * @param {routeCallback | RouteDef[]} routes\r\n * @return {Router}\r\n * @api public\r\n */\r\n map(routes) {\r\n // create the route tree\r\n this.routes = Array.isArray(routes) ? arrayDsl(routes) : functionDsl(routes)\r\n\r\n // create the matcher list, which is like a flattened\r\n // list of routes = a list of all branches of the route tree\r\n const matchers = (this.matchers = [])\r\n // keep track of whether duplicate paths have been created,\r\n // in which case we'll warn the dev\r\n const dupes = {}\r\n // keep track of abstract routes to build index route forwarding\r\n const abstracts = {}\r\n\r\n eachBranch({ routes: this.routes }, [], (routes) => {\r\n // concatenate the paths of the list of routes\r\n let path = routes.reduce(\r\n (\r\n memo,\r\n r, // reset if there's a leading slash, otherwise concat\r\n ) =>\r\n // and keep resetting the trailing slash\r\n (r.path[0] === '/' ? r.path : `${memo}/${r.path}`).replace(/\\/$/, ''),\r\n '',\r\n )\r\n // ensure we have a leading slash\r\n if (path === '') {\r\n path = '/'\r\n }\r\n\r\n const lastRoute = routes[routes.length - 1]\r\n\r\n if (lastRoute.options.abstract) {\r\n abstracts[path] = lastRoute.name\r\n return\r\n }\r\n\r\n if (lastRoute.path === '') {\r\n let matcher\r\n matchers.some((m) => {\r\n if (m.path === path) {\r\n matcher = m\r\n return true\r\n }\r\n })\r\n\r\n if (matcher) {\r\n // remap the matcher of a parent route\r\n matcher.routes = routes\r\n } else if (abstracts[path]) {\r\n matchers.push({\r\n routes,\r\n name: abstracts[path],\r\n path,\r\n })\r\n }\r\n }\r\n\r\n // register routes\r\n matchers.push({\r\n routes,\r\n name: lastRoute.name,\r\n path,\r\n })\r\n\r\n // dupe detection\r\n if (dupes[path] && lastRoute.path !== '') {\r\n throw new Error(\r\n `Routes ${dupes[path]} and ${lastRoute.name} have the same url path '${path}'`,\r\n )\r\n }\r\n dupes[path] = lastRoute.name\r\n })\r\n\r\n function eachBranch(node, memo, fn) {\r\n node.routes.forEach((route) => {\r\n fn(memo.concat(route))\r\n\r\n if (route.routes.length) {\r\n eachBranch(route, memo.concat(route), fn)\r\n }\r\n })\r\n }\r\n\r\n return this\r\n }\r\n\r\n /**\r\n * Starts listening to the location changes.\r\n * @param {String} [path]\r\n * @return {Transition} initial transition\r\n *\r\n * @api public\r\n */\r\n listen(path) {\r\n const location = (this.location = this.createLocation(path || ''))\r\n // setup the location onChange handler\r\n location.onChange((url) => {\r\n const previousUrl = this.state.path\r\n this.dispatch(url).catch((err) => {\r\n if (err && err.type === TRANSITION_CANCELLED) {\r\n // reset the URL in case the transition has been cancelled\r\n this.location.replaceURL(previousUrl, { trigger: false })\r\n }\r\n return err\r\n })\r\n })\r\n // and also kick off the initial transition\r\n return this.dispatch(location.getURL())\r\n }\r\n\r\n /**\r\n * Transition to a different route. Passe in url or a route name followed by params and query\r\n * @param {String} name url or route name\r\n * @param {Object} [params] Optional\r\n * @param {Object} [query] Optional\r\n * @return {Transition} transition\r\n *\r\n * @api public\r\n */\r\n transitionTo(name, params, query) {\r\n if (this.state.activeTransition) {\r\n return this.replaceWith(name, params, query)\r\n }\r\n return this.doTransition('setURL', name, params, query)\r\n }\r\n\r\n /**\r\n * Like transitionTo, but doesn't leave an entry in the browser's history,\r\n * so clicking back will skip this route\r\n * @param {String} name url or route name followed by params and query\r\n * @param {Record<string, any>} [params]\r\n * @param {Record<string, any>} [query]\r\n * @return {Transition} transition\r\n *\r\n * @api public\r\n */\r\n replaceWith(name, params, query) {\r\n return this.doTransition('replaceURL', name, params, query)\r\n }\r\n\r\n /**\r\n * Create an href\r\n * @param {String} name target route name\r\n * @param {Object} [params]\r\n * @param {Object} [query]\r\n * @return {String} href\r\n *\r\n * @api public\r\n */\r\n generate(name, params, query) {\r\n invariant(this.location, 'call .listen() before using .generate()')\r\n let matcher\r\n\r\n query = query || {}\r\n\r\n this.matchers.forEach((m) => {\r\n if (m.name === name) {\r\n matcher = m\r\n }\r\n })\r\n\r\n if (!matcher) {\r\n throw new Error(`No route is named ${name}`)\r\n }\r\n\r\n const url = withQuery(this.options.qs, injectParams(matcher.path, params), query)\r\n return this.location.formatURL(url)\r\n }\r\n\r\n /**\r\n * Stop listening to URL changes\r\n * @api public\r\n */\r\n destroy() {\r\n if (this.location && this.location.destroy) {\r\n this.location.destroy()\r\n }\r\n if (this.state.activeTransition) {\r\n this.state.activeTransition.cancel()\r\n }\r\n this.state = {}\r\n this.middleware.forEach((m) => {\r\n m.destroy && m.destroy(this)\r\n })\r\n }\r\n\r\n /**\r\n * Check if the given route/params/query combo is active\r\n * @param {String} name target route name\r\n * @param {Record<string, any>} [params]\r\n * @param {Record<string, any>} [query]\r\n * @param {Boolean} [exact]\r\n * @return {Boolean}\r\n *\r\n * @api public\r\n */\r\n isActive(name, params, query, exact) {\r\n const activeRoutes = this.state.routes || []\r\n const activeParams = this.state.params\r\n const activeQuery = this.state.query\r\n\r\n let isActive =\r\n activeRoutes.some((route) => route.name === name) &&\r\n (!exact || activeRoutes[activeRoutes.length - 1].name === name)\r\n isActive =\r\n isActive && (!params || keys(params).every((key) => activeParams[key] === params[key]))\r\n isActive = isActive && (!query || keys(query).every((key) => activeQuery[key] === query[key]))\r\n\r\n return isActive\r\n }\r\n\r\n /**\r\n * @api private\r\n * @param {String} method pushState or replaceState\r\n * @param {String} name target route name\r\n * @param {Object} [params]\r\n * @param {Object} [query]\r\n * @return {Transition} transition\r\n */\r\n doTransition(method, name, params, query) {\r\n const previousUrl = this.location.getURL()\r\n\r\n let url = name\r\n if (url[0] !== '/') {\r\n url = this.generate(name, params, query)\r\n url = url.replace(/^#/, '/')\r\n }\r\n\r\n if (this.options.pushState) {\r\n url = this.location.removeRoot(url)\r\n }\r\n\r\n const transition = this.dispatch(url)\r\n\r\n transition.catch((err) => {\r\n if (err && err.type === TRANSITION_CANCELLED) {\r\n // reset the URL in case the transition has been cancelled\r\n this.location.replaceURL(previousUrl, { trigger: false })\r\n }\r\n return err\r\n })\r\n\r\n this.location[method](url, { trigger: false })\r\n\r\n return transition\r\n }\r\n\r\n /**\r\n * Match the path against the routes\r\n * @param {String} path\r\n * @return {Object} the list of matching routes and params\r\n *\r\n * @api private\r\n */\r\n match(path) {\r\n path = (path || '').replace(/\\/$/, '') || '/'\r\n let params\r\n let routes = []\r\n const pathWithoutQuery = withoutQuery(path)\r\n const { qs, patternCompiler } = this.options\r\n this.matchers.some((matcher) => {\r\n params = extractParams(matcher.path, pathWithoutQuery, patternCompiler)\r\n if (params) {\r\n routes = matcher.routes\r\n return true\r\n }\r\n })\r\n return {\r\n routes: routes.map(descriptor),\r\n params: params || {},\r\n pathname: pathWithoutQuery,\r\n query: extractQuery(qs, path) || {},\r\n }\r\n\r\n // clone the data (only a shallow clone of options)\r\n // to make sure the internal route store is not mutated\r\n // by the middleware. The middleware can mutate data\r\n // before it gets passed into the resolve middleware, but\r\n // only within the same transition. New transitions\r\n // will get to use pristine data.\r\n function descriptor(route) {\r\n return {\r\n name: route.name,\r\n path: route.path,\r\n params: pick(params, extractParamNames(route.path, patternCompiler)),\r\n options: clone(route.options),\r\n }\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param {string} path\r\n * @returns {Transition}\r\n */\r\n dispatch(path) {\r\n const match = this.match(path)\r\n const query = match.query\r\n const pathname = match.pathname\r\n\r\n const activeTransition = this.state.activeTransition\r\n\r\n // if we already have an active transition with all the same\r\n // params - return that and don't do anything else\r\n if (\r\n activeTransition &&\r\n activeTransition.pathname === pathname &&\r\n isEqual(activeTransition.query, query)\r\n ) {\r\n return activeTransition\r\n }\r\n\r\n // otherwise, cancel the active transition since we're\r\n // redirecting (or initiating a brand new transition)\r\n if (activeTransition) {\r\n const err = new Error(TRANSITION_REDIRECTED)\r\n err.type = TRANSITION_REDIRECTED\r\n err.nextPath = path\r\n activeTransition.cancel(err)\r\n }\r\n\r\n // if there is no active transition, check if\r\n // this is a noop transition, in which case, return\r\n // a transition to respect the function signature,\r\n // but don't actually run any of the middleware\r\n if (!activeTransition) {\r\n if (this.state.pathname === pathname && isEqual(this.state.query, query)) {\r\n return transition({\r\n id: this.nextId++,\r\n path,\r\n match,\r\n noop: true,\r\n router: this,\r\n })\r\n }\r\n }\r\n\r\n const t = transition({\r\n id: this.nextId++,\r\n path,\r\n match,\r\n router: this,\r\n })\r\n\r\n this.state.activeTransition = t\r\n\r\n return t\r\n }\r\n\r\n /**\r\n * Create the default location.\r\n * This is used when no custom location is passed to\r\n * the listen call.\r\n * @param {LocationParam} path\r\n * @return {Object} location\r\n *\r\n * @api private\r\n */\r\n createLocation(path) {\r\n const location = this.options.location\r\n if (typeof location !== 'string') {\r\n return location\r\n }\r\n if (location === 'browser') {\r\n return new BrowserLocation(pick(this.options, ['pushState', 'root']))\r\n } else if (location === 'memory') {\r\n return new MemoryLocation({ path })\r\n } else {\r\n throw new Error('Location can be `browser`, `memory` or a custom implementation')\r\n }\r\n }\r\n\r\n log(...args) {\r\n console.info(...args)\r\n }\r\n\r\n logError(...args) {\r\n console.error(...args)\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param {Event} event\r\n * @param {HTMLAnchorElement} link\r\n * @param {Router} router\r\n */\r\nfunction defaultClickHandler(event, link, router) {\r\n event.preventDefault()\r\n router.transitionTo(router.location.removeRoot(link.getAttribute('href')))\r\n}\r\n\r\n/**\r\n * @description Helper to intercept links when using pushState but server is not configured for it\r\n * Link clicks are handled via the router avoiding browser page reload\r\n * @param {Router} router\r\n * @param {HTMLElement} el\r\n * @param {(e: Event, link: HTMLAnchorElement, router: Router) => void} clickHandler\r\n * @returns {Function} dispose\r\n */\r\nfunction interceptLinks(router, el = document, clickHandler = defaultClickHandler) {\r\n return intercept(el, (event, link) => clickHandler(event, link, router))\r\n}\r\n\r\nexport { Router, interceptLinks }\r\n","const resolved = Promise.resolve()\r\nlet routeElMap = Object.create(null)\r\nlet routeComponentMap = Object.create(null)\r\nlet routePropertiesMap = Object.create(null)\r\n\r\nlet router, rootOutlet, rootOutletEl\r\n\r\n/**\r\n * @typedef {import(\"../transition.js\").Transition} Transition\r\n *\r\n * @typedef WCRouteDef\r\n * @property {string} name\r\n * @property {string} path\r\n * @property {string | Function} component\r\n * @property {Object.<string, PropertyHook | PropertyHook[]>} [properties]\r\n * @property {boolean} [reuse]\r\n * @property {function(Transition): Promise<boolean> | boolean} [beforeEnter]\r\n * @property {function(Transition): Promise<boolean> | boolean} [beforeLeave]\r\n * @property {function(Transition): Promise<void> | void} [afterEnter]\r\n * @property {function(Transition): Promise<void> | void} [afterLeave]\r\n */\r\n\r\n/**\r\n * @callback PropertySetter\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n\r\n/**\r\n * @typedef PropertyHook\r\n * @property {function(PropertySetter): void} [init]\r\n * @property {function(Transition, PropertySetter): void} [enter]\r\n * @property {function(Transition, PropertySetter): void} [leave]\r\n * @property {function(*, HTMLElement): void} [update]\r\n */\r\n\r\n/**\r\n * @param {*} value\r\n * @return {*}\r\n */\r\nfunction parseNumber(value) {\r\n const n = parseFloat(value)\r\n const isNumeric = value == n // eslint-disable-line eqeqeq\r\n return isNumeric ? n : value\r\n}\r\n\r\nfunction getFormattedValue(value, format) {\r\n let v = value\r\n if (v !== undefined) {\r\n if (format === 'number') {\r\n v = parseNumber(value)\r\n } else if (typeof format === 'function') {\r\n v = format(value)\r\n }\r\n }\r\n return v\r\n}\r\n\r\n/**\r\n * @param {*} value\r\n * @returns {PropertyHook}\r\n */\r\nexport function fromValue(value) {\r\n return {\r\n init(setValue) {\r\n setValue(value)\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * @param {string} key\r\n * @param {string | Function} [format]\r\n * @returns {PropertyHook}\r\n */\r\nexport function fromQuery(queryKey, format) {\r\n return {\r\n enter(transition, setValue) {\r\n setValue(transition.query[queryKey], format)\r\n },\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} paramKey\r\n * @param {string | Function} format\r\n * @returns {PropertyHook}\r\n */\r\nexport function fromParam(paramKey, format) {\r\n return {\r\n enter(transition, setValue) {\r\n setValue(transition.params[paramKey], format)\r\n },\r\n }\r\n}\r\n\r\nexport function getRouteEl(route) {\r\n return routeElMap[route.name]\r\n}\r\n\r\nfunction create(instance) {\r\n router = instance\r\n rootOutlet = instance.options.outlet\r\n}\r\n\r\nfunction destroy() {\r\n router = null\r\n routeElMap = Object.create(null)\r\n routeComponentMap = Object.create(null)\r\n routePropertiesMap = Object.create(null)\r\n rootOutletEl = null\r\n}\r\n\r\nfunction isEqual(obj1, obj2) {\r\n const keys1 = Object.keys(obj1)\r\n return keys1.length === Object.keys(obj2).length && keys1.every((key) => obj2[key] === obj1[key])\r\n}\r\n\r\nfunction getOutlet(el) {\r\n const renderRoot = el.shadowRoot || el\r\n return renderRoot.querySelector(el.constructor.outlet || 'router-outlet')\r\n}\r\n\r\nfunction resolveRootOutlet() {\r\n if (rootOutletEl) return rootOutletEl\r\n if (!rootOutlet) return document.body\r\n rootOutletEl = typeof rootOutlet === 'string' ? document.querySelector(rootOutlet) : rootOutlet\r\n if (!rootOutletEl) {\r\n throw new Error(`slick-router(wc): Invalid outlet option ${rootOutlet}`)\r\n }\r\n return rootOutletEl\r\n}\r\n\r\nfunction getParentEl(transition, parentIndex) {\r\n let parent = transition.routes[parentIndex]\r\n while (parent) {\r\n if (parent.options.component) {\r\n return routeElMap[parent.name]\r\n }\r\n parent = transition.routes[--parentIndex]\r\n }\r\n}\r\n\r\nfunction getChangingIndex(prevRoutes, currentRoutes) {\r\n let index, prev, current\r\n const count = Math.max(prevRoutes.length, currentRoutes.length)\r\n for (index = 0; index < count; index++) {\r\n prev = prevRoutes[index]\r\n current = currentRoutes[index]\r\n if (!(prev && current) || prev.name !== current.name || !isEqual(prev.params, current.params)) {\r\n break\r\n }\r\n }\r\n return index\r\n}\r\n\r\nfunction runPropertyHookMethod(transition, routes, method) {\r\n for (let i = 0; i < routes.length; i++) {\r\n const { route } = routes[i]\r\n const propertiesData = routePropertiesMap[route.name]\r\n for (const { hooks, set } of Object.values(propertiesData)) {\r\n hooks.forEach((hook) => {\r\n if (typeof hook[method] === 'function') {\r\n hook[method](transition, set)\r\n }\r\n })\r\n }\r\n }\r\n}\r\n\r\nasync function runLifeCycle(transition, routes, prefix, suffix) {\r\n for (let i = 0; i < routes.length; i++) {\r\n let result\r\n const { route, el } = routes[i]\r\n const routeMethod = route.options[`${prefix}${suffix}`]\r\n if (typeof routeMethod === 'function') {\r\n result = await routeMethod(transition)\r\n if (result === false) {\r\n transition.cancel()\r\n }\r\n }\r\n if (transition.isCancelled) break\r\n const elMethod = el && el[`${prefix}Route${suffix}`]\r\n if (typeof elMethod === 'function') {\r\n result = await elMethod.call(el, transition)\r\n if (result === false) {\r\n transition.cancel()\r\n }\r\n }\r\n if (transition.isCancelled) break\r\n }\r\n}\r\n\r\nfunction resolveModule(value) {\r\n return value && value.__esModule ? value.default : value\r\n}\r\n\r\nfunction initPropertyHook(value) {\r\n if (value && typeof value === 'object') return value\r\n return fromValue(value)\r\n}\r\n\r\nfunction initProperties(route) {\r\n let propertiesData = routePropertiesMap[route.name]\r\n if (!propertiesData) {\r\n propertiesData = routePropertiesMap[route.name] = Object.create(null)\r\n const properties = route.options.properties\r\n if (properties) {\r\n for (const [name, hookOrValue] of Object.entries(properties)) {\r\n const hooks = Array.isArray(hookOrValue)\r\n ? hookOrValue.map(initPropertyHook)\r\n : [initPropertyHook(hookOrValue)]\r\n\r\n const set = (v, format) => {\r\n const propertyData = propertiesData[name]\r\n const newValue = getFormattedValue(v, format)\r\n if (propertyData.value === newValue) return\r\n propertyData.value = newValue\r\n const el = routeElMap[route.name]\r\n if (el) {\r\n el[name] = newValue\r\n }\r\n hooks.forEach((hook) => {\r\n if (typeof hook.update === 'function') {\r\n hook.update(newValue, el)\r\n }\r\n })\r\n }\r\n propertiesData[name] = { hooks, set }\r\n hooks.forEach((hook) => {\r\n if (typeof hook.init === 'function') {\r\n hook.init(set)\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n\r\nasync function resolveRoutes(routes) {\r\n const result = []\r\n\r\n for (const route of routes) {\r\n let el = route.options.reuse ? routeElMap[route.name] : undefined\r\n let Component = route.options.component\r\n if (!el && Component) {\r\n if (typeof Component === 'function' && !(Component.prototype instanceof HTMLElement)) {\r\n Component =\r\n routeComponentMap[route.name] ||\r\n (routeComponentMap[route.name] = resolveModule(await Component(route)))\r\n }\r\n el = typeof Component === 'string' ? document.createElement(Component) : new Component()\r\n routeElMap[route.name] = el\r\n el.$router = router\r\n }\r\n\r\n initProperties(route)\r\n\r\n result.push({ el, route })\r\n }\r\n return result\r\n}\r\n\r\nfunction applyProperties(el, route) {\r\n const propertiesData = routePropertiesMap[route.name]\r\n Object.entries(propertiesData).forEach(([name, { value }]) => {\r\n el[name] = value\r\n })\r\n}\r\n\r\nconst removedEls = new WeakSet()\r\nconst outletCurrentEl = new WeakMap()\r\n\r\nasync function renderElements(transition, activated, changingIndex) {\r\n // set properties of not activated elements\r\n const { path, pathname, routes, params, query } = transition\r\n const routeState = { path, pathname, routes, params, query }\r\n for (let k = 0; k < changingIndex; k++) {\r\n const route = transition.routes[k]\r\n const el = routeElMap[route.name]\r\n if (el) {\r\n el.$route = routeState\r\n applyProperties(el, route)\r\n }\r\n }\r\n for (let i = 0; i < activated.length; i++) {\r\n const { el, route } = activated[i]\r\n if (el) {\r\n const parentEl = getParentEl(transition, changingIndex + i - 1)\r\n const outletEl = parentEl ? getOutlet(parentEl) : resolveRootOutlet()\r\n if (outletEl) {\r\n const currentEl = outletCurrentEl.get(outletEl) || outletEl.firstElementChild\r\n if (currentEl) {\r\n outletEl.removeChild(currentEl)\r\n removedEls.add(currentEl)\r\n }\r\n el.$route = routeState\r\n applyProperties(el, route)\r\n outletEl.appendChild(el)\r\n outletCurrentEl.set(outletEl, el)\r\n await (el.updateComplete || resolved)\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction updateDOMTree(activated, deactivated) {\r\n let parentElRemoved\r\n for (let routeIndex = deactivated.length - 1; routeIndex >= 0; routeIndex--) {\r\n const { route, el } = deactivated[routeIndex]\r\n if (!activated.some(({ route: activeRoute }) => activeRoute.name === route.name)) {\r\n if (el) {\r\n // removes only the parent el from the deactivated els\r\n // and don't remove elements that were queued to be removed\r\n // necessary for lazy removal done in animations\r\n if (!parentElRemoved && !removedEls.has(el)) el.remove()\r\n parentElRemoved = true\r\n }\r\n routeElMap[route.name] = undefined\r\n }\r\n }\r\n}\r\n\r\nasync function resolve(transition) {\r\n const prevRoutes = transition.prev.routes\r\n const changingIndex = getChangingIndex(prevRoutes, transition.routes)\r\n const deactivated = []\r\n\r\n // deactivate previous routes from child to parent\r\n for (let routeIndex = prevRoutes.length - 1; routeIndex >= changingIndex; routeIndex--) {\r\n const route = prevRoutes[routeIndex]\r\n deactivated.push({ el: routeElMap[route.name], route })\r\n }\r\n\r\n await runLifeCycle(transition, deactivated, 'before', 'Leave')\r\n\r\n if (transition.isCancelled) return\r\n\r\n const activated = await resolveRoutes(transition.routes.slice(changingIndex))\r\n\r\n await runLifeCycle(transition, activated, 'before', 'Enter')\r\n\r\n if (transition.isCancelled) return\r\n\r\n runPropertyHookMethod(transition, activated, 'enter')\r\n\r\n await renderElements(transition, activated, changingIndex)\r\n\r\n updateDOMTree(activated, deactivated)\r\n\r\n transition.activated = activated\r\n transition.deactivated = deactivated\r\n}\r\n\r\nfunction done(transition) {\r\n runPropertyHookMethod(transition, transition.deactivated, 'leave')\r\n runLifeCycle(transition, transition.deactivated, 'after', 'Leave')\r\n runLifeCycle(transition, transition.activated, 'after', 'Enter')\r\n}\r\n\r\nexport const wc = {\r\n create,\r\n destroy,\r\n resolve,\r\n done,\r\n}\r\n","import { Router as CoreRouter, interceptLinks } from './router.js'\r\nimport { wc, fromParam, fromQuery, fromValue, getRouteEl } from './middlewares/wc.js'\r\nimport { routerLinks } from './middlewares/router-links.js'\r\nimport './components/router-links.js'\r\n\r\n/**\r\n * @typedef {import(\"./middlewares/wc.js\").WCRouteDef} WCRouteDef\r\n * @typedef {import(\"./middlewares/wc.js\").PropertyHook} PropertyHook\r\n * @typedef {import(\"./transition.js\").Transition} Transition\r\n */\r\n\r\nclass Router extends CoreRouter {\r\n constructor(options) {\r\n super(options)\r\n this.use(wc)\r\n this.use(routerLinks)\r\n }\r\n}\r\n\r\nexport { Router, interceptLinks, fromParam, fromQuery, fromValue, getRouteEl }\r\n","let eventPrefix\r\n\r\nfunction trigger(name, detail) {\r\n window.dispatchEvent(new CustomEvent(`${eventPrefix}${name}`, { detail }))\r\n}\r\n\r\nexport const events = {\r\n create: function (router) {\r\n eventPrefix = router.options.eventPrefix || 'router-'\r\n },\r\n\r\n before: function (transition) {\r\n trigger('before:transition', { transition })\r\n },\r\n\r\n done: function (transition) {\r\n trigger('transition', { transition })\r\n },\r\n\r\n cancel: function (transition, error) {\r\n if (error.type !== 'TransitionRedirected') {\r\n trigger('abort', { transition, error })\r\n }\r\n },\r\n\r\n error: function (transition, error) {\r\n trigger('abort', { transition, error })\r\n trigger('error', { transition, error })\r\n },\r\n}\r\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/**\n\t * Creates an instance of Routerx.\n\t * @class\n\t */\n\tconstructor() {\n\t\tsuper();\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\tconst htmlString = this.outerHTML;\n\n\t\tconst parser = new DOMParser();\n\t\tconst htmlDocument = parser.parseFromString(htmlString, 'text/html');\n\t\tconst rootElement = htmlDocument.querySelector('wje-router');\n\n\t\tconst routes = this.parseElement(rootElement).root;\n\n\t\tthis.router = new Router({\n\t\t\toutlet: this.outlet || 'wje-router-outlet',\n\t\t\tlog: false,\n\t\t\tlogError: true,\n\t\t\troot: this.root || '/',\n\t\t\tpushState: true,\n\t\t});\n\n\t\tthis.router.map(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","LocationBar","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]}
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) => {\r\n obj[attr] = val\r\n return obj\r\n}\r\nconst isArray = Array.isArray\r\n\r\nexport const keys = Object.keys\r\n\r\nexport const clone = (obj) => (obj ? (isArray(obj) ? obj.slice(0) : extend({}, obj)) : obj)\r\n\r\nexport const pick = (obj, attrs) =>\r\n attrs.reduce((acc, attr) => (obj[attr] === undefined ? acc : assoc(acc, attr, obj[attr])), {})\r\n\r\nexport const isEqual = (obj1, obj2) => {\r\n const keys1 = keys(obj1)\r\n return keys1.length === keys(obj2).length && keys1.every((key) => obj2[key] === obj1[key])\r\n}\r\n\r\nexport const extend = Object.assign\r\n","export default function invariant(condition, format, ...args) {\r\n if (!condition) {\r\n let argIndex = 0\r\n throw new Error('Invariant Violation: ' + format.replace(/%s/g, () => args[argIndex++]))\r\n }\r\n}\r\n","import invariant from './invariant.js'\r\n\r\n/**\r\n * @typedef {import(\"./router.js\").Route} Route\r\n */\r\n\r\n/**\r\n * @callback registerRoute\r\n * @param {string} name\r\n * @param {Object} options\r\n * @param {routeCallback} childrenCallback\r\n */\r\n\r\n/**\r\n * @callback routeCallback\r\n * @param {registerRoute} route\r\n */\r\n\r\n/**\r\n * @export\r\n * @param {routeCallback} callback\r\n * @return {Route[]}\r\n */\r\nexport default function functionDsl(callback) {\r\n let ancestors = []\r\n const matches = {}\r\n const names = {}\r\n\r\n callback(function route(name, options, childrenCallback) {\r\n let routes\r\n\r\n invariant(\r\n !names[name],\r\n 'Route names must be unique, but route \"%s\" is declared multiple times',\r\n name,\r\n )\r\n\r\n names[name] = true\r\n\r\n if (arguments.length === 1) {\r\n options = {}\r\n }\r\n\r\n if (arguments.length === 2 && typeof options === 'function') {\r\n childrenCallback = options\r\n options = {}\r\n }\r\n\r\n if (typeof options.path !== 'string') {\r\n const parts = name.split('.')\r\n options.path = parts[parts.length - 1]\r\n }\r\n\r\n // go to the next level\r\n if (childrenCallback) {\r\n ancestors = ancestors.concat(name)\r\n childrenCallback()\r\n routes = pop()\r\n ancestors.splice(-1)\r\n }\r\n\r\n // add the node to the tree\r\n push({\r\n name,\r\n path: options.path,\r\n routes: routes || [],\r\n options,\r\n })\r\n })\r\n\r\n function pop() {\r\n return matches[currentLevel()] || []\r\n }\r\n\r\n function push(route) {\r\n const level = currentLevel()\r\n matches[level] = matches[level] || []\r\n matches[level].push(route)\r\n }\r\n\r\n function currentLevel() {\r\n return ancestors.join('.')\r\n }\r\n\r\n return pop()\r\n}\r\n","/**\r\n * @typedef {import(\"./router.js\").Route} Route\r\n */\r\n\r\n/**\r\n * @typedef RouteDef\r\n * @property {string} name\r\n * @property {string} path\r\n * @property {RouteDef[]} children\r\n */\r\n\r\n/**\r\n * @export\r\n * @param {RouteDef[]} routes\r\n * @return {Route[]}\r\n */\r\nexport default function arrayDsl(routes) {\r\n const result = []\r\n\r\n routes.forEach(({ name, children, ...options }) => {\r\n if (typeof options.path !== 'string') {\r\n const parts = name.split('.')\r\n options.path = parts[parts.length - 1]\r\n }\r\n result.push({\r\n name,\r\n path: options.path,\r\n options,\r\n routes: children ? arrayDsl(children) : [],\r\n })\r\n })\r\n\r\n return result\r\n}\r\n","import invariant from './invariant.js'\r\n\r\nconst paramInjectMatcher = /:([a-zA-Z_$][a-zA-Z0-9_$?]*[?+*]?)/g\r\nconst specialParamChars = /[+*?]$/g\r\nconst queryMatcher = /\\?(.+)/\r\n\r\nconst _compiledPatterns = {}\r\n\r\nfunction compilePattern(pattern, compiler) {\r\n if (!(pattern in _compiledPatterns)) {\r\n _compiledPatterns[pattern] = compiler(pattern)\r\n }\r\n\r\n return _compiledPatterns[pattern]\r\n}\r\n\r\nexport function clearPatternCompilerCache() {\r\n for (const x in _compiledPatterns) {\r\n delete _compiledPatterns[x]\r\n }\r\n}\r\n\r\n/**\r\n * Returns an array of the names of all parameters in the given pattern.\r\n */\r\nexport function extractParamNames(pattern, compiler) {\r\n return compilePattern(pattern, compiler).paramNames\r\n}\r\n\r\n/**\r\n * Extracts the portions of the given URL path that match the given pattern\r\n * and returns an object of param name => value pairs. Returns null if the\r\n * pattern does not match the given path.\r\n */\r\nexport function extractParams(pattern, path, compiler) {\r\n const cp = compilePattern(pattern, compiler)\r\n const matcher = cp.matcher\r\n const paramNames = cp.paramNames\r\n const match = path.match(matcher)\r\n\r\n if (!match) {\r\n return null\r\n }\r\n\r\n const params = {}\r\n\r\n paramNames.forEach(function (paramName, index) {\r\n params[paramName] = match[index + 1] && decodeURIComponent(match[index + 1])\r\n })\r\n\r\n return params\r\n}\r\n\r\n/**\r\n * Returns a version of the given route path with params interpolated. Throws\r\n * if there is a dynamic segment of the route path for which there is no param.\r\n */\r\nexport function injectParams(pattern, params) {\r\n params = params || {}\r\n\r\n return pattern.replace(paramInjectMatcher, function (match, param) {\r\n const paramName = param.replace(specialParamChars, '')\r\n const lastChar = param.slice(-1)\r\n\r\n // If param is optional don't check for existence\r\n if (lastChar === '?' || lastChar === '*') {\r\n if (params[paramName] == null) {\r\n return ''\r\n }\r\n } else {\r\n invariant(\r\n params[paramName] != null,\r\n \"Missing '%s' parameter for path '%s'\",\r\n paramName,\r\n pattern,\r\n )\r\n }\r\n\r\n let paramValue = encodeURIComponent(params[paramName])\r\n if (lastChar === '*' || lastChar === '+') {\r\n // restore / for splats\r\n paramValue = paramValue.replace('%2F', '/')\r\n }\r\n return paramValue\r\n })\r\n}\r\n\r\n/**\r\n * Returns an object that is the result of parsing any query string contained\r\n * in the given path, null if the path contains no query string.\r\n */\r\nexport function extractQuery(qs, path) {\r\n const match = path.match(queryMatcher)\r\n return match && qs.parse(match[1])\r\n}\r\n\r\n/**\r\n * Returns a version of the given path with the parameters in the given\r\n * query merged into the query string.\r\n */\r\nexport function withQuery(qs, path, query) {\r\n const queryString = qs.stringify(query, { indices: false })\r\n\r\n if (queryString) {\r\n return withoutQuery(path) + '?' + queryString\r\n }\r\n\r\n return path\r\n}\r\n\r\n/**\r\n * Returns a version of the given path without the query string.\r\n */\r\nexport function withoutQuery(path) {\r\n return path.replace(queryMatcher, '')\r\n}\r\n","/**\r\n * Bind `el` event `type` to `fn`.\r\n *\r\n * @param {Element} el\r\n * @param {String} type\r\n * @param {Function} fn\r\n * @return {Function}\r\n * @api public\r\n */\r\n\r\nexport function bindEvent(el, type, fn) {\r\n el.addEventListener(type, fn)\r\n return fn\r\n}\r\n\r\n/**\r\n * Unbind `el` event `type`'s callback `fn`.\r\n *\r\n * @param {Element} el\r\n * @param {String} type\r\n * @param {Function} fn\r\n * @return {Function}\r\n * @api public\r\n */\r\n\r\nexport function unbindEvent(el, type, fn) {\r\n el.removeEventListener(type, fn)\r\n return fn\r\n}\r\n","/* eslint-disable */\r\n// LocationBar module extracted from Backbone.js 1.1.0\r\n//\r\n// the dependency on backbone, underscore and jquery have been removed to turn\r\n// this into a small standalone library for handling browser's history API\r\n// cross browser and with a fallback to hashchange events or polling.\r\n\r\nimport {extend} from '../utils.js'\r\nimport {bindEvent, unbindEvent} from '../events.js'\r\n\r\n// this is mostly original code with minor modifications\r\n// to avoid dependency on 3rd party libraries\r\n//\r\n// Backbone.History\r\n// ----------------\r\n\r\n// Handles cross-browser history management, based on either\r\n// [pushState](http://diveintohtml5.info/history.html) and real URLs, or\r\n// [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\r\n// and URL fragments.\r\nclass History {\r\n constructor() {\r\n this.handlers = [];\r\n this.checkUrl = this.checkUrl.bind(this);\r\n this.location = window.location;\r\n this.history = window.history;\r\n }\r\n\r\n // Set up all inheritable **Backbone.History** properties and methods.\r\n // Are we at the app root?\r\n atRoot() {\r\n return this.location.pathname.replace(/[^\\/]$/, '$&/') === this.root;\r\n }\r\n\r\n // Gets the true hash value. Cannot use location.hash directly due to bug\r\n // in Firefox where location.hash will always be decoded.\r\n getHash() {\r\n const match = this.location.href.match(/#(.*)$/);\r\n return match ? match[1] : '';\r\n }\r\n\r\n // Get the cross-browser normalized URL fragment, either from the URL,\r\n // the hash, or the override.\r\n getFragment(fragment, forcePushState) {\r\n if (fragment == null) {\r\n if (this._hasPushState || !this._wantsHashChange || forcePushState) {\r\n fragment = decodeURI(this.location.pathname + this.location.search);\r\n const root = this.root.replace(trailingSlash, '');\r\n if (!fragment.indexOf(root)) fragment = fragment.slice(root.length);\r\n } else {\r\n fragment = this.getHash();\r\n }\r\n }\r\n return fragment.replace(routeStripper, '');\r\n }\r\n\r\n // Start the hash change handling, returning `true` if the current URL matches\r\n // an existing route, and `false` otherwise.\r\n start(options = {}) {\r\n // MODIFICATION OF ORIGINAL BACKBONE.HISTORY\r\n // if (History.started) throw new Error(\"LocationBar has already been started\");\r\n // History.started = true;\r\n this.started = true;\r\n\r\n // Figure out the initial configuration.\r\n // Is pushState desired ... is it available?\r\n this.options = extend({root: '/'}, options);\r\n this.location = this.options.location || this.location;\r\n this.history = this.options.history || this.history;\r\n this.root = this.options.root;\r\n this._wantsHashChange = this.options.hashChange !== false;\r\n this._wantsPushState = !!this.options.pushState;\r\n this._hasPushState = this._wantsPushState;\r\n const fragment = this.getFragment();\r\n\r\n // Normalize root to always include a leading and trailing slash.\r\n this.root = (`/${this.root}/`).replace(rootStripper, '/');\r\n\r\n // Depending on whether we're using pushState or hashes, and whether\r\n // 'onhashchange' is supported, determine how we check the URL state.\r\n bindEvent(window, this._hasPushState ? 'popstate' : 'hashchange', this.checkUrl);\r\n\r\n // Determine if we need to change the base url, for a pushState link\r\n // opened by a non-pushState browser.\r\n this.fragment = fragment;\r\n const loc = this.location;\r\n\r\n // Transition from hashChange to pushState or vice versa if both are\r\n // requested.\r\n if (this._wantsHashChange && this._wantsPushState) {\r\n\r\n // If we've started off with a route from a `pushState`-enabled\r\n // browser, but we're currently in a browser that doesn't support it...\r\n if (!this._hasPushState && !this.atRoot()) {\r\n this.fragment = this.getFragment(null, true);\r\n this.location.replace(`${this.root}#${this.fragment}`);\r\n // Return immediately as browser will do redirect to new url\r\n return true;\r\n\r\n // Or if we've started out with a hash-based route, but we're currently\r\n // in a browser where it could be `pushState`-based instead...\r\n } else if (this._hasPushState && this.atRoot() && loc.hash) {\r\n this.fragment = this.getHash().replace(routeStripper, '');\r\n this.history.replaceState({}, document.title, this.root + this.fragment);\r\n }\r\n\r\n }\r\n\r\n if (!this.options.silent) return this.loadUrl();\r\n }\r\n\r\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\r\n // but possibly useful for unit testing Routers.\r\n stop() {\r\n unbindEvent(window, this._hasPushState ? 'popstate' : 'hashchange', this.checkUrl);\r\n this.started = false;\r\n }\r\n\r\n // Add a route to be tested when the fragment changes. Routes added later\r\n // may override previous routes.\r\n route(route, callback) {\r\n this.handlers.unshift({route, callback});\r\n }\r\n\r\n // Checks the current URL to see if it has changed, and if it has,\r\n // calls `loadUrl`.\r\n checkUrl() {\r\n const current = this.getFragment();\r\n if (current === this.fragment) return false;\r\n this.loadUrl();\r\n }\r\n\r\n // Attempt to load the current URL fragment. If a route succeeds with a\r\n // match, returns `true`. If no defined routes matches the fragment,\r\n // returns `false`.\r\n loadUrl(fragment) {\r\n fragment = this.fragment = this.getFragment(fragment);\r\n return this.handlers.some(handler => {\r\n if (handler.route.test(fragment)) {\r\n handler.callback(fragment);\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n // Save a fragment into the hash history, or replace the URL state if the\r\n // 'replace' option is passed. You are responsible for properly URL-encoding\r\n // the fragment in advance.\r\n //\r\n // The options object can contain `trigger: true` if you wish to have the\r\n // route callback be fired (not usually desirable), or `replace: true`, if\r\n // you wish to modify the current URL without adding an entry to the history.\r\n update(fragment, options) {\r\n if (!this.started) return false;\r\n if (!options || options === true) options = {trigger: !!options};\r\n\r\n let url = this.root + (fragment = this.getFragment(fragment || ''));\r\n\r\n // Strip the hash for matching.\r\n fragment = fragment.replace(pathStripper, '');\r\n\r\n if (this.fragment === fragment) return;\r\n this.fragment = fragment;\r\n\r\n // Don't include a trailing slash on the root.\r\n if (fragment === '' && url !== '/') url = url.slice(0, -1);\r\n\r\n // If pushState is available, we use it to set the fragment as a real URL.\r\n if (this._hasPushState) {\r\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\r\n\r\n // If hash changes haven't been explicitly disabled, update the hash\r\n // fragment to store history.\r\n } else if (this._wantsHashChange) {\r\n this._updateHash(this.location, fragment, options.replace);\r\n // If you've told us that you explicitly don't want fallback hashchange-\r\n // based history, then `update` becomes a page refresh.\r\n } else {\r\n return this.location.assign(url);\r\n }\r\n if (options.trigger) return this.loadUrl(fragment);\r\n }\r\n\r\n // Update the hash location, either replacing the current entry, or adding\r\n // a new one to the browser history.\r\n _updateHash(location, fragment, replace) {\r\n if (replace) {\r\n const href = location.href.replace(/(javascript:|#).*$/, '');\r\n location.replace(`${href}#${fragment}`);\r\n } else {\r\n // Some browsers require that `hash` contains a leading #.\r\n location.hash = `#${fragment}`;\r\n }\r\n }\r\n\r\n // add some features to History\r\n\r\n // a generic callback for any changes\r\n onChange(callback) {\r\n this.route(/^(.*?)$/, callback);\r\n }\r\n\r\n // checks if the browser has pushstate support\r\n hasPushState() {\r\n // MODIFICATION OF ORIGINAL BACKBONE.HISTORY\r\n if (!this.started) {\r\n throw new Error(\"only available after LocationBar.start()\");\r\n }\r\n return this._hasPushState;\r\n }\r\n}\r\n\r\n// Cached regex for stripping a leading hash/slash and trailing space.\r\nconst routeStripper = /^[#\\/]|\\s+$/g;\r\n\r\n// Cached regex for stripping leading and trailing slashes.\r\nconst rootStripper = /^\\/+|\\/+$/g;\r\n\r\n// Cached regex for removing a trailing slash.\r\nconst trailingSlash = /\\/$/;\r\n\r\n// Cached regex for stripping urls of hash.\r\nconst pathStripper = /#.*$/;\r\n\r\n\r\n// export\r\nexport default History;\r\n","import { extend } from '../utils.js'\r\nimport LocationBar from './location-bar.js'\r\n\r\nclass BrowserLocation {\r\n constructor(options = {}) {\r\n this.path = options.path || ''\r\n\r\n this.options = extend(\r\n {\r\n pushState: false,\r\n root: '/',\r\n },\r\n options,\r\n )\r\n\r\n // we're using the location-bar module for actual\r\n // URL management\r\n this.locationBar = new LocationBar()\r\n this.locationBar.onChange((path) => {\r\n this.handleURL(`/${path || ''}`)\r\n })\r\n\r\n this.locationBar.start(options)\r\n }\r\n\r\n /**\r\n * Get the current URL\r\n */\r\n\r\n getURL() {\r\n return this.path\r\n }\r\n\r\n /**\r\n * Set the current URL without triggering any events\r\n * back to the router. Add a new entry in browser's history.\r\n */\r\n\r\n setURL(path, options = {}) {\r\n if (this.path !== path) {\r\n this.path = path\r\n this.locationBar.update(path, extend({ trigger: true }, options))\r\n }\r\n }\r\n\r\n /**\r\n * Set the current URL without triggering any events\r\n * back to the router. Replace the latest entry in broser's history.\r\n */\r\n\r\n replaceURL(path, options = {}) {\r\n if (this.path !== path) {\r\n this.path = path\r\n this.locationBar.update(path, extend({ trigger: true, replace: true }, options))\r\n }\r\n }\r\n\r\n /**\r\n * Setup a URL change handler\r\n * @param {Function} callback\r\n */\r\n onChange(callback) {\r\n this.changeCallback = callback\r\n }\r\n\r\n /**\r\n * Given a path, generate a URL appending root\r\n * if pushState is used and # if hash state is used\r\n */\r\n formatURL(path) {\r\n if (this.locationBar.hasPushState()) {\r\n let rootURL = this.options.root\r\n if (path !== '') {\r\n rootURL = rootURL.replace(/\\/$/, '')\r\n }\r\n return rootURL + path\r\n } else {\r\n if (path[0] === '/') {\r\n path = path.substr(1)\r\n }\r\n return `#${path}`\r\n }\r\n }\r\n\r\n /**\r\n * When we use pushState with a custom root option,\r\n * we need to take care of removingRoot at certain points.\r\n * Specifically\r\n * - browserLocation.update() can be called with the full URL by router\r\n * - LocationBar expects all .update() calls to be called without root\r\n * - this method is public so that we could dispatch URLs without root in router\r\n */\r\n removeRoot(url) {\r\n if (this.options.pushState && this.options.root && this.options.root !== '/') {\r\n return url.replace(this.options.root, '')\r\n } else {\r\n return url\r\n }\r\n }\r\n\r\n /**\r\n * Stop listening to URL changes and link clicks\r\n */\r\n destroy() {\r\n this.locationBar.stop()\r\n }\r\n\r\n /**\r\n initially, the changeCallback won't be defined yet, but that's good\r\n because we dont' want to kick off routing right away, the router\r\n does that later by manually calling this handleURL method with the\r\n url it reads of the location. But it's important this is called\r\n first by Backbone, because we wanna set a correct this.path value\r\n\r\n @private\r\n */\r\n handleURL(url) {\r\n this.path = url\r\n if (this.changeCallback) {\r\n this.changeCallback(url)\r\n }\r\n }\r\n}\r\n\r\nexport default BrowserLocation\r\n","import { extend } from '../utils.js'\r\n\r\nclass MemoryLocation {\r\n constructor({ path }) {\r\n this.path = path || ''\r\n }\r\n\r\n getURL() {\r\n return this.path\r\n }\r\n\r\n setURL(path, options) {\r\n if (this.path !== path) {\r\n this.path = path\r\n this.handleURL(this.getURL(), options)\r\n }\r\n }\r\n\r\n replaceURL(path, options) {\r\n if (this.path !== path) {\r\n this.setURL(path, options)\r\n }\r\n }\r\n\r\n onChange(callback) {\r\n this.changeCallback = callback\r\n }\r\n\r\n handleURL(url, options = {}) {\r\n this.path = url\r\n options = extend({ trigger: true }, options)\r\n if (this.changeCallback && options.trigger) {\r\n this.changeCallback(url)\r\n }\r\n }\r\n\r\n removeRoot(url) {\r\n return url\r\n }\r\n\r\n formatURL(url) {\r\n return url\r\n }\r\n}\r\n\r\nexport default MemoryLocation\r\n","export const TRANSITION_REDIRECTED = 'TransitionRedirected'\r\n\r\nexport const TRANSITION_CANCELLED = 'TransitionCancelled'\r\n","import { clone } from './utils.js'\r\nimport invariant from './invariant.js'\r\nimport { TRANSITION_CANCELLED, TRANSITION_REDIRECTED } from './constants.js'\r\n\r\n/**\r\n * @typedef {import(\"./router.js\").Route} Route\r\n */\r\n\r\n/**\r\n * @typedef {Pick<Transition, 'routes' | 'pathname' | 'path' | 'params' | 'query' >} TransitionData\r\n */\r\n\r\n/**\r\n * @typedef Transition\r\n * @property {Route[]} routes\r\n * @property {string} pathname\r\n * @property {string} path\r\n * @property {Object} params\r\n * @property {Object} query\r\n * @property {TransitionData} prev\r\n * @property {(name: string, params?: any, query?: any) => Transition} redirectTo\r\n * @property {(name: string, params?: any, query?: any) => Transition} retry\r\n * @property {(error: string | Error) => void} cancel\r\n * @property {() => Promise<any>} followRedirects\r\n * @property {function} then\r\n * @property {function} catch\r\n * @property {boolean} noop\r\n * @property {boolean} isCancelled\r\n */\r\n\r\n/**\r\n * @param {*} router\r\n * @param {Transition} transition\r\n * @param {*} err\r\n */\r\nfunction runError(router, transition, err) {\r\n router.middleware.forEach((m) => {\r\n m.error && m.error(transition, err)\r\n })\r\n}\r\n\r\n/**\r\n * @export\r\n * @param {*} options\r\n * @return {Transition}\r\n */\r\nexport default function transition(options) {\r\n options = options || {}\r\n\r\n const router = options.router\r\n const log = router.log\r\n const logError = router.logError\r\n\r\n const path = options.path\r\n const match = options.match\r\n const routes = match.routes\r\n const params = match.params\r\n const pathname = match.pathname\r\n const query = match.query\r\n\r\n const id = options.id\r\n const startTime = Date.now()\r\n log('---')\r\n log('Transition #' + id, 'to', path)\r\n log(\r\n 'Transition #' + id,\r\n 'routes:',\r\n routes.map((r) => r.name),\r\n )\r\n log('Transition #' + id, 'params:', params)\r\n log('Transition #' + id, 'query:', query)\r\n\r\n // create the transition promise\r\n let resolve, reject\r\n const promise = new Promise(function (res, rej) {\r\n resolve = res\r\n reject = rej\r\n })\r\n\r\n // 1. make transition errors loud\r\n // 2. by adding this handler we make sure\r\n // we don't trigger the default 'Potentially\r\n // unhandled rejection' for cancellations\r\n promise\r\n .then(function () {\r\n log('Transition #' + id, 'completed in', Date.now() - startTime + 'ms')\r\n })\r\n .catch(function (err) {\r\n if (err.type !== TRANSITION_REDIRECTED && err.type !== TRANSITION_CANCELLED) {\r\n log('Transition #' + id, 'FAILED')\r\n logError(err)\r\n }\r\n })\r\n\r\n let cancelled = false\r\n\r\n const transition = {\r\n id,\r\n prev: {\r\n routes: clone(router.state.routes) || [],\r\n path: router.state.path || '',\r\n pathname: router.state.pathname || '',\r\n params: clone(router.state.params) || {},\r\n query: clone(router.state.query) || {},\r\n },\r\n routes: clone(routes),\r\n path,\r\n pathname,\r\n params: clone(params),\r\n query: clone(query),\r\n redirectTo: function (...args) {\r\n return router.transitionTo(...args)\r\n },\r\n retry: function () {\r\n return router.transitionTo(path)\r\n },\r\n cancel: function (err) {\r\n if (router.state.activeTransition !== transition) {\r\n return\r\n }\r\n\r\n if (transition.isCancelled) {\r\n return\r\n }\r\n\r\n router.state.activeTransition = null\r\n transition.isCancelled = true\r\n cancelled = true\r\n\r\n if (!err) {\r\n err = new Error(TRANSITION_CANCELLED)\r\n err.type = TRANSITION_CANCELLED\r\n }\r\n if (err.type === TRANSITION_CANCELLED) {\r\n log('Transition #' + id, 'cancelled')\r\n }\r\n if (err.type === TRANSITION_REDIRECTED) {\r\n log('Transition #' + id, 'redirected')\r\n }\r\n\r\n router.middleware.forEach((m) => {\r\n m.cancel && m.cancel(transition, err)\r\n })\r\n reject(err)\r\n },\r\n followRedirects: function () {\r\n return promise.catch(function (reason) {\r\n if (router.state.activeTransition) {\r\n return router.state.activeTransition.followRedirects()\r\n }\r\n return Promise.reject(reason)\r\n })\r\n },\r\n\r\n then: promise.then.bind(promise),\r\n catch: promise.catch.bind(promise),\r\n }\r\n\r\n router.middleware.forEach((m) => {\r\n m.before && m.before(transition)\r\n })\r\n\r\n // here we handle calls to all of the middlewares\r\n function callNext(i, prevResult) {\r\n let middleware\r\n let middlewareName\r\n // if transition has been cancelled - nothing left to do\r\n if (cancelled) {\r\n return\r\n }\r\n // done\r\n if (i < router.middleware.length) {\r\n middleware = router.middleware[i]\r\n middlewareName = middleware.name || 'anonymous'\r\n log('Transition #' + id, 'resolving middleware:', middlewareName)\r\n let middlewarePromise\r\n try {\r\n middlewarePromise = middleware.resolve\r\n ? middleware.resolve(transition, prevResult)\r\n : prevResult\r\n invariant(\r\n transition !== middlewarePromise,\r\n 'Middleware %s returned a transition which resulted in a deadlock',\r\n middlewareName,\r\n )\r\n } catch (err) {\r\n router.state.activeTransition = null\r\n runError(router, transition, err)\r\n return reject(err)\r\n }\r\n Promise.resolve(middlewarePromise)\r\n .then(function (result) {\r\n callNext(i + 1, result)\r\n })\r\n .catch(function (err) {\r\n log('Transition #' + id, 'resolving middleware:', middlewareName, 'FAILED')\r\n router.state.activeTransition = null\r\n runError(router, transition, err)\r\n reject(err)\r\n })\r\n } else {\r\n router.state = {\r\n activeTransition: null,\r\n routes,\r\n path,\r\n pathname,\r\n params,\r\n query,\r\n }\r\n router.middleware.forEach((m) => {\r\n m.done && m.done(transition)\r\n })\r\n resolve()\r\n }\r\n }\r\n\r\n if (!options.noop) {\r\n Promise.resolve().then(() => callNext(0))\r\n } else {\r\n resolve()\r\n }\r\n\r\n if (options.noop) {\r\n transition.noop = true\r\n }\r\n\r\n return transition\r\n}\r\n","import { bindEvent, unbindEvent } from './events.js'\r\n\r\n/**\r\n * Handle link delegation on `el` or the document,\r\n * and invoke `fn(e)` when clickable.\r\n *\r\n * @param {Element} el\r\n * @param {(e: Event, el: HTMLElement) => void} fn\r\n * @return {Function} dispose\r\n * @api public\r\n */\r\n\r\nexport function intercept(el, fn) {\r\n const cb = delegate(el, 'click', function (e, el) {\r\n if (clickable(e, el)) fn(e, el)\r\n })\r\n\r\n return function dispose() {\r\n unbindEvent(el, 'click', cb)\r\n }\r\n}\r\n\r\n/**\r\n * Delegate event `type` to links\r\n * and invoke `fn(e)`. A callback function\r\n * is returned which may be passed to `.unbind()`.\r\n *\r\n * @param {HTMLElement} el\r\n * @param {String} selector\r\n * @param {String} type\r\n * @param {(e: Event, el: HTMLElement) => void} fn\r\n * @return {Function}\r\n * @api public\r\n */\r\n\r\nfunction delegate(el, type, fn) {\r\n return bindEvent(el, type, function (e) {\r\n const el = e.target.closest('a')\r\n if (el) {\r\n fn(e, el)\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * Check if `e` is clickable.\r\n */\r\n\r\n/**\r\n * @param {Event} e\r\n * @param {HTMLElement} el\r\n * @return {Boolean | undefined}\r\n */\r\nfunction clickable(e, el) {\r\n if (which(e) !== 1) return\r\n if (e.metaKey || e.ctrlKey || e.shiftKey) return\r\n if (e.defaultPrevented) return\r\n\r\n // check target\r\n if (el.target) return\r\n\r\n // check for data-bypass attribute\r\n if (el.getAttribute('data-bypass') !== null) return\r\n\r\n // inspect the href\r\n const href = el.getAttribute('href')\r\n if (!href || href.length === 0) return\r\n\r\n // don't handle hash links, external/absolute links, email links and javascript links\r\n if (/^(#|https{0,1}:\\/\\/|mailto|javascript:)/i.test(href)) return\r\n\r\n return true\r\n}\r\n\r\n/**\r\n * Event button.\r\n */\r\n\r\nfunction which(e) {\r\n e = e || window.event\r\n return e.which === null ? e.button : e.which\r\n}\r\n","export default function defineLogger(router, method, fn) {\r\n if (fn === true) return\r\n router[method] = typeof fn === 'function' ? fn : () => {}\r\n}\r\n","export default {\r\n parse(querystring) {\r\n return querystring.split('&').reduce((acc, pair) => {\r\n const parts = pair.split('=')\r\n acc[parts[0]] = decodeURIComponent(parts[1])\r\n return acc\r\n }, {})\r\n },\r\n\r\n stringify(params) {\r\n return Object.keys(params)\r\n .reduce((acc, key) => {\r\n if (params[key] !== undefined) {\r\n acc.push(key + '=' + encodeURIComponent(params[key]))\r\n }\r\n return acc\r\n }, [])\r\n .join('&')\r\n },\r\n}\r\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'\r\n\r\nconst splatRegex = /:(\\w+)\\*/\r\n\r\nexport function patternCompiler(pattern) {\r\n // hack to add (partial) named splat support\r\n const splatMatch = splatRegex.exec(pattern)\r\n const normalizedPattern = splatMatch ? pattern.replace(splatRegex, '*') : pattern\r\n\r\n const { pattern: matcher, keys } = parse(normalizedPattern)\r\n\r\n const paramNames = splatMatch ? keys.map((key) => (key === '*' ? splatMatch[1] : key)) : keys\r\n\r\n return {\r\n matcher,\r\n paramNames,\r\n }\r\n}\r\n","/* eslint-disable array-callback-return */\r\nimport { pick, clone, extend, isEqual, keys } from './utils.js'\r\nimport functionDsl from './function-dsl.js'\r\nimport arrayDsl from './array-dsl.js'\r\nimport {\r\n withQuery,\r\n withoutQuery,\r\n injectParams,\r\n extractParams,\r\n extractParamNames,\r\n extractQuery,\r\n} from './path.js'\r\nimport invariant from './invariant.js'\r\nimport BrowserLocation from './locations/browser.js'\r\nimport MemoryLocation from './locations/memory.js'\r\nimport transition from './transition.js'\r\nimport { intercept } from './links.js'\r\nimport defineLogger from './logger.js'\r\nimport qs from './qs.js'\r\nimport { patternCompiler } from './patternCompiler.js'\r\nimport { TRANSITION_CANCELLED, TRANSITION_REDIRECTED } from './constants.js'\r\n\r\n/**\r\n * @typedef {import('./function-dsl.js').routeCallback} routeCallback\r\n * @typedef {import('./array-dsl.js').RouteDef} RouteDef\r\n * @typedef {import('./transition.js').Transition} Transition\r\n *\r\n * @typedef Route\r\n * @property {String} name\r\n * @property {String} path\r\n * @property {Object} options\r\n * @property {Route[]} routes\r\n *\r\n\r\n * @typedef {Object | 'browser' | 'memory'} LocationParam\r\n *\r\n *\r\n * @typedef RouterOptions\r\n * @property {routeCallback | RouteDef[]} [routes]\r\n * @property {LocationParam} [location]\r\n * @property {Boolean} [logError]\r\n * @property {Object} [qs]\r\n * @property {Object} [patternCompiler]\r\n *\r\n */\r\n\r\nclass Router {\r\n /**\r\n * @param {RouterOptions} [options]\r\n */\r\n constructor(options = {}) {\r\n this.nextId = 1\r\n this.state = {}\r\n this.middleware = []\r\n this.options = extend(\r\n {\r\n location: 'browser',\r\n logError: true,\r\n qs,\r\n patternCompiler,\r\n },\r\n options,\r\n )\r\n defineLogger(this, 'log', this.options.log)\r\n defineLogger(this, 'logError', this.options.logError)\r\n if (options.routes) {\r\n this.map(options.routes)\r\n }\r\n }\r\n\r\n /**\r\n * Add a middleware\r\n * @param {Function} middleware\r\n * @return {Router}\r\n * @api public\r\n */\r\n use(middleware, options = {}) {\r\n const m = typeof middleware === 'function' ? { resolve: middleware } : middleware\r\n typeof options.at === 'number'\r\n ? this.middleware.splice(options.at, 0, m)\r\n : this.middleware.push(m)\r\n m.create && m.create(this)\r\n return this\r\n }\r\n\r\n /**\r\n * Add the route map\r\n * @param {routeCallback | RouteDef[]} routes\r\n * @return {Router}\r\n * @api public\r\n */\r\n map(routes) {\r\n // create the route tree\r\n this.routes = Array.isArray(routes) ? arrayDsl(routes) : functionDsl(routes)\r\n\r\n // create the matcher list, which is like a flattened\r\n // list of routes = a list of all branches of the route tree\r\n const matchers = (this.matchers = [])\r\n // keep track of whether duplicate paths have been created,\r\n // in which case we'll warn the dev\r\n const dupes = {}\r\n // keep track of abstract routes to build index route forwarding\r\n const abstracts = {}\r\n\r\n eachBranch({ routes: this.routes }, [], (routes) => {\r\n // concatenate the paths of the list of routes\r\n let path = routes.reduce(\r\n (\r\n memo,\r\n r, // reset if there's a leading slash, otherwise concat\r\n ) =>\r\n // and keep resetting the trailing slash\r\n (r.path[0] === '/' ? r.path : `${memo}/${r.path}`).replace(/\\/$/, ''),\r\n '',\r\n )\r\n // ensure we have a leading slash\r\n if (path === '') {\r\n path = '/'\r\n }\r\n\r\n const lastRoute = routes[routes.length - 1]\r\n\r\n if (lastRoute.options.abstract) {\r\n abstracts[path] = lastRoute.name\r\n return\r\n }\r\n\r\n if (lastRoute.path === '') {\r\n let matcher\r\n matchers.some((m) => {\r\n if (m.path === path) {\r\n matcher = m\r\n return true\r\n }\r\n })\r\n\r\n if (matcher) {\r\n // remap the matcher of a parent route\r\n matcher.routes = routes\r\n } else if (abstracts[path]) {\r\n matchers.push({\r\n routes,\r\n name: abstracts[path],\r\n path,\r\n })\r\n }\r\n }\r\n\r\n // register routes\r\n matchers.push({\r\n routes,\r\n name: lastRoute.name,\r\n path,\r\n })\r\n\r\n // dupe detection\r\n if (dupes[path] && lastRoute.path !== '') {\r\n throw new Error(\r\n `Routes ${dupes[path]} and ${lastRoute.name} have the same url path '${path}'`,\r\n )\r\n }\r\n dupes[path] = lastRoute.name\r\n })\r\n\r\n function eachBranch(node, memo, fn) {\r\n node.routes.forEach((route) => {\r\n fn(memo.concat(route))\r\n\r\n if (route.routes.length) {\r\n eachBranch(route, memo.concat(route), fn)\r\n }\r\n })\r\n }\r\n\r\n return this\r\n }\r\n\r\n /**\r\n * Starts listening to the location changes.\r\n * @param {String} [path]\r\n * @return {Transition} initial transition\r\n *\r\n * @api public\r\n */\r\n listen(path) {\r\n const location = (this.location = this.createLocation(path || ''))\r\n // setup the location onChange handler\r\n location.onChange((url) => {\r\n const previousUrl = this.state.path\r\n this.dispatch(url).catch((err) => {\r\n if (err && err.type === TRANSITION_CANCELLED) {\r\n // reset the URL in case the transition has been cancelled\r\n this.location.replaceURL(previousUrl, { trigger: false })\r\n }\r\n return err\r\n })\r\n })\r\n // and also kick off the initial transition\r\n return this.dispatch(location.getURL())\r\n }\r\n\r\n /**\r\n * Transition to a different route. Passe in url or a route name followed by params and query\r\n * @param {String} name url or route name\r\n * @param {Object} [params] Optional\r\n * @param {Object} [query] Optional\r\n * @return {Transition} transition\r\n *\r\n * @api public\r\n */\r\n transitionTo(name, params, query) {\r\n if (this.state.activeTransition) {\r\n return this.replaceWith(name, params, query)\r\n }\r\n return this.doTransition('setURL', name, params, query)\r\n }\r\n\r\n /**\r\n * Like transitionTo, but doesn't leave an entry in the browser's history,\r\n * so clicking back will skip this route\r\n * @param {String} name url or route name followed by params and query\r\n * @param {Record<string, any>} [params]\r\n * @param {Record<string, any>} [query]\r\n * @return {Transition} transition\r\n *\r\n * @api public\r\n */\r\n replaceWith(name, params, query) {\r\n return this.doTransition('replaceURL', name, params, query)\r\n }\r\n\r\n /**\r\n * Create an href\r\n * @param {String} name target route name\r\n * @param {Object} [params]\r\n * @param {Object} [query]\r\n * @return {String} href\r\n *\r\n * @api public\r\n */\r\n generate(name, params, query) {\r\n invariant(this.location, 'call .listen() before using .generate()')\r\n let matcher\r\n\r\n query = query || {}\r\n\r\n this.matchers.forEach((m) => {\r\n if (m.name === name) {\r\n matcher = m\r\n }\r\n })\r\n\r\n if (!matcher) {\r\n throw new Error(`No route is named ${name}`)\r\n }\r\n\r\n const url = withQuery(this.options.qs, injectParams(matcher.path, params), query)\r\n return this.location.formatURL(url)\r\n }\r\n\r\n /**\r\n * Stop listening to URL changes\r\n * @api public\r\n */\r\n destroy() {\r\n if (this.location && this.location.destroy) {\r\n this.location.destroy()\r\n }\r\n if (this.state.activeTransition) {\r\n this.state.activeTransition.cancel()\r\n }\r\n this.state = {}\r\n this.middleware.forEach((m) => {\r\n m.destroy && m.destroy(this)\r\n })\r\n }\r\n\r\n /**\r\n * Check if the given route/params/query combo is active\r\n * @param {String} name target route name\r\n * @param {Record<string, any>} [params]\r\n * @param {Record<string, any>} [query]\r\n * @param {Boolean} [exact]\r\n * @return {Boolean}\r\n *\r\n * @api public\r\n */\r\n isActive(name, params, query, exact) {\r\n const activeRoutes = this.state.routes || []\r\n const activeParams = this.state.params\r\n const activeQuery = this.state.query\r\n\r\n let isActive =\r\n activeRoutes.some((route) => route.name === name) &&\r\n (!exact || activeRoutes[activeRoutes.length - 1].name === name)\r\n isActive =\r\n isActive && (!params || keys(params).every((key) => activeParams[key] === params[key]))\r\n isActive = isActive && (!query || keys(query).every((key) => activeQuery[key] === query[key]))\r\n\r\n return isActive\r\n }\r\n\r\n /**\r\n * @api private\r\n * @param {String} method pushState or replaceState\r\n * @param {String} name target route name\r\n * @param {Object} [params]\r\n * @param {Object} [query]\r\n * @return {Transition} transition\r\n */\r\n doTransition(method, name, params, query) {\r\n const previousUrl = this.location.getURL()\r\n\r\n let url = name\r\n if (url[0] !== '/') {\r\n url = this.generate(name, params, query)\r\n url = url.replace(/^#/, '/')\r\n }\r\n\r\n if (this.options.pushState) {\r\n url = this.location.removeRoot(url)\r\n }\r\n\r\n const transition = this.dispatch(url)\r\n\r\n transition.catch((err) => {\r\n if (err && err.type === TRANSITION_CANCELLED) {\r\n // reset the URL in case the transition has been cancelled\r\n this.location.replaceURL(previousUrl, { trigger: false })\r\n }\r\n return err\r\n })\r\n\r\n this.location[method](url, { trigger: false })\r\n\r\n return transition\r\n }\r\n\r\n /**\r\n * Match the path against the routes\r\n * @param {String} path\r\n * @return {Object} the list of matching routes and params\r\n *\r\n * @api private\r\n */\r\n match(path) {\r\n path = (path || '').replace(/\\/$/, '') || '/'\r\n let params\r\n let routes = []\r\n const pathWithoutQuery = withoutQuery(path)\r\n const { qs, patternCompiler } = this.options\r\n this.matchers.some((matcher) => {\r\n params = extractParams(matcher.path, pathWithoutQuery, patternCompiler)\r\n if (params) {\r\n routes = matcher.routes\r\n return true\r\n }\r\n })\r\n return {\r\n routes: routes.map(descriptor),\r\n params: params || {},\r\n pathname: pathWithoutQuery,\r\n query: extractQuery(qs, path) || {},\r\n }\r\n\r\n // clone the data (only a shallow clone of options)\r\n // to make sure the internal route store is not mutated\r\n // by the middleware. The middleware can mutate data\r\n // before it gets passed into the resolve middleware, but\r\n // only within the same transition. New transitions\r\n // will get to use pristine data.\r\n function descriptor(route) {\r\n return {\r\n name: route.name,\r\n path: route.path,\r\n params: pick(params, extractParamNames(route.path, patternCompiler)),\r\n options: clone(route.options),\r\n }\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param {string} path\r\n * @returns {Transition}\r\n */\r\n dispatch(path) {\r\n const match = this.match(path)\r\n const query = match.query\r\n const pathname = match.pathname\r\n\r\n const activeTransition = this.state.activeTransition\r\n\r\n // if we already have an active transition with all the same\r\n // params - return that and don't do anything else\r\n if (\r\n activeTransition &&\r\n activeTransition.pathname === pathname &&\r\n isEqual(activeTransition.query, query)\r\n ) {\r\n return activeTransition\r\n }\r\n\r\n // otherwise, cancel the active transition since we're\r\n // redirecting (or initiating a brand new transition)\r\n if (activeTransition) {\r\n const err = new Error(TRANSITION_REDIRECTED)\r\n err.type = TRANSITION_REDIRECTED\r\n err.nextPath = path\r\n activeTransition.cancel(err)\r\n }\r\n\r\n // if there is no active transition, check if\r\n // this is a noop transition, in which case, return\r\n // a transition to respect the function signature,\r\n // but don't actually run any of the middleware\r\n if (!activeTransition) {\r\n if (this.state.pathname === pathname && isEqual(this.state.query, query)) {\r\n return transition({\r\n id: this.nextId++,\r\n path,\r\n match,\r\n noop: true,\r\n router: this,\r\n })\r\n }\r\n }\r\n\r\n const t = transition({\r\n id: this.nextId++,\r\n path,\r\n match,\r\n router: this,\r\n })\r\n\r\n this.state.activeTransition = t\r\n\r\n return t\r\n }\r\n\r\n /**\r\n * Create the default location.\r\n * This is used when no custom location is passed to\r\n * the listen call.\r\n * @param {LocationParam} path\r\n * @return {Object} location\r\n *\r\n * @api private\r\n */\r\n createLocation(path) {\r\n const location = this.options.location\r\n if (typeof location !== 'string') {\r\n return location\r\n }\r\n if (location === 'browser') {\r\n return new BrowserLocation(pick(this.options, ['pushState', 'root']))\r\n } else if (location === 'memory') {\r\n return new MemoryLocation({ path })\r\n } else {\r\n throw new Error('Location can be `browser`, `memory` or a custom implementation')\r\n }\r\n }\r\n\r\n log(...args) {\r\n console.info(...args)\r\n }\r\n\r\n logError(...args) {\r\n console.error(...args)\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param {Event} event\r\n * @param {HTMLAnchorElement} link\r\n * @param {Router} router\r\n */\r\nfunction defaultClickHandler(event, link, router) {\r\n event.preventDefault()\r\n router.transitionTo(router.location.removeRoot(link.getAttribute('href')))\r\n}\r\n\r\n/**\r\n * @description Helper to intercept links when using pushState but server is not configured for it\r\n * Link clicks are handled via the router avoiding browser page reload\r\n * @param {Router} router\r\n * @param {HTMLElement} el\r\n * @param {(e: Event, link: HTMLAnchorElement, router: Router) => void} clickHandler\r\n * @returns {Function} dispose\r\n */\r\nfunction interceptLinks(router, el = document, clickHandler = defaultClickHandler) {\r\n return intercept(el, (event, link) => clickHandler(event, link, router))\r\n}\r\n\r\nexport { Router, interceptLinks }\r\n","const resolved = Promise.resolve()\r\nlet routeElMap = Object.create(null)\r\nlet routeComponentMap = Object.create(null)\r\nlet routePropertiesMap = Object.create(null)\r\n\r\nlet router, rootOutlet, rootOutletEl\r\n\r\n/**\r\n * @typedef {import(\"../transition.js\").Transition} Transition\r\n *\r\n * @typedef WCRouteDef\r\n * @property {string} name\r\n * @property {string} path\r\n * @property {string | Function} component\r\n * @property {Object.<string, PropertyHook | PropertyHook[]>} [properties]\r\n * @property {boolean} [reuse]\r\n * @property {function(Transition): Promise<boolean> | boolean} [beforeEnter]\r\n * @property {function(Transition): Promise<boolean> | boolean} [beforeLeave]\r\n * @property {function(Transition): Promise<void> | void} [afterEnter]\r\n * @property {function(Transition): Promise<void> | void} [afterLeave]\r\n */\r\n\r\n/**\r\n * @callback PropertySetter\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n\r\n/**\r\n * @typedef PropertyHook\r\n * @property {function(PropertySetter): void} [init]\r\n * @property {function(Transition, PropertySetter): void} [enter]\r\n * @property {function(Transition, PropertySetter): void} [leave]\r\n * @property {function(*, HTMLElement): void} [update]\r\n */\r\n\r\n/**\r\n * @param {*} value\r\n * @return {*}\r\n */\r\nfunction parseNumber(value) {\r\n const n = parseFloat(value)\r\n const isNumeric = value == n // eslint-disable-line eqeqeq\r\n return isNumeric ? n : value\r\n}\r\n\r\nfunction getFormattedValue(value, format) {\r\n let v = value\r\n if (v !== undefined) {\r\n if (format === 'number') {\r\n v = parseNumber(value)\r\n } else if (typeof format === 'function') {\r\n v = format(value)\r\n }\r\n }\r\n return v\r\n}\r\n\r\n/**\r\n * @param {*} value\r\n * @returns {PropertyHook}\r\n */\r\nexport function fromValue(value) {\r\n return {\r\n init(setValue) {\r\n setValue(value)\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * @param {string} key\r\n * @param {string | Function} [format]\r\n * @returns {PropertyHook}\r\n */\r\nexport function fromQuery(queryKey, format) {\r\n return {\r\n enter(transition, setValue) {\r\n setValue(transition.query[queryKey], format)\r\n },\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} paramKey\r\n * @param {string | Function} format\r\n * @returns {PropertyHook}\r\n */\r\nexport function fromParam(paramKey, format) {\r\n return {\r\n enter(transition, setValue) {\r\n setValue(transition.params[paramKey], format)\r\n },\r\n }\r\n}\r\n\r\nexport function getRouteEl(route) {\r\n return routeElMap[route.name]\r\n}\r\n\r\nfunction create(instance) {\r\n router = instance\r\n rootOutlet = instance.options.outlet\r\n}\r\n\r\nfunction destroy() {\r\n router = null\r\n routeElMap = Object.create(null)\r\n routeComponentMap = Object.create(null)\r\n routePropertiesMap = Object.create(null)\r\n rootOutletEl = null\r\n}\r\n\r\nfunction isEqual(obj1, obj2) {\r\n const keys1 = Object.keys(obj1)\r\n return keys1.length === Object.keys(obj2).length && keys1.every((key) => obj2[key] === obj1[key])\r\n}\r\n\r\nfunction getOutlet(el) {\r\n const renderRoot = el.shadowRoot || el\r\n return renderRoot.querySelector(el.constructor.outlet || 'router-outlet')\r\n}\r\n\r\nfunction resolveRootOutlet() {\r\n if (rootOutletEl) return rootOutletEl\r\n if (!rootOutlet) return document.body\r\n rootOutletEl = typeof rootOutlet === 'string' ? document.querySelector(rootOutlet) : rootOutlet\r\n if (!rootOutletEl) {\r\n throw new Error(`slick-router(wc): Invalid outlet option ${rootOutlet}`)\r\n }\r\n return rootOutletEl\r\n}\r\n\r\nfunction getParentEl(transition, parentIndex) {\r\n let parent = transition.routes[parentIndex]\r\n while (parent) {\r\n if (parent.options.component) {\r\n return routeElMap[parent.name]\r\n }\r\n parent = transition.routes[--parentIndex]\r\n }\r\n}\r\n\r\nfunction getChangingIndex(prevRoutes, currentRoutes) {\r\n let index, prev, current\r\n const count = Math.max(prevRoutes.length, currentRoutes.length)\r\n for (index = 0; index < count; index++) {\r\n prev = prevRoutes[index]\r\n current = currentRoutes[index]\r\n if (!(prev && current) || prev.name !== current.name || !isEqual(prev.params, current.params)) {\r\n break\r\n }\r\n }\r\n return index\r\n}\r\n\r\nfunction runPropertyHookMethod(transition, routes, method) {\r\n for (let i = 0; i < routes.length; i++) {\r\n const { route } = routes[i]\r\n const propertiesData = routePropertiesMap[route.name]\r\n for (const { hooks, set } of Object.values(propertiesData)) {\r\n hooks.forEach((hook) => {\r\n if (typeof hook[method] === 'function') {\r\n hook[method](transition, set)\r\n }\r\n })\r\n }\r\n }\r\n}\r\n\r\nasync function runLifeCycle(transition, routes, prefix, suffix) {\r\n for (let i = 0; i < routes.length; i++) {\r\n let result\r\n const { route, el } = routes[i]\r\n const routeMethod = route.options[`${prefix}${suffix}`]\r\n if (typeof routeMethod === 'function') {\r\n result = await routeMethod(transition)\r\n if (result === false) {\r\n transition.cancel()\r\n }\r\n }\r\n if (transition.isCancelled) break\r\n const elMethod = el && el[`${prefix}Route${suffix}`]\r\n if (typeof elMethod === 'function') {\r\n result = await elMethod.call(el, transition)\r\n if (result === false) {\r\n transition.cancel()\r\n }\r\n }\r\n if (transition.isCancelled) break\r\n }\r\n}\r\n\r\nfunction resolveModule(value) {\r\n return value && value.__esModule ? value.default : value\r\n}\r\n\r\nfunction initPropertyHook(value) {\r\n if (value && typeof value === 'object') return value\r\n return fromValue(value)\r\n}\r\n\r\nfunction initProperties(route) {\r\n let propertiesData = routePropertiesMap[route.name]\r\n if (!propertiesData) {\r\n propertiesData = routePropertiesMap[route.name] = Object.create(null)\r\n const properties = route.options.properties\r\n if (properties) {\r\n for (const [name, hookOrValue] of Object.entries(properties)) {\r\n const hooks = Array.isArray(hookOrValue)\r\n ? hookOrValue.map(initPropertyHook)\r\n : [initPropertyHook(hookOrValue)]\r\n\r\n const set = (v, format) => {\r\n const propertyData = propertiesData[name]\r\n const newValue = getFormattedValue(v, format)\r\n if (propertyData.value === newValue) return\r\n propertyData.value = newValue\r\n const el = routeElMap[route.name]\r\n if (el) {\r\n el[name] = newValue\r\n }\r\n hooks.forEach((hook) => {\r\n if (typeof hook.update === 'function') {\r\n hook.update(newValue, el)\r\n }\r\n })\r\n }\r\n propertiesData[name] = { hooks, set }\r\n hooks.forEach((hook) => {\r\n if (typeof hook.init === 'function') {\r\n hook.init(set)\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n\r\nasync function resolveRoutes(routes) {\r\n const result = []\r\n\r\n for (const route of routes) {\r\n let el = route.options.reuse ? routeElMap[route.name] : undefined\r\n let Component = route.options.component\r\n if (!el && Component) {\r\n if (typeof Component === 'function' && !(Component.prototype instanceof HTMLElement)) {\r\n Component =\r\n routeComponentMap[route.name] ||\r\n (routeComponentMap[route.name] = resolveModule(await Component(route)))\r\n }\r\n el = typeof Component === 'string' ? document.createElement(Component) : new Component()\r\n routeElMap[route.name] = el\r\n el.$router = router\r\n }\r\n\r\n initProperties(route)\r\n\r\n result.push({ el, route })\r\n }\r\n return result\r\n}\r\n\r\nfunction applyProperties(el, route) {\r\n const propertiesData = routePropertiesMap[route.name]\r\n Object.entries(propertiesData).forEach(([name, { value }]) => {\r\n el[name] = value\r\n })\r\n}\r\n\r\nconst removedEls = new WeakSet()\r\nconst outletCurrentEl = new WeakMap()\r\n\r\nasync function renderElements(transition, activated, changingIndex) {\r\n // set properties of not activated elements\r\n const { path, pathname, routes, params, query } = transition\r\n const routeState = { path, pathname, routes, params, query }\r\n for (let k = 0; k < changingIndex; k++) {\r\n const route = transition.routes[k]\r\n const el = routeElMap[route.name]\r\n if (el) {\r\n el.$route = routeState\r\n applyProperties(el, route)\r\n }\r\n }\r\n for (let i = 0; i < activated.length; i++) {\r\n const { el, route } = activated[i]\r\n if (el) {\r\n const parentEl = getParentEl(transition, changingIndex + i - 1)\r\n const outletEl = parentEl ? getOutlet(parentEl) : resolveRootOutlet()\r\n if (outletEl) {\r\n const currentEl = outletCurrentEl.get(outletEl) || outletEl.firstElementChild\r\n if (currentEl) {\r\n outletEl.removeChild(currentEl)\r\n removedEls.add(currentEl)\r\n }\r\n el.$route = routeState\r\n applyProperties(el, route)\r\n outletEl.appendChild(el)\r\n outletCurrentEl.set(outletEl, el)\r\n await (el.updateComplete || resolved)\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction updateDOMTree(activated, deactivated) {\r\n let parentElRemoved\r\n for (let routeIndex = deactivated.length - 1; routeIndex >= 0; routeIndex--) {\r\n const { route, el } = deactivated[routeIndex]\r\n if (!activated.some(({ route: activeRoute }) => activeRoute.name === route.name)) {\r\n if (el) {\r\n // removes only the parent el from the deactivated els\r\n // and don't remove elements that were queued to be removed\r\n // necessary for lazy removal done in animations\r\n if (!parentElRemoved && !removedEls.has(el)) el.remove()\r\n parentElRemoved = true\r\n }\r\n routeElMap[route.name] = undefined\r\n }\r\n }\r\n}\r\n\r\nasync function resolve(transition) {\r\n const prevRoutes = transition.prev.routes\r\n const changingIndex = getChangingIndex(prevRoutes, transition.routes)\r\n const deactivated = []\r\n\r\n // deactivate previous routes from child to parent\r\n for (let routeIndex = prevRoutes.length - 1; routeIndex >= changingIndex; routeIndex--) {\r\n const route = prevRoutes[routeIndex]\r\n deactivated.push({ el: routeElMap[route.name], route })\r\n }\r\n\r\n await runLifeCycle(transition, deactivated, 'before', 'Leave')\r\n\r\n if (transition.isCancelled) return\r\n\r\n const activated = await resolveRoutes(transition.routes.slice(changingIndex))\r\n\r\n await runLifeCycle(transition, activated, 'before', 'Enter')\r\n\r\n if (transition.isCancelled) return\r\n\r\n runPropertyHookMethod(transition, activated, 'enter')\r\n\r\n await renderElements(transition, activated, changingIndex)\r\n\r\n updateDOMTree(activated, deactivated)\r\n\r\n transition.activated = activated\r\n transition.deactivated = deactivated\r\n}\r\n\r\nfunction done(transition) {\r\n runPropertyHookMethod(transition, transition.deactivated, 'leave')\r\n runLifeCycle(transition, transition.deactivated, 'after', 'Leave')\r\n runLifeCycle(transition, transition.activated, 'after', 'Enter')\r\n}\r\n\r\nexport const wc = {\r\n create,\r\n destroy,\r\n resolve,\r\n done,\r\n}\r\n","import { Router as CoreRouter, interceptLinks } from './router.js'\r\nimport { wc, fromParam, fromQuery, fromValue, getRouteEl } from './middlewares/wc.js'\r\nimport { routerLinks } from './middlewares/router-links.js'\r\nimport './components/router-links.js'\r\n\r\n/**\r\n * @typedef {import(\"./middlewares/wc.js\").WCRouteDef} WCRouteDef\r\n * @typedef {import(\"./middlewares/wc.js\").PropertyHook} PropertyHook\r\n * @typedef {import(\"./transition.js\").Transition} Transition\r\n */\r\n\r\nclass Router extends CoreRouter {\r\n constructor(options) {\r\n super(options)\r\n this.use(wc)\r\n this.use(routerLinks)\r\n }\r\n}\r\n\r\nexport { Router, interceptLinks, fromParam, fromQuery, fromValue, getRouteEl }\r\n","let eventPrefix\r\n\r\nfunction trigger(name, detail) {\r\n window.dispatchEvent(new CustomEvent(`${eventPrefix}${name}`, { detail }))\r\n}\r\n\r\nexport const events = {\r\n create: function (router) {\r\n eventPrefix = router.options.eventPrefix || 'router-'\r\n },\r\n\r\n before: function (transition) {\r\n trigger('before:transition', { transition })\r\n },\r\n\r\n done: function (transition) {\r\n trigger('transition', { transition })\r\n },\r\n\r\n cancel: function (transition, error) {\r\n if (error.type !== 'TransitionRedirected') {\r\n trigger('abort', { transition, error })\r\n }\r\n },\r\n\r\n error: function (transition, error) {\r\n trigger('abort', { transition, error })\r\n trigger('error', { transition, error })\r\n },\r\n}\r\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/**\n\t * Creates an instance of Routerx.\n\t * @class\n\t */\n\tconstructor() {\n\t\tsuper();\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\tconst htmlString = this.outerHTML;\n\n\t\tconst parser = new DOMParser();\n\t\tconst htmlDocument = parser.parseFromString(htmlString, 'text/html');\n\t\tconst rootElement = htmlDocument.querySelector('wje-router');\n\n\t\tconst routes = this.parseElement(rootElement).root;\n\n\t\tthis.router = new Router({\n\t\t\toutlet: this.outlet,\n\t\t\tlog: false,\n\t\t\tlogError: true,\n\t\t\troot: this.root || '/',\n\t\t\tpushState: true,\n\t\t});\n\n\t\tthis.router.map(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","LocationBar","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]}
@@ -150,10 +150,11 @@ class Select extends FormAssociatedElement {
150
150
  this._selectedOptions = [];
151
151
  }
152
152
  /**
153
- * Sets the value of the form element. Handles multiple values when
154
- * the element has the 'multiple' attribute by storing them in a FormData object.
155
- * @param {string | Array} value The value to be set. Can be a single value or an array of values
156
- * when 'multiple' attribute is present.
153
+ * Sets the value for the form field. Converts the input value into a FormData object
154
+ * if it is not already an array, splitting by spaces if necessary, and sets the
155
+ * internal form value as well as the selected values.
156
+ * @param {string|Array} value The value to be set. Can be a string (which will be
157
+ * split into an array by spaces) or an array of values.
157
158
  */
158
159
  set value(value) {
159
160
  if (value) {
@@ -174,8 +175,8 @@ class Select extends FormAssociatedElement {
174
175
  }
175
176
  }
176
177
  /**
177
- * Getter for the value attribute.
178
- * @returns {object} The value of the attribute.
178
+ * Retrieves the current value.
179
+ * @returns {any} The value of the `_value` property.
179
180
  */
180
181
  get value() {
181
182
  return this._value;
@@ -378,6 +379,11 @@ class Select extends FormAssociatedElement {
378
379
  setupAttributes() {
379
380
  this.isShadowRoot = "open";
380
381
  }
382
+ beforeDraw() {
383
+ if (this.hasAttribute("value")) {
384
+ this.value = this.getAttribute("value");
385
+ }
386
+ }
381
387
  /**
382
388
  * Draws the component for the select.
383
389
  * @returns {DocumentFragment}
@@ -513,11 +519,11 @@ class Select extends FormAssociatedElement {
513
519
  (_a = this.getAllOptions()) == null ? void 0 : _a.forEach((option) => {
514
520
  this.optionCheckSlot(option);
515
521
  });
522
+ this.selectedOptions = __privateMethod(this, _Select_instances, getSelectedOptions_fn).call(this);
523
+ this.selectOptions(this.value);
524
+ this.selected = __privateMethod(this, _Select_instances, getSelected_fn).call(this);
525
+ this.selections(true);
516
526
  if (this.lazy) {
517
- this.selectOptions(this.value);
518
- this.selected = __privateMethod(this, _Select_instances, getSelected_fn).call(this);
519
- this.selectedOptions = __privateMethod(this, _Select_instances, getSelectedOptions_fn).call(this);
520
- this.selections(true);
521
527
  event.addListener(this.popup, "wje-popup:show", null, (e) => {
522
528
  if (this._wasOppened) return;
523
529
  this._wasOppened = true;
@@ -525,13 +531,6 @@ class Select extends FormAssociatedElement {
525
531
  optionsElement.setAttribute("lazy", "");
526
532
  optionsElement.setAttribute("attached", "");
527
533
  });
528
- } else {
529
- event.addListener(this.popup, "wje-infinity-scroll:finish", null, (e) => {
530
- this.selectOptions(this.value);
531
- this.selected = __privateMethod(this, _Select_instances, getSelected_fn).call(this);
532
- this.selectedOptions = __privateMethod(this, _Select_instances, getSelectedOptions_fn).call(this);
533
- this.selections(true);
534
- });
535
534
  }
536
535
  __privateSet(this, _htmlOptions, Array.from(this.querySelectorAll(":scope > wje-option")).map((option) => {
537
536
  return {
@@ -564,13 +563,7 @@ class Select extends FormAssociatedElement {
564
563
  (_b = this.clear) == null ? void 0 : _b.addEventListener("wje-button:click", (e) => {
565
564
  e.preventDefault();
566
565
  e.stopPropagation();
567
- this.selected = [];
568
- this.selectedOptions = [];
569
- this.getAllOptions().forEach((option) => {
570
- option.selected = false;
571
- });
572
- this.selections();
573
- e.stopPropagation();
566
+ this.clearSelections();
574
567
  });
575
568
  this.list.addEventListener("wje-options:load", (e) => {
576
569
  this.selectedOptions.forEach((option) => {
@@ -814,6 +807,14 @@ class Select extends FormAssociatedElement {
814
807
  (el) => options.some((opt) => JSON.stringify(opt) === JSON.stringify(el.option))
815
808
  );
816
809
  }
810
+ clearSelections() {
811
+ this.selected = [];
812
+ this.selectedOptions = [];
813
+ this.getAllOptions().forEach((option) => {
814
+ option.selected = false;
815
+ });
816
+ this.selections();
817
+ }
817
818
  }
818
819
  _addedOptions = new WeakMap();
819
820
  _htmlOptions = new WeakMap();
@@ -826,10 +827,10 @@ _Select_instances = new WeakSet();
826
827
  * @returns {string} The HTML representation of the selected item's value.
827
828
  */
828
829
  htmlSelectedItem_fn = function(item) {
829
- var _a, _b, _c;
830
- const keyValue = ((_a = this.querySelector("wje-options")) == null ? void 0 : _a.itemValue) ?? "value";
831
- const textValue = ((_b = this.querySelector("wje-options")) == null ? void 0 : _b.itemText) ?? "text";
832
- const value = ((_c = this.options.find((option) => option[keyValue] === item)) == null ? void 0 : _c[textValue]) ?? "";
830
+ var _a;
831
+ const keyValue = "value";
832
+ const textValue = "textContent";
833
+ const value = ((_a = this.selectedOptions.find((option) => option[keyValue] === item)) == null ? void 0 : _a[textValue]) ?? "";
833
834
  return this.htmlSelectedItem(value);
834
835
  };
835
836
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"wje-select.js","sources":["../packages/wje-select/select.element.js","../packages/wje-select/select.js"],"sourcesContent":["import { FormAssociatedElement } from '../internals/form-associated-element.js';\nimport { event } from '../utils/event.js';\nimport Button from '../wje-button/button.js';\nimport Popup from '../wje-popup/popup.js';\nimport Icon from '../wje-icon/icon.js';\nimport Label from '../wje-label/label.js';\nimport Chip from '../wje-chip/chip.js';\nimport Input from '../wje-input/input.js';\nimport Option from '../wje-option/option.js';\nimport Options from '../wje-options/options.js';\nimport Checkbox from '../wje-checkbox/checkbox.js';\nimport styles from './styles/styles.css?inline';\n\nexport class Select extends FormAssociatedElement {\n\tconstructor() {\n\t\tsuper();\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the counter element, initially null.\n\t\t * @private\n\t\t */\n\t\tthis.counterEl = null;\n\n\t\t/**\n\t\t * @type {boolean}\n\t\t * @description Tracks whether the select element was previously opened, initially false.\n\t\t * @private\n\t\t * @default {boolean} false\n\t\t */\n\t\tthis._wasOppened = false;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the native select element, initially null.\n\t\t */\n\t\tthis.native = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the popup element, initially null.\n\t\t */\n\t\tthis.popup = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the label element, initially null.\n\t\t */\n\t\tthis.labelElement = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the slot start element, initially null.\n\t\t */\n\t\tthis.slotStart = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the slot end element, initially null.\n\t\t */\n\t\tthis.slotEnd = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the input element, initially null.\n\t\t */\n\t\tthis.input = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the options wrapper element, initially null.\n\t\t */\n\t\tthis.optionsWrapper = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the chips element, initially null.\n\t\t */\n\t\tthis.chips = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the clear button element, initially null.\n\t\t */\n\t\tthis.clear = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the list element, initially null.\n\t\t */\n\t\tthis.list = null;\n\n\t\tthis._value = [];\n\t\tthis._selected = [];\n\t\tthis._selectedOptions = [];\n\n\t}\n\n\t#addedOptions = [];\n\n\t#htmlOptions = [];\n\n\t/**\n\t * An object representing component dependencies with their respective classes.\n\t * Each property in the object maps a custom component name (as a string key)\n\t * to its corresponding class or constructor.\n\t * @typedef {{[key: string]: Function}} Dependencies\n\t * @property {Function} 'wje-button' Represents the Button component class.\n\t * @property {Function} 'wje-popup' Represents the Popup component class.\n\t * @property {Function} 'wje-icon' Represents the Icon component class.\n\t * @property {Function} 'wje-label' Represents the Label component class.\n\t * @property {Function} 'wje-chip' Represents the Chip component class.\n\t * @property {Function} 'wje-input' Represents the Input component class.\n\t * @property {Function} 'wje-option' Represents the Option component class.\n\t * @property {Function} 'wje-checkbox' Represents the Checkbox component class.\n\t */\n\tdependencies = {\n\t\t'wje-button': Button,\n\t\t'wje-popup': Popup,\n\t\t'wje-icon': Icon,\n\t\t'wje-label': Label,\n\t\t'wje-chip': Chip,\n\t\t'wje-input': Input,\n\t\t'wje-option': Option,\n\t\t'wje-options': Options,\n\t\t'wje-checkbox': Checkbox,\n\t};\n\n\t/**\n\t * Sets the value of the form element. Handles multiple values when\n\t * the element has the 'multiple' attribute by storing them in a FormData object.\n\t * @param {string | Array} value The value to be set. Can be a single value or an array of values\n\t * when 'multiple' attribute is present.\n\t */\n\tset value(value) {\n\t\tif (value) {\n\t\t\tlet data = value;\n\n\t\t\tif (!Array.isArray(data)) {\n\t\t\t\tdata = data.split(' ');\n\t\t\t}\n\t\t\tconst formData = new FormData();\n\t\t\tdata.forEach(v => {\n\t\t\t\tformData.append(this.name, v)\n\t\t\t});\n\t\t\tvalue = formData;\n\n\t\t\tthis._value = data;\n\t\t\tthis.selected = data;\n\n\t\t\tthis.internals.setFormValue(value);\n\t\t} else {\n\t\t\tthis._value = [];\n\t\t}\n\t}\n\n\t/**\n\t * Getter for the value attribute.\n\t * @returns {object} The value of the attribute.\n\t */\n\tget value() {\n\t\treturn this._value;\n\t}\n\n\t/**\n\t * Sets the `validate-on-change` attribute on the element. When the attribute is present, it typically indicates that validation should occur when the value of the input changes.\n\t * @param {boolean} value A boolean indicating whether to enable or disable the `validate-on-change` attribute.\n\t */\n\tset validateOnChange(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('validate-on-change', '');\n\t\t} else {\n\t\t\tthis.removeAttribute('validate-on-change');\n\t\t}\n\t}\n\n\t/**\n\t * Getter for the validateOnChange attribute.\n\t * @returns {boolean} Whether the attribute is present.\n\t */\n\tget validateOnChange() {\n\t\treturn this.hasAttribute('validate-on-change');\n\t}\n\n\t/**\n\t * Sets the maximum number of options allowed.\n\t * @param { number | object} value The value to set as the maximum number of options.\n\t * If null, the 'max-options' attribute will be removed.\n\t */\n\tset maxOptions(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('max-options', value);\n\t\t} else {\n\t\t\tthis.removeAttribute('max-options');\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves the maximum number of options allowed.\n\t * Parses the value of the 'max-options' attribute from the element and converts it to a number.\n\t * If the attribute is not present or cannot be converted to a valid number, defaults to 1.\n\t * @returns {number} The maximum number of options, or 0 if the attribute is not set or invalid.\n\t */\n\tget maxOptions() {\n\t\treturn +this.getAttribute('max-options') || 1;\n\t}\n\n\t/**\n\t * @summary Setter for the defaultValue attribute.\n\t * This method sets the 'value' attribute of the custom input element to the provided value.\n\t * The 'value' attribute represents the default value of the input element.\n\t * @param {string} value The value to set as the default value.\n\t */\n\tset defaultValue(value) {\n\t\tthis.setAttribute('value', value);\n\t}\n\n\t/**\n\t * @summary Getter for the defaultValue attribute.\n\t * This method retrieves the 'value' attribute of the custom input element.\n\t * The 'value' attribute represents the default value of the input element.\n\t * If the 'value' attribute is not set, it returns an empty string.\n\t * @returns {string} The default value of the input element.\n\t */\n\tget defaultValue() {\n\t\treturn this.getAttribute('value') ?? '';\n\t}\n\n\t/**\n\t * Sets the trigger value.\n\t * @param {string} value The trigger value to set.\n\t */\n\tset trigger(value) {\n\t\tthis.setAttribute('trigger', value);\n\t}\n\n\t/**\n\t * Returns the trigger value.\n\t * @returns {string} The trigger value.\n\t */\n\tget trigger() {\n\t\treturn this.getAttribute('trigger') || 'click';\n\t}\n\n\t/**\n\t * Sets the offset attribute for the element.\n\t * @param {string} value The value to assign to the offset attribute.\n\t */\n\tset offset(value) {\n\t\tthis.setAttribute('offset', value);\n\t}\n\n\t/**\n\t * Gets the value of the offset attribute of the current element.\n\t * If the offset attribute is not present, returns a default value of '0'.\n\t * @returns {string} The value of the offset attribute or the default value '0'.\n\t */\n\tget offset() {\n\t\treturn this.getAttribute('offset') || '5';\n\t}\n\n\t/**\n\t * Sets the label value.\n\t * @param {Array} value The selected value to set.\n\t */\n\tset selected(value) {\n\t\tthis._selected = value;\n\t}\n\n\t/**\n\t * Returns the selected value.\n\t * @returns {Array} The selected value.\n\t */\n\tget selected() {\n\t\treturn this._selected;\n\t}\n\n\t/**\n\t * Sets the selected options for the object.\n\t * @param {Array|object} value The new value for the selected options. It can be an array or object containing the selected options.\n\t */\n\tset selectedOptions(value) {\n\t\tthis._selectedOptions = value;\n\t}\n\n\t/**\n\t * Retrieves the selected options.\n\t * @returns {Array} An array containing the currently selected options. If no options are selected, an empty array is returned.\n\t */\n\tget selectedOptions() {\n\t\treturn this._selectedOptions || [];\n\t}\n\n\t/**\n\t * Sets the `lazy` attribute on the element. If the provided value is truthy, the `lazy` attribute is added. If the value is falsy, the `lazy` attribute is removed.\n\t * @param {boolean} value A boolean value indicating whether to add or remove the `lazy` attribute. If `true`, the attribute is added; if `false`, it is removed.\n\t */\n\tset lazy(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('lazy', '');\n\t\t} else {\n\t\t\tthis.removeAttribute('lazy');\n\t\t}\n\t}\n\n\t/**\n\t * Getter for the 'lazy' property.\n\t * @returns {boolean} Returns true if the 'lazy' attribute is present on the element, otherwise false.\n\t */\n\tget lazy() {\n\t\treturn this.hasAttribute('lazy');\n\t}\n\n\t/**\n\t * Sets or removes the 'no-size' attribute on an element.\n\t * @param {boolean} value A boolean indicating whether to add or remove the 'no-size' attribute. If true, the attribute is added; if false, the attribute is removed.\n\t */\n\tset noSize(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('no-size', '');\n\t\t} else {\n\t\t\tthis.removeAttribute('no-size');\n\t\t}\n\t}\n\n\t/**\n\t * Gets the value of the 'no-size' attribute for the element.\n\t * @returns {boolean} True if the 'no-size' attribute is present, otherwise false.\n\t */\n\tget noSize() {\n\t\treturn this.hasAttribute('no-size');\n\t}\n\n\t/**\n\t * Getter for the customErrorDisplay attribute.\n\t * @returns {boolean} Whether the attribute is present.\n\t */\n\tget customErrorDisplay() {\n\t\treturn this.hasAttribute('custom-error-display');\n\t}\n\n\t/**\n\t * Retrieves the complete list of options available for the component.\n\t * The options are determined by combining elements from various sources, including loaded options, added options, and HTML-sourced options.\n\t * If a `wje-options` element is present within the component, its loaded options are included in the merged list.\n\t * In the absence of a `wje-options` element, duplicates among the added and HTML options are removed, retaining their order.\n\t * @returns {Array<object>} An array containing all the available options, combining the loaded, added, and HTML-based options, with duplicates removed where applicable.\n\t */\n\tget options() {\n\t\tif (this.querySelector('wje-options')) {\n\t\t\tconst allOptions = [...this.querySelector('wje-options').loadedOptions, ...this.#addedOptions, ...this.#htmlOptions]\n\n\t\t\treturn allOptions\n\t\t} else {\n\t\t\tconst allOptions = [...this.#addedOptions, ...this.#htmlOptions]\n\n\t\t\treturn Array.from(\n\t\t\t\tnew Map(allOptions.reverse().map(obj => [obj.value, obj])).values()\n\t\t\t).reverse();\n\t\t}\n\t}\n\n\tclassName = 'Select';\n\n\t/**\n\t * Returns the CSS styles for the component.\n\t * @static\n\t * @returns {CSSStyleSheet}\n\t */\n\tstatic get cssStyleSheet() {\n\t\treturn styles;\n\t}\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 ['active', 'value', 'disabled', 'multiple', 'label', 'placeholder', 'max-height', 'max-options', 'variant', 'placement'];\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 * Draws the component for the select.\n\t * @returns {DocumentFragment}\n\t */\n\tdraw() {\n\t\tlet fragment = document.createDocumentFragment();\n\n\t\tthis.classList.add('wje-placement', this.placement ? 'wje-' + this.placement : 'wje-start');\n\n\t\t// zakladny obalovac\n\t\tlet native = document.createElement('div');\n\t\tnative.setAttribute('part', 'native');\n\t\tnative.classList.add('native-select', this.variant || 'default');\n\n\t\t// wrapper pre label a inputWrapper\n\t\tlet wrapper = document.createElement('div');\n\t\twrapper.classList.add('wrapper');\n\t\twrapper.setAttribute('slot', 'anchor');\n\n\t\t// label\n\t\tlet label = document.createElement('wje-label');\n\t\tlabel.setAttribute('part', 'label');\n\t\tlabel.innerText = this.label || '';\n\n\t\t// obalovac pre input\n\t\tlet inputWrapper = document.createElement('div');\n\t\tinputWrapper.setAttribute('part', 'input-wrapper');\n\t\tinputWrapper.classList.add('input-wrapper');\n\n\t\tlet slotStart = document.createElement('div');\n\t\tslotStart.classList.add('slot-start');\n\n\t\tlet input = document.createElement('input');\n\t\tinput.setAttribute('type', 'text');\n\t\tinput.value = this.value.join(' ').trim();\n\t\tinput.classList.add('input-hidden');\n\n\t\tlet display = document.createElement('input');\n\t\tdisplay.setAttribute('type', 'text');\n\t\tdisplay.setAttribute('part', 'input');\n\t\tdisplay.setAttribute('autocomplete', 'off');\n\t\tdisplay.setAttribute('readonly', '');\n\t\tdisplay.setAttribute('placeholder', this.placeholder || '');\n\n\t\tif (this.required) {\n\t\t\tinput.setAttribute('required', '');\n\t\t\tdisplay.setAttribute('required', '');\n\t\t}\n\n\t\tif (this.disabled) {\n\t\t\tinput.setAttribute('disabled', '');\n\t\t\tdisplay.setAttribute('disabled', '');\n\t\t}\n\n\t\tlet slotEnd = document.createElement('div');\n\t\tslotEnd.classList.add('slot-end');\n\n\t\tlet arrow = document.createElement('wje-icon');\n\t\tarrow.setAttribute('name', 'chevron-down');\n\t\tarrow.setAttribute('slot', 'arrow');\n\n\t\tlet chips = document.createElement('div');\n\t\tchips.classList.add('chips');\n\t\tchips.innerText = this.placeholder || '';\n\n\t\t// obalovac pre option a find\n\t\tlet optionsWrapper = document.createElement('div');\n\t\toptionsWrapper.setAttribute('part', 'options-wrapper');\n\t\toptionsWrapper.classList.add('options-wrapper');\n\t\toptionsWrapper.style.setProperty('height', this.maxHeight || 'auto');\n\n\t\tlet list = document.createElement('div');\n\t\tlist.classList.add('list');\n\n\t\tlet slot = document.createElement('slot');\n\n\t\tlet clear = document.createElement('wje-button');\n\t\tclear.setAttribute('fill', 'link');\n\t\tclear.setAttribute('part', 'clear');\n\t\tclear.setAttribute('stop-propagation', '');\n\n\t\tlet clearIcon = document.createElement('wje-icon');\n\t\tclearIcon.setAttribute('name', 'x');\n\n\t\tlet error = document.createElement('div');\n\t\terror.setAttribute('slot', 'error');\n\n\t\tlet errorSlot = document.createElement('slot');\n\t\terrorSlot.setAttribute('name', 'error');\n\n\t\t// vytvorime popup\n\t\tlet popup = document.createElement('wje-popup');\n\t\tpopup.setAttribute('placement', 'bottom-start');\n\t\tif (!this.noSize)\n\t\t\tpopup.setAttribute('size', '');\n\t\tpopup.setAttribute('part', 'popup');\n\t\tpopup.setAttribute('offset', this.offset);\n\n\t\tif(this.lazy || this.querySelector('wje-options')) {\n\t\t\tpopup.setAttribute('loader', '');\n\t\t}\n\n\t\tif (this.disabled) popup.setAttribute('disabled', '');\n\n\t\tif (this.variant === 'standard') {\n\t\t\tif (this.hasAttribute('label')) native.appendChild(label);\n\t\t} else {\n\t\t\twrapper.appendChild(label);\n\t\t}\n\n\t\tinputWrapper.append(slotStart);\n\t\tinputWrapper.append(display);\n\t\tinputWrapper.append(input);\n\n\t\tclear.append(clearIcon);\n\n\t\tif (this.hasAttribute('multiple')) inputWrapper.append(chips);\n\n\t\tif (this.hasAttribute('clearable')) inputWrapper.append(clear);\n\n\t\tinputWrapper.appendChild(slotEnd);\n\t\tinputWrapper.appendChild(arrow);\n\n\t\tlist.appendChild(slot);\n\n\t\tif (this.hasAttribute('find')) {\n\t\t\tlet find = document.createElement('wje-input');\n\t\t\tfind.setAttribute('variant', 'standard');\n\t\t\tfind.setAttribute('placeholder', 'Hľadať');\n\t\t\tfind.setAttribute('part', 'find');\n\t\t\tfind.clearable = true;\n\t\t\tfind.classList.add('find');\n\n\t\t\toptionsWrapper.appendChild(find);\n\n\t\t\tthis.findEl = find;\n\t\t}\n\n\t\toptionsWrapper.append(list);\n\n\t\twrapper.append(inputWrapper);\n\n\t\tpopup.append(wrapper);\n\t\tpopup.append(optionsWrapper);\n\n\t\tif (this.trigger === 'click') popup.setAttribute('manual', '');\n\n\t\tthis.append(error);\n\n\t\tnative.append(popup);\n\t\tnative.append(errorSlot);\n\n\t\tfragment.appendChild(native);\n\n\t\tthis.native = native;\n\t\tthis.popup = popup;\n\t\tthis.labelElement = label;\n\t\tthis.slotStart = slotStart;\n\t\tthis.slotEnd = slotEnd;\n\t\tthis.input = input;\n\t\tthis.display = display;\n\t\tthis.optionsWrapper = optionsWrapper;\n\t\tthis.chips = chips;\n\t\tthis.clear = clear;\n\t\tthis.list = list;\n\n\t\treturn fragment;\n\t}\n\n\t/**\n\t * Performs actions and binds events after the component's markup and state are initialized.\n\t * Actions include setting up event listeners, managing option elements, handling focus and blur behaviors,\n\t * synchronizing the selected options, and managing a find functionality for filtering options.\n\t * @returns {void} Does not return a value. The method operates by updating the state and behavior of the component.\n\t */\n\tafterDraw() {\n\t\tthis.validate(this.selectedOptions);\n\n\t\tif (this.hasAttribute('invalid')) {\n\t\t\tthis.showInvalidMessage();\n\t\t}\n\n\t\tthis.getAllOptions()?.forEach((option) => {\n\t\t\tthis.optionCheckSlot(option);\n\t\t});\n\n\t\tif (this.lazy) {\n\t\t\tthis.selectOptions(this.value);\n\t\t\tthis.selected = this.#getSelected();\n\t\t\tthis.selectedOptions = this.#getSelectedOptions();\n\t\t\tthis.selections(true);\n\n\t\t\tevent.addListener(this.popup, 'wje-popup:show', null, (e) => {\n\t\t\t\tif (this._wasOppened) return;\n\t\t\t\tthis._wasOppened = true;\n\n\t\t\t\tconst optionsElement = this.querySelector('wje-options');\n\t\t\t\toptionsElement.setAttribute('lazy', '');\n\t\t\t\toptionsElement.setAttribute('attached', '');\n\t\t\t});\n\t\t} else {\n\t\t\tevent.addListener(this.popup, 'wje-infinity-scroll:finish', null, (e) => {\n\t\t\t\tthis.selectOptions(this.value);\n\t\t\t\tthis.selected = this.#getSelected();\n\t\t\t\tthis.selectedOptions = this.#getSelectedOptions();\n\t\t\t\tthis.selections(true);\n\t\t\t})\n\t\t}\n\n\t\tthis.#htmlOptions = Array.from(this.querySelectorAll(':scope > wje-option')).map((option) => {\n\t\t\treturn {\n\t\t\t\tvalue: option.value,\n\t\t\t\ttext: option.textContent.trim(),\n\t\t\t};\n\t\t})\n\n\t\tthis.input.addEventListener('focus', (e) => {\n\t\t\tthis.labelElement?.classList.add('fade');\n\t\t\tthis.native.classList.add('focused');\n\t\t});\n\n\t\tthis.input.addEventListener('blur', (e) => {\n\t\t\tthis.native.classList.remove('focused');\n\t\t\tif (!e.target.value) this.labelElement?.classList.remove('fade');\n\t\t});\n\n\t\tthis.input.addEventListener('input', (e) => {\n\t\t\tthis.propagateValidation();\n\t\t});\n\n\t\tthis.addEventListener('wje-option:change', this.optionChange);\n\n\t\tthis.addEventListener('wje-select:invalid', (e) => {\n\t\t\tthis.invalid = true;\n\t\t\tthis.pristine = false;\n\n\t\t\tthis.showInvalidMessage();\n\n\t\t\tif (this.customErrorDisplay) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\tthis.clear?.addEventListener('wje-button:click', (e) => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tthis.selected = [];\n\t\t\tthis.selectedOptions = [];\n\n\t\t\tthis.getAllOptions().forEach((option) => {\n\t\t\t\toption.selected = false;\n\t\t\t});\n\t\t\tthis.selections();\n\n\t\t\te.stopPropagation();\n\t\t});\n\n\n\t\tthis.list.addEventListener('wje-options:load', (e) => {\n\t\t\tthis.selectedOptions.forEach((option) => {\n\t\t\t\tthis.getAllOptions().forEach((el) => {\n\t\t\t\t\tif (el.value === option.value) {\n\t\t\t\t\t\tel.selected = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})\n\n\t\t\tthis.list.scrollTo(0, 0);\n\t\t\tevent.dispatchCustomEvent(this.popup, 'wje-popup:content-ready'); // Notify that the content is ready\n\t\t});\n\n\t\t// skontrolujeme ci ma select atribut find\n\t\tif (this.hasAttribute('find') && this.findEl instanceof HTMLElement) {\n\t\t\tevent.addListener(this.findEl, 'keyup', '', this.#applySearchFilter);\n\t\t\tevent.addListener(this.findEl, 'wje-input:clear', '', this.#applySearchFilter);\n\t\t}\n\t}\n\n\t/**\n\t * Handles the option change event.\n\t * @param {Event} e The event.\n\t */\n\toptionChange = (e) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\te.stopImmediatePropagation();\n\n\t\tlet allOptions = this.getAllOptions();\n\n\t\tif (!this.hasAttribute('multiple')) {\n\t\t\tallOptions.forEach((option) => {\n\t\t\t\tif (option.value === e.target.value) {\n\t\t\t\t\tthis.processClickedOption(option);\n\t\t\t\t} else {\n\t\t\t\t\toption.selected = false;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.popup.hide(false);\n\t\t} else {\n\t\t\tthis.processClickedOption(e.target, true);\n\t\t}\n\n\t\tthis.selections();\n\n\t\tthis.validate(this.selectedOptions);\n\n\t\tthis.pristine = false;\n\t\tthis.propagateValidation();\n\t}\n\n\t/**\n\t * Handles the selection and deselection of an option element.\n\t * @param {HTMLElement} option The option element that was clicked.\n\t * @param {boolean} [multiple] Indicates whether multiple selection is allowed.\n\t */\n\tprocessClickedOption = (option, multiple = false) => {\n\t\tconst isSelected = option.hasAttribute('selected');\n\t\toption.selected = !isSelected;\n\n\t\tif (isSelected) {\n\t\t\tthis.filterOutOption(option);\n\t\t} else {\n\t\t\tthis.selectedOptions = multiple ? [...this.selectedOptions, option] : [option];\n\t\t}\n\t}\n\n\t/**\n\t * Filters out a specified option from the `selectedOptions` array.\n\t * This function removes an option from the `selectedOptions` array if its value\n\t * matches the value of the option provided as an argument. It allows for dynamically\n\t * updating the selected options by excluding the specified option.\n\t * @param {object} option The option to be removed from the `selectedOptions` array.\n\t * Should be an object containing a `value` property that is compared to the\n\t * `value` property of objects in the `selectedOptions` array.\n\t */\n\tfilterOutOption = (option) => {\n\t\tthis.selectedOptions = this.selectedOptions.filter((sOption) => {\n\t\t\treturn sOption.value !== option.value;\n\t\t});\n\t}\n\n\t/**\n\t * Returns all the options as HTML.\n\t * @returns {NodeList} The options as HTML.\n\t */\n\tgetAllOptions() {\n\t\treturn this.querySelectorAll('wje-option');\n\t}\n\n\t/**\n\t * Handles the selection change.\n\t * @param {Element[]} options The option that changed.\n\t * @param {number} length The length of the selected options.\n\t */\n\tselectionChanged(options = null, length = 0) {\n\t\tthis.selected = this.#getSelected();\n\n\t\tif (this.hasAttribute('multiple')) {\n\t\t\tthis.value = this.selectedOptions.map((el) => el.value).reverse();\n\t\t\tthis.input.value = this.selected.map(a => a.value).join(\" \").trim();\n\n\t\t\tif (this.placeholder && length === 0) {\n\t\t\t\tthis.chips.innerHTML = this.placeholder;\n\t\t\t} else {\n\t\t\t\tif (options !== null) Array.from(options).slice(0, +this.maxOptions).forEach(option => this.chips.appendChild(this.getChip(option)));\n\t\t\t\tif (this.counterEl instanceof HTMLElement || !this.maxOptions || length > +this.maxOptions) {\n\t\t\t\t\tthis.counter();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst option = options?.at(0);\n\t\t\tthis.value = this.selectedOptions?.map((el) => el.value)?.at(0);\n\t\t\tthis.input.value = this.selected[0]?.value || '';\n\t\t\tthis.display.value = this.selectedOptions[0]?.textContent?.trim() || '';\n\n\t\t\tif (option && option instanceof HTMLElement) {\n\t\t\t\tthis.slotStart.innerHTML = '';\n\n\t\t\t\tlet optionSlotStart = option?.querySelector('wje-option > [slot=start]');\n\t\t\t\tif (optionSlotStart) {\n\t\t\t\t\tthis.slotStart.appendChild(optionSlotStart.cloneNode(true));\n\t\t\t\t}\n\n\t\t\t\tthis.slotEnd.innerHTML = '';\n\n\t\t\t\tlet optionSlotEnd = option?.querySelector('wje-option > [slot=end]');\n\t\t\t\tif (optionSlotEnd) {\n\t\t\t\t\tthis.slotEnd.appendChild(optionSlotEnd.cloneNode(true));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Updates the selected options and their corresponding chips.\n\t * @param {boolean} [silence] Determines whether to suppress the \"wje-select:change\" event.\n\t * @returns {void}\n\t * @description\n\t * This method fetches the currently selected options and updates the `selectedOptions` array.\n\t * It clears and rebuilds the chips representing the selected items in the UI.\n\t * If the number of selected options reaches the maximum allowed (`maxOptions`), it stops updating the counter.\n\t * Optionally, it dispatches a custom event when the selection changes unless `silence` is set to `true`.\n\t * //@fires wje-select:change - Dispatched when the selection changes, unless `silence` is `true`.\n\t * @example\n\t * // Call the method and allow event dispatch\n\t * selections();\n\t * @example\n\t * // Call the method without dispatching the event\n\t * selections(true);\n\t */\n\tselections(silence = false) {\n\t\tif (this.selectedOptions.length >= +this.maxOptions) {\n\t\t\tthis.counterEl = null;\n\t\t}\n\n\t\tif (this.chips) {\n\t\t\tthis.chips.innerHTML = '';\n\t\t}\n\n\t\tif (this.selectedOptions.length > 0) {\n\t\t\tthis.selectionChanged(this.selectedOptions, this.selectedOptions.length);\n\t\t} else {\n\t\t\tthis.selectionChanged(this.selectedOptions);\n\t\t}\n\n\t\tif (silence) return;\n\t\tevent.dispatchCustomEvent(this, 'wje-select:change');\n\t}\n\n\t/**\n\t * Manages the display of a counter element to indicate the number of items exceeding the maximum allowed options.\n\t * - If the number of selected items equals the maximum allowed, the counter element is removed.\n\t * - If the counter element doesn't exist and the number of items exceeds the maximum, it is created and updated.\n\t */\n\tcounter() {\n\t\t// zmazanie counter (span)\n\t\tif (this.counterEl && this.value.length === +this.maxOptions) {\n\t\t\tthis.counterEl.remove();\n\t\t\tthis.counterEl = null;\n\t\t\treturn;\n\t\t}\n\n\t\t// ak counter nie je, tak ho vytvorime\n\t\tif (!this.counterEl) {\n\t\t\tthis.counterEl = document.createElement('span');\n\t\t\tthis.counterEl.classList.add('counter');\n\n\t\t\tthis.chips.appendChild(this.counterEl);\n\t\t}\n\n\t\t// nastavime hodnotu counter\n\t\tthis.counterEl.innerText = `+${this.value.length - +this.maxOptions}`;\n\t}\n\n\t/**\n\t * Returns a chip element.\n\t * @param {Element} option The option to get the chip for.\n\t * @returns {Element} The chip element.\n\t */\n\tgetChip(option) {\n\t\tlet chip = document.createElement('wje-chip');\n\t\tchip.size = 'small';\n\t\tchip.removable = true;\n\t\tchip.round = true;\n\t\tchip.addEventListener('wje:chip-remove', this.removeChip);\n\t\tchip.option = option;\n\n\t\tlet label = document.createElement('wje-label');\n\t\tlabel.innerText = this.#htmlSelectedItem(option.value) // option.textContent.trim();\n\n\t\tchip.appendChild(label);\n\n\t\treturn chip;\n\t}\n\n\t/**\n\t * Handles the chip remove event.\n\t * @param {Event} e The event.\n\t */\n\tremoveChip = (e) => {\n\t\te.target.parentNode.removeChild(e.target);\n\t\tthis.processClickedOption(e.target.option, true);\n\t\tthis.selections();\n\t};\n\n\t/**\n\t * Generates an HTML option element based on the provided item and mapping.\n\t * @param {object} item The item to generate the option for.\n\t * @param {object} [map] The mapping object that specifies the properties of the item to use for the option's value and text.\n\t * @param {string} [map.value] The property of the item to use for the option's value.\n\t * @param {string} [map.text] The property of the item to use for the option's text.\n\t * @returns {HTMLElement} The generated HTML option element.\n\t */\n\thtmlOption(item, map = { value: 'value', text: 'text' }) {\n\t\tlet option = document.createElement('wje-option');\n\n\t\tif (item[map.value] === null) {\n\t\t\tconsole.warn(`The item ${JSON.stringify(item)} does not have the property ${map.value}`);\n\t\t}\n\n\t\tif (item[map.text] === null) {\n\t\t\tconsole.warn(`The item ${JSON.stringify(item)} does not have the property ${map.text}`);\n\t\t}\n\n\t\toption.setAttribute('value', item[map.value] ?? '');\n\t\toption.innerText = item[map.text] ?? '';\n\n\t\tthis.#addedOptions.push({ [map.value]: item[map.value], [map.text]: item[map.text] });\n\t\treturn option;\n\t}\n\n\t/**\n\t * Returns the provided item.\n\t * @param {any} item The item to be returned.\n\t * @returns {any} The same item that was passed as input.\n\t */\n\thtmlSelectedItem(item) {\n\t\treturn item;\n\t}\n\n\t/**\n\t * Adds an option to the select element.\n\t * @param {any} optionData The data for the option to be added.\n\t * @param {boolean} [silent] Whether to suppress any events triggered by the addition of the option.\n\t * @param {object} [map] The mapping object specifying the properties of the option data to be used for the value and text of the option.\n\t */\n\taddOption(optionData, silent = false, map = { value: 'value', text: 'text' }) {\n\t\tif (!optionData) return;\n\n\t\tconst optionsElement = this.querySelector('wje-options');\n\t\tif (optionsElement) {\n\t\t\toptionsElement.addOption(optionData, silent, map);\n\t\t\treturn;\n\t\t}\n\t\tlet option = this.htmlOption(optionData, map);\n\t\tthis.appendChild(option);\n\t}\n\n\t/**\n\t * Adds options to the select element.\n\t * @param {Array | object} optionsData The options data to be added. Can be an array of objects or a single object.\n\t * @param {boolean} [silent] Indicates whether to trigger events when adding options. Default is false.\n\t * @param {object} [map] The mapping object that specifies the properties of the options data object. Default is { value: \"value\", text: \"text\" }.\n\t */\n\taddOptions(optionsData, silent = false, map = { value: 'value', text: 'text' }) {\n\t\tif (!Array.isArray(optionsData)) {\n\t\t\tthis.addOption(optionsData, silent, map);\n\t\t} else {\n\t\t\toptionsData.forEach((item) => {\n\t\t\t\tthis.addOption(item, silent, map);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Selects an option with the specified value.\n\t * @param {string} value The value of the option to be selected.\n\t * @param {boolean} [silent] Whether to suppress firing events.\n\t */\n\tselectOption(value, silent = false) {\n\t\tif (!value) return;\n\n\t\tlet option = this.querySelector(`wje-option[value=\"${value}\"]`);\n\n\t\tif (option) {\n\t\t\tthis.processClickedOption(option, this.hasAttribute('multiple'));\n\t\t}\n\n\t\tif (this.drawingStatus > this.drawingStatuses.START) this.selections(silent);\n\t}\n\n\t/**\n\t * Selects one or multiple options in the select element.\n\t * @param {Array|any} values The value(s) of the option(s) to be selected.\n\t * @param {boolean} [silent] Whether to trigger the change event or not.\n\t */\n\tselectOptions(values, silent = false) {\n\t\tif (!Array.isArray(values)) {\n\t\t\tthis.selectOption(values, silent);\n\t\t} else {\n\t\t\tvalues.forEach((value) => {\n\t\t\t\tthis.selectOption(value, silent);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Clones and appends an icon from a template with slot \"check\" to the given option element.\n\t * @param {HTMLElement} option The target option element where the \"check\" icon will be added.\n\t * @returns {void}\n\t */\n\toptionCheckSlot(option) {\n\t\tlet icon = this.querySelector('template')?.content.querySelector(`[slot=\"check\"]`);\n\t\tif (!icon) {\n\t\t\tconsole.warn(`Icon with slot \"check\" was not found.`);\n\t\t\treturn;\n\t\t}\n\n\t\tlet iconClone = icon.cloneNode(true);\n\t\toption.append(iconClone);\n\t}\n\n\t/**\n\t * Checks if all elements in the `elements` array are present in the `options` array based on their `option` property.\n\t * @param {Array} elements The array of elements to check. Each element should have an `option` property.\n\t * @param {Array} options The array of options to verify against.\n\t * @returns {boolean} Returns true if all elements in the `elements` array are found within the `options` array, otherwise returns false.\n\t */\n\tareAllElementsInOptions(elements, options) {\n\t\tif (elements.length === 0) return false;\n\n\t\treturn elements.every(el =>\n\t\t\toptions.some(opt => JSON.stringify(opt) === JSON.stringify(el.option))\n\t\t);\n\t}\n\n\t/**\n\t * Processes the provided item to retrieve its corresponding value and text\n\t * based on the configuration of `wje-options`, then updates and returns\n\t * the selected item's HTML representation.\n\t * @param {any} item The input item for which the value and text are determined.\n\t * @returns {string} The HTML representation of the selected item's value.\n\t */\n\t#htmlSelectedItem(item) {\n\t\tconst keyValue = this.querySelector(\"wje-options\")?.itemValue ?? \"value\"\n\t\tconst textValue = this.querySelector(\"wje-options\")?.itemText ?? \"text\"\n\n\t\tconst value = this.options\n\t\t\t.find((option) => option[keyValue] === item)?.[textValue] ?? \"\";\n\n\t\treturn this.htmlSelectedItem(value);\n\t}\n\n\t/**\n\t * Returns the selected options.\n\t * @returns {Array} The selected options.\n\t */\n\t#getSelected() {\n\t\treturn this.selectedOptions.map((option) => {\n\t\t\treturn {\n\t\t\t\tvalue: option.value,\n\t\t\t\ttext: this.#htmlSelectedItem(option.value) // option.textContent.trim(),\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * Returns the selected options as HTML.\n\t * @returns {NodeList} The selected options as HTML.\n\t */\n\t#getSelectedOptions() {\n\t\treturn Array.from(this.querySelectorAll('wje-option[selected]'));\n\t}\n\n\t#applySearchFilter = (e) => {\n\t\t// contains wj-options element with options\n\t\tconst optionsElement = this.querySelector('wje-options');\n\n\t\tif (optionsElement && optionsElement.hasAttribute('lazy')) {\n\t\t\t// pass search value to wj-options element and infinite scroll will handle the rest\n\t\t\toptionsElement.setAttribute('search', e.target.value);\n\t\t} else {\n\t\t\tlet value = e.target.value.trim().toLowerCase();\n\n\t\t\tthis.getAllOptions().forEach((option) => {\n\t\t\t\tif (option.textContent.trim().toLowerCase().includes(value)) {\n\t\t\t\t\toption.style.display = 'block';\n\t\t\t\t} else {\n\t\t\t\t\toption.style.display = 'none';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n","import { Select } from \"./select.element.js\";\n\nexport default Select;\n\nSelect.define('wje-select', Select);\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"wje-select.js","sources":["../packages/wje-select/select.element.js","../packages/wje-select/select.js"],"sourcesContent":["import { FormAssociatedElement } from '../internals/form-associated-element.js';\nimport { event } from '../utils/event.js';\nimport Button from '../wje-button/button.js';\nimport Popup from '../wje-popup/popup.js';\nimport Icon from '../wje-icon/icon.js';\nimport Label from '../wje-label/label.js';\nimport Chip from '../wje-chip/chip.js';\nimport Input from '../wje-input/input.js';\nimport Option from '../wje-option/option.js';\nimport Options from '../wje-options/options.js';\nimport Checkbox from '../wje-checkbox/checkbox.js';\nimport styles from './styles/styles.css?inline';\n\nexport class Select extends FormAssociatedElement {\n\tconstructor() {\n\t\tsuper();\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the counter element, initially null.\n\t\t * @private\n\t\t */\n\t\tthis.counterEl = null;\n\n\t\t/**\n\t\t * @type {boolean}\n\t\t * @description Tracks whether the select element was previously opened, initially false.\n\t\t * @private\n\t\t * @default {boolean} false\n\t\t */\n\t\tthis._wasOppened = false;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the native select element, initially null.\n\t\t */\n\t\tthis.native = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the popup element, initially null.\n\t\t */\n\t\tthis.popup = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the label element, initially null.\n\t\t */\n\t\tthis.labelElement = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the slot start element, initially null.\n\t\t */\n\t\tthis.slotStart = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the slot end element, initially null.\n\t\t */\n\t\tthis.slotEnd = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the input element, initially null.\n\t\t */\n\t\tthis.input = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the options wrapper element, initially null.\n\t\t */\n\t\tthis.optionsWrapper = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the chips element, initially null.\n\t\t */\n\t\tthis.chips = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the clear button element, initially null.\n\t\t */\n\t\tthis.clear = null;\n\n\t\t/**\n\t\t * @type {HTMLElement|null}\n\t\t * @description A reference to the list element, initially null.\n\t\t */\n\t\tthis.list = null;\n\n\t\tthis._value = [];\n\t\tthis._selected = [];\n\t\tthis._selectedOptions = [];\n\n\t}\n\n\t#addedOptions = [];\n\n\t#htmlOptions = [];\n\n\t/**\n\t * An object representing component dependencies with their respective classes.\n\t * Each property in the object maps a custom component name (as a string key)\n\t * to its corresponding class or constructor.\n\t * @typedef {{[key: string]: Function}} Dependencies\n\t * @property {Function} 'wje-button' Represents the Button component class.\n\t * @property {Function} 'wje-popup' Represents the Popup component class.\n\t * @property {Function} 'wje-icon' Represents the Icon component class.\n\t * @property {Function} 'wje-label' Represents the Label component class.\n\t * @property {Function} 'wje-chip' Represents the Chip component class.\n\t * @property {Function} 'wje-input' Represents the Input component class.\n\t * @property {Function} 'wje-option' Represents the Option component class.\n\t * @property {Function} 'wje-checkbox' Represents the Checkbox component class.\n\t */\n\tdependencies = {\n\t\t'wje-button': Button,\n\t\t'wje-popup': Popup,\n\t\t'wje-icon': Icon,\n\t\t'wje-label': Label,\n\t\t'wje-chip': Chip,\n\t\t'wje-input': Input,\n\t\t'wje-option': Option,\n\t\t'wje-options': Options,\n\t\t'wje-checkbox': Checkbox,\n\t};\n\n\t/**\n\t * Sets the value for the form field. Converts the input value into a FormData object\n\t * if it is not already an array, splitting by spaces if necessary, and sets the\n\t * internal form value as well as the selected values.\n\t * @param {string|Array} value The value to be set. Can be a string (which will be\n\t * split into an array by spaces) or an array of values.\n\t */\n\tset value(value) {\n\t\tif (value) {\n\t\t\tlet data = value;\n\n\t\t\tif (!Array.isArray(data)) {\n\t\t\t\tdata = data.split(' ');\n\t\t\t}\n\t\t\tconst formData = new FormData();\n\t\t\tdata.forEach(v => {\n\t\t\t\tformData.append(this.name, v)\n\t\t\t});\n\t\t\tvalue = formData;\n\n\t\t\tthis._value = data;\n\t\t\tthis.selected = data;\n\n\t\t\tthis.internals.setFormValue(value);\n\t\t} else {\n\t\t\tthis._value = [];\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves the current value.\n\t * @returns {any} The value of the `_value` property.\n\t */\n\tget value() {\n\t\treturn this._value;\n\t}\n\n\t/**\n\t * Sets the `validate-on-change` attribute on the element. When the attribute is present, it typically indicates that validation should occur when the value of the input changes.\n\t * @param {boolean} value A boolean indicating whether to enable or disable the `validate-on-change` attribute.\n\t */\n\tset validateOnChange(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('validate-on-change', '');\n\t\t} else {\n\t\t\tthis.removeAttribute('validate-on-change');\n\t\t}\n\t}\n\n\t/**\n\t * Getter for the validateOnChange attribute.\n\t * @returns {boolean} Whether the attribute is present.\n\t */\n\tget validateOnChange() {\n\t\treturn this.hasAttribute('validate-on-change');\n\t}\n\n\t/**\n\t * Sets the maximum number of options allowed.\n\t * @param { number | object} value The value to set as the maximum number of options.\n\t * If null, the 'max-options' attribute will be removed.\n\t */\n\tset maxOptions(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('max-options', value);\n\t\t} else {\n\t\t\tthis.removeAttribute('max-options');\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves the maximum number of options allowed.\n\t * Parses the value of the 'max-options' attribute from the element and converts it to a number.\n\t * If the attribute is not present or cannot be converted to a valid number, defaults to 1.\n\t * @returns {number} The maximum number of options, or 0 if the attribute is not set or invalid.\n\t */\n\tget maxOptions() {\n\t\treturn +this.getAttribute('max-options') || 1;\n\t}\n\n\t/**\n\t * @summary Setter for the defaultValue attribute.\n\t * This method sets the 'value' attribute of the custom input element to the provided value.\n\t * The 'value' attribute represents the default value of the input element.\n\t * @param {string} value The value to set as the default value.\n\t */\n\tset defaultValue(value) {\n\t\tthis.setAttribute('value', value);\n\t}\n\n\t/**\n\t * @summary Getter for the defaultValue attribute.\n\t * This method retrieves the 'value' attribute of the custom input element.\n\t * The 'value' attribute represents the default value of the input element.\n\t * If the 'value' attribute is not set, it returns an empty string.\n\t * @returns {string} The default value of the input element.\n\t */\n\tget defaultValue() {\n\t\treturn this.getAttribute('value') ?? '';\n\t}\n\n\t/**\n\t * Sets the trigger value.\n\t * @param {string} value The trigger value to set.\n\t */\n\tset trigger(value) {\n\t\tthis.setAttribute('trigger', value);\n\t}\n\n\t/**\n\t * Returns the trigger value.\n\t * @returns {string} The trigger value.\n\t */\n\tget trigger() {\n\t\treturn this.getAttribute('trigger') || 'click';\n\t}\n\n\t/**\n\t * Sets the offset attribute for the element.\n\t * @param {string} value The value to assign to the offset attribute.\n\t */\n\tset offset(value) {\n\t\tthis.setAttribute('offset', value);\n\t}\n\n\t/**\n\t * Gets the value of the offset attribute of the current element.\n\t * If the offset attribute is not present, returns a default value of '0'.\n\t * @returns {string} The value of the offset attribute or the default value '0'.\n\t */\n\tget offset() {\n\t\treturn this.getAttribute('offset') || '5';\n\t}\n\n\t/**\n\t * Sets the label value.\n\t * @param {Array} value The selected value to set.\n\t */\n\tset selected(value) {\n\t\tthis._selected = value;\n\t}\n\n\t/**\n\t * Returns the selected value.\n\t * @returns {Array} The selected value.\n\t */\n\tget selected() {\n\t\treturn this._selected;\n\t}\n\n\t/**\n\t * Sets the selected options for the object.\n\t * @param {Array|object} value The new value for the selected options. It can be an array or object containing the selected options.\n\t */\n\tset selectedOptions(value) {\n\t\tthis._selectedOptions = value;\n\t}\n\n\t/**\n\t * Retrieves the selected options.\n\t * @returns {Array} An array containing the currently selected options. If no options are selected, an empty array is returned.\n\t */\n\tget selectedOptions() {\n\t\treturn this._selectedOptions || [];\n\t}\n\n\t/**\n\t * Sets the `lazy` attribute on the element. If the provided value is truthy, the `lazy` attribute is added. If the value is falsy, the `lazy` attribute is removed.\n\t * @param {boolean} value A boolean value indicating whether to add or remove the `lazy` attribute. If `true`, the attribute is added; if `false`, it is removed.\n\t */\n\tset lazy(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('lazy', '');\n\t\t} else {\n\t\t\tthis.removeAttribute('lazy');\n\t\t}\n\t}\n\n\t/**\n\t * Getter for the 'lazy' property.\n\t * @returns {boolean} Returns true if the 'lazy' attribute is present on the element, otherwise false.\n\t */\n\tget lazy() {\n\t\treturn this.hasAttribute('lazy');\n\t}\n\n\t/**\n\t * Sets or removes the 'no-size' attribute on an element.\n\t * @param {boolean} value A boolean indicating whether to add or remove the 'no-size' attribute. If true, the attribute is added; if false, the attribute is removed.\n\t */\n\tset noSize(value) {\n\t\tif (value) {\n\t\t\tthis.setAttribute('no-size', '');\n\t\t} else {\n\t\t\tthis.removeAttribute('no-size');\n\t\t}\n\t}\n\n\t/**\n\t * Gets the value of the 'no-size' attribute for the element.\n\t * @returns {boolean} True if the 'no-size' attribute is present, otherwise false.\n\t */\n\tget noSize() {\n\t\treturn this.hasAttribute('no-size');\n\t}\n\n\t/**\n\t * Getter for the customErrorDisplay attribute.\n\t * @returns {boolean} Whether the attribute is present.\n\t */\n\tget customErrorDisplay() {\n\t\treturn this.hasAttribute('custom-error-display');\n\t}\n\n\t/**\n\t * Retrieves the complete list of options available for the component.\n\t * The options are determined by combining elements from various sources, including loaded options, added options, and HTML-sourced options.\n\t * If a `wje-options` element is present within the component, its loaded options are included in the merged list.\n\t * In the absence of a `wje-options` element, duplicates among the added and HTML options are removed, retaining their order.\n\t * @returns {Array<object>} An array containing all the available options, combining the loaded, added, and HTML-based options, with duplicates removed where applicable.\n\t */\n\tget options() {\n\t\tif (this.querySelector('wje-options')) {\n\t\t\tconst allOptions = [...this.querySelector('wje-options').loadedOptions, ...this.#addedOptions, ...this.#htmlOptions]\n\n\t\t\treturn allOptions\n\t\t} else {\n\t\t\tconst allOptions = [...this.#addedOptions, ...this.#htmlOptions]\n\n\t\t\treturn Array.from(\n\t\t\t\tnew Map(allOptions.reverse().map(obj => [obj.value, obj])).values()\n\t\t\t).reverse();\n\t\t}\n\t}\n\n\tclassName = 'Select';\n\n\t/**\n\t * Returns the CSS styles for the component.\n\t * @static\n\t * @returns {CSSStyleSheet}\n\t */\n\tstatic get cssStyleSheet() {\n\t\treturn styles;\n\t}\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 ['active', 'value', 'disabled', 'multiple', 'label', 'placeholder', 'max-height', 'max-options', 'variant', 'placement'];\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\tbeforeDraw() {\n\t\tif(this.hasAttribute('value')) {\n\t\t\tthis.value = this.getAttribute('value');\n\t\t}\n\t}\n\n\t/**\n\t * Draws the component for the select.\n\t * @returns {DocumentFragment}\n\t */\n\tdraw() {\n\t\tlet fragment = document.createDocumentFragment();\n\n\t\tthis.classList.add('wje-placement', this.placement ? 'wje-' + this.placement : 'wje-start');\n\n\t\t// zakladny obalovac\n\t\tlet native = document.createElement('div');\n\t\tnative.setAttribute('part', 'native');\n\t\tnative.classList.add('native-select', this.variant || 'default');\n\n\t\t// wrapper pre label a inputWrapper\n\t\tlet wrapper = document.createElement('div');\n\t\twrapper.classList.add('wrapper');\n\t\twrapper.setAttribute('slot', 'anchor');\n\n\t\t// label\n\t\tlet label = document.createElement('wje-label');\n\t\tlabel.setAttribute('part', 'label');\n\t\tlabel.innerText = this.label || '';\n\n\t\t// obalovac pre input\n\t\tlet inputWrapper = document.createElement('div');\n\t\tinputWrapper.setAttribute('part', 'input-wrapper');\n\t\tinputWrapper.classList.add('input-wrapper');\n\n\t\tlet slotStart = document.createElement('div');\n\t\tslotStart.classList.add('slot-start');\n\n\t\tlet input = document.createElement('input');\n\t\tinput.setAttribute('type', 'text');\n\t\tinput.value = this.value.join(' ').trim();\n\t\tinput.classList.add('input-hidden');\n\n\t\tlet display = document.createElement('input');\n\t\tdisplay.setAttribute('type', 'text');\n\t\tdisplay.setAttribute('part', 'input');\n\t\tdisplay.setAttribute('autocomplete', 'off');\n\t\tdisplay.setAttribute('readonly', '');\n\t\tdisplay.setAttribute('placeholder', this.placeholder || '');\n\n\t\tif (this.required) {\n\t\t\tinput.setAttribute('required', '');\n\t\t\tdisplay.setAttribute('required', '');\n\t\t}\n\n\t\tif (this.disabled) {\n\t\t\tinput.setAttribute('disabled', '');\n\t\t\tdisplay.setAttribute('disabled', '');\n\t\t}\n\n\t\tlet slotEnd = document.createElement('div');\n\t\tslotEnd.classList.add('slot-end');\n\n\t\tlet arrow = document.createElement('wje-icon');\n\t\tarrow.setAttribute('name', 'chevron-down');\n\t\tarrow.setAttribute('slot', 'arrow');\n\n\t\tlet chips = document.createElement('div');\n\t\tchips.classList.add('chips');\n\t\tchips.innerText = this.placeholder || '';\n\n\t\t// obalovac pre option a find\n\t\tlet optionsWrapper = document.createElement('div');\n\t\toptionsWrapper.setAttribute('part', 'options-wrapper');\n\t\toptionsWrapper.classList.add('options-wrapper');\n\t\toptionsWrapper.style.setProperty('height', this.maxHeight || 'auto');\n\n\t\tlet list = document.createElement('div');\n\t\tlist.classList.add('list');\n\n\t\tlet slot = document.createElement('slot');\n\n\t\tlet clear = document.createElement('wje-button');\n\t\tclear.setAttribute('fill', 'link');\n\t\tclear.setAttribute('part', 'clear');\n\t\tclear.setAttribute('stop-propagation', '');\n\n\t\tlet clearIcon = document.createElement('wje-icon');\n\t\tclearIcon.setAttribute('name', 'x');\n\n\t\tlet error = document.createElement('div');\n\t\terror.setAttribute('slot', 'error');\n\n\t\tlet errorSlot = document.createElement('slot');\n\t\terrorSlot.setAttribute('name', 'error');\n\n\t\t// vytvorime popup\n\t\tlet popup = document.createElement('wje-popup');\n\t\tpopup.setAttribute('placement', 'bottom-start');\n\t\tif (!this.noSize)\n\t\t\tpopup.setAttribute('size', '');\n\t\tpopup.setAttribute('part', 'popup');\n\t\tpopup.setAttribute('offset', this.offset);\n\n\t\tif(this.lazy || this.querySelector('wje-options')) {\n\t\t\tpopup.setAttribute('loader', '');\n\t\t}\n\n\t\tif (this.disabled) popup.setAttribute('disabled', '');\n\n\t\tif (this.variant === 'standard') {\n\t\t\tif (this.hasAttribute('label')) native.appendChild(label);\n\t\t} else {\n\t\t\twrapper.appendChild(label);\n\t\t}\n\n\t\tinputWrapper.append(slotStart);\n\t\tinputWrapper.append(display);\n\t\tinputWrapper.append(input);\n\n\t\tclear.append(clearIcon);\n\n\t\tif (this.hasAttribute('multiple')) inputWrapper.append(chips);\n\n\t\tif (this.hasAttribute('clearable')) inputWrapper.append(clear);\n\n\t\tinputWrapper.appendChild(slotEnd);\n\t\tinputWrapper.appendChild(arrow);\n\n\t\tlist.appendChild(slot);\n\n\t\tif (this.hasAttribute('find')) {\n\t\t\tlet find = document.createElement('wje-input');\n\t\t\tfind.setAttribute('variant', 'standard');\n\t\t\tfind.setAttribute('placeholder', 'Hľadať');\n\t\t\tfind.setAttribute('part', 'find');\n\t\t\tfind.clearable = true;\n\t\t\tfind.classList.add('find');\n\n\t\t\toptionsWrapper.appendChild(find);\n\n\t\t\tthis.findEl = find;\n\t\t}\n\n\t\toptionsWrapper.append(list);\n\n\t\twrapper.append(inputWrapper);\n\n\t\tpopup.append(wrapper);\n\t\tpopup.append(optionsWrapper);\n\n\t\tif (this.trigger === 'click') popup.setAttribute('manual', '');\n\n\t\tthis.append(error);\n\n\t\tnative.append(popup);\n\t\tnative.append(errorSlot);\n\n\t\tfragment.appendChild(native);\n\n\t\tthis.native = native;\n\t\tthis.popup = popup;\n\t\tthis.labelElement = label;\n\t\tthis.slotStart = slotStart;\n\t\tthis.slotEnd = slotEnd;\n\t\tthis.input = input;\n\t\tthis.display = display;\n\t\tthis.optionsWrapper = optionsWrapper;\n\t\tthis.chips = chips;\n\t\tthis.clear = clear;\n\t\tthis.list = list;\n\n\t\treturn fragment;\n\t}\n\n\t/**\n\t * Performs actions and binds events after the component's markup and state are initialized.\n\t * Actions include setting up event listeners, managing option elements, handling focus and blur behaviors,\n\t * synchronizing the selected options, and managing a find functionality for filtering options.\n\t * @returns {void} Does not return a value. The method operates by updating the state and behavior of the component.\n\t */\n\tafterDraw() {\n\n\t\tthis.validate(this.selectedOptions);\n\n\t\tif (this.hasAttribute('invalid')) {\n\t\t\tthis.showInvalidMessage();\n\t\t}\n\n\t\tthis.getAllOptions()?.forEach((option) => {\n\t\t\tthis.optionCheckSlot(option);\n\t\t});\n\n\t\tthis.selectedOptions = this.#getSelectedOptions();\n\t\tthis.selectOptions(this.value);\n\t\tthis.selected = this.#getSelected();\n\t\tthis.selections(true);\n\n\t\tif (this.lazy) {\n\t\t\tevent.addListener(this.popup, 'wje-popup:show', null, (e) => {\n\t\t\t\tif (this._wasOppened) return;\n\t\t\t\tthis._wasOppened = true;\n\n\t\t\t\tconst optionsElement = this.querySelector('wje-options');\n\t\t\t\toptionsElement.setAttribute('lazy', '');\n\t\t\t\toptionsElement.setAttribute('attached', '');\n\t\t\t});\n\t\t}\n\n\t\tthis.#htmlOptions = Array.from(this.querySelectorAll(':scope > wje-option')).map((option) => {\n\t\t\treturn {\n\t\t\t\tvalue: option.value,\n\t\t\t\ttext: option.textContent.trim(),\n\t\t\t};\n\t\t})\n\n\t\tthis.input.addEventListener('focus', (e) => {\n\t\t\tthis.labelElement?.classList.add('fade');\n\t\t\tthis.native.classList.add('focused');\n\t\t});\n\n\t\tthis.input.addEventListener('blur', (e) => {\n\t\t\tthis.native.classList.remove('focused');\n\t\t\tif (!e.target.value) this.labelElement?.classList.remove('fade');\n\t\t});\n\n\t\tthis.input.addEventListener('input', (e) => {\n\t\t\tthis.propagateValidation();\n\t\t});\n\n\t\tthis.addEventListener('wje-option:change', this.optionChange);\n\n\t\tthis.addEventListener('wje-select:invalid', (e) => {\n\t\t\tthis.invalid = true;\n\t\t\tthis.pristine = false;\n\n\t\t\tthis.showInvalidMessage();\n\n\t\t\tif (this.customErrorDisplay) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\tthis.clear?.addEventListener('wje-button:click', (e) => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tthis.clearSelections();\n\t\t});\n\n\t\tthis.list.addEventListener('wje-options:load', (e) => {\n\t\t\tthis.selectedOptions.forEach((option) => {\n\t\t\t\tthis.getAllOptions().forEach((el) => {\n\t\t\t\t\tif (el.value === option.value) {\n\t\t\t\t\t\tel.selected = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})\n\n\t\t\tthis.list.scrollTo(0, 0);\n\t\t\tevent.dispatchCustomEvent(this.popup, 'wje-popup:content-ready'); // Notify that the content is ready\n\t\t});\n\n\t\t// skontrolujeme ci ma select atribut find\n\t\tif (this.hasAttribute('find') && this.findEl instanceof HTMLElement) {\n\t\t\tevent.addListener(this.findEl, 'keyup', '', this.#applySearchFilter);\n\t\t\tevent.addListener(this.findEl, 'wje-input:clear', '', this.#applySearchFilter);\n\t\t}\n\t}\n\n\t/**\n\t * Handles the option change event.\n\t * @param {Event} e The event.\n\t */\n\toptionChange = (e) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\te.stopImmediatePropagation();\n\n\t\tlet allOptions = this.getAllOptions();\n\n\t\tif (!this.hasAttribute('multiple')) {\n\t\t\tallOptions.forEach((option) => {\n\t\t\t\tif (option.value === e.target.value) {\n\t\t\t\t\tthis.processClickedOption(option);\n\t\t\t\t} else {\n\t\t\t\t\toption.selected = false;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.popup.hide(false);\n\t\t} else {\n\t\t\tthis.processClickedOption(e.target, true);\n\t\t}\n\n\t\tthis.selections();\n\n\t\tthis.validate(this.selectedOptions);\n\n\t\tthis.pristine = false;\n\t\tthis.propagateValidation();\n\t}\n\n\t/**\n\t * Handles the selection and deselection of an option element.\n\t * @param {HTMLElement} option The option element that was clicked.\n\t * @param {boolean} [multiple] Indicates whether multiple selection is allowed.\n\t */\n\tprocessClickedOption = (option, multiple = false) => {\n\t\tconst isSelected = option.hasAttribute('selected');\n\t\toption.selected = !isSelected;\n\n\t\tif (isSelected) {\n\t\t\tthis.filterOutOption(option);\n\t\t} else {\n\t\t\tthis.selectedOptions = multiple ? [...this.selectedOptions, option] : [option];\n\t\t}\n\t}\n\n\t/**\n\t * Filters out a specified option from the `selectedOptions` array.\n\t * This function removes an option from the `selectedOptions` array if its value\n\t * matches the value of the option provided as an argument. It allows for dynamically\n\t * updating the selected options by excluding the specified option.\n\t * @param {object} option The option to be removed from the `selectedOptions` array.\n\t * Should be an object containing a `value` property that is compared to the\n\t * `value` property of objects in the `selectedOptions` array.\n\t */\n\tfilterOutOption = (option) => {\n\t\tthis.selectedOptions = this.selectedOptions.filter((sOption) => {\n\t\t\treturn sOption.value !== option.value;\n\t\t});\n\t}\n\n\t/**\n\t * Returns all the options as HTML.\n\t * @returns {NodeList} The options as HTML.\n\t */\n\tgetAllOptions() {\n\t\treturn this.querySelectorAll('wje-option');\n\t}\n\n\t/**\n\t * Handles the selection change.\n\t * @param {Element[]} options The option that changed.\n\t * @param {number} length The length of the selected options.\n\t */\n\tselectionChanged(options = null, length = 0) {\n\t\tthis.selected = this.#getSelected();\n\n\t\tif (this.hasAttribute('multiple')) {\n\t\t\tthis.value = this.selectedOptions.map((el) => el.value).reverse();\n\t\t\tthis.input.value = this.selected.map(a => a.value).join(\" \").trim();\n\n\t\t\tif (this.placeholder && length === 0) {\n\t\t\t\tthis.chips.innerHTML = this.placeholder;\n\t\t\t} else {\n\t\t\t\tif (options !== null) Array.from(options).slice(0, +this.maxOptions).forEach(option => this.chips.appendChild(this.getChip(option)));\n\t\t\t\tif (this.counterEl instanceof HTMLElement || !this.maxOptions || length > +this.maxOptions) {\n\t\t\t\t\tthis.counter();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst option = options?.at(0);\n\t\t\tthis.value = this.selectedOptions?.map((el) => el.value)?.at(0);\n\t\t\tthis.input.value = this.selected[0]?.value || '';\n\t\t\tthis.display.value = this.selectedOptions[0]?.textContent?.trim() || '';\n\n\t\t\tif (option && option instanceof HTMLElement) {\n\t\t\t\tthis.slotStart.innerHTML = '';\n\n\t\t\t\tlet optionSlotStart = option?.querySelector('wje-option > [slot=start]');\n\t\t\t\tif (optionSlotStart) {\n\t\t\t\t\tthis.slotStart.appendChild(optionSlotStart.cloneNode(true));\n\t\t\t\t}\n\n\t\t\t\tthis.slotEnd.innerHTML = '';\n\n\t\t\t\tlet optionSlotEnd = option?.querySelector('wje-option > [slot=end]');\n\t\t\t\tif (optionSlotEnd) {\n\t\t\t\t\tthis.slotEnd.appendChild(optionSlotEnd.cloneNode(true));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Updates the selected options and their corresponding chips.\n\t * @param {boolean} [silence] Determines whether to suppress the \"wje-select:change\" event.\n\t * @returns {void}\n\t * @description\n\t * This method fetches the currently selected options and updates the `selectedOptions` array.\n\t * It clears and rebuilds the chips representing the selected items in the UI.\n\t * If the number of selected options reaches the maximum allowed (`maxOptions`), it stops updating the counter.\n\t * Optionally, it dispatches a custom event when the selection changes unless `silence` is set to `true`.\n\t * //@fires wje-select:change - Dispatched when the selection changes, unless `silence` is `true`.\n\t * @example\n\t * // Call the method and allow event dispatch\n\t * selections();\n\t * @example\n\t * // Call the method without dispatching the event\n\t * selections(true);\n\t */\n\tselections(silence = false) {\n\t\tif (this.selectedOptions.length >= +this.maxOptions) {\n\t\t\tthis.counterEl = null;\n\t\t}\n\n\t\tif (this.chips) {\n\t\t\tthis.chips.innerHTML = '';\n\t\t}\n\n\t\tif (this.selectedOptions.length > 0) {\n\t\t\tthis.selectionChanged(this.selectedOptions, this.selectedOptions.length);\n\t\t} else {\n\t\t\tthis.selectionChanged(this.selectedOptions);\n\t\t}\n\n\t\tif (silence) return;\n\t\tevent.dispatchCustomEvent(this, 'wje-select:change');\n\t}\n\n\t/**\n\t * Manages the display of a counter element to indicate the number of items exceeding the maximum allowed options.\n\t * - If the number of selected items equals the maximum allowed, the counter element is removed.\n\t * - If the counter element doesn't exist and the number of items exceeds the maximum, it is created and updated.\n\t */\n\tcounter() {\n\t\t// zmazanie counter (span)\n\t\tif (this.counterEl && this.value.length === +this.maxOptions) {\n\t\t\tthis.counterEl.remove();\n\t\t\tthis.counterEl = null;\n\t\t\treturn;\n\t\t}\n\n\t\t// ak counter nie je, tak ho vytvorime\n\t\tif (!this.counterEl) {\n\t\t\tthis.counterEl = document.createElement('span');\n\t\t\tthis.counterEl.classList.add('counter');\n\n\t\t\tthis.chips.appendChild(this.counterEl);\n\t\t}\n\n\t\t// nastavime hodnotu counter\n\t\tthis.counterEl.innerText = `+${this.value.length - +this.maxOptions}`;\n\t}\n\n\t/**\n\t * Returns a chip element.\n\t * @param {Element} option The option to get the chip for.\n\t * @returns {Element} The chip element.\n\t */\n\tgetChip(option) {\n\t\tlet chip = document.createElement('wje-chip');\n\t\tchip.size = 'small';\n\t\tchip.removable = true;\n\t\tchip.round = true;\n\t\tchip.addEventListener('wje:chip-remove', this.removeChip);\n\t\tchip.option = option;\n\n\t\tlet label = document.createElement('wje-label');\n\t\tlabel.innerText = this.#htmlSelectedItem(option.value) // option.textContent.trim();\n\n\t\tchip.appendChild(label);\n\n\t\treturn chip;\n\t}\n\n\t/**\n\t * Handles the chip remove event.\n\t * @param {Event} e The event.\n\t */\n\tremoveChip = (e) => {\n\t\te.target.parentNode.removeChild(e.target);\n\t\tthis.processClickedOption(e.target.option, true);\n\t\tthis.selections();\n\t};\n\n\t/**\n\t * Generates an HTML option element based on the provided item and mapping.\n\t * @param {object} item The item to generate the option for.\n\t * @param {object} [map] The mapping object that specifies the properties of the item to use for the option's value and text.\n\t * @param {string} [map.value] The property of the item to use for the option's value.\n\t * @param {string} [map.text] The property of the item to use for the option's text.\n\t * @returns {HTMLElement} The generated HTML option element.\n\t */\n\thtmlOption(item, map = { value: 'value', text: 'text' }) {\n\t\tlet option = document.createElement('wje-option');\n\n\t\tif (item[map.value] === null) {\n\t\t\tconsole.warn(`The item ${JSON.stringify(item)} does not have the property ${map.value}`);\n\t\t}\n\n\t\tif (item[map.text] === null) {\n\t\t\tconsole.warn(`The item ${JSON.stringify(item)} does not have the property ${map.text}`);\n\t\t}\n\n\t\toption.setAttribute('value', item[map.value] ?? '');\n\t\toption.innerText = item[map.text] ?? '';\n\n\t\tthis.#addedOptions.push({ [map.value]: item[map.value], [map.text]: item[map.text] });\n\t\treturn option;\n\t}\n\n\t/**\n\t * Returns the provided item.\n\t * @param {any} item The item to be returned.\n\t * @returns {any} The same item that was passed as input.\n\t */\n\thtmlSelectedItem(item) {\n\t\treturn item;\n\t}\n\n\t/**\n\t * Adds an option to the select element.\n\t * @param {any} optionData The data for the option to be added.\n\t * @param {boolean} [silent] Whether to suppress any events triggered by the addition of the option.\n\t * @param {object} [map] The mapping object specifying the properties of the option data to be used for the value and text of the option.\n\t */\n\taddOption(optionData, silent = false, map = { value: 'value', text: 'text' }) {\n\t\tif (!optionData) return;\n\n\t\tconst optionsElement = this.querySelector('wje-options');\n\t\tif (optionsElement) {\n\t\t\toptionsElement.addOption(optionData, silent, map);\n\t\t\treturn;\n\t\t}\n\t\tlet option = this.htmlOption(optionData, map);\n\t\tthis.appendChild(option);\n\t}\n\n\t/**\n\t * Adds options to the select element.\n\t * @param {Array | object} optionsData The options data to be added. Can be an array of objects or a single object.\n\t * @param {boolean} [silent] Indicates whether to trigger events when adding options. Default is false.\n\t * @param {object} [map] The mapping object that specifies the properties of the options data object. Default is { value: \"value\", text: \"text\" }.\n\t */\n\taddOptions(optionsData, silent = false, map = { value: 'value', text: 'text' }) {\n\t\tif (!Array.isArray(optionsData)) {\n\t\t\tthis.addOption(optionsData, silent, map);\n\t\t} else {\n\t\t\toptionsData.forEach((item) => {\n\t\t\t\tthis.addOption(item, silent, map);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Selects an option with the specified value.\n\t * @param {string} value The value of the option to be selected.\n\t * @param {boolean} [silent] Whether to suppress firing events.\n\t */\n\tselectOption(value, silent = false) {\n\t\tif (!value) return;\n\n\t\tlet option = this.querySelector(`wje-option[value=\"${value}\"]`);\n\n\t\tif (option) {\n\t\t\tthis.processClickedOption(option, this.hasAttribute('multiple'));\n\t\t}\n\n\t\tif (this.drawingStatus > this.drawingStatuses.START) this.selections(silent);\n\t}\n\n\t/**\n\t * Selects one or multiple options in the select element.\n\t * @param {Array|any} values The value(s) of the option(s) to be selected.\n\t * @param {boolean} [silent] Whether to trigger the change event or not.\n\t */\n\tselectOptions(values, silent = false) {\n\t\tif (!Array.isArray(values)) {\n\t\t\tthis.selectOption(values, silent);\n\t\t} else {\n\t\t\tvalues.forEach((value) => {\n\t\t\t\tthis.selectOption(value, silent);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Clones and appends an icon from a template with slot \"check\" to the given option element.\n\t * @param {HTMLElement} option The target option element where the \"check\" icon will be added.\n\t * @returns {void}\n\t */\n\toptionCheckSlot(option) {\n\t\tlet icon = this.querySelector('template')?.content.querySelector(`[slot=\"check\"]`);\n\t\tif (!icon) {\n\t\t\tconsole.warn(`Icon with slot \"check\" was not found.`);\n\t\t\treturn;\n\t\t}\n\n\t\tlet iconClone = icon.cloneNode(true);\n\t\toption.append(iconClone);\n\t}\n\n\t/**\n\t * Checks if all elements in the `elements` array are present in the `options` array based on their `option` property.\n\t * @param {Array} elements The array of elements to check. Each element should have an `option` property.\n\t * @param {Array} options The array of options to verify against.\n\t * @returns {boolean} Returns true if all elements in the `elements` array are found within the `options` array, otherwise returns false.\n\t */\n\tareAllElementsInOptions(elements, options) {\n\t\tif (elements.length === 0) return false;\n\n\t\treturn elements.every(el =>\n\t\t\toptions.some(opt => JSON.stringify(opt) === JSON.stringify(el.option))\n\t\t);\n\t}\n\n\tclearSelections() {\n\t\tthis.selected = [];\n\t\tthis.selectedOptions = [];\n\n\t\tthis.getAllOptions().forEach((option) => {\n\t\t\toption.selected = false;\n\t\t});\n\t\tthis.selections();\n\t}\n\t/**\n\t * Processes the provided item to retrieve its corresponding value and text\n\t * based on the configuration of `wje-options`, then updates and returns\n\t * the selected item's HTML representation.\n\t * @param {any} item The input item for which the value and text are determined.\n\t * @returns {string} The HTML representation of the selected item's value.\n\t */\n\t#htmlSelectedItem(item) {\n\t\tconst keyValue = \"value\"\n\t\tconst textValue = \"textContent\";\n\n\t\tconst value = this.selectedOptions.find((option) => option[keyValue] === item)?.[textValue] ?? \"\";\n\n\t\treturn this.htmlSelectedItem(value);\n\t}\n\n\t/**\n\t * Returns the selected options.\n\t * @returns {Array} The selected options.\n\t */\n\t#getSelected() {\n\t\treturn this.selectedOptions.map((option) => {\n\t\t\treturn {\n\t\t\t\tvalue: option.value,\n\t\t\t\ttext: this.#htmlSelectedItem(option.value) // option.textContent.trim(),\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * Returns the selected options as HTML.\n\t * @returns {NodeList} The selected options as HTML.\n\t */\n\t#getSelectedOptions() {\n\t\treturn Array.from(this.querySelectorAll('wje-option[selected]'));\n\t}\n\n\t#applySearchFilter = (e) => {\n\t\t// contains wj-options element with options\n\t\tconst optionsElement = this.querySelector('wje-options');\n\n\t\tif (optionsElement && optionsElement.hasAttribute('lazy')) {\n\t\t\t// pass search value to wj-options element and infinite scroll will handle the rest\n\t\t\toptionsElement.setAttribute('search', e.target.value);\n\t\t} else {\n\t\t\tlet value = e.target.value.trim().toLowerCase();\n\n\t\t\tthis.getAllOptions().forEach((option) => {\n\t\t\t\tif (option.textContent.trim().toLowerCase().includes(value)) {\n\t\t\t\t\toption.style.display = 'block';\n\t\t\t\t} else {\n\t\t\t\t\toption.style.display = 'none';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n","import { Select } from \"./select.element.js\";\n\nexport default Select;\n\nSelect.define('wje-select', Select);\n"],"names":["_a"],"mappings":"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"}
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.1.188",
4
+ "version": "0.1.190",
5
5
  "homepage": "https://github.com/lencys/wj-elements",
6
6
  "author": "Lukáš Ondrejček <lukas.ondrejcek@gmail.com>",
7
7
  "license": "MIT",