{"version":3,"file":"pathfinder.min.mjs","sources":["../node_modules/svelte/src/runtime/internal/utils.js","../node_modules/svelte/src/runtime/internal/scheduler.js","../node_modules/svelte/src/runtime/store/index.js","../src/utils.js","../src/stores.js","../src/index.js"],"sourcesContent":["/** @returns {void} */\nexport function noop() {}\n\nexport const identity = (x) => x;\n\n/**\n * @template T\n * @template S\n * @param {T} tar\n * @param {S} src\n * @returns {T & S}\n */\nexport function assign(tar, src) {\n\t// @ts-ignore\n\tfor (const k in src) tar[k] = src[k];\n\treturn /** @type {T & S} */ (tar);\n}\n\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\n/**\n * @param {any} value\n * @returns {value is PromiseLike<any>}\n */\nexport function is_promise(value) {\n\treturn (\n\t\t!!value &&\n\t\t(typeof value === 'object' || typeof value === 'function') &&\n\t\ttypeof (/** @type {any} */ (value).then) === 'function'\n\t);\n}\n\n/** @returns {void} */\nexport function add_location(element, file, line, column, char) {\n\telement.__svelte_meta = {\n\t\tloc: { file, line, column, char }\n\t};\n}\n\nexport function run(fn) {\n\treturn fn();\n}\n\nexport function blank_object() {\n\treturn Object.create(null);\n}\n\n/**\n * @param {Function[]} fns\n * @returns {void}\n */\nexport function run_all(fns) {\n\tfns.forEach(run);\n}\n\n/**\n * @param {any} thing\n * @returns {thing is Function}\n */\nexport function is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\n/** @returns {boolean} */\nexport function safe_not_equal(a, b) {\n\treturn a != a ? b == b : a !== b || (a && typeof a === 'object') || typeof a === 'function';\n}\n\nlet src_url_equal_anchor;\n\n/**\n * @param {string} element_src\n * @param {string} url\n * @returns {boolean}\n */\nexport function src_url_equal(element_src, url) {\n\tif (element_src === url) return true;\n\tif (!src_url_equal_anchor) {\n\t\tsrc_url_equal_anchor = document.createElement('a');\n\t}\n\t// This is actually faster than doing URL(..).href\n\tsrc_url_equal_anchor.href = url;\n\treturn element_src === src_url_equal_anchor.href;\n}\n\n/** @param {string} srcset */\nfunction split_srcset(srcset) {\n\treturn srcset.split(',').map((src) => src.trim().split(' ').filter(Boolean));\n}\n\n/**\n * @param {HTMLSourceElement | HTMLImageElement} element_srcset\n * @param {string | undefined | null} srcset\n * @returns {boolean}\n */\nexport function srcset_url_equal(element_srcset, srcset) {\n\tconst element_urls = split_srcset(element_srcset.srcset);\n\tconst urls = split_srcset(srcset || '');\n\n\treturn (\n\t\turls.length === element_urls.length &&\n\t\turls.every(\n\t\t\t([url, width], i) =>\n\t\t\t\twidth === element_urls[i][1] &&\n\t\t\t\t// We need to test both ways because Vite will create an a full URL with\n\t\t\t\t// `new URL(asset, import.meta.url).href` for the client when `base: './'`, and the\n\t\t\t\t// relative URLs inside srcset are not automatically resolved to absolute URLs by\n\t\t\t\t// browsers (in contrast to img.src). This means both SSR and DOM code could\n\t\t\t\t// contain relative or absolute URLs.\n\t\t\t\t(src_url_equal(element_urls[i][0], url) || src_url_equal(url, element_urls[i][0]))\n\t\t)\n\t);\n}\n\n/** @returns {boolean} */\nexport function not_equal(a, b) {\n\treturn a != a ? b == b : a !== b;\n}\n\n/** @returns {boolean} */\nexport function is_empty(obj) {\n\treturn Object.keys(obj).length === 0;\n}\n\n/** @returns {void} */\nexport function validate_store(store, name) {\n\tif (store != null && typeof store.subscribe !== 'function') {\n\t\tthrow new Error(`'${name}' is not a store with a 'subscribe' method`);\n\t}\n}\n\nexport function subscribe(store, ...callbacks) {\n\tif (store == null) {\n\t\tfor (const callback of callbacks) {\n\t\t\tcallback(undefined);\n\t\t}\n\t\treturn noop;\n\t}\n\tconst unsub = store.subscribe(...callbacks);\n\treturn unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\n\n/**\n * Get the current value from a store by subscribing and immediately unsubscribing.\n *\n * https://svelte.dev/docs/svelte-store#get\n * @template T\n * @param {import('../store/public.js').Readable<T>} store\n * @returns {T}\n */\nexport function get_store_value(store) {\n\tlet value;\n\tsubscribe(store, (_) => (value = _))();\n\treturn value;\n}\n\n/** @returns {void} */\nexport function component_subscribe(component, store, callback) {\n\tcomponent.$$.on_destroy.push(subscribe(store, callback));\n}\n\nexport function create_slot(definition, ctx, $$scope, fn) {\n\tif (definition) {\n\t\tconst slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n\t\treturn definition[0](slot_ctx);\n\t}\n}\n\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n\treturn definition[1] && fn ? assign($$scope.ctx.slice(), definition[1](fn(ctx))) : $$scope.ctx;\n}\n\nexport function get_slot_changes(definition, $$scope, dirty, fn) {\n\tif (definition[2] && fn) {\n\t\tconst lets = definition[2](fn(dirty));\n\t\tif ($$scope.dirty === undefined) {\n\t\t\treturn lets;\n\t\t}\n\t\tif (typeof lets === 'object') {\n\t\t\tconst merged = [];\n\t\t\tconst len = Math.max($$scope.dirty.length, lets.length);\n\t\t\tfor (let i = 0; i < len; i += 1) {\n\t\t\t\tmerged[i] = $$scope.dirty[i] | lets[i];\n\t\t\t}\n\t\t\treturn merged;\n\t\t}\n\t\treturn $$scope.dirty | lets;\n\t}\n\treturn $$scope.dirty;\n}\n\n/** @returns {void} */\nexport function update_slot_base(\n\tslot,\n\tslot_definition,\n\tctx,\n\t$$scope,\n\tslot_changes,\n\tget_slot_context_fn\n) {\n\tif (slot_changes) {\n\t\tconst slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n\t\tslot.p(slot_context, slot_changes);\n\t}\n}\n\n/** @returns {void} */\nexport function update_slot(\n\tslot,\n\tslot_definition,\n\tctx,\n\t$$scope,\n\tdirty,\n\tget_slot_changes_fn,\n\tget_slot_context_fn\n) {\n\tconst slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n\tupdate_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\n\n/** @returns {any[] | -1} */\nexport function get_all_dirty_from_scope($$scope) {\n\tif ($$scope.ctx.length > 32) {\n\t\tconst dirty = [];\n\t\tconst length = $$scope.ctx.length / 32;\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tdirty[i] = -1;\n\t\t}\n\t\treturn dirty;\n\t}\n\treturn -1;\n}\n\n/** @returns {{}} */\nexport function exclude_internal_props(props) {\n\tconst result = {};\n\tfor (const k in props) if (k[0] !== '$') result[k] = props[k];\n\treturn result;\n}\n\n/** @returns {{}} */\nexport function compute_rest_props(props, keys) {\n\tconst rest = {};\n\tkeys = new Set(keys);\n\tfor (const k in props) if (!keys.has(k) && k[0] !== '$') rest[k] = props[k];\n\treturn rest;\n}\n\n/** @returns {{}} */\nexport function compute_slots(slots) {\n\tconst result = {};\n\tfor (const key in slots) {\n\t\tresult[key] = true;\n\t}\n\treturn result;\n}\n\n/** @returns {(this: any, ...args: any[]) => void} */\nexport function once(fn) {\n\tlet ran = false;\n\treturn function (...args) {\n\t\tif (ran) return;\n\t\tran = true;\n\t\tfn.call(this, ...args);\n\t};\n}\n\nexport function null_to_empty(value) {\n\treturn value == null ? '' : value;\n}\n\nexport function set_store_value(store, ret, value) {\n\tstore.set(value);\n\treturn ret;\n}\n\nexport const has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\n\nexport function action_destroyer(action_result) {\n\treturn action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\n/** @param {number | string} value\n * @returns {[number, string]}\n */\nexport function split_css_unit(value) {\n\tconst split = typeof value === 'string' && value.match(/^\\s*(-?[\\d.]+)([^\\s]*)\\s*$/);\n\treturn split ? [parseFloat(split[1]), split[2] || 'px'] : [/** @type {number} */ (value), 'px'];\n}\n\nexport const contenteditable_truthy_values = ['', true, 1, 'true', 'contenteditable'];\n","import { run_all } from './utils.js';\nimport { current_component, set_current_component } from './lifecycle.js';\n\nexport const dirty_components = [];\nexport const intros = { enabled: false };\nexport const binding_callbacks = [];\n\nlet render_callbacks = [];\n\nconst flush_callbacks = [];\n\nconst resolved_promise = /* @__PURE__ */ Promise.resolve();\n\nlet update_scheduled = false;\n\n/** @returns {void} */\nexport function schedule_update() {\n\tif (!update_scheduled) {\n\t\tupdate_scheduled = true;\n\t\tresolved_promise.then(flush);\n\t}\n}\n\n/** @returns {Promise<void>} */\nexport function tick() {\n\tschedule_update();\n\treturn resolved_promise;\n}\n\n/** @returns {void} */\nexport function add_render_callback(fn) {\n\trender_callbacks.push(fn);\n}\n\n/** @returns {void} */\nexport function add_flush_callback(fn) {\n\tflush_callbacks.push(fn);\n}\n\n// flush() calls callbacks in this order:\n// 1. All beforeUpdate callbacks, in order: parents before children\n// 2. All bind:this callbacks, in reverse order: children before parents.\n// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT\n//    for afterUpdates called during the initial onMount, which are called in\n//    reverse order: children before parents.\n// Since callbacks might update component values, which could trigger another\n// call to flush(), the following steps guard against this:\n// 1. During beforeUpdate, any updated components will be added to the\n//    dirty_components array and will cause a reentrant call to flush(). Because\n//    the flush index is kept outside the function, the reentrant call will pick\n//    up where the earlier call left off and go through all dirty components. The\n//    current_component value is saved and restored so that the reentrant call will\n//    not interfere with the \"parent\" flush() call.\n// 2. bind:this callbacks cannot trigger new flush() calls.\n// 3. During afterUpdate, any updated components will NOT have their afterUpdate\n//    callback called a second time; the seen_callbacks set, outside the flush()\n//    function, guarantees this behavior.\nconst seen_callbacks = new Set();\n\nlet flushidx = 0; // Do *not* move this inside the flush() function\n\n/** @returns {void} */\nexport function flush() {\n\t// Do not reenter flush while dirty components are updated, as this can\n\t// result in an infinite loop. Instead, let the inner flush handle it.\n\t// Reentrancy is ok afterwards for bindings etc.\n\tif (flushidx !== 0) {\n\t\treturn;\n\t}\n\tconst saved_component = current_component;\n\tdo {\n\t\t// first, call beforeUpdate functions\n\t\t// and update components\n\t\ttry {\n\t\t\twhile (flushidx < dirty_components.length) {\n\t\t\t\tconst component = dirty_components[flushidx];\n\t\t\t\tflushidx++;\n\t\t\t\tset_current_component(component);\n\t\t\t\tupdate(component.$$);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// reset dirty state to not end up in a deadlocked state and then rethrow\n\t\t\tdirty_components.length = 0;\n\t\t\tflushidx = 0;\n\t\t\tthrow e;\n\t\t}\n\t\tset_current_component(null);\n\t\tdirty_components.length = 0;\n\t\tflushidx = 0;\n\t\twhile (binding_callbacks.length) binding_callbacks.pop()();\n\t\t// then, once components are updated, call\n\t\t// afterUpdate functions. This may cause\n\t\t// subsequent updates...\n\t\tfor (let i = 0; i < render_callbacks.length; i += 1) {\n\t\t\tconst callback = render_callbacks[i];\n\t\t\tif (!seen_callbacks.has(callback)) {\n\t\t\t\t// ...so guard against infinite loops\n\t\t\t\tseen_callbacks.add(callback);\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t\trender_callbacks.length = 0;\n\t} while (dirty_components.length);\n\twhile (flush_callbacks.length) {\n\t\tflush_callbacks.pop()();\n\t}\n\tupdate_scheduled = false;\n\tseen_callbacks.clear();\n\tset_current_component(saved_component);\n}\n\n/** @returns {void} */\nfunction update($$) {\n\tif ($$.fragment !== null) {\n\t\t$$.update();\n\t\trun_all($$.before_update);\n\t\tconst dirty = $$.dirty;\n\t\t$$.dirty = [-1];\n\t\t$$.fragment && $$.fragment.p($$.ctx, dirty);\n\t\t$$.after_update.forEach(add_render_callback);\n\t}\n}\n\n/**\n * Useful for example to execute remaining `afterUpdate` callbacks before executing `destroy`.\n * @param {Function[]} fns\n * @returns {void}\n */\nexport function flush_render_callbacks(fns) {\n\tconst filtered = [];\n\tconst targets = [];\n\trender_callbacks.forEach((c) => (fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c)));\n\ttargets.forEach((c) => c());\n\trender_callbacks = filtered;\n}\n","import {\n\trun_all,\n\tsubscribe,\n\tnoop,\n\tsafe_not_equal,\n\tis_function,\n\tget_store_value\n} from '../internal/index.js';\n\nconst subscriber_queue = [];\n\n/**\n * Creates a `Readable` store that allows reading by subscription.\n *\n * https://svelte.dev/docs/svelte-store#readable\n * @template T\n * @param {T} [value] initial value\n * @param {import('./public.js').StartStopNotifier<T>} [start]\n * @returns {import('./public.js').Readable<T>}\n */\nexport function readable(value, start) {\n\treturn {\n\t\tsubscribe: writable(value, start).subscribe\n\t};\n}\n\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n *\n * https://svelte.dev/docs/svelte-store#writable\n * @template T\n * @param {T} [value] initial value\n * @param {import('./public.js').StartStopNotifier<T>} [start]\n * @returns {import('./public.js').Writable<T>}\n */\nexport function writable(value, start = noop) {\n\t/** @type {import('./public.js').Unsubscriber} */\n\tlet stop;\n\t/** @type {Set<import('./private.js').SubscribeInvalidateTuple<T>>} */\n\tconst subscribers = new Set();\n\t/** @param {T} new_value\n\t * @returns {void}\n\t */\n\tfunction set(new_value) {\n\t\tif (safe_not_equal(value, new_value)) {\n\t\t\tvalue = new_value;\n\t\t\tif (stop) {\n\t\t\t\t// store is ready\n\t\t\t\tconst run_queue = !subscriber_queue.length;\n\t\t\t\tfor (const subscriber of subscribers) {\n\t\t\t\t\tsubscriber[1]();\n\t\t\t\t\tsubscriber_queue.push(subscriber, value);\n\t\t\t\t}\n\t\t\t\tif (run_queue) {\n\t\t\t\t\tfor (let i = 0; i < subscriber_queue.length; i += 2) {\n\t\t\t\t\t\tsubscriber_queue[i][0](subscriber_queue[i + 1]);\n\t\t\t\t\t}\n\t\t\t\t\tsubscriber_queue.length = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {import('./public.js').Updater<T>} fn\n\t * @returns {void}\n\t */\n\tfunction update(fn) {\n\t\tset(fn(value));\n\t}\n\n\t/**\n\t * @param {import('./public.js').Subscriber<T>} run\n\t * @param {import('./private.js').Invalidator<T>} [invalidate]\n\t * @returns {import('./public.js').Unsubscriber}\n\t */\n\tfunction subscribe(run, invalidate = noop) {\n\t\t/** @type {import('./private.js').SubscribeInvalidateTuple<T>} */\n\t\tconst subscriber = [run, invalidate];\n\t\tsubscribers.add(subscriber);\n\t\tif (subscribers.size === 1) {\n\t\t\tstop = start(set, update) || noop;\n\t\t}\n\t\trun(value);\n\t\treturn () => {\n\t\t\tsubscribers.delete(subscriber);\n\t\t\tif (subscribers.size === 0 && stop) {\n\t\t\t\tstop();\n\t\t\t\tstop = null;\n\t\t\t}\n\t\t};\n\t}\n\treturn { set, update, subscribe };\n}\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * https://svelte.dev/docs/svelte-store#derived\n * @template {import('./private.js').Stores} S\n * @template T\n * @overload\n * @param {S} stores - input stores\n * @param {(values: import('./private.js').StoresValues<S>, set: (value: T) => void, update: (fn: import('./public.js').Updater<T>) => void) => import('./public.js').Unsubscriber | void} fn - function callback that aggregates the values\n * @param {T} [initial_value] - initial value\n * @returns {import('./public.js').Readable<T>}\n */\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * https://svelte.dev/docs/svelte-store#derived\n * @template {import('./private.js').Stores} S\n * @template T\n * @overload\n * @param {S} stores - input stores\n * @param {(values: import('./private.js').StoresValues<S>) => T} fn - function callback that aggregates the values\n * @param {T} [initial_value] - initial value\n * @returns {import('./public.js').Readable<T>}\n */\n\n/**\n * @template {import('./private.js').Stores} S\n * @template T\n * @param {S} stores\n * @param {Function} fn\n * @param {T} [initial_value]\n * @returns {import('./public.js').Readable<T>}\n */\nexport function derived(stores, fn, initial_value) {\n\tconst single = !Array.isArray(stores);\n\t/** @type {Array<import('./public.js').Readable<any>>} */\n\tconst stores_array = single ? [stores] : stores;\n\tif (!stores_array.every(Boolean)) {\n\t\tthrow new Error('derived() expects stores as input, got a falsy value');\n\t}\n\tconst auto = fn.length < 2;\n\treturn readable(initial_value, (set, update) => {\n\t\tlet started = false;\n\t\tconst values = [];\n\t\tlet pending = 0;\n\t\tlet cleanup = noop;\n\t\tconst sync = () => {\n\t\t\tif (pending) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcleanup();\n\t\t\tconst result = fn(single ? values[0] : values, set, update);\n\t\t\tif (auto) {\n\t\t\t\tset(result);\n\t\t\t} else {\n\t\t\t\tcleanup = is_function(result) ? result : noop;\n\t\t\t}\n\t\t};\n\t\tconst unsubscribers = stores_array.map((store, i) =>\n\t\t\tsubscribe(\n\t\t\t\tstore,\n\t\t\t\t(value) => {\n\t\t\t\t\tvalues[i] = value;\n\t\t\t\t\tpending &= ~(1 << i);\n\t\t\t\t\tif (started) {\n\t\t\t\t\t\tsync();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tpending |= 1 << i;\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t\tstarted = true;\n\t\tsync();\n\t\treturn function stop() {\n\t\t\trun_all(unsubscribers);\n\t\t\tcleanup();\n\t\t\t// We need to set this to false because callbacks can still happen despite having unsubscribed:\n\t\t\t// Callbacks might already be placed in the queue which doesn't know it should no longer\n\t\t\t// invoke this derived store.\n\t\t\tstarted = false;\n\t\t};\n\t});\n}\n\n/**\n * Takes a store and returns a new one derived from the old one that is readable.\n *\n * https://svelte.dev/docs/svelte-store#readonly\n * @template T\n * @param {import('./public.js').Readable<T>} store  - store to make readonly\n * @returns {import('./public.js').Readable<T>}\n */\nexport function readonly(store) {\n\treturn {\n\t\tsubscribe: store.subscribe.bind(store)\n\t};\n}\n\nexport { get_store_value as get };\n","export const specialLinks =\n\t/^((mailto:)|(tel:)|(sms:)|(data:)|(blob:)|(javascript:)|(ftp(s?):\\/\\/)|(file:\\/\\/))/;\nexport const hasLocation = typeof location !== 'undefined';\nexport const hasProcess = typeof process !== 'undefined';\nexport const hasHistory = typeof history !== 'undefined';\nexport const hasPushState = hasHistory && isFn(history.pushState);\nexport const hasWindow = typeof window !== 'undefined';\nexport const isSubWindow = hasWindow && window !== window.parent;\nexport const isFileScheme =\n\thasLocation && (location.protocol === 'file:' || /[-_\\w]+[.][\\w]+$/i.test(location.pathname));\nexport const sideEffect = hasWindow && hasHistory && hasLocation && !isSubWindow;\n\nexport const useHashbang = !hasPushState || isFileScheme;\n\nconst hashbang = '#!';\n\nexport const prefs = {\n\tarray: {\n\t\tseparator: ',',\n\t\tformat: 'bracket',\n\t},\n\tconvertTypes: true,\n\tbreakHooks: true,\n\thashbang: false,\n\tanchor: false,\n\tscroll: false,\n\tfocus: false,\n\tnesting: 3,\n\tsideEffect,\n\tbase: '',\n};\n\nexport function getPath() {\n\tconst pathname = getLocation().pathname;\n\tif (!pathname) return;\n\n\tconst base = getBase();\n\tconst path = trimPrefix(pathname, base);\n\n\treturn prependPrefix(path);\n}\n\nexport function getLocation() {\n\tif (!hasLocation) return {};\n\n\tif (prefs.hashbang || useHashbang) {\n\t\tconst hash = location.hash;\n\t\treturn new URL(\n\t\t\thash.indexOf(hashbang) === 0 ? hash.substring(2) : hash.substring(1),\n\t\t\t'file:',\n\t\t);\n\t}\n\n\treturn location;\n}\n\nexport function getBase() {\n\tif (prefs.base) return prefs.base;\n\tif (hasLocation && (prefs.hashbang || useHashbang)) return location.pathname;\n\treturn '/';\n}\n\nexport function getFullURL(url) {\n\t(prefs.hashbang || useHashbang) && (url = hashbang + url);\n\tconst base = getBase();\n\treturn (base[base.length - 1] === '/' ? base.substring(0, base.length - 1) : base) + url;\n}\n\nexport function getShortURL(url) {\n\turl = trimPrefix(url, getLocation().origin);\n\n\tconst base = getBase();\n\turl = trimPrefix(url, base);\n\n\t(prefs.hashbang || useHashbang) && (url = trimPrefix(url, hashbang));\n\treturn prependPrefix(url);\n}\n\nexport function isBtn(el) {\n\tconst tagName = el.tagName.toLowerCase();\n\tconst type = el.type && el.type.toLowerCase();\n\treturn (\n\t\ttagName === 'button' ||\n\t\t(tagName === 'input' && ['button', 'submit', 'image'].includes(type))\n\t);\n}\n\nexport function closest(el, tagName) {\n\twhile (el && el.nodeName.toLowerCase() !== tagName) el = el.parentNode;\n\treturn !el || el.nodeName.toLowerCase() !== tagName ? null : el;\n}\n\nexport function setScroll(scroll, hash = '') {\n\tconst anchor = trimPrefix(normalizeHash(hash), '#');\n\tif (scroll && prefs.scroll) {\n\t\tconst opts = isObj(prefs.scroll) ? { ...prefs.scroll, ...scroll } : scroll;\n\t\tconst { top = 0, left = 0 } = scroll;\n\t\tconst { scrollHeight, scrollWidth } = document.documentElement;\n\n\t\tif (top <= scrollHeight && left <= scrollWidth) return scrollTo(opts);\n\n\t\tconst cancel = observeResize((entries) => {\n\t\t\tif (!entries[0]) return cancel();\n\t\t\tif (\n\t\t\t\t(!top || entries[0].contentRect.height >= top) &&\n\t\t\t\t(!left || entries[0].contentRect.width >= left)\n\t\t\t) {\n\t\t\t\tcancel();\n\t\t\t\tscrollTo(opts);\n\t\t\t}\n\t\t}, document.documentElement);\n\t} else if (anchor && prefs.anchor) {\n\t\tconst opts = isObj(prefs.anchor) ? prefs.anchor : {};\n\t\tconst el = document.getElementById(anchor);\n\n\t\tif (el) return scrollTo(opts, el);\n\n\t\tconst cancel = observeDom(() => {\n\t\t\tconst el = document.getElementById(anchor);\n\t\t\tif (el) {\n\t\t\t\tcancel();\n\t\t\t\tscrollTo(opts, el);\n\t\t\t}\n\t\t});\n\t} else if (prefs.scroll) {\n\t\tscrollTo();\n\t}\n}\n\nexport function setFocus(keepFocusId, activeElement) {\n\tif (!prefs.focus) return;\n\n\tsetTimeout(() => {\n\t\tconst autofocus = focus();\n\t\tif (autofocus) return autofocus.focus();\n\t\tconst cancel = observeDom(() => {\n\t\t\tconst autofocus = focus();\n\t\t\tif (autofocus) {\n\t\t\t\tcancel();\n\t\t\t\tautofocus.focus();\n\t\t\t}\n\t\t});\n\n\t\tconst body = document.body;\n\t\tconst tabindex = body.getAttribute('tabindex');\n\n\t\tbody.tabIndex = -1;\n\t\tbody.focus({ preventScroll: true });\n\n\t\tif (tabindex !== null) {\n\t\t\tbody.setAttribute('tabindex', tabindex);\n\t\t} else {\n\t\t\tbody.removeAttribute('tabindex');\n\t\t}\n\n\t\tgetSelection().removeAllRanges();\n\t});\n\n\tfunction focus() {\n\t\tif (keepFocusId) {\n\t\t\treturn document.getElementById(keepFocusId);\n\t\t} else if (\n\t\t\tdocument.activeElement !== activeElement &&\n\t\t\tdocument.activeElement !== document.body\n\t\t) {\n\t\t\treturn document.activeElement;\n\t\t} else {\n\t\t\treturn document.querySelector('[autofocus]');\n\t\t}\n\t}\n}\n\nexport function parseQuery(str = '', { decode = decodeURIComponent } = {}) {\n\treturn str\n\t\t? str\n\t\t\t\t.replace('?', '')\n\t\t\t\t.replace(/\\+/g, ' ')\n\t\t\t\t.split('&')\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.reduce((obj, p) => {\n\t\t\t\t\tlet [key, val] = p.split(/=(.*)/, 2);\n\t\t\t\t\tkey = decode(key || '');\n\t\t\t\t\tval = decode(val || '');\n\n\t\t\t\t\tlet o = parseKeys(key, val);\n\t\t\t\t\tobj = Object.keys(o).reduce((obj, key) => {\n\t\t\t\t\t\tconst val = prefs.convertTypes ? convertType(o[key]) : o[key];\n\t\t\t\t\t\tif (obj[key]) {\n\t\t\t\t\t\t\tArray.isArray(obj[key])\n\t\t\t\t\t\t\t\t? (obj[key] = obj[key].concat(val))\n\t\t\t\t\t\t\t\t: Object.assign(obj[key], val);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tobj[key] = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn obj;\n\t\t\t\t\t}, obj);\n\n\t\t\t\t\treturn obj;\n\t\t\t\t}, {})\n\t\t: {};\n}\n\nexport function stringifyQuery(obj = {}, { encode = encodeURIComponent } = {}) {\n\treturn Object.keys(obj)\n\t\t.reduce((a, k) => {\n\t\t\tif (Object.prototype.hasOwnProperty.call(obj, k) && isNaN(parseInt(k, 10))) {\n\t\t\t\tif (Array.isArray(obj[k])) {\n\t\t\t\t\tif (prefs.array.format === 'separator') {\n\t\t\t\t\t\ta.push(`${k}=${obj[k].join(prefs.array.separator)}`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tobj[k].forEach((v) => a.push(`${k}[]=${encode(v)}`));\n\t\t\t\t\t}\n\t\t\t\t} else if (isObj(obj[k])) {\n\t\t\t\t\tlet o = parseKeys(k, obj[k]);\n\t\t\t\t\ta.push(stringifyObj(o));\n\t\t\t\t} else {\n\t\t\t\t\ta.push(`${k}=${encode(obj[k])}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn a;\n\t\t}, [])\n\t\t.join('&');\n}\n\nexport function injectParams(pattern, params, { encode = encodeURIComponent } = {}) {\n\treturn pattern.replace(/(\\/|^)([:*][^/]*?)(\\?)?(?=[/.]|$)/g, (param, _, key) => {\n\t\tparam = params[key === '*' ? 'wild' : key.substring(1)];\n\t\treturn param ? `/${encode(param)}` : '';\n\t});\n}\n\nexport function parseParams(\n\tpath = '',\n\tpattern = '*',\n\t{ loose = false, sensitive = false, blank = false, decode = decodeURIComponent } = {},\n) {\n\tconst blanks = {};\n\tconst rgx =\n\t\tpattern instanceof RegExp\n\t\t\t? pattern\n\t\t\t: pattern.split('/').reduce((rgx, seg, i, { length }) => {\n\t\t\t\t\tif (seg) {\n\t\t\t\t\t\tconst pfx = seg[0];\n\t\t\t\t\t\tif (pfx === '*') {\n\t\t\t\t\t\t\tblanks['wild'] = undefined;\n\t\t\t\t\t\t\trgx += '/(?<wild>.*)';\n\t\t\t\t\t\t} else if (pfx === ':') {\n\t\t\t\t\t\t\tconst opt = seg.indexOf('?', 1);\n\t\t\t\t\t\t\tconst ext = seg.indexOf('.', 1);\n\t\t\t\t\t\t\tconst isOpt = !!~opt;\n\t\t\t\t\t\t\tconst isExt = !!~ext;\n\n\t\t\t\t\t\t\tconst key = seg.substring(1, isOpt ? opt : isExt ? ext : seg.length);\n\t\t\t\t\t\t\tblanks[key] = undefined;\n\n\t\t\t\t\t\t\trgx +=\n\t\t\t\t\t\t\t\tisOpt && !isExt ? `(?:/(?<${key}>[^/]+?))?` : `/(?<${key}>[^/]+?)`;\n\t\t\t\t\t\t\tif (isExt) rgx += `${isOpt ? '?' : ''}\\\\${seg.substring(ext)}`;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trgx += `/${seg}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (i === length - 1) {\n\t\t\t\t\t\trgx += loose ? '(?:$|/)' : '/?$';\n\t\t\t\t\t}\n\n\t\t\t\t\treturn rgx;\n\t\t\t  }, '^');\n\n\tconst flags = sensitive ? '' : 'i';\n\tconst matches = new RegExp(rgx, flags).exec(path);\n\n\treturn matches\n\t\t? Object.entries(matches.groups || {}).reduce((params, [key, val]) => {\n\t\t\t\tconst value = decode(val);\n\t\t\t\tparams[key] = prefs.convertTypes ? convertType(value) : value;\n\t\t\t\treturn params;\n\t\t  }, {})\n\t\t: blank\n\t\t? blanks\n\t\t: null;\n}\n\nexport function normalizeHash(fragment, { decode = decodeURIComponent } = {}) {\n\treturn decode(fragment);\n}\n\nexport function prependPrefix(str, pfx = '/', strict = false) {\n\tstr += '';\n\treturn !str && strict ? str : str.indexOf(pfx) !== 0 ? pfx + str : str;\n}\n\nexport function trimPrefix(str, pfx) {\n\treturn (str + '').indexOf(pfx) === 0 ? str.substring(pfx.length) : str;\n}\n\nexport function isObj(obj) {\n\treturn !Array.isArray(obj) && typeof obj === 'object' && obj !== null;\n}\n\nexport function isFn(fn) {\n\treturn typeof fn === 'function';\n}\n\nexport function shallowCopy(value) {\n\tif (typeof value !== 'object' || value === null) return value;\n\treturn Object.create(Object.getPrototypeOf(value), Object.getOwnPropertyDescriptors(value));\n}\n\nexport function hookLauncher(hooks) {\n\treturn (...args) => {\n\t\tconst arr = [...hooks];\n\t\treturn !(prefs.breakHooks\n\t\t\t? arr.some((cb) => cb(...args) === false)\n\t\t\t: arr.reduce((stop, cb) => cb(...args) === false || stop, false));\n\t};\n}\n\nexport function listenEvent(...args) {\n\twindow.addEventListener(...args);\n\treturn () => window.removeEventListener(...args);\n}\n\nfunction scrollTo({ top = 0, left = 0, ...opts } = {}, el) {\n\tif (el) {\n\t\tdocument.documentElement.scrollIntoView\n\t\t\t? el.scrollIntoView({ behavior: 'smooth', ...opts })\n\t\t\t: window.scrollTo({ top: el.offsetTop - top, behavior: 'smooth', ...opts });\n\t} else {\n\t\twindow.scrollTo({ top, left, behavior: 'smooth', ...opts });\n\t}\n}\n\nfunction observeResize(cb, el, t = 5000) {\n\tconst observer = new ResizeObserver(cb);\n\tobserver.observe(el);\n\tconst off = () => observer.unobserve(el);\n\tsetTimeout(off, t);\n\treturn off;\n}\n\nfunction observeDom(cb, t = 5000) {\n\tconst observer = new MutationObserver(cb);\n\tobserver.observe(document.body, {\n\t\tchildList: true,\n\t\tsubtree: true,\n\t});\n\tconst off = () => observer.disconnect();\n\tsetTimeout(off, t);\n\treturn off;\n}\n\nfunction convertType(val) {\n\tif (Array.isArray(val)) {\n\t\tval[val.length - 1] = convertType(val[val.length - 1]);\n\t\treturn val;\n\t} else if (typeof val === 'object') {\n\t\treturn Object.entries(val).reduce((obj, [k, v]) => {\n\t\t\tobj[k] = convertType(v);\n\t\t\treturn obj;\n\t\t}, {});\n\t}\n\n\tif (val === 'true' || val === 'false') {\n\t\treturn val === 'true';\n\t} else if (val === 'null') {\n\t\treturn null;\n\t} else if (val === 'undefined') {\n\t\treturn undefined;\n\t} else if (val !== '' && !isNaN(Number(val)) && Number(val).toString() === val) {\n\t\treturn Number(val);\n\t} else if (prefs.array.format === 'separator' && typeof val === 'string') {\n\t\tconst arr = val.split(prefs.array.separator);\n\t\treturn arr.length > 1 ? arr : val;\n\t}\n\treturn val;\n}\n\nfunction parseKeys(key, val) {\n\tconst brackets = /(\\[[^[\\]]*])/,\n\t\tchild = /(\\[[^[\\]]*])/g;\n\n\tlet seg = brackets.exec(key),\n\t\tparent = seg ? key.slice(0, seg.index) : key,\n\t\tkeys = [];\n\n\tparent && keys.push(parent);\n\n\tlet i = 0;\n\twhile ((seg = child.exec(key)) && i < prefs.nesting) {\n\t\ti++;\n\t\tkeys.push(seg[1]);\n\t}\n\n\tseg && keys.push(`[${key.slice(seg.index)}]`);\n\n\treturn parseObj(keys, val);\n}\n\nfunction parseObj(chain, val) {\n\tlet leaf = val;\n\n\tfor (let i = chain.length - 1; i >= 0; --i) {\n\t\tlet root = chain[i],\n\t\t\tobj;\n\n\t\tif (root === '[]') {\n\t\t\tobj = [].concat(leaf);\n\t\t} else {\n\t\t\tobj = {};\n\t\t\tconst key =\n\t\t\t\t\troot.charAt(0) === '[' && root.charAt(root.length - 1) === ']'\n\t\t\t\t\t\t? root.slice(1, -1)\n\t\t\t\t\t\t: root,\n\t\t\t\tj = parseInt(key, 10);\n\t\t\tif (!isNaN(j) && root !== key && String(j) === key && j >= 0) {\n\t\t\t\tobj = [];\n\t\t\t\tobj[j] = prefs.convertTypes ? convertType(leaf) : leaf;\n\t\t\t} else {\n\t\t\t\tobj[key] = leaf;\n\t\t\t}\n\t\t}\n\t\tleaf = obj;\n\t}\n\n\treturn leaf;\n}\n\nfunction stringifyObj(obj = {}, nesting = '') {\n\treturn Object.entries(obj)\n\t\t.map(([key, val]) => {\n\t\t\tif (typeof val === 'object') {\n\t\t\t\treturn stringifyObj(val, nesting ? `${nesting}[${key}]` : key);\n\t\t\t} else {\n\t\t\t\treturn `${nesting}[${key}]=${val}`;\n\t\t\t}\n\t\t})\n\t\t.join('&');\n}\n","import { writable, get } from 'svelte/store';\n\nimport {\n\tstringifyQuery,\n\tnormalizeHash,\n\tprependPrefix,\n\thookLauncher,\n\tinjectParams,\n\tparseParams,\n\tparseQuery,\n\tshallowCopy,\n\ttrimPrefix,\n\tisFn,\n} from './utils';\n\nexport const pathable = createParsableStore(function path($path = '') {\n\tif (typeof $path === 'string') $path = trimPrefix($path, '/').split('/');\n\treturn !Object.prototype.hasOwnProperty.call($path, 'toString')\n\t\t? Object.defineProperty($path, 'toString', {\n\t\t\t\tvalue() {\n\t\t\t\t\treturn prependPrefix(this.join('/'));\n\t\t\t\t},\n\t\t\t\tconfigurable: false,\n\t\t\t\twritable: false,\n\t\t  })\n\t\t: $path;\n});\n\nexport const queryable = createParsableStore(function query($query = '') {\n\tif (typeof $query === 'string') $query = parseQuery($query);\n\treturn !Object.prototype.hasOwnProperty.call($query, 'toString')\n\t\t? Object.defineProperty($query, 'toString', {\n\t\t\t\tvalue() {\n\t\t\t\t\treturn prependPrefix(stringifyQuery(this), '?', true);\n\t\t\t\t},\n\t\t\t\tconfigurable: false,\n\t\t\t\twritable: false,\n\t\t  })\n\t\t: $query;\n});\n\nexport const fragmentable = createParsableStore(function fragment($fragment = '') {\n\treturn prependPrefix(normalizeHash($fragment), '#', true);\n});\n\nexport function createParamStore(path) {\n\treturn (pattern, options = {}) => {\n\t\tif (pattern instanceof RegExp)\n\t\t\tthrow new Error('Paramable does not support RegExp patterns.');\n\n\t\tlet params;\n\n\t\tpattern = pattern.replace(/\\/$/, '');\n\n\t\tconst { subscribe } = writable({}, (set) => {\n\t\t\treturn path.subscribe(($path) => {\n\t\t\t\tparams = parseParams($path.toString(), pattern, { blank: true, ...options });\n\t\t\t\tset(shallowCopy(params));\n\t\t\t});\n\t\t});\n\n\t\tfunction set(value = {}) {\n\t\t\tif (Object.entries(params).some(([key, val]) => val !== value[key])) {\n\t\t\t\tpath.update(($path) => {\n\t\t\t\t\tconst tail = options.loose\n\t\t\t\t\t\t? prependPrefix($path.slice(pattern.split('/').length - 1).join('/'))\n\t\t\t\t\t\t: '';\n\t\t\t\t\treturn injectParams(pattern + tail, value);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tget() {\n\t\t\t\treturn get(this);\n\t\t\t},\n\t\t\tupdate(fn) {\n\t\t\t\tset(fn(this.get()));\n\t\t\t},\n\t\t\tsubscribe,\n\t\t\tset,\n\t\t};\n\t};\n}\n\nfunction createParsableStore(parse) {\n\treturn (value, cbx) => {\n\t\tlet serialized = value && value.toString();\n\n\t\t!Array.isArray(cbx) && (cbx = [cbx]);\n\n\t\tconst hooks = new Set(cbx);\n\t\tconst runHooks = hookLauncher(hooks);\n\n\t\tconst { subscribe, set } = writable((value = parse(value)), () => () => hooks.clear());\n\n\t\tfunction update(val) {\n\t\t\tval = parse(val);\n\t\t\tif (val.toString() !== serialized && runHooks(val, value, parse.name) !== false) {\n\t\t\t\tserialized = val.toString();\n\t\t\t\tvalue = val;\n\t\t\t\tset(value);\n\t\t\t}\n\t\t}\n\n\t\trunHooks(null, value, parse.name);\n\n\t\treturn {\n\t\t\tsubscribe,\n\t\t\tupdate(fn) {\n\t\t\t\tupdate(fn(get(this)));\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tupdate(value);\n\t\t\t},\n\t\t\thook(cb) {\n\t\t\t\tif (isFn(cb)) {\n\t\t\t\t\thooks.add(cb);\n\t\t\t\t\tcb(null, value, parse.name);\n\t\t\t\t}\n\t\t\t\treturn () => hooks.delete(cb);\n\t\t\t},\n\t\t};\n\t};\n}\n","import { tick } from 'svelte';\nimport { derived, writable } from 'svelte/store';\n\nimport {\n\tprependPrefix,\n\tspecialLinks,\n\thasPushState,\n\tuseHashbang,\n\tparseParams,\n\tgetLocation,\n\tisSubWindow,\n\tlistenEvent,\n\thasProcess,\n\tsideEffect,\n\tgetShortURL,\n\tgetFullURL,\n\tsetScroll,\n\tsetFocus,\n\tgetPath,\n\tclosest,\n\tprefs,\n\tisBtn,\n\tisObj,\n} from './utils';\n\nimport { pathable, queryable, fragmentable, createParamStore } from './stores';\n\nconst pathname = getPath();\nconst { search, hash } = getLocation();\n\nlet init = true;\nlet popstate = false;\nlet replace = false;\nlet len = 0;\n\nconst path = pathable(pathname, before);\n\nconst query = queryable(search, before);\n\nconst fragment = fragmentable(hash, before);\n\nconst state = writable({});\n\nconst url = derived(\n\t[path, query, fragment],\n\t([$path, $query, $fragment], set) => {\n\t\tlet skip = false;\n\t\ttick().then(() => {\n\t\t\tif (skip) return;\n\t\t\tset($path + $query + $fragment);\n\t\t});\n\n\t\treturn () => (skip = true);\n\t},\n\tpathname + search + hash,\n);\n\nconst pattern = derived(path, ($path) => parseParams.bind(null, $path.toString()));\n\nfunction before() {\n\tif (!prefs.scroll && !prefs.focus) return;\n\tstate.update(($state = {}) => {\n\t\tprefs.scroll &&\n\t\t\t($state._scroll = {\n\t\t\t\ttop: window.pageYOffset,\n\t\t\t\tleft: window.pageXOffset,\n\t\t\t});\n\t\tprefs.focus && ($state._focus = document.activeElement.id);\n\t\treturn $state;\n\t});\n}\n\nfunction after(url, state) {\n\tconst anchor = url.indexOf('#') >= 0 ? url.slice(url.indexOf('#')) : '';\n\tconst activeElement = document.activeElement;\n\t!isObj(state) && (state = {});\n\ttick()\n\t\t.then(() => setFocus(state._focus, activeElement))\n\t\t.then(() => setScroll(state._scroll, anchor));\n}\n\nif (sideEffect || isSubWindow) {\n\tconst cleanup = new Set();\n\n\tcleanup.add(\n\t\turl.subscribe(($url) => {\n\t\t\tif (!init && !popstate && prefs.sideEffect) {\n\t\t\t\tif (hasPushState) {\n\t\t\t\t\thistory[replace ? 'replaceState' : 'pushState']({}, null, getFullURL($url));\n\t\t\t\t} else {\n\t\t\t\t\tlocation.hash = getFullURL($url);\n\t\t\t\t}\n\t\t\t}\n\t\t\t!popstate && after($url);\n\t\t\t!replace && len++;\n\t\t\tinit = replace = popstate = false;\n\t\t}),\n\t);\n\n\tif (hasPushState) {\n\t\tcleanup.add(\n\t\t\tstate.subscribe(($state) => {\n\t\t\t\tif (init || !prefs.sideEffect) return;\n\t\t\t\thistory.replaceState(\n\t\t\t\t\t$state,\n\t\t\t\t\tnull,\n\t\t\t\t\tlocation.pathname + location.search + location.hash,\n\t\t\t\t);\n\t\t\t}),\n\t\t);\n\t\tcleanup.add(\n\t\t\tlistenEvent('popstate', (e) => {\n\t\t\t\tpopstate = true;\n\t\t\t\tgoto(location.href, e.state);\n\t\t\t\tafter(getShortURL(location.href), e.state);\n\t\t\t}),\n\t\t);\n\t} else {\n\t\tcleanup.add(\n\t\t\tlistenEvent('hashchange', () => {\n\t\t\t\tpopstate = true;\n\t\t\t\tif (!prefs.hashbang && !useHashbang) return fragment.set(location.hash);\n\t\t\t\tgoto(location.hash);\n\t\t\t\tafter(getShortURL(location.hash));\n\t\t\t}),\n\t\t);\n\t}\n\tcleanup.add(\n\t\tlistenEvent(\n\t\t\t'beforeunload',\n\t\t\t() => {\n\t\t\t\tcleanup.forEach((off) => off());\n\t\t\t\tcleanup.clear();\n\t\t\t},\n\t\t\ttrue,\n\t\t),\n\t);\n}\n\nfunction goto(url = '', data = {}) {\n\tconst { pathname, search, hash } =\n\t\turl instanceof URL ? url : new URL(getShortURL(url), 'file:');\n\n\tpath.set(pathname);\n\tquery.set(search);\n\tfragment.set(hash);\n\n\ttick().then(() => state.set(data || {}));\n}\n\nfunction back(url) {\n\tif (len > 0 && sideEffect && prefs.sideEffect) {\n\t\thistory.back();\n\t\tlen--;\n\t} else {\n\t\ttick().then(() => goto(url));\n\t}\n}\n\nfunction redirect(url, data) {\n\ttick().then(() => {\n\t\treplace = true;\n\t\tgoto(url, data);\n\t});\n}\n\nfunction click(e) {\n\tif (\n\t\t!e.target ||\n\t\te.ctrlKey ||\n\t\te.metaKey ||\n\t\te.altKey ||\n\t\te.shiftKey ||\n\t\te.button ||\n\t\te.which !== 1 ||\n\t\te.defaultPrevented\n\t)\n\t\treturn;\n\n\tconst a = closest(e.target, 'a');\n\n\tif (\n\t\t!a ||\n\t\ta.target ||\n\t\ta.hasAttribute('download') ||\n\t\t(a.hasAttribute('rel') && a.getAttribute('rel').includes('external'))\n\t)\n\t\treturn;\n\n\tconst href = a.getAttribute('href');\n\tconst url = a.href;\n\tif (\n\t\t!href ||\n\t\turl.indexOf(location.origin) !== 0 ||\n\t\tspecialLinks.test(href) ||\n\t\t(!prefs.hashbang && !useHashbang && href.startsWith('#'))\n\t)\n\t\treturn;\n\n\te.preventDefault();\n\tgoto(url, Object.assign({}, a.dataset));\n}\n\nfunction submit(e) {\n\tif (!e.target || e.defaultPrevented) return;\n\n\tconst form = e.target;\n\tconst btn = e.submitter || (isBtn(document.activeElement) && document.activeElement);\n\n\tlet action = form.action;\n\tlet method = form.method;\n\tlet target = form.target;\n\n\tif (btn) {\n\t\tbtn.hasAttribute('formaction') && (action = btn.formAction);\n\t\tbtn.hasAttribute('formmethod') && (method = btn.formMethod);\n\t\tbtn.hasAttribute('formtarget') && (target = btn.formTarget);\n\t}\n\n\tif (method && method.toLowerCase() !== 'get') return;\n\tif (target && target.toLowerCase() !== '_self') return;\n\n\tconst { pathname, hash } = new URL(action);\n\tconst search = [];\n\tconst state = {};\n\n\tconst elements = form.elements;\n\tconst len = elements.length;\n\n\tfor (let i = 0; i < len; i++) {\n\t\tconst element = elements[i];\n\t\tif (!element.name || element.disabled) continue;\n\t\tif (['checkbox', 'radio'].includes(element.type) && !element.checked) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (isBtn(element) && element !== btn) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (element.type === 'hidden') {\n\t\t\tstate[element.name] = element.value;\n\t\t\tcontinue;\n\t\t}\n\t\tsearch.push(`${element.name}=${element.value}`);\n\t}\n\n\tlet url = prependPrefix(`${pathname}?${search.join('&')}${hash}`);\n\n\tif (hasProcess && url.match(/^\\/[a-zA-Z]:\\//)) {\n\t\turl = url.replace(/^\\/[a-zA-Z]:\\//, '/');\n\t}\n\n\te.preventDefault();\n\tgoto(url, state);\n}\n\nexport const paramable = createParamStore(path);\n\nexport { redirect, fragment, pattern, submit, click, prefs, state, query, path, back, goto, url };\n"],"names":["noop","run","fn","run_all","fns","forEach","subscribe","store","callbacks","callback","undefined","unsub","unsubscribe","get_store_value","value","_","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","Promise","resolve","update_scheduled","tick","then","flush","add_render_callback","push","seen_callbacks","Set","flushidx","length","component","update","$$","e","pop","i","has","add","clear","fragment","before_update","dirty","p","ctx","after_update","subscriber_queue","writable","start","stop","subscribers","set","new_value","b","a","run_queue","subscriber","invalidate","size","delete","derived","stores","initial_value","single","Array","isArray","stores_array","every","Boolean","Error","auto","started","values","pending","cleanup","sync","result","unsubscribers","map","specialLinks","hasLocation","location","hasProcess","process","hasHistory","history","hasPushState","isFn","pushState","hasWindow","window","isSubWindow","parent","isFileScheme","protocol","test","pathname","sideEffect","useHashbang","hashbang","prefs","array","separator","format","convertTypes","breakHooks","anchor","scroll","focus","nesting","base","getLocation","hash","URL","indexOf","substring","getBase","getFullURL","url","getShortURL","trimPrefix","origin","prependPrefix","isBtn","el","tagName","toLowerCase","type","includes","setScroll","normalizeHash","opts","isObj","top","left","scrollHeight","scrollWidth","document","documentElement","scrollTo","cancel","cb","t","observer","ResizeObserver","observe","off","unobserve","setTimeout","observeResize","entries","contentRect","height","width","getElementById","observeDom","stringifyQuery","obj","encode","encodeURIComponent","Object","keys","reduce","k","prototype","hasOwnProperty","call","isNaN","parseInt","join","v","o","parseKeys","stringifyObj","parseParams","path","pattern","loose","sensitive","blank","decode","decodeURIComponent","blanks","rgx","RegExp","split","seg","pfx","opt","ext","isOpt","isExt","key","matches","exec","groups","params","val","convertType","str","strict","listenEvent","args","addEventListener","removeEventListener","scrollIntoView","behavior","offsetTop","MutationObserver","body","childList","subtree","disconnect","Number","toString","arr","child","slice","index","chain","leaf","root","concat","charAt","j","String","parseObj","pathable","createParsableStore","$path","defineProperty","this","configurable","queryable","$query","replace","filter","assign","parseQuery","fragmentable","$fragment","parse","cbx","serialized","hooks","runHooks","some","hookLauncher","name","get","hook","getPath","search","init","popstate","len","before","query","state","skip","bind","$state","_scroll","pageYOffset","pageXOffset","_focus","activeElement","id","after","keepFocusId","querySelector","autofocus","tabindex","getAttribute","tabIndex","preventScroll","setAttribute","removeAttribute","getSelection","removeAllRanges","setFocus","$url","replaceState","goto","href","data","back","redirect","click","target","ctrlKey","metaKey","altKey","shiftKey","button","which","defaultPrevented","nodeName","parentNode","closest","hasAttribute","startsWith","preventDefault","dataset","submit","form","btn","submitter","action","method","formAction","formMethod","formTarget","elements","element","disabled","checked","match","paramable","options","create","getPrototypeOf","getOwnPropertyDescriptors","tail","param","injectParams","createParamStore"],"mappings":"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","x_google_ignoreList":[0,1,2]}