{"version":3,"file":"router.d6d816f1.js","sources":["node_modules/hybrids/src/router.js"],"sourcesContent":["import global from \"./global.js\";\nimport { callbacksMap } from \"./define.js\";\nimport * as cache from \"./cache.js\";\nimport { dispatch, walkInShadow } from \"./utils.js\";\n\nconst connect = Symbol(\"router.connect\");\nconst configs = new WeakMap();\n\nconst flushes = new WeakMap();\nconst stacks = new WeakMap();\nconst routers = new WeakMap();\n\nlet rootRouter = null;\nconst entryPoints = new Set();\n\nlet debug = false;\nfunction setDebug(value = true) {\n debug = !!value;\n}\n\nconst scrollMap = new WeakMap();\nconst focusMap = new WeakMap();\nfunction saveLayout(target) {\n const focusEl = global.document.activeElement;\n focusMap.set(target, rootRouter.contains(focusEl) && focusEl);\n\n const map = new Map();\n\n const rootEl = global.document.scrollingElement;\n map.set(rootEl, { left: rootEl.scrollLeft, top: rootEl.scrollTop });\n\n walkInShadow(target, (el) => {\n if (el.scrollLeft || el.scrollTop) {\n map.set(el, { left: el.scrollLeft, top: el.scrollTop });\n }\n });\n\n scrollMap.set(target, map);\n}\n\nfunction focusElement(target) {\n if (target.tabIndex === -1) {\n const outline = target.style.outline;\n target.tabIndex = 0;\n target.style.outline = \"none\";\n target.addEventListener(\n \"blur\",\n () => {\n target.removeAttribute(\"tabindex\");\n target.style.outline = outline;\n },\n { once: true },\n );\n }\n target.focus({ preventScroll: true });\n}\n\nfunction restoreLayout(target) {\n const activeEl = global.document.activeElement;\n\n focusElement(\n focusMap.get(target) ||\n (rootRouter.contains(activeEl) ? activeEl : rootRouter),\n );\n\n const map = scrollMap.get(target);\n if (map) {\n const config = configs.get(target);\n const state = global.history.state;\n const entry = state.find((e) => e.id === config.id);\n const clear = entry && entry.params.scrollToTop;\n\n map.forEach((pos, el) => {\n el.scrollLeft = clear ? 0 : pos.left;\n el.scrollTop = clear ? 0 : pos.top;\n });\n\n scrollMap.delete(target);\n } else {\n const rootEl = global.document.scrollingElement;\n rootEl.scrollLeft = 0;\n rootEl.scrollTop = 0;\n }\n}\n\nfunction mapUrlParam(value) {\n return value === true ? 1 : value || \"\";\n}\n\nconst metaParams = [\"scrollToTop\"];\n\nfunction setupBrowserUrl(browserUrl, id) {\n const [pathname, search = \"\"] = browserUrl.split(\"?\");\n\n const searchParams = search ? search.split(\",\") : [];\n const normalizedPathname = pathname.replace(/^\\//, \"\").split(\"/\");\n const pathnameParams = normalizedPathname.reduce((params, name) => {\n if (name.startsWith(\":\")) {\n const key = name.slice(1);\n if (searchParams.includes(key)) {\n throw Error(`The '${key}' already used in search params`);\n }\n if (params.includes(key)) {\n throw Error(`The '${key}' already used in pathname`);\n }\n params.push(key);\n }\n return params;\n }, []);\n\n return {\n browserUrl,\n pathnameParams,\n paramsKeys: [...searchParams, ...pathnameParams],\n url(params, strict = false) {\n const temp = normalizedPathname.reduce((acc, part) => {\n if (part.startsWith(\":\")) {\n const key = part.slice(1);\n\n if (!hasOwnProperty.call(params, key)) {\n throw Error(`The '${key}' parameter must be defined for <${id}>`);\n }\n\n part = mapUrlParam(params[key]);\n }\n\n return `${acc}/${part}`;\n }, \"\");\n\n const url = new URL(temp, global.location.origin);\n\n Object.keys(params).forEach((key) => {\n if (\n pathnameParams.includes(key) ||\n (strict && (metaParams.includes(key) || !searchParams.includes(key)))\n ) {\n return;\n }\n\n url.searchParams.append(key, mapUrlParam(params[key]));\n });\n\n return url;\n },\n match(url) {\n const params = {};\n const temp = url.pathname.replace(/^\\//, \"\").split(\"/\");\n\n if (temp.length !== normalizedPathname.length) return null;\n\n for (let i = 0; i < temp.length; i += 1) {\n const part = temp[i];\n const normalizedPart = normalizedPathname[i];\n\n if (normalizedPart.startsWith(\":\")) {\n const key = normalizedPart.slice(1);\n params[key] = part;\n } else if (part !== normalizedPart) {\n return null;\n }\n }\n\n url.searchParams.forEach((value, key) => {\n params[key] = value;\n });\n\n return params;\n },\n };\n}\n\nfunction hasInStack(config, target) {\n return config.stack.some((temp) => {\n if (temp === target) return true;\n return hasInStack(temp, target);\n });\n}\n\nfunction addEntryPoint(config) {\n if (config.browserUrl) {\n entryPoints.add(config);\n }\n config.stack.forEach(addEntryPoint);\n}\n\nfunction setupViews(views, options, parent = null, nestedParent = null) {\n if (typeof views === \"function\") views = views();\n views = [].concat(views);\n\n return views.map((hybrids) => {\n const config = configs.get(hybrids);\n\n if (config && hasInStack(config, parent)) {\n throw Error(\n `<${config.id}> cannot be in the stack of <${parent.id}>, as it is an ancestor in the stack tree`,\n );\n }\n\n // eslint-disable-next-line no-use-before-define\n return setupView(hybrids, options, parent, nestedParent);\n });\n}\n\nfunction getNestedRouterOptions(hybrids, config) {\n const nestedRouters = Object.values(hybrids)\n .map((desc) => routers.get(desc))\n .filter((d) => d);\n\n if (nestedRouters.length) {\n if (nestedRouters.length > 1) {\n throw TypeError(\n `<${config.id}> must contain at most one nested router, found: ${nestedRouters.length}`,\n );\n }\n\n if (config.dialog) {\n throw TypeError(\n `Nested routers are not supported in dialogs. Remove the router property definition from <${config.id}>`,\n );\n }\n\n if (config.browserUrl) {\n throw TypeError(\n `A view with nested router must not have the url option. Remove the url option from <${config.id}>`,\n );\n }\n }\n return nestedRouters[0];\n}\n\nfunction getConfigById(id) {\n const Constructor = global.customElements.get(id);\n return configs.get(Constructor);\n}\n\nfunction setupView(hybrids, routerOptions, parent, nestedParent) {\n const id = hybrids.tag;\n let config = getConfigById(id);\n\n if (config && config.hybrids !== hybrids) {\n config = null;\n }\n\n if (!config) {\n const Constructor = global.customElements.get(id);\n\n if (!Constructor || Constructor.hybrids !== hybrids) {\n throw Error(\n `<${id}> view must be defined by 'define()' function before it can be used in router factory`,\n );\n }\n\n let browserUrl = null;\n\n const options = {\n dialog: false,\n guard: false,\n multiple: false,\n replace: false,\n ...hybrids[connect],\n };\n\n const callbacks = callbacksMap.get(Constructor);\n\n if (!nestedParent) {\n callbacks.push(restoreLayout);\n }\n\n if (options.dialog) {\n callbacks.push((host) => {\n const goBackOnEscKey = (event) => {\n if (event.key === \"Escape\") {\n event.stopPropagation();\n global.history.go(-1);\n }\n };\n\n const focusDialog = () => {\n focusElement(host);\n };\n\n const prevActiveEl = global.document.activeElement;\n const root = rootRouter;\n\n root.addEventListener(\"focusin\", focusDialog);\n host.addEventListener(\"focusout\", focusDialog);\n host.addEventListener(\"keydown\", goBackOnEscKey);\n\n focusElement(host);\n\n return () => {\n root.removeEventListener(\"focusin\", focusDialog);\n host.removeEventListener(\"focusout\", focusDialog);\n host.removeEventListener(\"keydown\", goBackOnEscKey);\n\n focusElement(prevActiveEl);\n };\n });\n }\n\n const writableParams = [];\n Object.keys(Constructor.prototype).forEach((key) => {\n const desc = Object.getOwnPropertyDescriptor(Constructor.prototype, key);\n if (desc.set) writableParams.push(key);\n });\n\n if (options.url) {\n if (options.dialog) {\n throw Error(\n `The 'url' option is not supported for dialogs - remove it from <${id}>`,\n );\n }\n if (typeof options.url !== \"string\") {\n throw TypeError(\n `The 'url' option in <${id}> must be a string: ${typeof options.url}`,\n );\n }\n browserUrl = setupBrowserUrl(options.url, id);\n\n browserUrl.paramsKeys.forEach((key) => {\n const desc = Object.getOwnPropertyDescriptor(\n Constructor.prototype,\n key,\n );\n if (!desc || !desc.set) {\n throw Error(\n `'${key}' parameter from the url is not ${\n desc ? \"writable\" : \"defined\"\n } in <${id}>`,\n );\n }\n });\n }\n\n const stateParams = writableParams.filter(\n (k) => !routerOptions.params.includes(k) && !metaParams.includes(k),\n );\n const clearParams = browserUrl\n ? stateParams.filter((k) => !browserUrl.pathnameParams.includes(k))\n : stateParams;\n\n callbacksMap.get(Constructor).unshift((_) =>\n cache.observe(\n _,\n connect,\n (host) =>\n stateParams.reduce((acc, key) => {\n const value = mapUrlParam(host[key]).toString();\n acc[key] =\n value !== undefined && host[key] !== hybrids[key]\n ? String(value)\n : undefined;\n return acc;\n }, {}),\n (host, params, lastParams) => {\n if (!lastParams) return;\n\n const state = global.history.state;\n let entry = state[0];\n while (entry.id !== id && entry.nested) entry = entry.nested;\n\n params = { ...entry.params, ...params };\n\n clearParams.forEach((key) => {\n if (params[key] === undefined) delete params[key];\n });\n\n global.history.replaceState(\n [config.getEntry(params), ...state.slice(1)],\n \"\",\n browserUrl ? config.url(params, true) : \"\",\n );\n },\n ),\n );\n\n let guard;\n if (options.guard) {\n guard = () => {\n try {\n return options.guard();\n } catch (e) {\n console.error(e);\n return false;\n }\n };\n }\n\n config = {\n id,\n hybrids,\n dialog: options.dialog,\n multiple: options.multiple,\n replace: options.replace,\n guard,\n parent,\n nestedParent,\n nestedRoots: undefined,\n parentsWithGuards: undefined,\n stack: [],\n ...(browserUrl || {\n url(params) {\n const url = new URL(\"\", global.location.origin);\n\n Object.keys(params).forEach((key) => {\n url.searchParams.append(key, mapUrlParam(params[key]));\n });\n\n return new URL(\n `${routerOptions.url}#@${id}${url.search}`,\n global.location.origin,\n );\n },\n match(url) {\n const params = {};\n url.searchParams.forEach((value, key) => {\n if (writableParams.includes(key) || metaParams.includes(key))\n params[key] = value;\n });\n\n return params;\n },\n }),\n create() {\n const el = new Constructor();\n configs.set(el, config);\n\n return el;\n },\n getEntry(params = {}, other) {\n const entryParams = Object.keys(params).reduce((acc, key) => {\n if (writableParams.includes(key)) {\n acc[key] = params[key];\n }\n\n return acc;\n }, {});\n\n const entry = { id, params: entryParams, ...other };\n const guardConfig = config.parentsWithGuards.find((c) => !c.guard());\n\n if (guardConfig) {\n return guardConfig.getEntry(params, { from: entry });\n }\n\n if (config.guard && config.guard()) {\n return { ...config.stack[0].getEntry(params) };\n }\n\n if (config.nestedParent) {\n return config.nestedParent.getEntry(params, { nested: entry });\n }\n\n metaParams.forEach((key) => {\n if (hasOwnProperty.call(params, key)) {\n entry.params[key] = params[key];\n }\n });\n\n return entry;\n },\n };\n\n configs.set(hybrids, config);\n configs.set(Constructor, config);\n\n if (parent && !parent.stack.includes(config)) {\n parent.stack.push(config);\n }\n\n if (options.stack) {\n if (options.dialog) {\n throw Error(\n `The 'stack' option is not supported for dialogs - remove it from <${id}>`,\n );\n }\n setupViews(options.stack, routerOptions, config, nestedParent);\n }\n } else {\n config.parent = parent;\n config.nestedParent = nestedParent;\n }\n\n if (!parent) {\n addEntryPoint(config);\n }\n\n config.parentsWithGuards = [];\n while (parent) {\n if (parent.guard) config.parentsWithGuards.unshift(parent);\n parent = parent.parent;\n }\n\n const nestedRouterOptions = getNestedRouterOptions(hybrids, config);\n\n if (nestedRouterOptions) {\n config.nestedRoots = setupViews(\n nestedRouterOptions.views,\n { ...routerOptions, ...nestedRouterOptions },\n config,\n config,\n );\n\n config.stack = config.stack.concat(config.nestedRoots);\n }\n\n return config;\n}\n\nfunction getUrl(view, params = {}) {\n const config = configs.get(view);\n return config ? config.url(params) : \"\";\n}\n\nfunction getAllEntryParams(entry) {\n const params = {};\n while (entry) {\n Object.assign(params, entry.params);\n entry = entry.nested;\n }\n\n return params;\n}\n\nfunction getBackUrl({ nested = false, scrollToTop = false } = {}) {\n const state = global.history.state;\n if (!state) return \"\";\n\n if (state.length > 1) {\n const entry = state[0];\n let i = 1;\n let prevEntry = state[i];\n if (nested) {\n while (prevEntry.nested) {\n prevEntry = prevEntry.nested;\n }\n } else {\n while (entry.id === prevEntry.id && i < state.length - 1) {\n i += 1;\n prevEntry = state[i];\n }\n }\n\n const params = getAllEntryParams(state[i]);\n\n if (scrollToTop) {\n params.scrollToTop = true;\n } else {\n delete params.scrollToTop;\n }\n\n return getConfigById(prevEntry.id).url(params);\n }\n\n let entry = state[0];\n\n if (nested) {\n while (entry.nested) {\n entry = entry.nested;\n }\n }\n\n let config = getConfigById(entry.id).parent;\n\n if (config) {\n while (config && config.guard) {\n config = config.parent;\n }\n\n if (config) {\n return config.url(getAllEntryParams(state[0]));\n }\n }\n\n return \"\";\n}\n\nfunction getGuardUrl(params = {}) {\n const state = global.history.state;\n if (!state) return \"\";\n\n const entry = state[0];\n\n if (entry.from) {\n const config = getConfigById(entry.from.id);\n return config.url({ ...entry.from.params, ...params });\n }\n\n const config = getConfigById(entry.id);\n return config.stack[0] ? config.stack[0].url(params) : \"\";\n}\n\nfunction getCurrentUrl(params) {\n const state = global.history.state;\n if (!state) return \"\";\n\n let entry = state[0];\n while (entry.nested) entry = entry.nested;\n\n const config = getConfigById(entry.id);\n return config.url({ ...entry.params, ...params });\n}\n\nfunction active(views, { stack = false } = {}) {\n const state = global.history.state;\n if (!state) return false;\n\n views = [].concat(views);\n\n return views.some((view) => {\n const config = configs.get(view);\n if (!config) {\n throw TypeError(`Provided view is not connected to the router: ${view}`);\n }\n\n let entry = state[0];\n while (entry) {\n const target = getConfigById(entry.id);\n if (target === config || (stack && hasInStack(config, target))) {\n return true;\n }\n entry = entry.nested;\n }\n\n return false;\n });\n}\n\nfunction getEntryFromURL(url) {\n let config;\n\n const [pathname, search] = url.hash.split(\"?\");\n if (pathname && pathname.match(/^#@.+-.+/)) {\n config = getConfigById(pathname.split(\"@\")[1]);\n url = new URL(`?${search}`, global.location.origin);\n }\n\n if (!config) {\n for (const entryPoint of entryPoints) {\n const params = entryPoint.match(url);\n if (params) return entryPoint.getEntry(params);\n }\n\n return null;\n }\n\n return config.getEntry(config.match(url));\n}\n\nfunction handleNavigate(event) {\n if (event.defaultPrevented) return;\n\n let url;\n\n if (event.type === \"click\") {\n if (event.ctrlKey || event.metaKey) return;\n const anchorEl = event\n .composedPath()\n .find((el) => el instanceof global.HTMLAnchorElement);\n\n if (anchorEl) {\n url = new URL(anchorEl.href, global.location.origin);\n }\n } else {\n url = new URL(event.target.action, global.location.origin);\n }\n\n if (url && url.origin === global.location.origin) {\n const entry = getEntryFromURL(url);\n if (entry) {\n event.preventDefault();\n\n dispatch(rootRouter, \"navigate\", {\n bubbles: true,\n detail: { entry, url },\n });\n }\n }\n}\n\nlet activePromise;\nfunction resolveEvent(event, promise) {\n event.preventDefault();\n activePromise = promise;\n\n const path = event.composedPath();\n const pseudoEvent = {\n type: event.type,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n target: event.target,\n defaultPrevented: false,\n preventDefault: () => {},\n composedPath: () => path,\n };\n\n return promise.then(() => {\n if (promise === activePromise) {\n global.requestAnimationFrame(() => {\n handleNavigate(pseudoEvent);\n });\n activePromise = null;\n }\n });\n}\n\nfunction resolveStack(host, state, options) {\n let stack = stacks.get(host);\n const reducedState = state.reduce((acc, entry, index) => {\n if (\n index === 0 ||\n state[index - 1].id !== entry.id ||\n getConfigById(entry.id).multiple\n ) {\n acc.push(entry);\n }\n return acc;\n }, []);\n const offset = stack.length - reducedState.length;\n\n stack = reducedState.map((entry, index) => {\n const prevView = stack[index + offset];\n const config = getConfigById(entry.id);\n let nextView;\n\n if (prevView) {\n const prevConfig = configs.get(prevView);\n if (config.id !== prevConfig.id || (index === 0 && config.replace)) {\n return config.create();\n }\n nextView = prevView;\n } else {\n nextView = config.create();\n }\n\n if (index === 0) {\n if (nextView === prevView) {\n cache.unsuspend(nextView);\n\n if (offset === 0 && host === rootRouter && entry.params.scrollToTop) {\n restoreLayout(nextView);\n }\n }\n }\n\n return nextView;\n });\n\n stacks.set(host, stack);\n\n const view = stack[0];\n const flush = flushes.get(view);\n\n Object.entries(state[0].params).forEach(([key, value]) => {\n if (key in view) view[key] = value;\n });\n\n options.params.forEach((key) => {\n if (key in view) view[key] = host[key];\n });\n\n if (flush) flush();\n}\n\nfunction getEntryOffset(entry) {\n const state = global.history.state.reduce((acc, e, index) => {\n let i = 0;\n\n while (e) {\n acc[i] = acc[i] || [];\n acc[i][index] = e;\n e = e.nested;\n i += 1;\n }\n\n return acc;\n }, []);\n\n let offset = 0;\n let i = 0;\n while (entry) {\n const config = getConfigById(entry.id);\n let j = offset;\n\n for (; j < state[i].length; j += 1) {\n const e = state[i][j];\n\n if (config.dialog) {\n return e.id !== entry.id ? -1 : offset;\n }\n\n if (e.id === entry.id) {\n if (config.multiple) {\n if (\n (config.pathnameParams &&\n config.pathnameParams.every(\n (key) => entry.params[key] === e.params[key],\n )) ||\n Object.entries(entry.params).every(\n ([key, value]) => e.params[key] === value,\n )\n ) {\n offset = j;\n break;\n }\n } else {\n offset = j;\n break;\n }\n }\n\n const c = getConfigById(e.id);\n if (hasInStack(c, config)) {\n if (config.multiple && state[i][0].id === entry.id) {\n offset -= 1;\n break;\n }\n\n if (j > 0) {\n offset = j - 1;\n break;\n } else {\n return c.guard ? 0 : -1;\n }\n }\n }\n\n if (j === state[i].length) {\n offset = state[i].length - 1;\n }\n\n entry = entry.nested;\n i += 1;\n }\n\n return offset;\n}\n\nfunction connectRootRouter(host, invalidate, options) {\n function restoreScrollRestoration() {\n if (global.history.scrollRestoration === \"manual\") {\n global.history.scrollRestoration = \"auto\";\n }\n }\n\n function flush() {\n resolveStack(host, global.history.state, options);\n invalidate();\n\n global.requestAnimationFrame(restoreScrollRestoration);\n }\n\n function navigateBack(offset, entry, nextUrl) {\n const state = global.history.state;\n const targetEntry = global.history.state[offset];\n const pushOffset = offset < state.length - 1 && state.length > 2 ? 1 : 0;\n offset += pushOffset;\n\n if (targetEntry && entry.id === targetEntry.id) {\n entry = { ...targetEntry, ...entry };\n }\n\n const replace = (popStateEvent) => {\n if (popStateEvent) {\n global.removeEventListener(\"popstate\", replace);\n global.addEventListener(\"popstate\", flush);\n }\n\n const method = pushOffset ? \"pushState\" : \"replaceState\";\n const nextState = [entry, ...state.slice(offset + (pushOffset ? 0 : 1))];\n\n if (pushOffset) {\n global.history.scrollRestoration = \"manual\";\n }\n\n global.history[method](nextState, \"\", nextUrl);\n\n flush();\n };\n\n if (offset) {\n global.removeEventListener(\"popstate\", flush);\n global.addEventListener(\"popstate\", replace);\n\n global.history.go(-offset);\n } else {\n replace();\n }\n }\n\n function navigate(entry) {\n const state = global.history.state;\n\n let nestedEntry = entry;\n while (nestedEntry.nested) nestedEntry = nestedEntry.nested;\n const nestedConfig = getConfigById(nestedEntry.id);\n\n const url = nestedConfig.browserUrl\n ? nestedConfig.url(nestedEntry.params, true)\n : options.url;\n const offset = getEntryOffset(entry);\n\n if (offset > -1) {\n navigateBack(offset, entry, url);\n } else {\n let stack = stacks.get(host);\n saveLayout(stack[0]);\n\n while (stack && stack[0]) {\n cache.suspend(stack[0]);\n stack = stacks.get(stack[0]);\n }\n\n global.history.scrollRestoration = \"manual\";\n global.history.pushState([entry, ...state], \"\", url);\n\n flush();\n }\n }\n\n function executeNavigate(event) {\n navigate(event.detail.entry);\n }\n\n if (rootRouter) {\n throw Error(\n `An element with root router already connected to the document: <${rootRouter.tagName.toLowerCase()}>`,\n );\n }\n\n let roots;\n try {\n roots = setupViews(options.views, options);\n rootRouter = host;\n flushes.set(host, flush);\n } catch (e) {\n console.error(\n `Error while connecting router in <${host.tagName.toLowerCase()}>:`,\n );\n throw e;\n }\n\n const state = global.history.state;\n\n if (!state) {\n const entry =\n getEntryFromURL(new URL(global.location.href)) || roots[0].getEntry();\n\n global.history.replaceState([entry], \"\", options.url);\n flush();\n } else {\n const stack = stacks.get(host);\n\n let i;\n for (i = state.length - 1; i >= 0; i -= 1) {\n let entry = state[i];\n while (entry) {\n const config = getConfigById(entry.id);\n if (\n !config ||\n (config.dialog && stack.length === 0) ||\n (!roots.includes(config) && !roots.some((c) => hasInStack(c, config)))\n ) {\n break;\n }\n entry = entry.nested;\n }\n if (entry) break;\n }\n\n if (i > -1) {\n const lastValidEntry = state[i + 1];\n navigateBack(\n state.length - i - 1,\n lastValidEntry || roots[0].getEntry(state[0].params),\n options.url,\n );\n } else {\n let entry = state[0];\n while (entry.nested) entry = entry.nested;\n\n const nestedConfig = getConfigById(entry.id);\n const resultEntry = nestedConfig.getEntry(entry.params);\n navigate(resultEntry);\n }\n }\n\n global.addEventListener(\"popstate\", flush);\n\n host.addEventListener(\"click\", handleNavigate);\n host.addEventListener(\"submit\", handleNavigate);\n host.addEventListener(\"navigate\", executeNavigate);\n\n return () => {\n global.removeEventListener(\"popstate\", flush);\n\n host.removeEventListener(\"click\", handleNavigate);\n host.removeEventListener(\"submit\", handleNavigate);\n host.removeEventListener(\"navigate\", executeNavigate);\n\n entryPoints.clear();\n rootRouter = null;\n };\n}\n\nfunction connectNestedRouter(host, invalidate, options) {\n const config = configs.get(host);\n\n function getNestedState() {\n return global.history.state\n .map((entry) => {\n while (entry) {\n if (entry.id === config.id) return entry.nested;\n entry = entry.nested;\n }\n return entry;\n })\n .filter((e) => e);\n }\n\n function flush() {\n resolveStack(host, getNestedState(), options);\n invalidate();\n }\n\n if (!getNestedState()[0]) {\n const state = global.history.state;\n global.history.replaceState(\n [config.nestedRoots[0].getEntry(state[0].params), ...state.slice(1)],\n \"\",\n );\n }\n\n flush();\n flushes.set(host, flush);\n}\n\nfunction router(views, options) {\n options = {\n url: global.location.href.replace(/#.*$/, \"\"),\n params: [],\n ...options,\n views,\n };\n\n const desc = {\n get: (host) => {\n const stack = stacks.get(host) || [];\n return stack\n .slice(0, stack.findIndex((el) => !configs.get(el).dialog) + 1)\n .reverse();\n },\n connect: (host, key, invalidate) => {\n options.params.forEach((param) => {\n if (!(param in host)) {\n throw Error(\n `Property '${param}' for global parameters is not defined in <${host.tagName.toLowerCase()}>`,\n );\n }\n });\n\n if (!stacks.has(host)) stacks.set(host, []);\n\n if (configs.has(host)) {\n return connectNestedRouter(host, invalidate, options);\n }\n\n return connectRootRouter(host, invalidate, options);\n },\n observe:\n debug &&\n ((host, value, lastValue) => {\n const index = value.length - 1;\n const view = value[index];\n\n if (lastValue && view === lastValue[index]) return;\n\n let config = configs.get(host);\n let entry = global.history.state[0];\n let key = 0;\n\n while (config) {\n key += 1;\n entry = entry.nested;\n config = config.nestedParent;\n }\n\n console.groupCollapsed(\n `[${host.tagName.toLowerCase()}]: navigated to <${\n entry.id\n }> ($$${key})`,\n );\n\n Object.entries(entry.params).forEach(([k, v]) =>\n console.log(`%c${k}:`, \"font-weight: bold\", v),\n );\n\n console.groupEnd();\n\n global[`$$${key}`] = view;\n }),\n };\n\n routers.set(desc, options);\n return desc;\n}\n\nexport default Object.freeze(\n Object.assign(router, {\n connect,\n debug: setDebug,\n url: getUrl,\n backUrl: getBackUrl,\n guardUrl: getGuardUrl,\n currentUrl: getCurrentUrl,\n resolve: resolveEvent,\n active,\n }),\n);\n"],"names":["connect","Symbol","configs","WeakMap","flushes","stacks","routers","rootRouter","entryPoints","Set","debug","scrollMap","focusMap","focusElement","target","tabIndex","outline","style","addEventListener","removeAttribute","once","focus","preventScroll","restoreLayout","activeEl","global","document","activeElement","get","contains","map","config","entry","history","state","find","e","id","clear","params","scrollToTop","forEach","pos","el","scrollLeft","left","scrollTop","top","delete","rootEl","scrollingElement","mapUrlParam","value","metaParams","hasInStack","stack","some","temp","addEntryPoint","browserUrl","add","setupViews","views","options","parent","nestedParent","concat","hybrids","Error","routerOptions","tag","getConfigById","Constructor","customElements","dialog","guard","multiple","replace","callbacks","callbacksMap","push","host","goBackOnEscKey","event","key","stopPropagation","go","focusDialog","prevActiveEl","root","removeEventListener","writableParams","Object","keys","prototype","getOwnPropertyDescriptor","set","url","TypeError","pathname","search","split","searchParams","normalizedPathname","pathnameParams","reduce","name","startsWith","slice","includes","paramsKeys","strict","acc","part","hasOwnProperty","call","URL","location","origin","append","match","length","i","normalizedPart","setupBrowserUrl","desc","stateParams","filter","k","clearParams","unshift","_","cache.observe","toString","String","lastParams","nested","replaceState","getEntry","console","error","nestedRoots","parentsWithGuards","create","other","entryParams","guardConfig","c","from","nestedRouterOptions","nestedRouters","values","d","getNestedRouterOptions","setupView","getAllEntryParams","assign","getEntryFromURL","hash","entryPoint","handleNavigate","defaultPrevented","type","ctrlKey","metaKey","anchorEl","composedPath","HTMLAnchorElement","href","action","preventDefault","dispatch","bubbles","detail","activePromise","resolveStack","reducedState","index","offset","prevView","nextView","prevConfig","cache.unsuspend","view","flush","entries","connectRootRouter","invalidate","restoreScrollRestoration","scrollRestoration","requestAnimationFrame","navigateBack","nextUrl","targetEntry","pushOffset","popStateEvent","method","nextState","navigate","nestedEntry","nestedConfig","j","every","getEntryOffset","focusEl","Map","walkInShadow","saveLayout","cache.suspend","pushState","executeNavigate","tagName","toLowerCase","roots","lastValidEntry","router$1","freeze","findIndex","reverse","param","has","getNestedState","connectNestedRouter","observe","lastValue","groupCollapsed","v","log","groupEnd","backUrl","prevEntry","guardUrl","currentUrl","resolve","promise","path","pseudoEvent","then","active"],"mappings":"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"}