{"version":3,"file":"index.min.mjs","sources":["../src/utils.js","../src/stores.js","../src/index.js"],"sourcesContent":["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":["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","length","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","a","k","prototype","hasOwnProperty","call","isNaN","parseInt","Array","isArray","push","join","forEach","v","o","parseKeys","stringifyObj","parseParams","path","pattern","loose","sensitive","blank","decode","decodeURIComponent","blanks","rgx","RegExp","split","seg","i","pfx","undefined","opt","ext","isOpt","isExt","key","matches","exec","groups","params","val","value","convertType","fragment","str","strict","fn","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","map","pathable","createParsableStore","$path","defineProperty","this","configurable","writable","queryable","$query","replace","filter","Boolean","p","assign","parseQuery","fragmentable","$fragment","parse","cbx","serialized","hooks","Set","runHooks","some","stop","hookLauncher","subscribe","set","clear","update","name","get","hook","add","delete","getPath","search","init","popstate","len","before","query","state","derived","skip","tick","then","bind","$state","_scroll","pageYOffset","pageXOffset","_focus","activeElement","id","after","keepFocusId","querySelector","autofocus","tabindex","getAttribute","tabIndex","preventScroll","setAttribute","removeAttribute","getSelection","removeAllRanges","setFocus","cleanup","$url","replaceState","e","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","Error","create","getPrototypeOf","getOwnPropertyDescriptors","tail","param","_","injectParams","createParamStore"],"mappings":"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"}