wuffle 0.63.0 → 0.64.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.js","sources":["../../../node_modules/min-dash/dist/index.esm.js","../../../node_modules/svelte/src/runtime/internal/utils.js","../../../node_modules/svelte/src/runtime/internal/environment.js","../../../node_modules/svelte/src/runtime/internal/loop.js","../../../node_modules/svelte/src/runtime/internal/globals.js","../../../node_modules/svelte/src/runtime/internal/dom.js","../../../node_modules/svelte/src/runtime/internal/style_manager.js","../../../node_modules/svelte/src/runtime/internal/lifecycle.js","../../../node_modules/svelte/src/runtime/internal/scheduler.js","../../../node_modules/svelte/src/runtime/internal/transitions.js","../../../node_modules/svelte/src/runtime/internal/each.js","../../../node_modules/svelte/src/runtime/internal/Component.js","../../../node_modules/svelte/src/runtime/internal/disclose-version/index.js","../../../node_modules/svelte/src/shared/version.js","../../board/src/util/Id.js","../../board/src/util/local-store.js","../../board/src/util/history.js","../../board/src/util/index.js","../../board/src/components/HintList.svelte","../../board/src/shortcuts.js","../../board/src/BoardFilter.svelte","../../board/src/components/Avatar.svelte","../../board/src/components/Loader.svelte","../../board/src/PoweredBy.svelte","../../board/src/components/Notifications.svelte","../../../node_modules/svelte/src/runtime/easing/index.js","../../../node_modules/svelte/src/runtime/transition/index.js","../../board/src/components/Notification.svelte","../../board/src/components/Tag.svelte","../../board/src/components/PullRequestIcon.svelte","../../board/src/components/EpicIcon.svelte","../../board/src/components/LinkIcon.svelte","../../board/src/CardStatus.svelte","../../board/src/CollaboratorLinks.svelte","../../board/src/CardLink.svelte","../../board/src/Card.svelte","../../board/src/RepositorySelect.svelte","../../board/src/CreateIssue.svelte","../../board/src/Api.js","../../../node_modules/@bpmn-io/draggle/dist/dragula.js","../../board/src/logo-gray.svg","../../board/src/error.svg","../../board/src/Taskboard.svelte","../../board/src/util/links.js","../../board/src/main.js"],"sourcesContent":["/**\n * Flatten array, one level deep.\n *\n * @template T\n *\n * @param {T[][] | T[] | null} [arr]\n *\n * @return {T[]}\n */\nfunction flatten(arr) {\n return Array.prototype.concat.apply([], arr);\n}\n\nconst nativeToString = Object.prototype.toString;\nconst nativeHasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction isUndefined(obj) {\n return obj === undefined;\n}\n\nfunction isDefined(obj) {\n return obj !== undefined;\n}\n\nfunction isNil(obj) {\n return obj == null;\n}\n\nfunction isArray(obj) {\n return nativeToString.call(obj) === '[object Array]';\n}\n\nfunction isObject(obj) {\n return nativeToString.call(obj) === '[object Object]';\n}\n\nfunction isNumber(obj) {\n return nativeToString.call(obj) === '[object Number]';\n}\n\n/**\n * @param {any} obj\n *\n * @return {boolean}\n */\nfunction isFunction(obj) {\n const tag = nativeToString.call(obj);\n\n return (\n tag === '[object Function]' ||\n tag === '[object AsyncFunction]' ||\n tag === '[object GeneratorFunction]' ||\n tag === '[object AsyncGeneratorFunction]' ||\n tag === '[object Proxy]'\n );\n}\n\nfunction isString(obj) {\n return nativeToString.call(obj) === '[object String]';\n}\n\n\n/**\n * Ensure collection is an array.\n *\n * @param {Object} obj\n */\nfunction ensureArray(obj) {\n\n if (isArray(obj)) {\n return;\n }\n\n throw new Error('must supply array');\n}\n\n/**\n * Return true, if target owns a property with the given key.\n *\n * @param {Object} target\n * @param {String} key\n *\n * @return {Boolean}\n */\nfunction has(target, key) {\n return nativeHasOwnProperty.call(target, key);\n}\n\n/**\n * @template T\n * @typedef { (\n * ((e: T) => boolean) |\n * ((e: T, idx: number) => boolean) |\n * ((e: T, key: string) => boolean) |\n * string |\n * number\n * ) } Matcher\n */\n\n/**\n * @template T\n * @template U\n *\n * @typedef { (\n * ((e: T) => U) | string | number\n * ) } Extractor\n */\n\n\n/**\n * @template T\n * @typedef { (val: T, key: any) => boolean } MatchFn\n */\n\n/**\n * @template T\n * @typedef { T[] } ArrayCollection\n */\n\n/**\n * @template T\n * @typedef { { [key: string]: T } } StringKeyValueCollection\n */\n\n/**\n * @template T\n * @typedef { { [key: number]: T } } NumberKeyValueCollection\n */\n\n/**\n * @template T\n * @typedef { StringKeyValueCollection<T> | NumberKeyValueCollection<T> } KeyValueCollection\n */\n\n/**\n * @template T\n * @typedef { KeyValueCollection<T> | ArrayCollection<T> } Collection\n */\n\n/**\n * Find element in collection.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param {Matcher<T>} matcher\n *\n * @return {Object}\n */\nfunction find(collection, matcher) {\n\n const matchFn = toMatcher(matcher);\n\n let match;\n\n forEach(collection, function(val, key) {\n if (matchFn(val, key)) {\n match = val;\n\n return false;\n }\n });\n\n return match;\n\n}\n\n\n/**\n * Find element index in collection.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param {Matcher<T>} matcher\n *\n * @return {number}\n */\nfunction findIndex(collection, matcher) {\n\n const matchFn = toMatcher(matcher);\n\n let idx = isArray(collection) ? -1 : undefined;\n\n forEach(collection, function(val, key) {\n if (matchFn(val, key)) {\n idx = key;\n\n return false;\n }\n });\n\n return idx;\n}\n\n\n/**\n * Filter elements in collection.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param {Matcher<T>} matcher\n *\n * @return {T[]} result\n */\nfunction filter(collection, matcher) {\n\n const matchFn = toMatcher(matcher);\n\n let result = [];\n\n forEach(collection, function(val, key) {\n if (matchFn(val, key)) {\n result.push(val);\n }\n });\n\n return result;\n}\n\n\n/**\n * Iterate over collection; returning something\n * (non-undefined) will stop iteration.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param { ((item: T, idx: number) => (boolean|void)) | ((item: T, key: string) => (boolean|void)) } iterator\n *\n * @return {T} return result that stopped the iteration\n */\nfunction forEach(collection, iterator) {\n\n let val,\n result;\n\n if (isUndefined(collection)) {\n return;\n }\n\n const convertKey = isArray(collection) ? toNum : identity;\n\n for (let key in collection) {\n\n if (has(collection, key)) {\n val = collection[key];\n\n result = iterator(val, convertKey(key));\n\n if (result === false) {\n return val;\n }\n }\n }\n}\n\n/**\n * Return collection without element.\n *\n * @template T\n * @param {ArrayCollection<T>} arr\n * @param {Matcher<T>} matcher\n *\n * @return {T[]}\n */\nfunction without(arr, matcher) {\n\n if (isUndefined(arr)) {\n return [];\n }\n\n ensureArray(arr);\n\n const matchFn = toMatcher(matcher);\n\n return arr.filter(function(el, idx) {\n return !matchFn(el, idx);\n });\n\n}\n\n\n/**\n * Reduce collection, returning a single result.\n *\n * @template T\n * @template V\n *\n * @param {Collection<T>} collection\n * @param {(result: V, entry: T, index: any) => V} iterator\n * @param {V} result\n *\n * @return {V} result returned from last iterator\n */\nfunction reduce(collection, iterator, result) {\n\n forEach(collection, function(value, idx) {\n result = iterator(result, value, idx);\n });\n\n return result;\n}\n\n\n/**\n * Return true if every element in the collection\n * matches the criteria.\n *\n * @param {Object|Array} collection\n * @param {Function} matcher\n *\n * @return {Boolean}\n */\nfunction every(collection, matcher) {\n\n return !!reduce(collection, function(matches, val, key) {\n return matches && matcher(val, key);\n }, true);\n}\n\n\n/**\n * Return true if some elements in the collection\n * match the criteria.\n *\n * @param {Object|Array} collection\n * @param {Function} matcher\n *\n * @return {Boolean}\n */\nfunction some(collection, matcher) {\n\n return !!find(collection, matcher);\n}\n\n\n/**\n * Transform a collection into another collection\n * by piping each member through the given fn.\n *\n * @param {Object|Array} collection\n * @param {Function} fn\n *\n * @return {Array} transformed collection\n */\nfunction map(collection, fn) {\n\n let result = [];\n\n forEach(collection, function(val, key) {\n result.push(fn(val, key));\n });\n\n return result;\n}\n\n\n/**\n * Get the collections keys.\n *\n * @param {Object|Array} collection\n *\n * @return {Array}\n */\nfunction keys(collection) {\n return collection && Object.keys(collection) || [];\n}\n\n\n/**\n * Shorthand for `keys(o).length`.\n *\n * @param {Object|Array} collection\n *\n * @return {Number}\n */\nfunction size(collection) {\n return keys(collection).length;\n}\n\n\n/**\n * Get the values in the collection.\n *\n * @param {Object|Array} collection\n *\n * @return {Array}\n */\nfunction values(collection) {\n return map(collection, (val) => val);\n}\n\n\n/**\n * Group collection members by attribute.\n *\n * @param {Object|Array} collection\n * @param {Extractor} extractor\n *\n * @return {Object} map with { attrValue => [ a, b, c ] }\n */\nfunction groupBy(collection, extractor, grouped = {}) {\n\n extractor = toExtractor(extractor);\n\n forEach(collection, function(val) {\n let discriminator = extractor(val) || '_';\n\n let group = grouped[discriminator];\n\n if (!group) {\n group = grouped[discriminator] = [];\n }\n\n group.push(val);\n });\n\n return grouped;\n}\n\n\nfunction uniqueBy(extractor, ...collections) {\n\n extractor = toExtractor(extractor);\n\n let grouped = {};\n\n forEach(collections, (c) => groupBy(c, extractor, grouped));\n\n let result = map(grouped, function(val, key) {\n return val[0];\n });\n\n return result;\n}\n\n\nconst unionBy = uniqueBy;\n\n\n\n/**\n * Sort collection by criteria.\n *\n * @template T\n *\n * @param {Collection<T>} collection\n * @param {Extractor<T, number | string>} extractor\n *\n * @return {Array}\n */\nfunction sortBy(collection, extractor) {\n\n extractor = toExtractor(extractor);\n\n let sorted = [];\n\n forEach(collection, function(value, key) {\n let disc = extractor(value, key);\n\n let entry = {\n d: disc,\n v: value\n };\n\n for (var idx = 0; idx < sorted.length; idx++) {\n let { d } = sorted[idx];\n\n if (disc < d) {\n sorted.splice(idx, 0, entry);\n return;\n }\n }\n\n // not inserted, append (!)\n sorted.push(entry);\n });\n\n return map(sorted, (e) => e.v);\n}\n\n\n/**\n * Create an object pattern matcher.\n *\n * @example\n *\n * ```javascript\n * const matcher = matchPattern({ id: 1 });\n *\n * let element = find(elements, matcher);\n * ```\n *\n * @template T\n *\n * @param {T} pattern\n *\n * @return { (el: any) => boolean } matcherFn\n */\nfunction matchPattern(pattern) {\n\n return function(el) {\n\n return every(pattern, function(val, key) {\n return el[key] === val;\n });\n\n };\n}\n\n\n/**\n * @param {string | ((e: any) => any) } extractor\n *\n * @return { (e: any) => any }\n */\nfunction toExtractor(extractor) {\n\n /**\n * @satisfies { (e: any) => any }\n */\n return isFunction(extractor) ? extractor : (e) => {\n\n // @ts-ignore: just works\n return e[extractor];\n };\n}\n\n\n/**\n * @template T\n * @param {Matcher<T>} matcher\n *\n * @return {MatchFn<T>}\n */\nfunction toMatcher(matcher) {\n return isFunction(matcher) ? matcher : (e) => {\n return e === matcher;\n };\n}\n\n\nfunction identity(arg) {\n return arg;\n}\n\nfunction toNum(arg) {\n return Number(arg);\n}\n\n/* global setTimeout clearTimeout */\n\n/**\n * @typedef { {\n * (...args: any[]): any;\n * flush: () => void;\n * cancel: () => void;\n * } } DebouncedFunction\n */\n\n/**\n * Debounce fn, calling it only once if the given time\n * elapsed between calls.\n *\n * Lodash-style the function exposes methods to `#clear`\n * and `#flush` to control internal behavior.\n *\n * @param {Function} fn\n * @param {Number} timeout\n *\n * @return {DebouncedFunction} debounced function\n */\nfunction debounce(fn, timeout) {\n\n let timer;\n\n let lastArgs;\n let lastThis;\n\n let lastNow;\n\n function fire(force) {\n\n let now = Date.now();\n\n let scheduledDiff = force ? 0 : (lastNow + timeout) - now;\n\n if (scheduledDiff > 0) {\n return schedule(scheduledDiff);\n }\n\n fn.apply(lastThis, lastArgs);\n\n clear();\n }\n\n function schedule(timeout) {\n timer = setTimeout(fire, timeout);\n }\n\n function clear() {\n if (timer) {\n clearTimeout(timer);\n }\n\n timer = lastNow = lastArgs = lastThis = undefined;\n }\n\n function flush() {\n if (timer) {\n fire(true);\n }\n\n clear();\n }\n\n /**\n * @type { DebouncedFunction }\n */\n function callback(...args) {\n lastNow = Date.now();\n\n lastArgs = args;\n lastThis = this;\n\n // ensure an execution is scheduled\n if (!timer) {\n schedule(timeout);\n }\n }\n\n callback.flush = flush;\n callback.cancel = clear;\n\n return callback;\n}\n\n/**\n * Throttle fn, calling at most once\n * in the given interval.\n *\n * @param {Function} fn\n * @param {Number} interval\n *\n * @return {Function} throttled function\n */\nfunction throttle(fn, interval) {\n let throttling = false;\n\n return function(...args) {\n\n if (throttling) {\n return;\n }\n\n fn(...args);\n throttling = true;\n\n setTimeout(() => {\n throttling = false;\n }, interval);\n };\n}\n\n/**\n * Bind function against target <this>.\n *\n * @param {Function} fn\n * @param {Object} target\n *\n * @return {Function} bound function\n */\nfunction bind(fn, target) {\n return fn.bind(target);\n}\n\n/**\n * Convenience wrapper for `Object.assign`.\n *\n * @param {Object} target\n * @param {...Object} others\n *\n * @return {Object} the target\n */\nfunction assign(target, ...others) {\n return Object.assign(target, ...others);\n}\n\n/**\n * Sets a nested property of a given object to the specified value.\n *\n * This mutates the object and returns it.\n *\n * @template T\n *\n * @param {T} target The target of the set operation.\n * @param {(string|number)[]} path The path to the nested value.\n * @param {any} value The value to set.\n *\n * @return {T}\n */\nfunction set(target, path, value) {\n\n let currentTarget = target;\n\n forEach(path, function(key, idx) {\n\n if (typeof key !== 'number' && typeof key !== 'string') {\n throw new Error('illegal key type: ' + typeof key + '. Key should be of type number or string.');\n }\n\n if (key === 'constructor') {\n throw new Error('illegal key: constructor');\n }\n\n if (key === '__proto__') {\n throw new Error('illegal key: __proto__');\n }\n\n let nextKey = path[idx + 1];\n let nextTarget = currentTarget[key];\n\n if (isDefined(nextKey) && isNil(nextTarget)) {\n nextTarget = currentTarget[key] = isNaN(+nextKey) ? {} : [];\n }\n\n if (isUndefined(nextKey)) {\n if (isUndefined(value)) {\n delete currentTarget[key];\n } else {\n currentTarget[key] = value;\n }\n } else {\n currentTarget = nextTarget;\n }\n });\n\n return target;\n}\n\n\n/**\n * Gets a nested property of a given object.\n *\n * @param {Object} target The target of the get operation.\n * @param {(string|number)[]} path The path to the nested value.\n * @param {any} [defaultValue] The value to return if no value exists.\n *\n * @return {any}\n */\nfunction get(target, path, defaultValue) {\n\n let currentTarget = target;\n\n forEach(path, function(key) {\n\n // accessing nil property yields <undefined>\n if (isNil(currentTarget)) {\n currentTarget = undefined;\n\n return false;\n }\n\n currentTarget = currentTarget[key];\n });\n\n return isUndefined(currentTarget) ? defaultValue : currentTarget;\n}\n\n/**\n * Pick properties from the given target.\n *\n * @template T\n * @template {any[]} V\n *\n * @param {T} target\n * @param {V} properties\n *\n * @return Pick<T, V>\n */\nfunction pick(target, properties) {\n\n let result = {};\n\n let obj = Object(target);\n\n forEach(properties, function(prop) {\n\n if (prop in obj) {\n result[prop] = target[prop];\n }\n });\n\n return result;\n}\n\n/**\n * Pick all target properties, excluding the given ones.\n *\n * @template T\n * @template {any[]} V\n *\n * @param {T} target\n * @param {V} properties\n *\n * @return {Omit<T, V>} target\n */\nfunction omit(target, properties) {\n\n let result = {};\n\n let obj = Object(target);\n\n forEach(obj, function(prop, key) {\n\n if (properties.indexOf(key) === -1) {\n result[key] = prop;\n }\n });\n\n return result;\n}\n\n/**\n * Recursively merge `...sources` into given target.\n *\n * Does support merging objects; does not support merging arrays.\n *\n * @param {Object} target\n * @param {...Object} sources\n *\n * @return {Object} the target\n */\nfunction merge(target, ...sources) {\n\n if (!sources.length) {\n return target;\n }\n\n forEach(sources, function(source) {\n\n // skip non-obj sources, i.e. null\n if (!source || !isObject(source)) {\n return;\n }\n\n forEach(source, function(sourceVal, key) {\n\n if (key === '__proto__') {\n return;\n }\n\n let targetVal = target[key];\n\n if (isObject(sourceVal)) {\n\n if (!isObject(targetVal)) {\n\n // override target[key] with object\n targetVal = {};\n }\n\n target[key] = merge(targetVal, sourceVal);\n } else {\n target[key] = sourceVal;\n }\n\n });\n });\n\n return target;\n}\n\nexport { assign, bind, debounce, ensureArray, every, filter, find, findIndex, flatten, forEach, get, groupBy, has, isArray, isDefined, isFunction, isNil, isNumber, isObject, isString, isUndefined, keys, map, matchPattern, merge, omit, pick, reduce, set, size, some, sortBy, throttle, unionBy, uniqueBy, values, without };\n","/** @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 { noop } from './utils.js';\n\nexport const is_client = typeof window !== 'undefined';\n\n/** @type {() => number} */\nexport let now = is_client ? () => window.performance.now() : () => Date.now();\n\nexport let raf = is_client ? (cb) => requestAnimationFrame(cb) : noop;\n\n// used internally for testing\n/** @returns {void} */\nexport function set_now(fn) {\n\tnow = fn;\n}\n\n/** @returns {void} */\nexport function set_raf(fn) {\n\traf = fn;\n}\n","import { raf } from './environment.js';\n\nconst tasks = new Set();\n\n/**\n * @param {number} now\n * @returns {void}\n */\nfunction run_tasks(now) {\n\ttasks.forEach((task) => {\n\t\tif (!task.c(now)) {\n\t\t\ttasks.delete(task);\n\t\t\ttask.f();\n\t\t}\n\t});\n\tif (tasks.size !== 0) raf(run_tasks);\n}\n\n/**\n * For testing purposes only!\n * @returns {void}\n */\nexport function clear_loops() {\n\ttasks.clear();\n}\n\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n * @param {import('./private.js').TaskCallback} callback\n * @returns {import('./private.js').Task}\n */\nexport function loop(callback) {\n\t/** @type {import('./private.js').TaskEntry} */\n\tlet task;\n\tif (tasks.size === 0) raf(run_tasks);\n\treturn {\n\t\tpromise: new Promise((fulfill) => {\n\t\t\ttasks.add((task = { c: callback, f: fulfill }));\n\t\t}),\n\t\tabort() {\n\t\t\ttasks.delete(task);\n\t\t}\n\t};\n}\n","/** @type {typeof globalThis} */\nexport const globals =\n\ttypeof window !== 'undefined'\n\t\t? window\n\t\t: typeof globalThis !== 'undefined'\n\t\t? globalThis\n\t\t: // @ts-ignore Node typings have this\n\t\t global;\n","import { contenteditable_truthy_values, has_prop } from './utils.js';\n\nimport { ResizeObserverSingleton } from './ResizeObserverSingleton.js';\n\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\n\n/**\n * @returns {void}\n */\nexport function start_hydrating() {\n\tis_hydrating = true;\n}\n\n/**\n * @returns {void}\n */\nexport function end_hydrating() {\n\tis_hydrating = false;\n}\n\n/**\n * @param {number} low\n * @param {number} high\n * @param {(index: number) => number} key\n * @param {number} value\n * @returns {number}\n */\nfunction upper_bound(low, high, key, value) {\n\t// Return first index of value larger than input value in the range [low, high)\n\twhile (low < high) {\n\t\tconst mid = low + ((high - low) >> 1);\n\t\tif (key(mid) <= value) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\thigh = mid;\n\t\t}\n\t}\n\treturn low;\n}\n\n/**\n * @param {NodeEx} target\n * @returns {void}\n */\nfunction init_hydrate(target) {\n\tif (target.hydrate_init) return;\n\ttarget.hydrate_init = true;\n\t// We know that all children have claim_order values since the unclaimed have been detached if target is not <head>\n\n\tlet children = /** @type {ArrayLike<NodeEx2>} */ (target.childNodes);\n\t// If target is <head>, there may be children without claim_order\n\tif (target.nodeName === 'HEAD') {\n\t\tconst my_children = [];\n\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\tconst node = children[i];\n\t\t\tif (node.claim_order !== undefined) {\n\t\t\t\tmy_children.push(node);\n\t\t\t}\n\t\t}\n\t\tchildren = my_children;\n\t}\n\t/*\n\t * Reorder claimed children optimally.\n\t * We can reorder claimed children optimally by finding the longest subsequence of\n\t * nodes that are already claimed in order and only moving the rest. The longest\n\t * subsequence of nodes that are claimed in order can be found by\n\t * computing the longest increasing subsequence of .claim_order values.\n\t *\n\t * This algorithm is optimal in generating the least amount of reorder operations\n\t * possible.\n\t *\n\t * Proof:\n\t * We know that, given a set of reordering operations, the nodes that do not move\n\t * always form an increasing subsequence, since they do not move among each other\n\t * meaning that they must be already ordered among each other. Thus, the maximal\n\t * set of nodes that do not move form a longest increasing subsequence.\n\t */\n\t// Compute longest increasing subsequence\n\t// m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n\tconst m = new Int32Array(children.length + 1);\n\t// Predecessor indices + 1\n\tconst p = new Int32Array(children.length);\n\tm[0] = -1;\n\tlet longest = 0;\n\tfor (let i = 0; i < children.length; i++) {\n\t\tconst current = children[i].claim_order;\n\t\t// Find the largest subsequence length such that it ends in a value less than our current value\n\t\t// upper_bound returns first greater value, so we subtract one\n\t\t// with fast path for when we are on the current longest subsequence\n\t\tconst seq_len =\n\t\t\t(longest > 0 && children[m[longest]].claim_order <= current\n\t\t\t\t? longest + 1\n\t\t\t\t: upper_bound(1, longest, (idx) => children[m[idx]].claim_order, current)) - 1;\n\t\tp[i] = m[seq_len] + 1;\n\t\tconst new_len = seq_len + 1;\n\t\t// We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n\t\tm[new_len] = i;\n\t\tlongest = Math.max(new_len, longest);\n\t}\n\t// The longest increasing subsequence of nodes (initially reversed)\n\n\t/**\n\t * @type {NodeEx2[]}\n\t */\n\tconst lis = [];\n\t// The rest of the nodes, nodes that will be moved\n\n\t/**\n\t * @type {NodeEx2[]}\n\t */\n\tconst to_move = [];\n\tlet last = children.length - 1;\n\tfor (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n\t\tlis.push(children[cur - 1]);\n\t\tfor (; last >= cur; last--) {\n\t\t\tto_move.push(children[last]);\n\t\t}\n\t\tlast--;\n\t}\n\tfor (; last >= 0; last--) {\n\t\tto_move.push(children[last]);\n\t}\n\tlis.reverse();\n\t// We sort the nodes being moved to guarantee that their insertion order matches the claim order\n\tto_move.sort((a, b) => a.claim_order - b.claim_order);\n\t// Finally, we move the nodes\n\tfor (let i = 0, j = 0; i < to_move.length; i++) {\n\t\twhile (j < lis.length && to_move[i].claim_order >= lis[j].claim_order) {\n\t\t\tj++;\n\t\t}\n\t\tconst anchor = j < lis.length ? lis[j] : null;\n\t\ttarget.insertBefore(to_move[i], anchor);\n\t}\n}\n\n/**\n * @param {Node} target\n * @param {Node} node\n * @returns {void}\n */\nexport function append(target, node) {\n\ttarget.appendChild(node);\n}\n\n/**\n * @param {Node} target\n * @param {string} style_sheet_id\n * @param {string} styles\n * @returns {void}\n */\nexport function append_styles(target, style_sheet_id, styles) {\n\tconst append_styles_to = get_root_for_style(target);\n\tif (!append_styles_to.getElementById(style_sheet_id)) {\n\t\tconst style = element('style');\n\t\tstyle.id = style_sheet_id;\n\t\tstyle.textContent = styles;\n\t\tappend_stylesheet(append_styles_to, style);\n\t}\n}\n\n/**\n * @param {Node} node\n * @returns {ShadowRoot | Document}\n */\nexport function get_root_for_style(node) {\n\tif (!node) return document;\n\tconst root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n\tif (root && /** @type {ShadowRoot} */ (root).host) {\n\t\treturn /** @type {ShadowRoot} */ (root);\n\t}\n\treturn node.ownerDocument;\n}\n\n/**\n * @param {Node} node\n * @returns {CSSStyleSheet}\n */\nexport function append_empty_stylesheet(node) {\n\tconst style_element = element('style');\n\t// For transitions to work without 'style-src: unsafe-inline' Content Security Policy,\n\t// these empty tags need to be allowed with a hash as a workaround until we move to the Web Animations API.\n\t// Using the hash for the empty string (for an empty tag) works in all browsers except Safari.\n\t// So as a workaround for the workaround, when we append empty style tags we set their content to /* empty */.\n\t// The hash 'sha256-9OlNO0DNEeaVzHL4RZwCLsBHA8WBQ8toBp/4F5XV2nc=' will then work even in Safari.\n\tstyle_element.textContent = '/* empty */';\n\tappend_stylesheet(get_root_for_style(node), style_element);\n\treturn style_element.sheet;\n}\n\n/**\n * @param {ShadowRoot | Document} node\n * @param {HTMLStyleElement} style\n * @returns {CSSStyleSheet}\n */\nfunction append_stylesheet(node, style) {\n\tappend(/** @type {Document} */ (node).head || node, style);\n\treturn style.sheet;\n}\n\n/**\n * @param {NodeEx} target\n * @param {NodeEx} node\n * @returns {void}\n */\nexport function append_hydration(target, node) {\n\tif (is_hydrating) {\n\t\tinit_hydrate(target);\n\t\tif (\n\t\t\ttarget.actual_end_child === undefined ||\n\t\t\t(target.actual_end_child !== null && target.actual_end_child.parentNode !== target)\n\t\t) {\n\t\t\ttarget.actual_end_child = target.firstChild;\n\t\t}\n\t\t// Skip nodes of undefined ordering\n\t\twhile (target.actual_end_child !== null && target.actual_end_child.claim_order === undefined) {\n\t\t\ttarget.actual_end_child = target.actual_end_child.nextSibling;\n\t\t}\n\t\tif (node !== target.actual_end_child) {\n\t\t\t// We only insert if the ordering of this node should be modified or the parent node is not target\n\t\t\tif (node.claim_order !== undefined || node.parentNode !== target) {\n\t\t\t\ttarget.insertBefore(node, target.actual_end_child);\n\t\t\t}\n\t\t} else {\n\t\t\ttarget.actual_end_child = node.nextSibling;\n\t\t}\n\t} else if (node.parentNode !== target || node.nextSibling !== null) {\n\t\ttarget.appendChild(node);\n\t}\n}\n\n/**\n * @param {Node} target\n * @param {Node} node\n * @param {Node} [anchor]\n * @returns {void}\n */\nexport function insert(target, node, anchor) {\n\ttarget.insertBefore(node, anchor || null);\n}\n\n/**\n * @param {NodeEx} target\n * @param {NodeEx} node\n * @param {NodeEx} [anchor]\n * @returns {void}\n */\nexport function insert_hydration(target, node, anchor) {\n\tif (is_hydrating && !anchor) {\n\t\tappend_hydration(target, node);\n\t} else if (node.parentNode !== target || node.nextSibling != anchor) {\n\t\ttarget.insertBefore(node, anchor || null);\n\t}\n}\n\n/**\n * @param {Node} node\n * @returns {void}\n */\nexport function detach(node) {\n\tif (node.parentNode) {\n\t\tnode.parentNode.removeChild(node);\n\t}\n}\n\n/**\n * @returns {void} */\nexport function destroy_each(iterations, detaching) {\n\tfor (let i = 0; i < iterations.length; i += 1) {\n\t\tif (iterations[i]) iterations[i].d(detaching);\n\t}\n}\n\n/**\n * @template {keyof HTMLElementTagNameMap} K\n * @param {K} name\n * @returns {HTMLElementTagNameMap[K]}\n */\nexport function element(name) {\n\treturn document.createElement(name);\n}\n\n/**\n * @template {keyof HTMLElementTagNameMap} K\n * @param {K} name\n * @param {string} is\n * @returns {HTMLElementTagNameMap[K]}\n */\nexport function element_is(name, is) {\n\treturn document.createElement(name, { is });\n}\n\n/**\n * @template T\n * @template {keyof T} K\n * @param {T} obj\n * @param {K[]} exclude\n * @returns {Pick<T, Exclude<keyof T, K>>}\n */\nexport function object_without_properties(obj, exclude) {\n\tconst target = /** @type {Pick<T, Exclude<keyof T, K>>} */ ({});\n\tfor (const k in obj) {\n\t\tif (\n\t\t\thas_prop(obj, k) &&\n\t\t\t// @ts-ignore\n\t\t\texclude.indexOf(k) === -1\n\t\t) {\n\t\t\t// @ts-ignore\n\t\t\ttarget[k] = obj[k];\n\t\t}\n\t}\n\treturn target;\n}\n\n/**\n * @template {keyof SVGElementTagNameMap} K\n * @param {K} name\n * @returns {SVGElement}\n */\nexport function svg_element(name) {\n\treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n}\n\n/**\n * @param {string} data\n * @returns {Text}\n */\nexport function text(data) {\n\treturn document.createTextNode(data);\n}\n\n/**\n * @returns {Text} */\nexport function space() {\n\treturn text(' ');\n}\n\n/**\n * @returns {Text} */\nexport function empty() {\n\treturn text('');\n}\n\n/**\n * @param {string} content\n * @returns {Comment}\n */\nexport function comment(content) {\n\treturn document.createComment(content);\n}\n\n/**\n * @param {EventTarget} node\n * @param {string} event\n * @param {EventListenerOrEventListenerObject} handler\n * @param {boolean | AddEventListenerOptions | EventListenerOptions} [options]\n * @returns {() => void}\n */\nexport function listen(node, event, handler, options) {\n\tnode.addEventListener(event, handler, options);\n\treturn () => node.removeEventListener(event, handler, options);\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function prevent_default(fn) {\n\treturn function (event) {\n\t\tevent.preventDefault();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function stop_propagation(fn) {\n\treturn function (event) {\n\t\tevent.stopPropagation();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => any} */\nexport function stop_immediate_propagation(fn) {\n\treturn function (event) {\n\t\tevent.stopImmediatePropagation();\n\t\t// @ts-ignore\n\t\treturn fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => void} */\nexport function self(fn) {\n\treturn function (event) {\n\t\t// @ts-ignore\n\t\tif (event.target === this) fn.call(this, event);\n\t};\n}\n\n/**\n * @returns {(event: any) => void} */\nexport function trusted(fn) {\n\treturn function (event) {\n\t\t// @ts-ignore\n\t\tif (event.isTrusted) fn.call(this, event);\n\t};\n}\n\n/**\n * @param {Element} node\n * @param {string} attribute\n * @param {string} [value]\n * @returns {void}\n */\nexport function attr(node, attribute, value) {\n\tif (value == null) node.removeAttribute(attribute);\n\telse if (node.getAttribute(attribute) !== value) node.setAttribute(attribute, value);\n}\n/**\n * List of attributes that should always be set through the attr method,\n * because updating them through the property setter doesn't work reliably.\n * In the example of `width`/`height`, the problem is that the setter only\n * accepts numeric values, but the attribute can also be set to a string like `50%`.\n * If this list becomes too big, rethink this approach.\n */\nconst always_set_through_set_attribute = ['width', 'height'];\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {{ [x: string]: string }} attributes\n * @returns {void}\n */\nexport function set_attributes(node, attributes) {\n\t// @ts-ignore\n\tconst descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n\tfor (const key in attributes) {\n\t\tif (attributes[key] == null) {\n\t\t\tnode.removeAttribute(key);\n\t\t} else if (key === 'style') {\n\t\t\tnode.style.cssText = attributes[key];\n\t\t} else if (key === '__value') {\n\t\t\t/** @type {any} */ (node).value = node[key] = attributes[key];\n\t\t} else if (\n\t\t\tdescriptors[key] &&\n\t\t\tdescriptors[key].set &&\n\t\t\talways_set_through_set_attribute.indexOf(key) === -1\n\t\t) {\n\t\t\tnode[key] = attributes[key];\n\t\t} else {\n\t\t\tattr(node, key, attributes[key]);\n\t\t}\n\t}\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {{ [x: string]: string }} attributes\n * @returns {void}\n */\nexport function set_svg_attributes(node, attributes) {\n\tfor (const key in attributes) {\n\t\tattr(node, key, attributes[key]);\n\t}\n}\n\n/**\n * @param {Record<string, unknown>} data_map\n * @returns {void}\n */\nexport function set_custom_element_data_map(node, data_map) {\n\tObject.keys(data_map).forEach((key) => {\n\t\tset_custom_element_data(node, key, data_map[key]);\n\t});\n}\n\n/**\n * @returns {void} */\nexport function set_custom_element_data(node, prop, value) {\n\tconst lower = prop.toLowerCase(); // for backwards compatibility with existing behavior we do lowercase first\n\tif (lower in node) {\n\t\tnode[lower] = typeof node[lower] === 'boolean' && value === '' ? true : value;\n\t} else if (prop in node) {\n\t\tnode[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n\t} else {\n\t\tattr(node, prop, value);\n\t}\n}\n\n/**\n * @param {string} tag\n */\nexport function set_dynamic_element_data(tag) {\n\treturn /-/.test(tag) ? set_custom_element_data_map : set_attributes;\n}\n\n/**\n * @returns {void}\n */\nexport function xlink_attr(node, attribute, value) {\n\tnode.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\n\n/**\n * @param {HTMLElement} node\n * @returns {string}\n */\nexport function get_svelte_dataset(node) {\n\treturn node.dataset.svelteH;\n}\n\n/**\n * @returns {unknown[]} */\nexport function get_binding_group_value(group, __value, checked) {\n\tconst value = new Set();\n\tfor (let i = 0; i < group.length; i += 1) {\n\t\tif (group[i].checked) value.add(group[i].__value);\n\t}\n\tif (!checked) {\n\t\tvalue.delete(__value);\n\t}\n\treturn Array.from(value);\n}\n\n/**\n * @param {HTMLInputElement[]} group\n * @returns {{ p(...inputs: HTMLInputElement[]): void; r(): void; }}\n */\nexport function init_binding_group(group) {\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _inputs;\n\treturn {\n\t\t/* push */ p(...inputs) {\n\t\t\t_inputs = inputs;\n\t\t\t_inputs.forEach((input) => group.push(input));\n\t\t},\n\t\t/* remove */ r() {\n\t\t\t_inputs.forEach((input) => group.splice(group.indexOf(input), 1));\n\t\t}\n\t};\n}\n\n/**\n * @param {number[]} indexes\n * @returns {{ u(new_indexes: number[]): void; p(...inputs: HTMLInputElement[]): void; r: () => void; }}\n */\nexport function init_binding_group_dynamic(group, indexes) {\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _group = get_binding_group(group);\n\n\t/**\n\t * @type {HTMLInputElement[]} */\n\tlet _inputs;\n\n\tfunction get_binding_group(group) {\n\t\tfor (let i = 0; i < indexes.length; i++) {\n\t\t\tgroup = group[indexes[i]] = group[indexes[i]] || [];\n\t\t}\n\t\treturn group;\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction push() {\n\t\t_inputs.forEach((input) => _group.push(input));\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction remove() {\n\t\t_inputs.forEach((input) => _group.splice(_group.indexOf(input), 1));\n\t}\n\treturn {\n\t\t/* update */ u(new_indexes) {\n\t\t\tindexes = new_indexes;\n\t\t\tconst new_group = get_binding_group(group);\n\t\t\tif (new_group !== _group) {\n\t\t\t\tremove();\n\t\t\t\t_group = new_group;\n\t\t\t\tpush();\n\t\t\t}\n\t\t},\n\t\t/* push */ p(...inputs) {\n\t\t\t_inputs = inputs;\n\t\t\tpush();\n\t\t},\n\t\t/* remove */ r: remove\n\t};\n}\n\n/** @returns {number} */\nexport function to_number(value) {\n\treturn value === '' ? null : +value;\n}\n\n/** @returns {any[]} */\nexport function time_ranges_to_array(ranges) {\n\tconst array = [];\n\tfor (let i = 0; i < ranges.length; i += 1) {\n\t\tarray.push({ start: ranges.start(i), end: ranges.end(i) });\n\t}\n\treturn array;\n}\n\n/**\n * @param {Element} element\n * @returns {ChildNode[]}\n */\nexport function children(element) {\n\treturn Array.from(element.childNodes);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {void}\n */\nfunction init_claim_info(nodes) {\n\tif (nodes.claim_info === undefined) {\n\t\tnodes.claim_info = { last_index: 0, total_claimed: 0 };\n\t}\n}\n\n/**\n * @template {ChildNodeEx} R\n * @param {ChildNodeArray} nodes\n * @param {(node: ChildNodeEx) => node is R} predicate\n * @param {(node: ChildNodeEx) => ChildNodeEx | undefined} process_node\n * @param {() => R} create_node\n * @param {boolean} dont_update_last_index\n * @returns {R}\n */\nfunction claim_node(nodes, predicate, process_node, create_node, dont_update_last_index = false) {\n\t// Try to find nodes in an order such that we lengthen the longest increasing subsequence\n\tinit_claim_info(nodes);\n\tconst result_node = (() => {\n\t\t// We first try to find an element after the previous one\n\t\tfor (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n\t\t\tconst node = nodes[i];\n\t\t\tif (predicate(node)) {\n\t\t\t\tconst replacement = process_node(node);\n\t\t\t\tif (replacement === undefined) {\n\t\t\t\t\tnodes.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\tnodes[i] = replacement;\n\t\t\t\t}\n\t\t\t\tif (!dont_update_last_index) {\n\t\t\t\t\tnodes.claim_info.last_index = i;\n\t\t\t\t}\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\t// Otherwise, we try to find one before\n\t\t// We iterate in reverse so that we don't go too far back\n\t\tfor (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n\t\t\tconst node = nodes[i];\n\t\t\tif (predicate(node)) {\n\t\t\t\tconst replacement = process_node(node);\n\t\t\t\tif (replacement === undefined) {\n\t\t\t\t\tnodes.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\tnodes[i] = replacement;\n\t\t\t\t}\n\t\t\t\tif (!dont_update_last_index) {\n\t\t\t\t\tnodes.claim_info.last_index = i;\n\t\t\t\t} else if (replacement === undefined) {\n\t\t\t\t\t// Since we spliced before the last_index, we decrease it\n\t\t\t\t\tnodes.claim_info.last_index--;\n\t\t\t\t}\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\t// If we can't find any matching node, we create a new one\n\t\treturn create_node();\n\t})();\n\tresult_node.claim_order = nodes.claim_info.total_claimed;\n\tnodes.claim_info.total_claimed += 1;\n\treturn result_node;\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @param {(name: string) => Element | SVGElement} create_element\n * @returns {Element | SVGElement}\n */\nfunction claim_element_base(nodes, name, attributes, create_element) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Element | SVGElement} */\n\t\t(node) => node.nodeName === name,\n\t\t/** @param {Element} node */\n\t\t(node) => {\n\t\t\tconst remove = [];\n\t\t\tfor (let j = 0; j < node.attributes.length; j++) {\n\t\t\t\tconst attribute = node.attributes[j];\n\t\t\t\tif (!attributes[attribute.name]) {\n\t\t\t\t\tremove.push(attribute.name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tremove.forEach((v) => node.removeAttribute(v));\n\t\t\treturn undefined;\n\t\t},\n\t\t() => create_element(name)\n\t);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @returns {Element | SVGElement}\n */\nexport function claim_element(nodes, name, attributes) {\n\treturn claim_element_base(nodes, name, attributes, element);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @param {string} name\n * @param {{ [key: string]: boolean }} attributes\n * @returns {Element | SVGElement}\n */\nexport function claim_svg_element(nodes, name, attributes) {\n\treturn claim_element_base(nodes, name, attributes, svg_element);\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {Text}\n */\nexport function claim_text(nodes, data) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Text} */\n\t\t(node) => node.nodeType === 3,\n\t\t/** @param {Text} node */\n\t\t(node) => {\n\t\t\tconst data_str = '' + data;\n\t\t\tif (node.data.startsWith(data_str)) {\n\t\t\t\tif (node.data.length !== data_str.length) {\n\t\t\t\t\treturn node.splitText(data_str.length);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode.data = data_str;\n\t\t\t}\n\t\t},\n\t\t() => text(data),\n\t\ttrue // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n\t);\n}\n\n/**\n * @returns {Text} */\nexport function claim_space(nodes) {\n\treturn claim_text(nodes, ' ');\n}\n\n/**\n * @param {ChildNodeArray} nodes\n * @returns {Comment}\n */\nexport function claim_comment(nodes, data) {\n\treturn claim_node(\n\t\tnodes,\n\t\t/** @returns {node is Comment} */\n\t\t(node) => node.nodeType === 8,\n\t\t/** @param {Comment} node */\n\t\t(node) => {\n\t\t\tnode.data = '' + data;\n\t\t\treturn undefined;\n\t\t},\n\t\t() => comment(data),\n\t\ttrue\n\t);\n}\n\nfunction get_comment_idx(nodes, text, start) {\n\tfor (let i = start; i < nodes.length; i += 1) {\n\t\tconst node = nodes[i];\n\t\tif (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n}\n\n/**\n * @param {boolean} is_svg\n * @returns {HtmlTagHydration}\n */\nexport function claim_html_tag(nodes, is_svg) {\n\t// find html opening tag\n\tconst start_index = get_comment_idx(nodes, 'HTML_TAG_START', 0);\n\tconst end_index = get_comment_idx(nodes, 'HTML_TAG_END', start_index + 1);\n\tif (start_index === -1 || end_index === -1) {\n\t\treturn new HtmlTagHydration(is_svg);\n\t}\n\n\tinit_claim_info(nodes);\n\tconst html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n\tdetach(html_tag_nodes[0]);\n\tdetach(html_tag_nodes[html_tag_nodes.length - 1]);\n\tconst claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n\tif (claimed_nodes.length === 0) {\n\t\treturn new HtmlTagHydration(is_svg);\n\t}\n\tfor (const n of claimed_nodes) {\n\t\tn.claim_order = nodes.claim_info.total_claimed;\n\t\tnodes.claim_info.total_claimed += 1;\n\t}\n\treturn new HtmlTagHydration(is_svg, claimed_nodes);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @returns {void}\n */\nexport function set_data(text, data) {\n\tdata = '' + data;\n\tif (text.data === data) return;\n\ttext.data = /** @type {string} */ (data);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @returns {void}\n */\nexport function set_data_contenteditable(text, data) {\n\tdata = '' + data;\n\tif (text.wholeText === data) return;\n\ttext.data = /** @type {string} */ (data);\n}\n\n/**\n * @param {Text} text\n * @param {unknown} data\n * @param {string} attr_value\n * @returns {void}\n */\nexport function set_data_maybe_contenteditable(text, data, attr_value) {\n\tif (~contenteditable_truthy_values.indexOf(attr_value)) {\n\t\tset_data_contenteditable(text, data);\n\t} else {\n\t\tset_data(text, data);\n\t}\n}\n\n/**\n * @returns {void} */\nexport function set_input_value(input, value) {\n\tinput.value = value == null ? '' : value;\n}\n\n/**\n * @returns {void} */\nexport function set_input_type(input, type) {\n\ttry {\n\t\tinput.type = type;\n\t} catch (e) {\n\t\t// do nothing\n\t}\n}\n\n/**\n * @returns {void} */\nexport function set_style(node, key, value, important) {\n\tif (value == null) {\n\t\tnode.style.removeProperty(key);\n\t} else {\n\t\tnode.style.setProperty(key, value, important ? 'important' : '');\n\t}\n}\n\n/**\n * @returns {void} */\nexport function select_option(select, value, mounting) {\n\tfor (let i = 0; i < select.options.length; i += 1) {\n\t\tconst option = select.options[i];\n\t\tif (option.__value === value) {\n\t\t\toption.selected = true;\n\t\t\treturn;\n\t\t}\n\t}\n\tif (!mounting || value !== undefined) {\n\t\tselect.selectedIndex = -1; // no option should be selected\n\t}\n}\n\n/**\n * @returns {void} */\nexport function select_options(select, value) {\n\tfor (let i = 0; i < select.options.length; i += 1) {\n\t\tconst option = select.options[i];\n\t\toption.selected = ~value.indexOf(option.__value);\n\t}\n}\n\nexport function select_value(select) {\n\tconst selected_option = select.querySelector(':checked');\n\treturn selected_option && selected_option.__value;\n}\n\nexport function select_multiple_value(select) {\n\treturn [].map.call(select.querySelectorAll(':checked'), (option) => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\n\n/**\n * @type {boolean} */\nlet crossorigin;\n\n/**\n * @returns {boolean} */\nexport function is_crossorigin() {\n\tif (crossorigin === undefined) {\n\t\tcrossorigin = false;\n\t\ttry {\n\t\t\tif (typeof window !== 'undefined' && window.parent) {\n\t\t\t\tvoid window.parent.document;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tcrossorigin = true;\n\t\t}\n\t}\n\treturn crossorigin;\n}\n\n/**\n * @param {HTMLElement} node\n * @param {() => void} fn\n * @returns {() => void}\n */\nexport function add_iframe_resize_listener(node, fn) {\n\tconst computed_style = getComputedStyle(node);\n\tif (computed_style.position === 'static') {\n\t\tnode.style.position = 'relative';\n\t}\n\tconst iframe = element('iframe');\n\tiframe.setAttribute(\n\t\t'style',\n\t\t'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n\t\t\t'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;'\n\t);\n\tiframe.setAttribute('aria-hidden', 'true');\n\tiframe.tabIndex = -1;\n\tconst crossorigin = is_crossorigin();\n\n\t/**\n\t * @type {() => void}\n\t */\n\tlet unsubscribe;\n\tif (crossorigin) {\n\t\tiframe.src = \"data:text/html,<script>onresize=function(){parent.postMessage(0,'*')}</script>\";\n\t\tunsubscribe = listen(\n\t\t\twindow,\n\t\t\t'message',\n\t\t\t/** @param {MessageEvent} event */ (event) => {\n\t\t\t\tif (event.source === iframe.contentWindow) fn();\n\t\t\t}\n\t\t);\n\t} else {\n\t\tiframe.src = 'about:blank';\n\t\tiframe.onload = () => {\n\t\t\tunsubscribe = listen(iframe.contentWindow, 'resize', fn);\n\t\t\t// make sure an initial resize event is fired _after_ the iframe is loaded (which is asynchronous)\n\t\t\t// see https://github.com/sveltejs/svelte/issues/4233\n\t\t\tfn();\n\t\t};\n\t}\n\tappend(node, iframe);\n\treturn () => {\n\t\tif (crossorigin) {\n\t\t\tunsubscribe();\n\t\t} else if (unsubscribe && iframe.contentWindow) {\n\t\t\tunsubscribe();\n\t\t}\n\t\tdetach(iframe);\n\t};\n}\nexport const resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'content-box'\n});\nexport const resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'border-box'\n});\nexport const resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton(\n\t{ box: 'device-pixel-content-box' }\n);\nexport { ResizeObserverSingleton };\n\n/**\n * @returns {void} */\nexport function toggle_class(element, name, toggle) {\n\t// The `!!` is required because an `undefined` flag means flipping the current state.\n\telement.classList.toggle(name, !!toggle);\n}\n\n/**\n * @template T\n * @param {string} type\n * @param {T} [detail]\n * @param {{ bubbles?: boolean, cancelable?: boolean }} [options]\n * @returns {CustomEvent<T>}\n */\nexport function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n\treturn new CustomEvent(type, { detail, bubbles, cancelable });\n}\n\n/**\n * @param {string} selector\n * @param {HTMLElement} parent\n * @returns {ChildNodeArray}\n */\nexport function query_selector_all(selector, parent = document.body) {\n\treturn Array.from(parent.querySelectorAll(selector));\n}\n\n/**\n * @param {string} nodeId\n * @param {HTMLElement} head\n * @returns {any[]}\n */\nexport function head_selector(nodeId, head) {\n\tconst result = [];\n\tlet started = 0;\n\tfor (const node of head.childNodes) {\n\t\tif (node.nodeType === 8 /* comment node */) {\n\t\t\tconst comment = node.textContent.trim();\n\t\t\tif (comment === `HEAD_${nodeId}_END`) {\n\t\t\t\tstarted -= 1;\n\t\t\t\tresult.push(node);\n\t\t\t} else if (comment === `HEAD_${nodeId}_START`) {\n\t\t\t\tstarted += 1;\n\t\t\t\tresult.push(node);\n\t\t\t}\n\t\t} else if (started > 0) {\n\t\t\tresult.push(node);\n\t\t}\n\t}\n\treturn result;\n}\n/** */\nexport class HtmlTag {\n\t/**\n\t * @private\n\t * @default false\n\t */\n\tis_svg = false;\n\t/** parent for creating node */\n\te = undefined;\n\t/** html tag nodes */\n\tn = undefined;\n\t/** target */\n\tt = undefined;\n\t/** anchor */\n\ta = undefined;\n\tconstructor(is_svg = false) {\n\t\tthis.is_svg = is_svg;\n\t\tthis.e = this.n = null;\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tc(html) {\n\t\tthis.h(html);\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @param {HTMLElement | SVGElement} target\n\t * @param {HTMLElement | SVGElement} anchor\n\t * @returns {void}\n\t */\n\tm(html, target, anchor = null) {\n\t\tif (!this.e) {\n\t\t\tif (this.is_svg)\n\t\t\t\tthis.e = svg_element(/** @type {keyof SVGElementTagNameMap} */ (target.nodeName));\n\t\t\t/** #7364 target for <template> may be provided as #document-fragment(11) */ else\n\t\t\t\tthis.e = element(\n\t\t\t\t\t/** @type {keyof HTMLElementTagNameMap} */ (\n\t\t\t\t\t\ttarget.nodeType === 11 ? 'TEMPLATE' : target.nodeName\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\tthis.t =\n\t\t\t\ttarget.tagName !== 'TEMPLATE'\n\t\t\t\t\t? target\n\t\t\t\t\t: /** @type {HTMLTemplateElement} */ (target).content;\n\t\t\tthis.c(html);\n\t\t}\n\t\tthis.i(anchor);\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\th(html) {\n\t\tthis.e.innerHTML = html;\n\t\tthis.n = Array.from(\n\t\t\tthis.e.nodeName === 'TEMPLATE' ? this.e.content.childNodes : this.e.childNodes\n\t\t);\n\t}\n\n\t/**\n\t * @returns {void} */\n\ti(anchor) {\n\t\tfor (let i = 0; i < this.n.length; i += 1) {\n\t\t\tinsert(this.t, this.n[i], anchor);\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tp(html) {\n\t\tthis.d();\n\t\tthis.h(html);\n\t\tthis.i(this.a);\n\t}\n\n\t/**\n\t * @returns {void} */\n\td() {\n\t\tthis.n.forEach(detach);\n\t}\n}\n\nexport class HtmlTagHydration extends HtmlTag {\n\t/** @type {Element[]} hydration claimed nodes */\n\tl = undefined;\n\n\tconstructor(is_svg = false, claimed_nodes) {\n\t\tsuper(is_svg);\n\t\tthis.e = this.n = null;\n\t\tthis.l = claimed_nodes;\n\t}\n\n\t/**\n\t * @param {string} html\n\t * @returns {void}\n\t */\n\tc(html) {\n\t\tif (this.l) {\n\t\t\tthis.n = this.l;\n\t\t} else {\n\t\t\tsuper.c(html);\n\t\t}\n\t}\n\n\t/**\n\t * @returns {void} */\n\ti(anchor) {\n\t\tfor (let i = 0; i < this.n.length; i += 1) {\n\t\t\tinsert_hydration(this.t, this.n[i], anchor);\n\t\t}\n\t}\n}\n\n/**\n * @param {NamedNodeMap} attributes\n * @returns {{}}\n */\nexport function attribute_to_object(attributes) {\n\tconst result = {};\n\tfor (const attribute of attributes) {\n\t\tresult[attribute.name] = attribute.value;\n\t}\n\treturn result;\n}\n\nconst escaped = {\n\t'\"': '&quot;',\n\t'&': '&amp;',\n\t'<': '&lt;'\n};\n\nconst regex_attribute_characters_to_escape = /[\"&<]/g;\n\n/**\n * Note that the attribute itself should be surrounded in double quotes\n * @param {any} attribute\n */\nfunction escape_attribute(attribute) {\n\treturn String(attribute).replace(regex_attribute_characters_to_escape, (match) => escaped[match]);\n}\n\n/**\n * @param {Record<string, string>} attributes\n */\nexport function stringify_spread(attributes) {\n\tlet str = ' ';\n\tfor (const key in attributes) {\n\t\tif (attributes[key] != null) {\n\t\t\tstr += `${key}=\"${escape_attribute(attributes[key])}\" `;\n\t\t}\n\t}\n\n\treturn str;\n}\n\n/**\n * @param {HTMLElement} element\n * @returns {{}}\n */\nexport function get_custom_elements_slots(element) {\n\tconst result = {};\n\telement.childNodes.forEach(\n\t\t/** @param {Element} node */ (node) => {\n\t\t\tresult[node.slot || 'default'] = true;\n\t\t}\n\t);\n\treturn result;\n}\n\nexport function construct_svelte_component(component, props) {\n\treturn new component(props);\n}\n\n/**\n * @typedef {Node & {\n * \tclaim_order?: number;\n * \thydrate_init?: true;\n * \tactual_end_child?: NodeEx;\n * \tchildNodes: NodeListOf<NodeEx>;\n * }} NodeEx\n */\n\n/** @typedef {ChildNode & NodeEx} ChildNodeEx */\n\n/** @typedef {NodeEx & { claim_order: number }} NodeEx2 */\n\n/**\n * @typedef {ChildNodeEx[] & {\n * \tclaim_info?: {\n * \t\tlast_index: number;\n * \t\ttotal_claimed: number;\n * \t};\n * }} ChildNodeArray\n */\n","import { append_empty_stylesheet, detach, get_root_for_style } from './dom.js';\nimport { raf } from './environment.js';\n\n// we need to store the information for multiple documents because a Svelte application could also contain iframes\n// https://github.com/sveltejs/svelte/issues/3624\n/** @type {Map<Document | ShadowRoot, import('./private.d.ts').StyleInformation>} */\nconst managed_styles = new Map();\n\nlet active = 0;\n\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\n/**\n * @param {string} str\n * @returns {number}\n */\nfunction hash(str) {\n\tlet hash = 5381;\n\tlet i = str.length;\n\twhile (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n\treturn hash >>> 0;\n}\n\n/**\n * @param {Document | ShadowRoot} doc\n * @param {Element & ElementCSSInlineStyle} node\n * @returns {{ stylesheet: any; rules: {}; }}\n */\nfunction create_style_information(doc, node) {\n\tconst info = { stylesheet: append_empty_stylesheet(node), rules: {} };\n\tmanaged_styles.set(doc, info);\n\treturn info;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {number} a\n * @param {number} b\n * @param {number} duration\n * @param {number} delay\n * @param {(t: number) => number} ease\n * @param {(t: number, u: number) => string} fn\n * @param {number} uid\n * @returns {string}\n */\nexport function create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n\tconst step = 16.666 / duration;\n\tlet keyframes = '{\\n';\n\tfor (let p = 0; p <= 1; p += step) {\n\t\tconst t = a + (b - a) * ease(p);\n\t\tkeyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n\t}\n\tconst rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n\tconst name = `__svelte_${hash(rule)}_${uid}`;\n\tconst doc = get_root_for_style(node);\n\tconst { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);\n\tif (!rules[name]) {\n\t\trules[name] = true;\n\t\tstylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n\t}\n\tconst animation = node.style.animation || '';\n\tnode.style.animation = `${\n\t\tanimation ? `${animation}, ` : ''\n\t}${name} ${duration}ms linear ${delay}ms 1 both`;\n\tactive += 1;\n\treturn name;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {string} [name]\n * @returns {void}\n */\nexport function delete_rule(node, name) {\n\tconst previous = (node.style.animation || '').split(', ');\n\tconst next = previous.filter(\n\t\tname\n\t\t\t? (anim) => anim.indexOf(name) < 0 // remove specific animation\n\t\t\t: (anim) => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n\t);\n\tconst deleted = previous.length - next.length;\n\tif (deleted) {\n\t\tnode.style.animation = next.join(', ');\n\t\tactive -= deleted;\n\t\tif (!active) clear_rules();\n\t}\n}\n\n/** @returns {void} */\nexport function clear_rules() {\n\traf(() => {\n\t\tif (active) return;\n\t\tmanaged_styles.forEach((info) => {\n\t\t\tconst { ownerNode } = info.stylesheet;\n\t\t\t// there is no ownerNode if it runs on jsdom.\n\t\t\tif (ownerNode) detach(ownerNode);\n\t\t});\n\t\tmanaged_styles.clear();\n\t});\n}\n","import { custom_event } from './dom.js';\n\nexport let current_component;\n\n/** @returns {void} */\nexport function set_current_component(component) {\n\tcurrent_component = component;\n}\n\nexport function get_current_component() {\n\tif (!current_component) throw new Error('Function called outside component initialization');\n\treturn current_component;\n}\n\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`\n *\n * https://svelte.dev/docs/svelte#beforeupdate\n * @param {() => any} fn\n * @returns {void}\n */\nexport function beforeUpdate(fn) {\n\tget_current_component().$$.before_update.push(fn);\n}\n\n/**\n * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.\n * It must be called during the component's initialisation (but doesn't need to live *inside* the component;\n * it can be called from an external module).\n *\n * If a function is returned _synchronously_ from `onMount`, it will be called when the component is unmounted.\n *\n * `onMount` does not run inside a [server-side component](https://svelte.dev/docs#run-time-server-side-component-api).\n *\n * https://svelte.dev/docs/svelte#onmount\n * @template T\n * @param {() => import('./private.js').NotFunction<T> | Promise<import('./private.js').NotFunction<T>> | (() => any)} fn\n * @returns {void}\n */\nexport function onMount(fn) {\n\tget_current_component().$$.on_mount.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`\n *\n * https://svelte.dev/docs/svelte#afterupdate\n * @param {() => any} fn\n * @returns {void}\n */\nexport function afterUpdate(fn) {\n\tget_current_component().$$.after_update.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * https://svelte.dev/docs/svelte#ondestroy\n * @param {() => any} fn\n * @returns {void}\n */\nexport function onDestroy(fn) {\n\tget_current_component().$$.on_destroy.push(fn);\n}\n\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs#template-syntax-component-directives-on-eventname).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n * ```ts\n * const dispatch = createEventDispatcher<{\n * loaded: never; // does not take a detail argument\n * change: string; // takes a detail argument of type string, which is required\n * optional: number | null; // takes an optional detail argument of type number\n * }>();\n * ```\n *\n * https://svelte.dev/docs/svelte#createeventdispatcher\n * @template {Record<string, any>} [EventMap=any]\n * @returns {import('./public.js').EventDispatcher<EventMap>}\n */\nexport function createEventDispatcher() {\n\tconst component = get_current_component();\n\treturn (type, detail, { cancelable = false } = {}) => {\n\t\tconst callbacks = component.$$.callbacks[type];\n\t\tif (callbacks) {\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = custom_event(/** @type {string} */ (type), detail, { cancelable });\n\t\t\tcallbacks.slice().forEach((fn) => {\n\t\t\t\tfn.call(component, event);\n\t\t\t});\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\t\treturn true;\n\t};\n}\n\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#setcontext\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tget_current_component().$$.context.set(key, context);\n\treturn context;\n}\n\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#getcontext\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\treturn get_current_component().$$.context.get(key);\n}\n\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * https://svelte.dev/docs/svelte#getallcontexts\n * @template {Map<any, any>} [T=Map<any, any>]\n * @returns {T}\n */\nexport function getAllContexts() {\n\treturn get_current_component().$$.context;\n}\n\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * https://svelte.dev/docs/svelte#hascontext\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\treturn get_current_component().$$.context.has(key);\n}\n\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\n/**\n * @param component\n * @param event\n * @returns {void}\n */\nexport function bubble(component, event) {\n\tconst callbacks = component.$$.callbacks[event.type];\n\tif (callbacks) {\n\t\t// @ts-ignore\n\t\tcallbacks.slice().forEach((fn) => fn.call(this, event));\n\t}\n}\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 { identity as linear, is_function, noop, run_all } from './utils.js';\nimport { now } from './environment.js';\nimport { loop } from './loop.js';\nimport { create_rule, delete_rule } from './style_manager.js';\nimport { custom_event } from './dom.js';\nimport { add_render_callback } from './scheduler.js';\n\n/**\n * @type {Promise<void> | null}\n */\nlet promise;\n\n/**\n * @returns {Promise<void>}\n */\nfunction wait() {\n\tif (!promise) {\n\t\tpromise = Promise.resolve();\n\t\tpromise.then(() => {\n\t\t\tpromise = null;\n\t\t});\n\t}\n\treturn promise;\n}\n\n/**\n * @param {Element} node\n * @param {INTRO | OUTRO | boolean} direction\n * @param {'start' | 'end'} kind\n * @returns {void}\n */\nfunction dispatch(node, direction, kind) {\n\tnode.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\n\nconst outroing = new Set();\n\n/**\n * @type {Outro}\n */\nlet outros;\n\n/**\n * @returns {void} */\nexport function group_outros() {\n\toutros = {\n\t\tr: 0,\n\t\tc: [],\n\t\tp: outros // parent group\n\t};\n}\n\n/**\n * @returns {void} */\nexport function check_outros() {\n\tif (!outros.r) {\n\t\trun_all(outros.c);\n\t}\n\toutros = outros.p;\n}\n\n/**\n * @param {import('./private.js').Fragment} block\n * @param {0 | 1} [local]\n * @returns {void}\n */\nexport function transition_in(block, local) {\n\tif (block && block.i) {\n\t\toutroing.delete(block);\n\t\tblock.i(local);\n\t}\n}\n\n/**\n * @param {import('./private.js').Fragment} block\n * @param {0 | 1} local\n * @param {0 | 1} [detach]\n * @param {() => void} [callback]\n * @returns {void}\n */\nexport function transition_out(block, local, detach, callback) {\n\tif (block && block.o) {\n\t\tif (outroing.has(block)) return;\n\t\toutroing.add(block);\n\t\toutros.c.push(() => {\n\t\t\toutroing.delete(block);\n\t\t\tif (callback) {\n\t\t\t\tif (detach) block.d(1);\n\t\t\t\tcallback();\n\t\t\t}\n\t\t});\n\t\tblock.o(local);\n\t} else if (callback) {\n\t\tcallback();\n\t}\n}\n\n/**\n * @type {import('../transition/public.js').TransitionConfig}\n */\nconst null_transition = { duration: 0 };\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {TransitionFn} fn\n * @param {any} params\n * @returns {{ start(): void; invalidate(): void; end(): void; }}\n */\nexport function create_in_transition(node, fn, params) {\n\t/**\n\t * @type {TransitionOptions} */\n\tconst options = { direction: 'in' };\n\tlet config = fn(node, params, options);\n\tlet running = false;\n\tlet animation_name;\n\tlet task;\n\tlet uid = 0;\n\n\t/**\n\t * @returns {void} */\n\tfunction cleanup() {\n\t\tif (animation_name) delete_rule(node, animation_name);\n\t}\n\n\t/**\n\t * @returns {void} */\n\tfunction go() {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = linear,\n\t\t\ttick = noop,\n\t\t\tcss\n\t\t} = config || null_transition;\n\t\tif (css) animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n\t\ttick(0, 1);\n\t\tconst start_time = now() + delay;\n\t\tconst end_time = start_time + duration;\n\t\tif (task) task.abort();\n\t\trunning = true;\n\t\tadd_render_callback(() => dispatch(node, true, 'start'));\n\t\ttask = loop((now) => {\n\t\t\tif (running) {\n\t\t\t\tif (now >= end_time) {\n\t\t\t\t\ttick(1, 0);\n\t\t\t\t\tdispatch(node, true, 'end');\n\t\t\t\t\tcleanup();\n\t\t\t\t\treturn (running = false);\n\t\t\t\t}\n\t\t\t\tif (now >= start_time) {\n\t\t\t\t\tconst t = easing((now - start_time) / duration);\n\t\t\t\t\ttick(t, 1 - t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn running;\n\t\t});\n\t}\n\tlet started = false;\n\treturn {\n\t\tstart() {\n\t\t\tif (started) return;\n\t\t\tstarted = true;\n\t\t\tdelete_rule(node);\n\t\t\tif (is_function(config)) {\n\t\t\t\tconfig = config(options);\n\t\t\t\twait().then(go);\n\t\t\t} else {\n\t\t\t\tgo();\n\t\t\t}\n\t\t},\n\t\tinvalidate() {\n\t\t\tstarted = false;\n\t\t},\n\t\tend() {\n\t\t\tif (running) {\n\t\t\t\tcleanup();\n\t\t\t\trunning = false;\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {TransitionFn} fn\n * @param {any} params\n * @returns {{ end(reset: any): void; }}\n */\nexport function create_out_transition(node, fn, params) {\n\t/** @type {TransitionOptions} */\n\tconst options = { direction: 'out' };\n\tlet config = fn(node, params, options);\n\tlet running = true;\n\tlet animation_name;\n\tconst group = outros;\n\tgroup.r += 1;\n\t/** @type {boolean} */\n\tlet original_inert_value;\n\n\t/**\n\t * @returns {void} */\n\tfunction go() {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = linear,\n\t\t\ttick = noop,\n\t\t\tcss\n\t\t} = config || null_transition;\n\n\t\tif (css) animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n\n\t\tconst start_time = now() + delay;\n\t\tconst end_time = start_time + duration;\n\t\tadd_render_callback(() => dispatch(node, false, 'start'));\n\n\t\tif ('inert' in node) {\n\t\t\toriginal_inert_value = /** @type {HTMLElement} */ (node).inert;\n\t\t\tnode.inert = true;\n\t\t}\n\n\t\tloop((now) => {\n\t\t\tif (running) {\n\t\t\t\tif (now >= end_time) {\n\t\t\t\t\ttick(0, 1);\n\t\t\t\t\tdispatch(node, false, 'end');\n\t\t\t\t\tif (!--group.r) {\n\t\t\t\t\t\t// this will result in `end()` being called,\n\t\t\t\t\t\t// so we don't need to clean up here\n\t\t\t\t\t\trun_all(group.c);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (now >= start_time) {\n\t\t\t\t\tconst t = easing((now - start_time) / duration);\n\t\t\t\t\ttick(1 - t, t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn running;\n\t\t});\n\t}\n\n\tif (is_function(config)) {\n\t\twait().then(() => {\n\t\t\t// @ts-ignore\n\t\t\tconfig = config(options);\n\t\t\tgo();\n\t\t});\n\t} else {\n\t\tgo();\n\t}\n\n\treturn {\n\t\tend(reset) {\n\t\t\tif (reset && 'inert' in node) {\n\t\t\t\tnode.inert = original_inert_value;\n\t\t\t}\n\t\t\tif (reset && config.tick) {\n\t\t\t\tconfig.tick(1, 0);\n\t\t\t}\n\t\t\tif (running) {\n\t\t\t\tif (animation_name) delete_rule(node, animation_name);\n\t\t\t\trunning = false;\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} node\n * @param {TransitionFn} fn\n * @param {any} params\n * @param {boolean} intro\n * @returns {{ run(b: 0 | 1): void; end(): void; }}\n */\nexport function create_bidirectional_transition(node, fn, params, intro) {\n\t/**\n\t * @type {TransitionOptions} */\n\tconst options = { direction: 'both' };\n\tlet config = fn(node, params, options);\n\tlet t = intro ? 0 : 1;\n\n\t/**\n\t * @type {Program | null} */\n\tlet running_program = null;\n\n\t/**\n\t * @type {PendingProgram | null} */\n\tlet pending_program = null;\n\tlet animation_name = null;\n\n\t/** @type {boolean} */\n\tlet original_inert_value;\n\n\t/**\n\t * @returns {void} */\n\tfunction clear_animation() {\n\t\tif (animation_name) delete_rule(node, animation_name);\n\t}\n\n\t/**\n\t * @param {PendingProgram} program\n\t * @param {number} duration\n\t * @returns {Program}\n\t */\n\tfunction init(program, duration) {\n\t\tconst d = /** @type {Program['d']} */ (program.b - t);\n\t\tduration *= Math.abs(d);\n\t\treturn {\n\t\t\ta: t,\n\t\t\tb: program.b,\n\t\t\td,\n\t\t\tduration,\n\t\t\tstart: program.start,\n\t\t\tend: program.start + duration,\n\t\t\tgroup: program.group\n\t\t};\n\t}\n\n\t/**\n\t * @param {INTRO | OUTRO} b\n\t * @returns {void}\n\t */\n\tfunction go(b) {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = linear,\n\t\t\ttick = noop,\n\t\t\tcss\n\t\t} = config || null_transition;\n\n\t\t/**\n\t\t * @type {PendingProgram} */\n\t\tconst program = {\n\t\t\tstart: now() + delay,\n\t\t\tb\n\t\t};\n\n\t\tif (!b) {\n\t\t\t// @ts-ignore todo: improve typings\n\t\t\tprogram.group = outros;\n\t\t\toutros.r += 1;\n\t\t}\n\n\t\tif ('inert' in node) {\n\t\t\tif (b) {\n\t\t\t\tif (original_inert_value !== undefined) {\n\t\t\t\t\t// aborted/reversed outro — restore previous inert value\n\t\t\t\t\tnode.inert = original_inert_value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toriginal_inert_value = /** @type {HTMLElement} */ (node).inert;\n\t\t\t\tnode.inert = true;\n\t\t\t}\n\t\t}\n\n\t\tif (running_program || pending_program) {\n\t\t\tpending_program = program;\n\t\t} else {\n\t\t\t// if this is an intro, and there's a delay, we need to do\n\t\t\t// an initial tick and/or apply CSS animation immediately\n\t\t\tif (css) {\n\t\t\t\tclear_animation();\n\t\t\t\tanimation_name = create_rule(node, t, b, duration, delay, easing, css);\n\t\t\t}\n\t\t\tif (b) tick(0, 1);\n\t\t\trunning_program = init(program, duration);\n\t\t\tadd_render_callback(() => dispatch(node, b, 'start'));\n\t\t\tloop((now) => {\n\t\t\t\tif (pending_program && now > pending_program.start) {\n\t\t\t\t\trunning_program = init(pending_program, duration);\n\t\t\t\t\tpending_program = null;\n\t\t\t\t\tdispatch(node, running_program.b, 'start');\n\t\t\t\t\tif (css) {\n\t\t\t\t\t\tclear_animation();\n\t\t\t\t\t\tanimation_name = create_rule(\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tt,\n\t\t\t\t\t\t\trunning_program.b,\n\t\t\t\t\t\t\trunning_program.duration,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\teasing,\n\t\t\t\t\t\t\tconfig.css\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (running_program) {\n\t\t\t\t\tif (now >= running_program.end) {\n\t\t\t\t\t\ttick((t = running_program.b), 1 - t);\n\t\t\t\t\t\tdispatch(node, running_program.b, 'end');\n\t\t\t\t\t\tif (!pending_program) {\n\t\t\t\t\t\t\t// we're done\n\t\t\t\t\t\t\tif (running_program.b) {\n\t\t\t\t\t\t\t\t// intro — we can tidy up immediately\n\t\t\t\t\t\t\t\tclear_animation();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// outro — needs to be coordinated\n\t\t\t\t\t\t\t\tif (!--running_program.group.r) run_all(running_program.group.c);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\trunning_program = null;\n\t\t\t\t\t} else if (now >= running_program.start) {\n\t\t\t\t\t\tconst p = now - running_program.start;\n\t\t\t\t\t\tt = running_program.a + running_program.d * easing(p / running_program.duration);\n\t\t\t\t\t\ttick(t, 1 - t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn !!(running_program || pending_program);\n\t\t\t});\n\t\t}\n\t}\n\treturn {\n\t\trun(b) {\n\t\t\tif (is_function(config)) {\n\t\t\t\twait().then(() => {\n\t\t\t\t\tconst opts = { direction: b ? 'in' : 'out' };\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tconfig = config(opts);\n\t\t\t\t\tgo(b);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tgo(b);\n\t\t\t}\n\t\t},\n\t\tend() {\n\t\t\tclear_animation();\n\t\t\trunning_program = pending_program = null;\n\t\t}\n\t};\n}\n\n/** @typedef {1} INTRO */\n/** @typedef {0} OUTRO */\n/** @typedef {{ direction: 'in' | 'out' | 'both' }} TransitionOptions */\n/** @typedef {(node: Element, params: any, options: TransitionOptions) => import('../transition/public.js').TransitionConfig} TransitionFn */\n\n/**\n * @typedef {Object} Outro\n * @property {number} r\n * @property {Function[]} c\n * @property {Object} p\n */\n\n/**\n * @typedef {Object} PendingProgram\n * @property {number} start\n * @property {INTRO|OUTRO} b\n * @property {Outro} [group]\n */\n\n/**\n * @typedef {Object} Program\n * @property {number} a\n * @property {INTRO|OUTRO} b\n * @property {1|-1} d\n * @property {number} duration\n * @property {number} start\n * @property {number} end\n * @property {Outro} [group]\n */\n","import { transition_in, transition_out } from './transitions.js';\nimport { run_all } from './utils.js';\n\n// general each functions:\n\nexport function ensure_array_like(array_like_or_iterator) {\n\treturn array_like_or_iterator?.length !== undefined\n\t\t? array_like_or_iterator\n\t\t: Array.from(array_like_or_iterator);\n}\n\n// keyed each functions:\n\n/** @returns {void} */\nexport function destroy_block(block, lookup) {\n\tblock.d(1);\n\tlookup.delete(block.key);\n}\n\n/** @returns {void} */\nexport function outro_and_destroy_block(block, lookup) {\n\ttransition_out(block, 1, 1, () => {\n\t\tlookup.delete(block.key);\n\t});\n}\n\n/** @returns {void} */\nexport function fix_and_destroy_block(block, lookup) {\n\tblock.f();\n\tdestroy_block(block, lookup);\n}\n\n/** @returns {void} */\nexport function fix_and_outro_and_destroy_block(block, lookup) {\n\tblock.f();\n\toutro_and_destroy_block(block, lookup);\n}\n\n/** @returns {any[]} */\nexport function update_keyed_each(\n\told_blocks,\n\tdirty,\n\tget_key,\n\tdynamic,\n\tctx,\n\tlist,\n\tlookup,\n\tnode,\n\tdestroy,\n\tcreate_each_block,\n\tnext,\n\tget_context\n) {\n\tlet o = old_blocks.length;\n\tlet n = list.length;\n\tlet i = o;\n\tconst old_indexes = {};\n\twhile (i--) old_indexes[old_blocks[i].key] = i;\n\tconst new_blocks = [];\n\tconst new_lookup = new Map();\n\tconst deltas = new Map();\n\tconst updates = [];\n\ti = n;\n\twhile (i--) {\n\t\tconst child_ctx = get_context(ctx, list, i);\n\t\tconst key = get_key(child_ctx);\n\t\tlet block = lookup.get(key);\n\t\tif (!block) {\n\t\t\tblock = create_each_block(key, child_ctx);\n\t\t\tblock.c();\n\t\t} else if (dynamic) {\n\t\t\t// defer updates until all the DOM shuffling is done\n\t\t\tupdates.push(() => block.p(child_ctx, dirty));\n\t\t}\n\t\tnew_lookup.set(key, (new_blocks[i] = block));\n\t\tif (key in old_indexes) deltas.set(key, Math.abs(i - old_indexes[key]));\n\t}\n\tconst will_move = new Set();\n\tconst did_move = new Set();\n\t/** @returns {void} */\n\tfunction insert(block) {\n\t\ttransition_in(block, 1);\n\t\tblock.m(node, next);\n\t\tlookup.set(block.key, block);\n\t\tnext = block.first;\n\t\tn--;\n\t}\n\twhile (o && n) {\n\t\tconst new_block = new_blocks[n - 1];\n\t\tconst old_block = old_blocks[o - 1];\n\t\tconst new_key = new_block.key;\n\t\tconst old_key = old_block.key;\n\t\tif (new_block === old_block) {\n\t\t\t// do nothing\n\t\t\tnext = new_block.first;\n\t\t\to--;\n\t\t\tn--;\n\t\t} else if (!new_lookup.has(old_key)) {\n\t\t\t// remove old block\n\t\t\tdestroy(old_block, lookup);\n\t\t\to--;\n\t\t} else if (!lookup.has(new_key) || will_move.has(new_key)) {\n\t\t\tinsert(new_block);\n\t\t} else if (did_move.has(old_key)) {\n\t\t\to--;\n\t\t} else if (deltas.get(new_key) > deltas.get(old_key)) {\n\t\t\tdid_move.add(new_key);\n\t\t\tinsert(new_block);\n\t\t} else {\n\t\t\twill_move.add(old_key);\n\t\t\to--;\n\t\t}\n\t}\n\twhile (o--) {\n\t\tconst old_block = old_blocks[o];\n\t\tif (!new_lookup.has(old_block.key)) destroy(old_block, lookup);\n\t}\n\twhile (n) insert(new_blocks[n - 1]);\n\trun_all(updates);\n\treturn new_blocks;\n}\n\n/** @returns {void} */\nexport function validate_each_keys(ctx, list, get_context, get_key) {\n\tconst keys = new Map();\n\tfor (let i = 0; i < list.length; i++) {\n\t\tconst key = get_key(get_context(ctx, list, i));\n\t\tif (keys.has(key)) {\n\t\t\tlet value = '';\n\t\t\ttry {\n\t\t\t\tvalue = `with value '${String(key)}' `;\n\t\t\t} catch (e) {\n\t\t\t\t// can't stringify\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot have duplicate keys in a keyed each: Keys at index ${keys.get(\n\t\t\t\t\tkey\n\t\t\t\t)} and ${i} ${value}are duplicates`\n\t\t\t);\n\t\t}\n\t\tkeys.set(key, i);\n\t}\n}\n","import {\n\tadd_render_callback,\n\tflush,\n\tflush_render_callbacks,\n\tschedule_update,\n\tdirty_components\n} from './scheduler.js';\nimport { current_component, set_current_component } from './lifecycle.js';\nimport { blank_object, is_empty, is_function, run, run_all, noop } from './utils.js';\nimport {\n\tchildren,\n\tdetach,\n\tstart_hydrating,\n\tend_hydrating,\n\tget_custom_elements_slots,\n\tinsert,\n\telement,\n\tattr\n} from './dom.js';\nimport { transition_in } from './transitions.js';\n\n/** @returns {void} */\nexport function bind(component, name, callback) {\n\tconst index = component.$$.props[name];\n\tif (index !== undefined) {\n\t\tcomponent.$$.bound[index] = callback;\n\t\tcallback(component.$$.ctx[index]);\n\t}\n}\n\n/** @returns {void} */\nexport function create_component(block) {\n\tblock && block.c();\n}\n\n/** @returns {void} */\nexport function claim_component(block, parent_nodes) {\n\tblock && block.l(parent_nodes);\n}\n\n/** @returns {void} */\nexport function mount_component(component, target, anchor) {\n\tconst { fragment, after_update } = component.$$;\n\tfragment && fragment.m(target, anchor);\n\t// onMount happens before the initial afterUpdate\n\tadd_render_callback(() => {\n\t\tconst new_on_destroy = component.$$.on_mount.map(run).filter(is_function);\n\t\t// if the component was destroyed immediately\n\t\t// it will update the `$$.on_destroy` reference to `null`.\n\t\t// the destructured on_destroy may still reference to the old array\n\t\tif (component.$$.on_destroy) {\n\t\t\tcomponent.$$.on_destroy.push(...new_on_destroy);\n\t\t} else {\n\t\t\t// Edge case - component was destroyed immediately,\n\t\t\t// most likely as a result of a binding initialising\n\t\t\trun_all(new_on_destroy);\n\t\t}\n\t\tcomponent.$$.on_mount = [];\n\t});\n\tafter_update.forEach(add_render_callback);\n}\n\n/** @returns {void} */\nexport function destroy_component(component, detaching) {\n\tconst $$ = component.$$;\n\tif ($$.fragment !== null) {\n\t\tflush_render_callbacks($$.after_update);\n\t\trun_all($$.on_destroy);\n\t\t$$.fragment && $$.fragment.d(detaching);\n\t\t// TODO null out other refs, including component.$$ (but need to\n\t\t// preserve final state?)\n\t\t$$.on_destroy = $$.fragment = null;\n\t\t$$.ctx = [];\n\t}\n}\n\n/** @returns {void} */\nfunction make_dirty(component, i) {\n\tif (component.$$.dirty[0] === -1) {\n\t\tdirty_components.push(component);\n\t\tschedule_update();\n\t\tcomponent.$$.dirty.fill(0);\n\t}\n\tcomponent.$$.dirty[(i / 31) | 0] |= 1 << i % 31;\n}\n\n// TODO: Document the other params\n/**\n * @param {SvelteComponent} component\n * @param {import('./public.js').ComponentConstructorOptions} options\n *\n * @param {import('./utils.js')['not_equal']} not_equal Used to compare props and state values.\n * @param {(target: Element | ShadowRoot) => void} [append_styles] Function that appends styles to the DOM when the component is first initialised.\n * This will be the `add_css` function from the compiled component.\n *\n * @returns {void}\n */\nexport function init(\n\tcomponent,\n\toptions,\n\tinstance,\n\tcreate_fragment,\n\tnot_equal,\n\tprops,\n\tappend_styles = null,\n\tdirty = [-1]\n) {\n\tconst parent_component = current_component;\n\tset_current_component(component);\n\t/** @type {import('./private.js').T$$} */\n\tconst $$ = (component.$$ = {\n\t\tfragment: null,\n\t\tctx: [],\n\t\t// state\n\t\tprops,\n\t\tupdate: noop,\n\t\tnot_equal,\n\t\tbound: blank_object(),\n\t\t// lifecycle\n\t\ton_mount: [],\n\t\ton_destroy: [],\n\t\ton_disconnect: [],\n\t\tbefore_update: [],\n\t\tafter_update: [],\n\t\tcontext: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n\t\t// everything else\n\t\tcallbacks: blank_object(),\n\t\tdirty,\n\t\tskip_bound: false,\n\t\troot: options.target || parent_component.$$.root\n\t});\n\tappend_styles && append_styles($$.root);\n\tlet ready = false;\n\t$$.ctx = instance\n\t\t? instance(component, options.props || {}, (i, ret, ...rest) => {\n\t\t\t\tconst value = rest.length ? rest[0] : ret;\n\t\t\t\tif ($$.ctx && not_equal($$.ctx[i], ($$.ctx[i] = value))) {\n\t\t\t\t\tif (!$$.skip_bound && $$.bound[i]) $$.bound[i](value);\n\t\t\t\t\tif (ready) make_dirty(component, i);\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t })\n\t\t: [];\n\t$$.update();\n\tready = true;\n\trun_all($$.before_update);\n\t// `false` as a special case of no DOM component\n\t$$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n\tif (options.target) {\n\t\tif (options.hydrate) {\n\t\t\tstart_hydrating();\n\t\t\t// TODO: what is the correct type here?\n\t\t\t// @ts-expect-error\n\t\t\tconst nodes = children(options.target);\n\t\t\t$$.fragment && $$.fragment.l(nodes);\n\t\t\tnodes.forEach(detach);\n\t\t} else {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t$$.fragment && $$.fragment.c();\n\t\t}\n\t\tif (options.intro) transition_in(component.$$.fragment);\n\t\tmount_component(component, options.target, options.anchor);\n\t\tend_hydrating();\n\t\tflush();\n\t}\n\tset_current_component(parent_component);\n}\n\nexport let SvelteElement;\n\nif (typeof HTMLElement === 'function') {\n\tSvelteElement = class extends HTMLElement {\n\t\t/** The Svelte component constructor */\n\t\t$$ctor;\n\t\t/** Slots */\n\t\t$$s;\n\t\t/** The Svelte component instance */\n\t\t$$c;\n\t\t/** Whether or not the custom element is connected */\n\t\t$$cn = false;\n\t\t/** Component props data */\n\t\t$$d = {};\n\t\t/** `true` if currently in the process of reflecting component props back to attributes */\n\t\t$$r = false;\n\t\t/** @type {Record<string, CustomElementPropDefinition>} Props definition (name, reflected, type etc) */\n\t\t$$p_d = {};\n\t\t/** @type {Record<string, Function[]>} Event listeners */\n\t\t$$l = {};\n\t\t/** @type {Map<Function, Function>} Event listener unsubscribe functions */\n\t\t$$l_u = new Map();\n\n\t\tconstructor($$componentCtor, $$slots, use_shadow_dom) {\n\t\t\tsuper();\n\t\t\tthis.$$ctor = $$componentCtor;\n\t\t\tthis.$$s = $$slots;\n\t\t\tif (use_shadow_dom) {\n\t\t\t\tthis.attachShadow({ mode: 'open' });\n\t\t\t}\n\t\t}\n\n\t\taddEventListener(type, listener, options) {\n\t\t\t// We can't determine upfront if the event is a custom event or not, so we have to\n\t\t\t// listen to both. If someone uses a custom event with the same name as a regular\n\t\t\t// browser event, this fires twice - we can't avoid that.\n\t\t\tthis.$$l[type] = this.$$l[type] || [];\n\t\t\tthis.$$l[type].push(listener);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t}\n\t\t\tsuper.addEventListener(type, listener, options);\n\t\t}\n\n\t\tremoveEventListener(type, listener, options) {\n\t\t\tsuper.removeEventListener(type, listener, options);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$l_u.get(listener);\n\t\t\t\tif (unsub) {\n\t\t\t\t\tunsub();\n\t\t\t\t\tthis.$$l_u.delete(listener);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tasync connectedCallback() {\n\t\t\tthis.$$cn = true;\n\t\t\tif (!this.$$c) {\n\t\t\t\t// We wait one tick to let possible child slot elements be created/mounted\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tif (!this.$$cn || this.$$c) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tfunction create_slot(name) {\n\t\t\t\t\treturn () => {\n\t\t\t\t\t\tlet node;\n\t\t\t\t\t\tconst obj = {\n\t\t\t\t\t\t\tc: function create() {\n\t\t\t\t\t\t\t\tnode = element('slot');\n\t\t\t\t\t\t\t\tif (name !== 'default') {\n\t\t\t\t\t\t\t\t\tattr(node, 'name', name);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @param {HTMLElement} target\n\t\t\t\t\t\t\t * @param {HTMLElement} [anchor]\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tm: function mount(target, anchor) {\n\t\t\t\t\t\t\t\tinsert(target, node, anchor);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\td: function destroy(detaching) {\n\t\t\t\t\t\t\t\tif (detaching) {\n\t\t\t\t\t\t\t\t\tdetach(node);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn obj;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst $$slots = {};\n\t\t\t\tconst existing_slots = get_custom_elements_slots(this);\n\t\t\t\tfor (const name of this.$$s) {\n\t\t\t\t\tif (name in existing_slots) {\n\t\t\t\t\t\t$$slots[name] = [create_slot(name)];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const attribute of this.attributes) {\n\t\t\t\t\t// this.$$data takes precedence over this.attributes\n\t\t\t\t\tconst name = this.$$g_p(attribute.name);\n\t\t\t\t\tif (!(name in this.$$d)) {\n\t\t\t\t\t\tthis.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, 'toProp');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Port over props that were set programmatically before ce was initialized\n\t\t\t\tfor (const key in this.$$p_d) {\n\t\t\t\t\tif (!(key in this.$$d) && this[key] !== undefined) {\n\t\t\t\t\t\tthis.$$d[key] = this[key]; // don't transform, these were set through JavaScript\n\t\t\t\t\t\tdelete this[key]; // remove the property that shadows the getter/setter\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$c = new this.$$ctor({\n\t\t\t\t\ttarget: this.shadowRoot || this,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...this.$$d,\n\t\t\t\t\t\t$$slots,\n\t\t\t\t\t\t$$scope: {\n\t\t\t\t\t\t\tctx: []\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Reflect component props as attributes\n\t\t\t\tconst reflect_attributes = () => {\n\t\t\t\t\tthis.$$r = true;\n\t\t\t\t\tfor (const key in this.$$p_d) {\n\t\t\t\t\t\tthis.$$d[key] = this.$$c.$$.ctx[this.$$c.$$.props[key]];\n\t\t\t\t\t\tif (this.$$p_d[key].reflect) {\n\t\t\t\t\t\t\tconst attribute_value = get_custom_element_value(\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tthis.$$d[key],\n\t\t\t\t\t\t\t\tthis.$$p_d,\n\t\t\t\t\t\t\t\t'toAttribute'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (attribute_value == null) {\n\t\t\t\t\t\t\t\tthis.removeAttribute(this.$$p_d[key].attribute || key);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.setAttribute(this.$$p_d[key].attribute || key, attribute_value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.$$r = false;\n\t\t\t\t};\n\t\t\t\tthis.$$c.$$.after_update.push(reflect_attributes);\n\t\t\t\treflect_attributes(); // once initially because after_update is added too late for first render\n\n\t\t\t\tfor (const type in this.$$l) {\n\t\t\t\t\tfor (const listener of this.$$l[type]) {\n\t\t\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$l = {};\n\t\t\t}\n\t\t}\n\n\t\t// We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte\n\t\t// and setting attributes through setAttribute etc, this is helpful\n\t\tattributeChangedCallback(attr, _oldValue, newValue) {\n\t\t\tif (this.$$r) return;\n\t\t\tattr = this.$$g_p(attr);\n\t\t\tthis.$$d[attr] = get_custom_element_value(attr, newValue, this.$$p_d, 'toProp');\n\t\t\tthis.$$c?.$set({ [attr]: this.$$d[attr] });\n\t\t}\n\n\t\tdisconnectedCallback() {\n\t\t\tthis.$$cn = false;\n\t\t\t// In a microtask, because this could be a move within the DOM\n\t\t\tPromise.resolve().then(() => {\n\t\t\t\tif (!this.$$cn) {\n\t\t\t\t\tthis.$$c.$destroy();\n\t\t\t\t\tthis.$$c = undefined;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t$$g_p(attribute_name) {\n\t\t\treturn (\n\t\t\t\tObject.keys(this.$$p_d).find(\n\t\t\t\t\t(key) =>\n\t\t\t\t\t\tthis.$$p_d[key].attribute === attribute_name ||\n\t\t\t\t\t\t(!this.$$p_d[key].attribute && key.toLowerCase() === attribute_name)\n\t\t\t\t) || attribute_name\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * @param {string} prop\n * @param {any} value\n * @param {Record<string, CustomElementPropDefinition>} props_definition\n * @param {'toAttribute' | 'toProp'} [transform]\n */\nfunction get_custom_element_value(prop, value, props_definition, transform) {\n\tconst type = props_definition[prop]?.type;\n\tvalue = type === 'Boolean' && typeof value !== 'boolean' ? value != null : value;\n\tif (!transform || !props_definition[prop]) {\n\t\treturn value;\n\t} else if (transform === 'toAttribute') {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value == null ? null : JSON.stringify(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value ? '' : null;\n\t\t\tcase 'Number':\n\t\t\t\treturn value == null ? null : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t} else {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value && JSON.parse(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value; // conversion already handled above\n\t\t\tcase 'Number':\n\t\t\t\treturn value != null ? +value : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t}\n}\n\n/**\n * @internal\n *\n * Turn a Svelte component into a custom element.\n * @param {import('./public.js').ComponentType} Component A Svelte component constructor\n * @param {Record<string, CustomElementPropDefinition>} props_definition The props to observe\n * @param {string[]} slots The slots to create\n * @param {string[]} accessors Other accessors besides the ones for props the component has\n * @param {boolean} use_shadow_dom Whether to use shadow DOM\n * @param {(ce: new () => HTMLElement) => new () => HTMLElement} [extend]\n */\nexport function create_custom_element(\n\tComponent,\n\tprops_definition,\n\tslots,\n\taccessors,\n\tuse_shadow_dom,\n\textend\n) {\n\tlet Class = class extends SvelteElement {\n\t\tconstructor() {\n\t\t\tsuper(Component, slots, use_shadow_dom);\n\t\t\tthis.$$p_d = props_definition;\n\t\t}\n\t\tstatic get observedAttributes() {\n\t\t\treturn Object.keys(props_definition).map((key) =>\n\t\t\t\t(props_definition[key].attribute || key).toLowerCase()\n\t\t\t);\n\t\t}\n\t};\n\tObject.keys(props_definition).forEach((prop) => {\n\t\tObject.defineProperty(Class.prototype, prop, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c && prop in this.$$c ? this.$$c[prop] : this.$$d[prop];\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tvalue = get_custom_element_value(prop, value, props_definition);\n\t\t\t\tthis.$$d[prop] = value;\n\t\t\t\tthis.$$c?.$set({ [prop]: value });\n\t\t\t}\n\t\t});\n\t});\n\taccessors.forEach((accessor) => {\n\t\tObject.defineProperty(Class.prototype, accessor, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c?.[accessor];\n\t\t\t}\n\t\t});\n\t});\n\tif (extend) {\n\t\t// @ts-expect-error - assigning here is fine\n\t\tClass = extend(Class);\n\t}\n\tComponent.element = /** @type {any} */ (Class);\n\treturn Class;\n}\n\n/**\n * Base class for Svelte components. Used when dev=false.\n *\n * @template {Record<string, any>} [Props=any]\n * @template {Record<string, any>} [Events=any]\n */\nexport class SvelteComponent {\n\t/**\n\t * ### PRIVATE API\n\t *\n\t * Do not use, may change at any time\n\t *\n\t * @type {any}\n\t */\n\t$$ = undefined;\n\t/**\n\t * ### PRIVATE API\n\t *\n\t * Do not use, may change at any time\n\t *\n\t * @type {any}\n\t */\n\t$$set = undefined;\n\n\t/** @returns {void} */\n\t$destroy() {\n\t\tdestroy_component(this, 1);\n\t\tthis.$destroy = noop;\n\t}\n\n\t/**\n\t * @template {Extract<keyof Events, string>} K\n\t * @param {K} type\n\t * @param {((e: Events[K]) => void) | null | undefined} callback\n\t * @returns {() => void}\n\t */\n\t$on(type, callback) {\n\t\tif (!is_function(callback)) {\n\t\t\treturn noop;\n\t\t}\n\t\tconst callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []);\n\t\tcallbacks.push(callback);\n\t\treturn () => {\n\t\t\tconst index = callbacks.indexOf(callback);\n\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t};\n\t}\n\n\t/**\n\t * @param {Partial<Props>} props\n\t * @returns {void}\n\t */\n\t$set(props) {\n\t\tif (this.$$set && !is_empty(props)) {\n\t\t\tthis.$$.skip_bound = true;\n\t\t\tthis.$$set(props);\n\t\t\tthis.$$.skip_bound = false;\n\t\t}\n\t}\n}\n\n/**\n * @typedef {Object} CustomElementPropDefinition\n * @property {string} [attribute]\n * @property {boolean} [reflect]\n * @property {'String'|'Boolean'|'Number'|'Array'|'Object'} [type]\n */\n","import { PUBLIC_VERSION } from '../../../shared/version.js';\n\nif (typeof window !== 'undefined')\n\t// @ts-ignore\n\t(window.__svelte || (window.__svelte = { v: new Set() })).v.add(PUBLIC_VERSION);\n","// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n *\n * https://svelte.dev/docs/svelte-compiler#svelte-version\n * @type {string}\n */\nexport const VERSION = '4.2.12';\nexport const PUBLIC_VERSION = '4';\n","let uid = 0;\n\nexport default function Id() {\n return '_el_' + uid++;\n}","export class LocalStore {\n\n get(name, defaultValue) {\n\n try {\n const serializedValue = window.localStorage.getItem(name);\n\n if (serializedValue) {\n return JSON.parse(serializedValue);\n }\n } catch (error) {\n console.warn('LocalStore: Failed to retrieve %s', name, error);\n }\n\n return defaultValue;\n }\n\n set(name, value) {\n\n try {\n window.localStorage.setItem(name, JSON.stringify(value));\n } catch (error) {\n console.warn('LocalStore: Failed to set %s', name, error);\n }\n }\n\n}\n\nexport class FakeLocalStore {\n\n get(name, defaultValue) {\n return defaultValue;\n }\n\n set(name, value) { }\n\n}\n\n\nexport function createLocalStore() {\n\n if (typeof window === 'undefined' || typeof window.localStorage === 'undefined') {\n return new FakeLocalStore();\n }\n\n return new LocalStore();\n}","export class History {\n\n push(url) {\n window.history.pushState(null, null, url);\n }\n\n onPop(fn) {\n window.addEventListener('popstate', fn);\n\n return function() {\n window.removeEventListener('popstate', fn);\n };\n }\n\n}\n\nexport class FakeHistory {\n\n push(url) {}\n\n onPop(fn) {\n return function() {};\n }\n\n}\n\nexport function createHistory() {\n\n if (typeof window === 'undefined' || typeof window.history === 'undefined') {\n return new FakeHistory();\n }\n\n return new History();\n}","export { default as Id } from './Id';\n\nexport { default as autoresize } from './autoresize';\n\nexport {\n createLocalStore\n} from './local-store';\n\nexport {\n createHistory\n} from './history';\n\nexport function delay(fn, timeout) {\n setTimeout(fn, timeout);\n}\n\nexport function periodic(fn, interval) {\n\n let canceled = false;\n\n let timeout = interval;\n\n let i;\n\n function stop() {\n canceled = true;\n\n clearTimeout(i);\n }\n\n function run() {\n\n Promise.resolve({}).then(() => fn()).then(\n success => true,\n err => false\n ).then(success => {\n timeout = success === false ? timeout * 1.5 : interval;\n\n if (!canceled) {\n i = setTimeout(run, timeout);\n }\n });\n }\n\n run();\n\n return stop;\n}\n\nexport {\n isClosingLink,\n isClosedByLink\n} from './links';\n\nexport function isOpen(issue) {\n return issue.state === 'open';\n}\n\nexport function isMerged(issue) {\n return issue.merged;\n}\n\nexport function isOpenOrMerged(issue) {\n return isOpen(issue) || isMerged(issue);\n}\n\nexport function isPull(issue) {\n return issue.pull_request;\n}\n\nexport {\n debounce,\n throttle\n} from 'min-dash';\n\n\nexport function noDuplicates(keyFn) {\n\n const found = {};\n\n return function filter(element) {\n const key = keyFn(element);\n\n if (key in found) {\n return false;\n }\n\n found[key] = true;\n\n return true;\n };\n}","<script>\n export let className = '';\n\n export let hints;\n export let selectedHint;\n\n export let onHover;\n export let onBlur;\n export let onSelect;\n\n function handleMousedown(event, hint) {\n\n if (event.button === 0) {\n event.preventDefault();\n\n return onSelect(hint);\n }\n }\n\n function scrollIntoView(node, [ hint, selectedHint ]) {\n\n let lastSelectedHint = null;\n\n const hook = {\n update([ hint, selectedHint ]) {\n if (hint === selectedHint && hint !== lastSelectedHint) {\n lastSelectedHint = hint;\n\n node.scrollIntoView({ block: 'nearest' });\n }\n }\n };\n\n hook.update([ hint, selectedHint ]);\n\n return hook;\n }\n</script>\n\n<style lang=\"scss\">\n\n @import \"variables\";\n\n .hint-list {\n list-style: none;\n\n max-height: 200px;\n overflow-y: auto;\n padding: 0;\n }\n\n .hint-list:not(:first-child) {\n margin-top: 0;\n }\n\n .hint-list li {\n margin: 0;\n }\n\n .hint-list li a {\n padding: .25rem .35rem;\n width: 100%;\n display: block;\n border-radius: 5px;\n\n color: inherit;\n text-decoration: none;\n\n &:hover,\n &.active {\n background: scale-color($primary, $alpha: -90%);\n }\n\n &.text {\n color: $gray-600;\n }\n }\n\n .matched {\n background: scale-color($primary, $alpha: -80%);\n color: darken($primary, 10%);\n }\n</style>\n\n<ul class={ [ className, 'hint-list', 'scroll-container-v' ].join(' ') }>\n {#each hints as hint(hint.name) }\n <li\n use:scrollIntoView={ [ hint, selectedHint ] }\n >\n <a\n class:active={ selectedHint === hint }\n on:mouseenter={ () => onHover(hint) }\n on:mouseleave={ () => onBlur(hint) }\n on:mousedown={ (event) => handleMousedown(event, hint) }\n on:click|preventDefault={ (event) => handleMousedown(event, hint) }\n href\n >{#each hint.parts as part}<span class:matched={ part.matched }>{ part.text }</span>{/each}</a>\n </li>\n {/each}\n</ul>","function hasModifier(event) {\n const {\n ctrlKey,\n shiftKey,\n altKey,\n metaKey\n } = event;\n\n return ctrlKey || altKey || shiftKey || metaKey;\n}\n\nfunction isGlobal(event) {\n return event.target === document.body;\n}\n\nexport function isFindShortcut(event) {\n\n if (event.ctrlKey && !event.altKey && event.key.toLowerCase() === 'k') {\n return true;\n }\n\n if (!isGlobal(event) || hasModifier(event)) {\n return false;\n }\n\n return event.key === 'f';\n}\n\nexport function isNewIssueShortcut(event) {\n\n if (!isGlobal(event) || hasModifier(event)) {\n return false;\n }\n\n return event.key === 'n';\n}\n\nexport function isLoginShortcut(event) {\n\n if (!isGlobal(event) || hasModifier(event)) {\n return false;\n }\n\n return event.key === 'l';\n}\n\nexport function isApplyFilterClick(event) {\n\n const {\n shiftKey,\n altKey\n } = event;\n\n return shiftKey || altKey;\n}\n\nexport function isAddFilterClick(event) {\n\n const {\n shiftKey\n } = event;\n\n return shiftKey;\n}","<style lang=\"scss\">\n\n @import \"variables\";\n\n @import \"./HelpDropdown\";\n\n .board-filter {\n &.expanded {\n width: 500px;\n max-width: 100%;\n }\n\n > input {\n width: 100%;\n }\n\n width: 300px;\n }\n\n .icon {\n color: $gray-300;\n }\n</style>\n\n\n<script>\n import { Id } from './util';\n\n import {\n HintList\n } from './components';\n\n import {\n isFindShortcut\n } from './shortcuts';\n\n import {\n debounce\n } from './util';\n\n export let className = '';\n export let value = '';\n export let placeholder;\n\n export let completionOptions = {};\n\n export let onChange;\n\n const userPresets = [\n [ '@me', '@me' ]\n ].map(([ name, value ]) => {\n return { name, value };\n });\n\n const temporalPresets = [\n [ 'today', '@today' ],\n [ 'last week', '@last_week' ],\n [ 'last month', '@last_month' ]\n ].map(([ name, value ]) => {\n return { name, value };\n });\n\n const staticValues = {\n is: [\n 'assigned',\n 'unassigned',\n 'epic',\n 'milestoned',\n 'open',\n 'closed',\n 'issue',\n 'pull'\n ].map(name => {\n return { name, value: `${name} ` };\n }),\n created: temporalPresets,\n updated: temporalPresets,\n assignee: userPresets,\n author: userPresets,\n reviewer: userPresets,\n commented: userPresets,\n involves: userPresets\n };\n\n $: dynamicValues = Object.entries(completionOptions).reduce((values, entry) => {\n\n const [ key, value ] = entry;\n\n values[key] = value.slice().sort().map(name => {\n\n const separator = !name.startsWith('\"') ? '\"' : '';\n\n return { name, value: `${separator}${name}${separator} ` };\n });\n\n return values;\n }, {});\n\n const qualifierCategories = [\n {\n name: 'Operators',\n options: [\n 'label',\n 'assignee',\n 'author',\n 'repo',\n 'reviewer',\n 'commented',\n 'milestone',\n 'created',\n 'updated',\n 'involves',\n 'is'\n ].map(name => {\n return {\n name,\n value: `${name}:`\n };\n })\n }\n ];\n\n let keyboardSelectedHint;\n let mouseSelectedHint;\n\n $: categoryValues = Object.keys({\n ...staticValues,\n ...dynamicValues\n }).reduce((values, key) => {\n values[key] = [].concat(staticValues[key] || [], dynamicValues[key] || []);\n\n return values;\n }, {});\n\n $: selectedHint = mouseSelectedHint || keyboardSelectedHint;\n\n let input;\n\n let focussed = false;\n let match;\n let allHints;\n\n let position = 0;\n\n $: expanded = focussed || value;\n $: {\n console.time('BoardFilter#computeMatch');\n\n let opts = computeMatch(value, position, categoryValues);\n\n console.timeEnd('BoardFilter#computeMatch');\n\n match = opts.match;\n allHints = opts.allHints;\n\n keyboardSelectedHint = (\n allHints && keyboardSelectedHint && allHints.find(\n hint => hint.name === keyboardSelectedHint.name\n ) || opts.keyboardSelectedHint\n );\n\n mouseSelectedHint = null;\n }\n\n const searchId = Id();\n\n function computeMatch(value, searchEnd, categoryValues) {\n\n const beforeCursor = value.substring(0, searchEnd);\n\n const searchStart = beforeCursor.lastIndexOf(' ') + 1;\n\n value = value.substring(searchStart, searchEnd).toLowerCase();\n\n const match = /^([-!]?)(?:([\\w]+)(?:(:)(?:\"([\\w-]+)\"?|([\\w-]+))?)?)$/.exec(value);\n\n if (!match) {\n return {};\n }\n\n let [ _, negator, qualifier, sep, qualifierText, qualifierTextEscaped ] = match;\n\n const search = sep ? (qualifierText || qualifierTextEscaped || '') : qualifier;\n\n const allHints = [];\n\n const categories = sep ? [\n {\n name: 'Values',\n options: categoryValues[qualifier] || []\n }\n ] : qualifierCategories;\n\n const matchedCategories = categories.reduce((matchedCategories, category) => {\n\n const matchedValues = category.options.reduce((matchedValues, categoryOption) => {\n\n const {\n name,\n value\n } = categoryOption;\n\n if (name.toLowerCase().includes(search)) {\n\n const idx = name.indexOf(search);\n\n const hint = {\n name: name,\n parts: [\n {\n text: name.substring(0, idx)\n },\n {\n text: name.substring(idx, idx + search.length),\n matched: true\n },\n {\n text: name.substring(idx + search.length)\n }\n ],\n apply: (currentValue) => {\n\n const before = currentValue.substring(0, searchStart);\n const fix = (negator || '') + (sep ? qualifier + sep : '') + value;\n const after = currentValue.substring(searchEnd);\n\n return {\n val: `${before}${fix}${after}`,\n idx: before.length + fix.length\n };\n }\n };\n\n matchedValues.push(hint);\n allHints.push(hint);\n }\n\n return matchedValues;\n }, []);\n\n\n if (matchedValues.length) {\n matchedCategories.push({\n name: category.name,\n values: matchedValues\n });\n }\n\n return matchedCategories;\n }, []);\n\n if (matchedCategories.length) {\n\n return {\n match: { categories: matchedCategories },\n keyboardSelectedHint: matchedCategories[0].values[0],\n allHints\n };\n }\n\n return {\n match: null,\n keyboardSelectedHint: null,\n allHints: []\n };\n }\n\n function applyHint(hint) {\n\n const {\n val,\n idx\n } = hint.apply(value);\n\n input.value = value = val;\n input.selectionEnd = input.selectionStart = position = idx;\n\n triggerChanged(value);\n }\n\n function handleInput(event) {\n\n const target = event.target;\n\n value = target.value;\n position = target.selectionStart;\n\n triggerChanged(value);\n }\n\n function nextHint(currentHint, direction) {\n\n const hints = (allHints || []);\n\n const currentIndex = hints.findIndex(hint => hint.name === currentHint.name);\n\n let nextIndex = currentIndex + direction;\n\n if (nextIndex < 0) {\n nextIndex = hints.length - 1;\n }\n\n if (nextIndex === hints.length) {\n nextIndex = 0;\n }\n\n return hints[nextIndex];\n }\n\n function handleInputKey(event) {\n\n const key = event.key;\n\n if (key === 'Enter') {\n if (keyboardSelectedHint) {\n applyHint(keyboardSelectedHint);\n }\n\n event.preventDefault();\n }\n\n if (key === 'ArrowUp') {\n keyboardSelectedHint = nextHint(keyboardSelectedHint, -1);\n event.preventDefault();\n }\n\n if (key === 'ArrowDown') {\n keyboardSelectedHint = nextHint(keyboardSelectedHint, 1);\n event.preventDefault();\n }\n\n if (key === 'Escape' && !value) {\n input.blur();\n\n event.preventDefault();\n }\n }\n\n const triggerChanged = debounce((value) => {\n onChange && onChange(value);\n }, 500);\n\n function isInputTarget(event) {\n const {\n target\n } = event;\n\n return target === input;\n }\n\n function handleGlobalKey(event) {\n\n if (isFindShortcut(event)) {\n event.preventDefault();\n\n if (!isInputTarget(event)) {\n input.focus();\n }\n }\n }\n</script>\n\n<svelte:window on:keydown={ handleGlobalKey } />\n\n<div class=\"board-filter { className } dropdown-parent { expanded && 'expanded' }\">\n <input\n class=\"form-control\"\n type=\"search\"\n placeholder={ placeholder }\n id={searchId}\n autocomplete=\"off\"\n spellcheck=\"false\"\n title={ placeholder + ' (ctrl + k, f)'}\n bind:this={ input }\n bind:value={ value }\n on:input={ handleInput }\n on:keydown={ handleInputKey }\n on:focus={ () => focussed = true }\n on:blur={ () => focussed = false }\n />\n\n {#if focussed && value && match}\n <div class=\"help-dropdown\">\n {#each match.categories as category, idx}\n {#if idx > 0}\n <hr />\n {/if}\n\n <h3 class=\"category\">{ category.name }</h3>\n\n <HintList\n hints={ category.values }\n selectedHint={ selectedHint }\n onHover={ hint => mouseSelectedHint = hint }\n onBlur={ () => mouseSelectedHint = null }\n onSelect={ applyHint }\n />\n\n {/each}\n </div>\n {:else if focussed && !value}\n <div class=\"help-dropdown\">\n <p class=\"note\">\n Filter cards by title and description.\n </p>\n\n <p class=\"note\">\n Use additional operator such as <code>created</code>, <code>updated</code>, <code>milestone</code>, <code>repo</code>, <code>assignee</code>, <code>label</code> and <code>is</code> to refine your search.\n </p>\n </div>\n {/if}\n</div>","<script>\n export let rounded = false;\n</script>\n\n<style lang=\"scss\">\n .avatar {\n position: relative;\n display: inline-block;\n overflow: hidden;\n color: #fff;\n white-space: nowrap;\n text-align: center;\n vertical-align: middle;\n background: #ccc;\n width: 32px;\n height: 32px;\n line-height: 32px;\n }\n\n .avatar-shadow {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n\n box-shadow: inset 0 0 2px 0 rgba(0,0,0,.1);\n }\n\n .avatar-rounded {\n border-radius: 50%;\n\n .avatar-shadow {\n border-radius: 50%;\n }\n }\n</style>\n\n<span class=\"avatar\" class:avatar-rounded={ rounded }>\n <slot></slot>\n\n <div class=\"avatar-shadow\"></div>\n</span>","<style lang=\"scss\">\n .loader {\n\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n z-index: 200;\n pointer-events: none;\n\n > .content {\n opacity: 0.3;\n transition: opacity 0.5s;\n }\n\n &.shown > .content {\n opacity: 1;\n\n animation: pulsate 1s infinite;\n animation-timing-function: ease-in-out;\n }\n\n &:not(.shown) > .content {\n opacity: 0;\n }\n }\n\n\n @keyframes pulsate {\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n\n 50% {\n transform: scale(0.9);\n opacity: 0.8;\n }\n\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n }\n</style>\n\n<script>\n export let className = '';\n export let shown = true;\n</script>\n\n<div class=\"loader { className }\" class:shown={ shown }>\n <div class=\"content\">\n <slot></slot>\n </div>\n</div>","<style lang=\"scss\">\n .powered-by {\n position: absolute;\n bottom: 10px;\n right: 10px;\n padding: 7px;\n border-radius: 4px;\n\n opacity: .5;\n transition: opacity .1s, background .1s;\n\n color: #333;\n\n z-index: 10;\n\n align-items: center;\n\n display: flex;\n\n .logo {\n display: inline-flex;\n }\n\n &:not(:hover, :focus-within) .logo {\n color: #999;\n }\n\n &:hover,\n &:focus-within {\n opacity: 1;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);\n background: white;\n\n .help {\n display: block;\n }\n }\n\n .help {\n font-size: .9em;\n display: none;\n }\n\n .logo {\n margin-left: .5em;\n }\n\n .help-item {\n margin-left: .5em;\n }\n\n .help-item + .help-item {\n margin-left: 1em;\n }\n\n .help-item {\n display: inline-block;\n }\n }\n</style>\n\n<div class=\"powered-by\">\n <span class=\"help\">\n\n <a class=\"help-item\" href=\"https://wuffle.dev/docs\"\n target=\"_blank\" rel=\"noopener\">\n Documentation\n </a>\n\n <a class=\"help-item\" href=\"https://wuffle.dev/docs/shortcuts-navigation\"\n target=\"_blank\" rel=\"noopener\">\n Keyboard shortcuts\n </a>\n\n <span class=\"help-item\">\n Powered by\n </span>\n </span>\n\n <a class=\"logo\" href=\"https://wuffle.dev\"\n target=\"_blank\" rel=\"noopener\" title=\"About Wuffle\">\n\n <!-- ./logo-gray.svg with dynamic fill color -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 80 80\" width=\"20\" height=\"20\"><path d=\"M12 0h56c7 0 12 5 12 12v56c0 7-5 12-12 12H12C5 80 0 75 0 68V12C0 5 5 0 12 0z\" fill=\"currentColor\"/><path d=\"M15 10h21c3 0 5 2 5 5v6c0 3-2 5-5 5H15c-2 0-4-2-4-5v-6c0-3 2-5 4-5zm0 20h21c3 0 5 2 5 5v6c0 2-2 4-5 4H15c-2 0-4-1-4-4v-6c0-3 2-5 4-5zm27 22h21c2 0 4 2 4 5v6c0 2-2 4-4 4H42c-2 0-4-2-4-4v-6c0-3 2-5 4-5z\" fill=\"#fff\"/></svg>\n </a>\n</div>","<style lang=\"scss\">\n .notifications {\n position: fixed;\n z-index: 1010;\n top: 24px;\n right: 24px;\n }\n</style>\n\n<div class=\"notifications\">\n <slot></slot>\n</div>","/*\nAdapted from https://github.com/mattdesl\nDistributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n*/\nexport { identity as linear } from '../internal/index.js';\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function backInOut(t) {\n\tconst s = 1.70158 * 1.525;\n\tif ((t *= 2) < 1) return 0.5 * (t * t * ((s + 1) * t - s));\n\treturn 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function backIn(t) {\n\tconst s = 1.70158;\n\treturn t * t * ((s + 1) * t - s);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function backOut(t) {\n\tconst s = 1.70158;\n\treturn --t * t * ((s + 1) * t + s) + 1;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function bounceOut(t) {\n\tconst a = 4.0 / 11.0;\n\tconst b = 8.0 / 11.0;\n\tconst c = 9.0 / 10.0;\n\tconst ca = 4356.0 / 361.0;\n\tconst cb = 35442.0 / 1805.0;\n\tconst cc = 16061.0 / 1805.0;\n\tconst t2 = t * t;\n\treturn t < a\n\t\t? 7.5625 * t2\n\t\t: t < b\n\t\t? 9.075 * t2 - 9.9 * t + 3.4\n\t\t: t < c\n\t\t? ca * t2 - cb * t + cc\n\t\t: 10.8 * t * t - 20.52 * t + 10.72;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function bounceInOut(t) {\n\treturn t < 0.5 ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0)) : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function bounceIn(t) {\n\treturn 1.0 - bounceOut(1.0 - t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function circInOut(t) {\n\tif ((t *= 2) < 1) return -0.5 * (Math.sqrt(1 - t * t) - 1);\n\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function circIn(t) {\n\treturn 1.0 - Math.sqrt(1.0 - t * t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function circOut(t) {\n\treturn Math.sqrt(1 - --t * t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function cubicInOut(t) {\n\treturn t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function cubicIn(t) {\n\treturn t * t * t;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function cubicOut(t) {\n\tconst f = t - 1.0;\n\treturn f * f * f + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function elasticInOut(t) {\n\treturn t < 0.5\n\t\t? 0.5 * Math.sin(((+13.0 * Math.PI) / 2) * 2.0 * t) * Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n\t\t: 0.5 *\n\t\t\t\tMath.sin(((-13.0 * Math.PI) / 2) * (2.0 * t - 1.0 + 1.0)) *\n\t\t\t\tMath.pow(2.0, -10.0 * (2.0 * t - 1.0)) +\n\t\t\t\t1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function elasticIn(t) {\n\treturn Math.sin((13.0 * t * Math.PI) / 2) * Math.pow(2.0, 10.0 * (t - 1.0));\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function elasticOut(t) {\n\treturn Math.sin((-13.0 * (t + 1.0) * Math.PI) / 2) * Math.pow(2.0, -10.0 * t) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function expoInOut(t) {\n\treturn t === 0.0 || t === 1.0\n\t\t? t\n\t\t: t < 0.5\n\t\t? +0.5 * Math.pow(2.0, 20.0 * t - 10.0)\n\t\t: -0.5 * Math.pow(2.0, 10.0 - t * 20.0) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function expoIn(t) {\n\treturn t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0));\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function expoOut(t) {\n\treturn t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quadInOut(t) {\n\tt /= 0.5;\n\tif (t < 1) return 0.5 * t * t;\n\tt--;\n\treturn -0.5 * (t * (t - 2) - 1);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quadIn(t) {\n\treturn t * t;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quadOut(t) {\n\treturn -t * (t - 2.0);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quartInOut(t) {\n\treturn t < 0.5 ? +8.0 * Math.pow(t, 4.0) : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quartIn(t) {\n\treturn Math.pow(t, 4.0);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quartOut(t) {\n\treturn Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quintInOut(t) {\n\tif ((t *= 2) < 1) return 0.5 * t * t * t * t * t;\n\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quintIn(t) {\n\treturn t * t * t * t * t;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function quintOut(t) {\n\treturn --t * t * t * t * t + 1;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function sineInOut(t) {\n\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function sineIn(t) {\n\tconst v = Math.cos(t * Math.PI * 0.5);\n\tif (Math.abs(v) < 1e-14) return 1;\n\telse return 1 - v;\n}\n\n/**\n * https://svelte.dev/docs/svelte-easing\n * @param {number} t\n * @returns {number}\n */\nexport function sineOut(t) {\n\treturn Math.sin((t * Math.PI) / 2);\n}\n","import { cubicOut, cubicInOut, linear } from '../easing/index.js';\nimport { assign, split_css_unit, is_function } from '../internal/index.js';\n\n/**\n * Animates a `blur` filter alongside an element's opacity.\n *\n * https://svelte.dev/docs/svelte-transition#blur\n * @param {Element} node\n * @param {import('./public').BlurParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function blur(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubicInOut, amount = 5, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst f = style.filter === 'none' ? '' : style.filter;\n\tconst od = target_opacity * (1 - opacity);\n\tconst [value, unit] = split_css_unit(amount);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_t, u) => `opacity: ${target_opacity - od * u}; filter: ${f} blur(${u * value}${unit});`\n\t};\n}\n\n/**\n * Animates the opacity of an element from 0 to the current opacity for `in` transitions and from the current opacity to 0 for `out` transitions.\n *\n * https://svelte.dev/docs/svelte-transition#fade\n * @param {Element} node\n * @param {import('./public').FadeParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function fade(node, { delay = 0, duration = 400, easing = linear } = {}) {\n\tconst o = +getComputedStyle(node).opacity;\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t) => `opacity: ${t * o}`\n\t};\n}\n\n/**\n * Animates the x and y positions and the opacity of an element. `in` transitions animate from the provided values, passed as parameters to the element's default values. `out` transitions animate from the element's default values to the provided values.\n *\n * https://svelte.dev/docs/svelte-transition#fly\n * @param {Element} node\n * @param {import('./public').FlyParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function fly(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubicOut, x = 0, y = 0, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst transform = style.transform === 'none' ? '' : style.transform;\n\tconst od = target_opacity * (1 - opacity);\n\tconst [xValue, xUnit] = split_css_unit(x);\n\tconst [yValue, yUnit] = split_css_unit(y);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t, u) => `\n\t\t\ttransform: ${transform} translate(${(1 - t) * xValue}${xUnit}, ${(1 - t) * yValue}${yUnit});\n\t\t\topacity: ${target_opacity - od * u}`\n\t};\n}\n\n/**\n * Slides an element in and out.\n *\n * https://svelte.dev/docs/svelte-transition#slide\n * @param {Element} node\n * @param {import('./public').SlideParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function slide(node, { delay = 0, duration = 400, easing = cubicOut, axis = 'y' } = {}) {\n\tconst style = getComputedStyle(node);\n\tconst opacity = +style.opacity;\n\tconst primary_property = axis === 'y' ? 'height' : 'width';\n\tconst primary_property_value = parseFloat(style[primary_property]);\n\tconst secondary_properties = axis === 'y' ? ['top', 'bottom'] : ['left', 'right'];\n\tconst capitalized_secondary_properties = secondary_properties.map(\n\t\t(e) => `${e[0].toUpperCase()}${e.slice(1)}`\n\t);\n\tconst padding_start_value = parseFloat(style[`padding${capitalized_secondary_properties[0]}`]);\n\tconst padding_end_value = parseFloat(style[`padding${capitalized_secondary_properties[1]}`]);\n\tconst margin_start_value = parseFloat(style[`margin${capitalized_secondary_properties[0]}`]);\n\tconst margin_end_value = parseFloat(style[`margin${capitalized_secondary_properties[1]}`]);\n\tconst border_width_start_value = parseFloat(\n\t\tstyle[`border${capitalized_secondary_properties[0]}Width`]\n\t);\n\tconst border_width_end_value = parseFloat(\n\t\tstyle[`border${capitalized_secondary_properties[1]}Width`]\n\t);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t) =>\n\t\t\t'overflow: hidden;' +\n\t\t\t`opacity: ${Math.min(t * 20, 1) * opacity};` +\n\t\t\t`${primary_property}: ${t * primary_property_value}px;` +\n\t\t\t`padding-${secondary_properties[0]}: ${t * padding_start_value}px;` +\n\t\t\t`padding-${secondary_properties[1]}: ${t * padding_end_value}px;` +\n\t\t\t`margin-${secondary_properties[0]}: ${t * margin_start_value}px;` +\n\t\t\t`margin-${secondary_properties[1]}: ${t * margin_end_value}px;` +\n\t\t\t`border-${secondary_properties[0]}-width: ${t * border_width_start_value}px;` +\n\t\t\t`border-${secondary_properties[1]}-width: ${t * border_width_end_value}px;`\n\t};\n}\n\n/**\n * Animates the opacity and scale of an element. `in` transitions animate from an element's current (default) values to the provided values, passed as parameters. `out` transitions animate from the provided values to an element's default values.\n *\n * https://svelte.dev/docs/svelte-transition#scale\n * @param {Element} node\n * @param {import('./public').ScaleParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function scale(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubicOut, start = 0, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst transform = style.transform === 'none' ? '' : style.transform;\n\tconst sd = 1 - start;\n\tconst od = target_opacity * (1 - opacity);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_t, u) => `\n\t\t\ttransform: ${transform} scale(${1 - sd * u});\n\t\t\topacity: ${target_opacity - od * u}\n\t\t`\n\t};\n}\n\n/**\n * Animates the stroke of an SVG element, like a snake in a tube. `in` transitions begin with the path invisible and draw the path to the screen over time. `out` transitions start in a visible state and gradually erase the path. `draw` only works with elements that have a `getTotalLength` method, like `<path>` and `<polyline>`.\n *\n * https://svelte.dev/docs/svelte-transition#draw\n * @param {SVGElement & { getTotalLength(): number }} node\n * @param {import('./public').DrawParams} [params]\n * @returns {import('./public').TransitionConfig}\n */\nexport function draw(node, { delay = 0, speed, duration, easing = cubicInOut } = {}) {\n\tlet len = node.getTotalLength();\n\tconst style = getComputedStyle(node);\n\tif (style.strokeLinecap !== 'butt') {\n\t\tlen += parseInt(style.strokeWidth);\n\t}\n\tif (duration === undefined) {\n\t\tif (speed === undefined) {\n\t\t\tduration = 800;\n\t\t} else {\n\t\t\tduration = len / speed;\n\t\t}\n\t} else if (typeof duration === 'function') {\n\t\tduration = duration(len);\n\t}\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_, u) => `\n\t\t\tstroke-dasharray: ${len};\n\t\t\tstroke-dashoffset: ${u * len};\n\t\t`\n\t};\n}\n\n/**\n * The `crossfade` function creates a pair of [transitions](https://svelte.dev/docs#template-syntax-element-directives-transition-fn) called `send` and `receive`. When an element is 'sent', it looks for a corresponding element being 'received', and generates a transition that transforms the element to its counterpart's position and fades it out. When an element is 'received', the reverse happens. If there is no counterpart, the `fallback` transition is used.\n *\n * https://svelte.dev/docs/svelte-transition#crossfade\n * @param {import('./public').CrossfadeParams & {\n * \tfallback?: (node: Element, params: import('./public').CrossfadeParams, intro: boolean) => import('./public').TransitionConfig;\n * }} params\n * @returns {[(node: any, params: import('./public').CrossfadeParams & { key: any; }) => () => import('./public').TransitionConfig, (node: any, params: import('./public').CrossfadeParams & { key: any; }) => () => import('./public').TransitionConfig]}\n */\nexport function crossfade({ fallback, ...defaults }) {\n\t/** @type {Map<any, Element>} */\n\tconst to_receive = new Map();\n\t/** @type {Map<any, Element>} */\n\tconst to_send = new Map();\n\t/**\n\t * @param {Element} from_node\n\t * @param {Element} node\n\t * @param {import('./public').CrossfadeParams} params\n\t * @returns {import('./public').TransitionConfig}\n\t */\n\tfunction crossfade(from_node, node, params) {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = (d) => Math.sqrt(d) * 30,\n\t\t\teasing = cubicOut\n\t\t} = assign(assign({}, defaults), params);\n\t\tconst from = from_node.getBoundingClientRect();\n\t\tconst to = node.getBoundingClientRect();\n\t\tconst dx = from.left - to.left;\n\t\tconst dy = from.top - to.top;\n\t\tconst dw = from.width / to.width;\n\t\tconst dh = from.height / to.height;\n\t\tconst d = Math.sqrt(dx * dx + dy * dy);\n\t\tconst style = getComputedStyle(node);\n\t\tconst transform = style.transform === 'none' ? '' : style.transform;\n\t\tconst opacity = +style.opacity;\n\t\treturn {\n\t\t\tdelay,\n\t\t\tduration: is_function(duration) ? duration(d) : duration,\n\t\t\teasing,\n\t\t\tcss: (t, u) => `\n\t\t\t\topacity: ${t * opacity};\n\t\t\t\ttransform-origin: top left;\n\t\t\t\ttransform: ${transform} translate(${u * dx}px,${u * dy}px) scale(${t + (1 - t) * dw}, ${\n\t\t\t\tt + (1 - t) * dh\n\t\t\t});\n\t\t\t`\n\t\t};\n\t}\n\n\t/**\n\t * @param {Map<any, Element>} items\n\t * @param {Map<any, Element>} counterparts\n\t * @param {boolean} intro\n\t * @returns {(node: any, params: import('./public').CrossfadeParams & { key: any; }) => () => import('./public').TransitionConfig}\n\t */\n\tfunction transition(items, counterparts, intro) {\n\t\treturn (node, params) => {\n\t\t\titems.set(params.key, node);\n\t\t\treturn () => {\n\t\t\t\tif (counterparts.has(params.key)) {\n\t\t\t\t\tconst other_node = counterparts.get(params.key);\n\t\t\t\t\tcounterparts.delete(params.key);\n\t\t\t\t\treturn crossfade(other_node, node, params);\n\t\t\t\t}\n\t\t\t\t// if the node is disappearing altogether\n\t\t\t\t// (i.e. wasn't claimed by the other list)\n\t\t\t\t// then we need to supply an outro\n\t\t\t\titems.delete(params.key);\n\t\t\t\treturn fallback && fallback(node, params, intro);\n\t\t\t};\n\t\t};\n\t}\n\treturn [transition(to_send, to_receive, false), transition(to_receive, to_send, true)];\n}\n","<script>\n import { fly } from 'svelte/transition';\n\n export let message;\n\n export let type = 'info';\n</script>\n\n<style lang=\"scss\">\n\n @import \"variables\";\n\n .notification {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: $gray-600;\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5;\n list-style: none;\n width: 384px;\n max-width: calc(100vw - 32px);\n padding: 16px 24px;\n overflow: hidden;\n line-height: 1.5;\n background: #fff;\n border-radius: 3px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n border-left: solid 4px $info;\n\n &.error {\n border-left-color: $danger;\n }\n\n &.warning {\n border-left-color: $warning;\n }\n }\n\n .notification + .notification {\n margin-top: 16px;\n }\n\n .heading {\n color: $gray-900;\n font-weight: normal;\n font-size: 1.2em;\n margin-bottom: 5px;\n }\n</style>\n\n<div\n class=\"notification\"\n class:error={ type === 'error' }\n class:warning={ type === 'warning' }\n transition:fly\n>\n <div class=\"heading\">{ message }</div>\n <div class=\"detail\">\n <slot></slot>\n </div>\n</div>","<script>\n function isLight(color) {\n /* eslint no-bitwise: \"off\" */\n\n color = +('0x' + color.slice(1).replace(color.length < 5 && /./g, '$&$&'));\n\n const r = color >> 16,\n g = (color >> 8) & 255,\n b = color & 255;\n\n const hsp = Math.sqrt(\n 0.299 * (r * r) +\n 0.587 * (g * g) +\n 0.114 * (b * b)\n );\n\n return hsp > 145;\n }\n\n export let title = '';\n export let name;\n export let color = '';\n export let className = '';\n\n export let onClick;\n export let href = null;\n\n $: inverted = color && isLight(color);\n</script>\n\n{#if href}\n <a\n href={ href }\n target=\"_blank\"\n title={ title || name }\n rel=\"noopener noreferrer\"\n class:inverted={ inverted }\n class=\"tag { className }\"\n style=\"background-color: { color }\"\n on:click={ onClick }\n >{ name }</a>\n{:else}\n <button\n class:inverted={ inverted }\n class=\"tag { className }\"\n class:clickable={ onClick }\n style=\"background-color: { color }\"\n on:click={ onClick }\n title={ title || name }\n >{ name }</button>\n{/if}\n\n<style lang=\"scss\">\n .tag {\n list-style: none;\n display: inline-block;\n height: auto;\n\n margin: 0 4px 4px 0;\n padding: 2px 7px;\n\n font-size: 12px;\n font-weight: 400;\n\n white-space: nowrap;\n\n overflow: hidden;\n text-overflow: ellipsis;\n\n color: white;\n background: #fafafa;\n border-radius: 6px;\n border: none;\n\n text-decoration: none;\n\n &:not(a) {\n cursor: default;\n }\n\n &.inverted {\n color: #000;\n }\n }\n\n :not(a.tag, .tag.clickable) {\n cursor: default;\n }\n</style>","<script>\n export let item;\n\n $: merged = item.merged;\n $: _open = item.state === 'open';\n $: closed = item.state === 'closed';\n $: draft = item.draft || false;\n</script>\n\n<style lang=\"scss\">\n\n .pull-request-icon {\n margin-right: 3px;\n\n &.open {\n color: #1a7f37;\n }\n\n &.closed {\n color: #cf222e;\n }\n\n &.merged {\n color: #8250df;\n }\n\n &.draft {\n color: #57606a;\n }\n }\n</style>\n\n{#if closed}\n\n {#if merged}\n <svg class=\"pull-request-icon merged\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M5 3.254V3.25v.005a.75.75 0 110-.005v.004zm.45 1.9a2.25 2.25 0 10-1.95.218v5.256a2.25 2.25 0 101.5 0V7.123A5.735 5.735 0 009.25 9h1.378a2.251 2.251 0 100-1.5H9.25a4.25 4.25 0 01-3.8-2.346zM12.75 9a.75.75 0 100-1.5.75.75 0 000 1.5zm-8.5 4.5a.75.75 0 100-1.5.75.75 0 000 1.5z\"></path>\n </svg>\n {:else}\n <svg class=\"pull-request-icon closed\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M10.72 1.227a.75.75 0 011.06 0l.97.97.97-.97a.75.75 0 111.06 1.061l-.97.97.97.97a.75.75 0 01-1.06 1.06l-.97-.97-.97.97a.75.75 0 11-1.06-1.06l.97-.97-.97-.97a.75.75 0 010-1.06zM12.75 6.5a.75.75 0 00-.75.75v3.378a2.251 2.251 0 101.5 0V7.25a.75.75 0 00-.75-.75zm0 5.5a.75.75 0 100 1.5.75.75 0 000-1.5zM2.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.25 1a2.25 2.25 0 00-.75 4.372v5.256a2.251 2.251 0 101.5 0V5.372A2.25 2.25 0 003.25 1zm0 11a.75.75 0 100 1.5.75.75 0 000-1.5z\"></path></svg>\n {/if}\n\n{:else}\n\n {#if draft}\n <svg class=\"pull-request-icon open draft\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M2.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.25 1a2.25 2.25 0 00-.75 4.372v5.256a2.251 2.251 0 101.5 0V5.372A2.25 2.25 0 003.25 1zm0 11a.75.75 0 100 1.5.75.75 0 000-1.5zm9.5 3a2.25 2.25 0 100-4.5 2.25 2.25 0 000 4.5zm0-3a.75.75 0 100 1.5.75.75 0 000-1.5z\"></path><path d=\"M14 7.5a1.25 1.25 0 11-2.5 0 1.25 1.25 0 012.5 0zm0-4.25a1.25 1.25 0 11-2.5 0 1.25 1.25 0 012.5 0z\"></path>\n </svg>\n {:else}\n <svg class=\"pull-request-icon open\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M7.177 3.073L9.573.677A.25.25 0 0110 .854v4.792a.25.25 0 01-.427.177L7.177 3.427a.25.25 0 010-.354zM3.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122v5.256a2.251 2.251 0 11-1.5 0V5.372A2.25 2.25 0 011.5 3.25zM11 2.5h-1V4h1a1 1 0 011 1v5.628a2.251 2.251 0 101.5 0V5A2.5 2.5 0 0011 2.5zm1 10.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.75 12a.75.75 0 100 1.5.75.75 0 000-1.5z\"></path>\n </svg>\n {/if}\n\n{/if}","<style lang=\"scss\">\n\n .icon {\n margin-right: 3px;\n\n color: #1d76db;\n }\n</style>\n\n<svg class=\"icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"1em\" height=\"1em\" aria-hidden=\"true\" fill=\"currentColor\"><path d=\"M8.006 1.078a.748.748 0 0 0-.477.172L3.64 4.36l-.002.002-.088.07h.012c-.344.32-.561.773-.561 1.28v8.538a.75.75 0 0 0 1.227.578L8 11.723l3.773 3.105A.75.75 0 0 0 13 14.25V5.711c0-.527-.234-1-.604-1.32h-.002l-.01-.008a1.76 1.76 0 0 0-.075-.062L8.482 1.25a.748.748 0 0 0-.476-.173Z\"/></svg>","<style lang=\"scss\">\n .icon {\n margin-right: 3px;\n\n &.closed {\n color: #8250df;\n }\n\n &.open {\n color: #1a7f37;\n }\n\n &.not-planned {\n color: #6e7781\n }\n }\n</style>\n\n<script>\n export let name;\n export let state = '';\n export let state_reason = '';\n export let className = '';\n</script>\n\n{#if name === 'issue' || name === 'linked-to' }\n\n {#if state === 'closed'}\n\n {#if state_reason === 'not_planned' }\n <svg class=\"icon depends-on closed not-planned { className }\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\">\n <path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zm3.28 5.78a.75.75 0 00-1.06-1.06l-5.5 5.5a.75.75 0 101.06 1.06l5.5-5.5z\"></path>\n </svg>\n {:else}\n <svg class=\"icon issue closed { className }\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path d=\"M11.28 6.78a.75.75 0 00-1.06-1.06L7.25 8.69 5.78 7.22a.75.75 0 00-1.06 1.06l2 2a.75.75 0 001.06 0l3.5-3.5z\"></path><path fill-rule=\"evenodd\" d=\"M16 8A8 8 0 110 8a8 8 0 0116 0zm-1.5 0a6.5 6.5 0 11-13 0 6.5 6.5 0 0113 0z\"></path>\n </svg>\n {/if}\n\n {:else}\n <svg class=\"icon issue { className }\" class:open={ state === 'open' } viewBox=\"0 0 16 16\" width=\"1em\" height=\"1em\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path d=\"M8 9.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z\"></path><path fill-rule=\"evenodd\" d=\"M8 0a8 8 0 100 16A8 8 0 008 0zM1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0z\"></path>\n </svg>\n {/if}\n\n{/if}\n\n{#if name === 'depends-on'}\n\n {#if state === 'closed'}\n {#if state_reason === 'not_planned' }\n <svg class=\"icon depends-on closed not-planned { className }\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\">\n <path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zm3.28 5.78a.75.75 0 00-1.06-1.06l-5.5 5.5a.75.75 0 101.06 1.06l5.5-5.5z\"></path>\n </svg>\n {:else}\n <svg class=\"icon depends-on closed not-planned { className }\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path d=\"M8 9.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z\"></path><path fill-rule=\"evenodd\" d=\"M8 0a8 8 0 100 16A8 8 0 008 0zM1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0z\"></path>\n </svg>\n {/if}\n {:else}\n <svg class=\"icon depends-on { className } open\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path d=\"M1.5 8a6.5 6.5 0 0113 0A.75.75 0 0016 8a8 8 0 10-8 8 .75.75 0 000-1.5A6.5 6.5 0 011.5 8z\"></path><path d=\"M8 9.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm3.573 5.823l-2.896-2.896a.25.25 0 010-.354l2.896-2.896a.25.25 0 01.427.177V11.5h3.25a.75.75 0 010 1.5H12v2.146a.25.25 0 01-.427.177z\"></path>\n </svg>\n {/if}\n\n{/if}\n\n\n{#if name === 'epic'}\n <svg class=\"icon epic { state_reason === 'not_planned' ? 'not-planned' : '' } { className }\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path d=\"M8.006 1.078a.748.748 0 0 0-.477.172L3.64 4.36l-.002.002-.088.07h.012c-.344.32-.561.773-.561 1.28v8.538a.75.75 0 0 0 1.227.578L8 11.723l3.773 3.105A.75.75 0 0 0 13 14.25V5.711c0-.527-.234-1-.604-1.32h-.002l-.01-.008a1.76 1.76 0 0 0-.075-.062L8.482 1.25a.748.748 0 0 0-.476-.173Zm0 1.723.002.002L11.4 5.516h.002a.246.246 0 0 1 .098.195v6.95l-3.023-2.49a.749.749 0 0 0-.954 0L4.5 12.662V5.71c0-.082.04-.152.102-.197h.002c1.135-.903 3.402-2.713 3.402-2.713Z\"/>\n </svg>\n{/if}\n\n","<script>\n\n export let item;\n\n $: check_runs = item.check_runs || [];\n $: statuses = item.statuses || [];\n\n const check_run_result_map = {\n failure: 'failed',\n success: 'succeeded',\n in_progress: 'in progress',\n queued: 'queued',\n action_required: 'action required'\n };\n</script>\n\n<style lang=\"scss\">\n\n @import \"variables\";\n\n $color-success: $success;\n $color-action-required: $warning;\n $color-failure: $danger;\n\n /*\n $color-success: #77da8e;\n $color-failure: #da8077;\n $color-action-required: #dac977;\n */\n\n @mixin colored-scale($color) {\n background-color: scale-color($color, $lightness: +40%);\n box-shadow: 0 1px 2px 0px scale-color($color, $saturation: -20%, $alpha: -70%);\n }\n\n .card-status {\n display: flex;\n flex-direction: row;\n align-items: stretch;\n height: 3px;\n\n width: auto;\n margin: 3px -8px -4px;\n }\n\n .state {\n flex: 1;\n\n background-color: $gray-500;\n\n > span {\n display: none;\n }\n\n &.striped {\n background-image: linear-gradient(\n 45deg,\n rgba(255,255,255,.15) 25%,\n transparent 25%,\n transparent 50%,\n rgba(255,255,255,.15) 50%,\n rgba(255,255,255,.15) 75%,\n transparent 75%,\n transparent\n );\n\n animation: progress-bar-stripes 1s linear infinite;\n\n background-size: 1rem 1rem;\n }\n\n &.success {\n @include colored-scale($color-success);\n }\n\n &.failure {\n @include colored-scale($color-failure);\n }\n\n &.action-required {\n @include colored-scale($color-action-required);\n }\n }\n\n .state + .state {\n margin-left: 1px;\n }\n\n @keyframes progress-bar-stripes {\n from { background-position: $progress-height 0; }\n to { background-position: 0 0; }\n }\n</style>\n\n{#if check_runs.length || statuses.length}\n <div class=\"card-status\">\n\n {#each check_runs as check_run}\n <a\n class=\"state\"\n class:success={ check_run.conclusion === 'success' || check_run.status === 'in_progress' }\n class:failure={ check_run.conclusion === 'failure' }\n class:action-required={ check_run.conclusion === 'action_required' }\n class:striped={ check_run.status === 'in_progress' || check_run.status === 'queued' }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n title={ `${ check_run.name } — ${check_run_result_map[check_run.conclusion] || check_run_result_map[check_run.status] }` }\n href={ check_run.html_url }\n ><span>{check_run.name} — {check_run_result_map[check_run.conclusion] || check_run_result_map[check_run.status] }</span></a>\n {/each}\n\n {#each statuses as status}\n <a\n class=\"state\"\n class:success={ status.state === 'success' || status.state === 'pending' }\n class:failure={ status.state === 'failure' }\n class:action-required={ status.state === 'error' }\n class:striped={ status.state === 'pending' }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n title={ `${ status.context } — ${status.description}` }\n href={ status.target_url }\n ><span>{ status.context } — {status.description}</span></a>\n {/each}\n </div>\n{/if}","<script>\n\n import {\n isAddFilterClick,\n isApplyFilterClick\n } from './shortcuts';\n\n export let item;\n export let onSelect;\n\n $: number = item.number;\n $: repository = item.repository;\n $: repositoryName = `${repository.owner.login}/${repository.name}`;\n $: repoUrl = `https://github.com/${ repositoryName }`;\n\n $: assignees = item.assignees;\n\n $: comments = (\n Array.isArray(item.comments) ? item.comments : []\n ).map(comment => {\n const {\n user,\n html_url\n } = comment;\n\n return {\n state: 'commented',\n user,\n html_url\n };\n });\n\n $: requested_reviewers = item.requested_reviewers || [];\n\n $: reviews = Object.values(\n [].concat(comments, item.reviews || [])\n .filter(review => !requested_reviewers.find(reviewer => reviewer.login === review.user.login))\n .reduce((byUser, review) => {\n\n const existingReview = byUser[review.user.login];\n\n // keep last definitive review (approved, changes_requested)\n // to match GitHub display and behavior\n if (\n !existingReview ||\n existingReview.state === 'commented' ||\n review.state !== 'commented'\n ) {\n byUser[review.user.login] = review;\n }\n\n return byUser;\n }, {})\n );\n\n const stateToVerb = {\n changes_requested: 'requested changes',\n approved: 'approved',\n commented: 'commented',\n dismissed: 'dismissed his review'\n };\n\n function handleSelection(qualifier, value) {\n\n return onSelect && function(event) {\n\n if (!isApplyFilterClick(event)) {\n return;\n }\n\n event.preventDefault();\n\n onSelect(qualifier, value, isAddFilterClick(event));\n };\n }\n</script>\n\n<style lang=\"scss\">\n @import \"variables\";\n\n $separatorColor: white;\n\n @mixin review-badge($color) {\n\n &:before {\n content: '';\n display: block;\n background: $color;\n box-shadow: 0 0 0 2px $separatorColor;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n position: absolute;\n top: -2px;\n left: -2px;\n z-index: 1;\n }\n }\n\n .assignee {\n box-sizing: border-box;\n margin: 0;\n font-size: 14px;\n position: relative;\n display: flex;\n text-align: center;\n border-radius: 2px;\n\n margin-left: 3px;\n transition: margin .1s;\n\n height: 18px;\n\n img {\n height: 100%;\n border-radius: 2px;\n vertical-align: unset;\n }\n\n .icon-shadow {\n position: absolute;\n display: none;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n box-shadow: inset 0 0 2px 0 rgba(20, 20, 20, 0.3);\n border-radius: 2px;\n }\n\n &.requested-reviewer {\n @include review-badge(#bf8700);\n }\n\n &.commented {\n @include review-badge($info);\n }\n\n &.approved {\n @include review-badge($success);\n }\n\n &.requested-changes {\n @include review-badge($danger);\n }\n\n }\n\n .assignee + .assignee {\n margin-left: -6px;\n box-shadow: 0 0 0 1px $separatorColor;\n }\n\n :global {\n .hovered > .header {\n .assignee + .assignee {\n margin-left: 3px !important;\n box-shadow: none;\n }\n }\n }\n</style>\n\n{#each requested_reviewers as reviewer}\n <a\n class=\"assignee requested-reviewer\"\n title=\"{ reviewer.login } requested for review\"\n href={ reviewer.html_url }\n on:click={ handleSelection('involves', reviewer.login) }\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <img src=\"{ reviewer.avatar_url }&s=40\" alt=\"{ reviewer.login } avatar\" />\n <div class=\"icon-shadow\"></div>\n </a>\n{/each}\n\n{#each reviews as review}\n <a\n class=\"assignee reviewer\"\n class:approved={ review.state === 'approved' }\n class:requested-changes={ review.state === 'changes_requested' }\n class:commented={ review.state === 'commented' || review.state === 'dismissed' }\n title=\"{ review.user.login } { stateToVerb[review.state] }\"\n href={ review.html_url || `${repoUrl}/pull/${number}#pullrequestreview-${review.id}` }\n on:click={ handleSelection('involves', review.user.login) }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <img src=\"{ review.user.avatar_url }&s=40\" alt=\"{ review.user.login } avatar\" />\n <div class=\"icon-shadow\"></div>\n </a>\n{/each}\n\n{#each assignees as assignee}\n <a\n class=\"assignee\"\n title=\"{ assignee.login } assigned\"\n on:click={ handleSelection('involves', assignee.login) }\n href={ assignee.html_url }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <img src=\"{ assignee.avatar_url }&s=40\" alt=\"{ assignee.login } avatar\" />\n <div class=\"icon-shadow\"></div>\n </a>\n{/each}","<script>\n import PullRequestIcon from './components/PullRequestIcon.svelte';\n import LinkIcon from './components/LinkIcon.svelte';\n\n import CollaboratorLinks from './CollaboratorLinks.svelte';\n\n import {\n isApplyFilterClick,\n isAddFilterClick\n } from './shortcuts';\n\n export let item;\n\n export let ref;\n\n export let onSelect;\n\n export let hovered = false;\n\n export let type;\n\n $: number = item.number;\n $: title = item.title;\n $: repository = item.repository;\n $: pull_request = item.pull_request;\n $: state = item.state;\n $: state_reason = item.state_reason;\n\n $: repositoryName = `${repository.owner.login}/${repository.name}`;\n\n $: cardUrl = `https://github.com/${ repositoryName }/issues/${ number }${ ref || '' }`;\n\n $: linkTitle = ({\n CHILD_OF: 'Child of',\n DEPENDS_ON: 'Depends on',\n PARENT_OF: 'Parent of',\n CLOSED_BY: 'Closed by',\n REQUIRED_BY: 'Required by',\n CLOSES: 'Closes',\n LINKED_TO: 'Linked to',\n LINKED_BY: 'Linked by'\n })[type] || type;\n\n function handleSelection(qualifier, value) {\n\n return onSelect && function(event) {\n\n if (!isApplyFilterClick(event)) {\n return;\n }\n\n event.preventDefault();\n\n onSelect(qualifier, value, isAddFilterClick(event));\n };\n }\n</script>\n\n<style lang=\"scss\">\n @import \"./Card\";\n\n .card-link {\n border-top: solid 1px #F0F0F0;\n margin-top: 2px;\n padding-top: 2px;\n }\n\n .card-link .short-title {\n flex: 1;\n }\n\n :global {\n .card-link .epic {\n color: #1d76db;\n }\n }\n</style>\n\n<div class=\"card-link\"\n class:hovered={ hovered }\n on:mouseenter={ () => hovered = true }\n on:mouseleave={ () => hovered = false }\n aria-hidden=\"true\"\n>\n <div class=\"header\">\n <a href={ cardUrl }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"issue-number\"\n on:click={ handleSelection('ref', item.key) }\n title=\"{ linkTitle } { repositoryName }#{ number }\"\n >\n {#if pull_request }\n <PullRequestIcon item={ item } />\n {:else}\n {#if type === 'PARENT_OF'}\n <LinkIcon name=\"issue\" state={ state } state_reason={ state_reason } />\n {:else if type === 'CHILD_OF'}\n <LinkIcon name=\"epic\" state_reason={ state_reason } />\n {:else if type === 'DEPENDS_ON' || type === 'CLOSED_BY' }\n <LinkIcon name=\"depends-on\" state={ state } state_reason={ state_reason } />\n {:else if type === 'REQUIRED_BY' || type === 'CLOSES' }\n {#if state === 'open'}\n <LinkIcon name=\"linked-to\" state={ state } state_reason={ state_reason } />\n {:else}\n <LinkIcon name=\"issue\" state={ state } state_reason={ state_reason } />\n {/if}\n {:else if type === 'LINKED_TO'}\n <LinkIcon name=\"linked-to\" state={ state } state_reason={ state_reason } />\n {:else}\n <LinkIcon name=\"issue\" state={ state } state_reason={ state_reason } />\n {/if}\n {/if}\n\n { number }\n </a>\n\n <span class=\"short-title\" title={ title }>{ title }</span>\n\n <span class=\"collaborator-links\">\n <CollaboratorLinks item={ item } onSelect={ onSelect } />\n </span>\n </div>\n\n <slot></slot>\n</div>","<script>\n import {\n isPull,\n isOpenOrMerged,\n noDuplicates\n } from './util';\n\n import {\n isApplyFilterClick,\n isAddFilterClick\n } from './shortcuts';\n\n import Tag from './components/Tag.svelte';\n import PullRequestIcon from './components/PullRequestIcon.svelte';\n import EpicIcon from './components/EpicIcon.svelte';\n import LinkIcon from './components/LinkIcon.svelte';\n\n import CardStatus from './CardStatus.svelte';\n import CollaboratorLinks from './CollaboratorLinks.svelte';\n\n import CardLink from './CardLink.svelte';\n\n const linkOrder = {\n 'DEPENDS_ON': 1,\n 'CLOSED_BY': 2,\n 'PARENT_OF': 3,\n 'REQUIRED_BY': 4,\n 'LINKED_TO': 5,\n 'CHILD_OF': 6\n };\n\n export let item;\n\n export let className = '';\n\n export let onSelect;\n\n function isClosingPull(link) {\n const {\n type,\n target\n } = link;\n\n return isPull(target) && (type === 'CLOSED_BY' || type === 'DEPENDS_ON');\n }\n\n let showChildren = false;\n\n let hovered = false;\n\n $: number = item.number;\n $: title = item.title;\n $: repository = item.repository;\n $: milestone = item.milestone;\n $: labels = item.labels.filter(l => !l.column_label);\n $: pull_request = item.pull_request;\n $: state_reason = item.state_reason;\n\n $: links = (item.links || []).sort(\n (a, b) => {\n return linkOrder[a.type] - linkOrder[b.type];\n }\n );\n\n $: embeddedLinks = links.filter(\n (link) => !isClosingPull(link) && link.type !== 'LINKED_BY'\n );\n\n $: shownLinks = embeddedLinks.filter(link => showChildren || link.type !== 'PARENT_OF');\n\n $: children = embeddedLinks.filter(l => l.type === 'PARENT_OF');\n $: completedChildren = children.filter(l => l.target.state === 'closed');\n\n $: prLinks = links.filter(\n link => isClosingPull(link) && isOpenOrMerged(link.target)\n ).filter(\n noDuplicates(link => link.target.id + link.ref)\n );\n\n $: repositoryName = `${repository.owner.login}/${repository.name}`;\n\n $: repoUrl = `https://github.com/${ repositoryName }`;\n $: milestoneUrl = milestone && (milestone.html_url || `${repoUrl}/milestone/${milestone.number}`);\n $: cardUrl = item.html_url || `${repoUrl}/issues/${number}`;\n\n function handleSelection(qualifier, value) {\n\n return onSelect && function(event) {\n\n if (!isApplyFilterClick(event)) {\n return;\n }\n\n event.preventDefault();\n\n onSelect(qualifier, value, isAddFilterClick(event));\n };\n }\n</script>\n\n<style lang=\"scss\">\n @import \"variables\";\n\n @import \"./Card\";\n\n :global {\n .tag {\n &.label,\n &.milestone {\n margin-right: 4px;\n margin-bottom: 4px;\n }\n\n &.milestone {\n color: $gray-800 !important;\n border: solid 1px $gray-600;\n }\n }\n\n .card-link:first-child {\n border-top: none !important;\n margin-top: 1px !important;\n }\n }\n\n .board-card-links.attached {\n background: #F9F9F9;\n border-radius: 0 0 4px 4px;\n box-shadow: inset 0 3px 5px -2px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.1);\n margin-top: -6px;\n position: relative;\n padding: 7px 8px 4px 8px;\n }\n\n .progress {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 7px;\n padding: 0;\n\n cursor: pointer;\n text-decoration: none;\n\n svg {\n color: $gray-600;\n }\n\n .bar {\n border-radius: 3px;\n height: 5px;\n width: 80px;\n background: $gray-200;\n margin: auto 6px;\n\n .indicator {\n border-radius: 3px;\n background: $gray-600;\n height: 100%;\n }\n }\n\n .text {\n margin-left: 6px;\n font-size: 0.9rem;\n color: $gray-600;\n }\n }\n\n</style>\n\n<div class=\"board-card-container { className }\">\n <div class=\"board-card\"\n class:hovered={ hovered }\n on:mouseenter={ () => hovered = true }\n on:mouseleave={ () => hovered = false }\n role=\"button\"\n aria-roledescription=\"draggable card\"\n tabindex=\"0\"\n >\n <div class=\"header\">\n <a href={ cardUrl }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"issue-number\"\n title=\"{ repositoryName }#{ number }\"\n on:click={ handleSelection('ref', item.key) }\n >\n\n {#if children.length}\n <EpicIcon />\n {:else if pull_request}\n <PullRequestIcon item={ item } />\n {:else if state_reason === 'not_planned'}\n <LinkIcon name=\"issue\" state=\"closed\" state_reason={ state_reason } />\n {/if}\n\n { number }\n </a>\n\n <span class=\"repository\" title={ repositoryName }>{ repositoryName }</span>\n\n <span class=\"collaborator-links\">\n <CollaboratorLinks item={ item } onSelect={ onSelect } />\n </span>\n </div>\n <div class=\"title\">\n { title }\n </div>\n {#if children.length}\n <button\n class=\"btn btn-link progress\"\n on:click={ () => showChildren = !showChildren }\n title=\"{ completedChildren.length } of { children.length } child tasks completed\"\n >\n <svg class=\"icon\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M2.5 1.75a.25.25 0 01.25-.25h8.5a.25.25 0 01.25.25v7.736a.75.75 0 101.5 0V1.75A1.75 1.75 0 0011.25 0h-8.5A1.75 1.75 0 001 1.75v11.5c0 .966.784 1.75 1.75 1.75h3.17a.75.75 0 000-1.5H2.75a.25.25 0 01-.25-.25V1.75zM4.75 4a.75.75 0 000 1.5h4.5a.75.75 0 000-1.5h-4.5zM4 7.75A.75.75 0 014.75 7h2a.75.75 0 010 1.5h-2A.75.75 0 014 7.75zm11.774 3.537a.75.75 0 00-1.048-1.074L10.7 14.145 9.281 12.72a.75.75 0 00-1.062 1.058l1.943 1.95a.75.75 0 001.055.008l4.557-4.45z\"></path>\n </svg>\n <div class=\"text\">\n { completedChildren.length } of { children.length }\n </div>\n <div class=\"bar\">\n <div class=\"indicator\" style=\"width: { completedChildren.length / children.length * 100 }%\"></div>\n </div>\n </button>\n {/if}\n <div class=\"footer\">\n {#if milestone}\n <Tag\n class=\"tag milestone\"\n name={ milestone.title }\n href={ milestoneUrl }\n title={ milestone.title }\n onClick={ handleSelection('milestone', milestone.title) }\n />\n {/if}\n\n {#each labels as { name, color }}\n <Tag\n class=\"tag label\"\n color=\"#{ color }\"\n name={ name }\n title={ name }\n onClick={ handleSelection('label', name) }\n />\n {/each}\n\n <div class=\"links\">\n <a href={ cardUrl } title=\"View on GitHub\" target=\"_blank\" rel=\"noopener noreferrer\">\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z\"></path>\n </svg>\n </a>\n </div>\n </div>\n\n {#if shownLinks.length}\n <div class=\"board-card-links embedded\">\n {#each shownLinks as link}\n <CardLink item={ link.target } type={ link.type } ref={ link.ref } onSelect={ onSelect } />\n {/each}\n </div>\n {/if}\n\n <CardStatus item={ item } />\n </div>\n\n {#if prLinks.length}\n <div class=\"board-card-links attached\">\n {#each prLinks as link}\n <CardLink item={ link.target } type={ link.type } ref={ link.ref } onSelect={ onSelect }>\n <CardStatus item={ link.target } />\n </CardLink>\n {/each}\n </div>\n {/if}\n\n</div>\n","<script>\n\n import { onMount } from 'svelte';\n\n import { HintList } from './components';\n\n import { Id } from './util';\n\n const inputId = Id();\n\n export let onClose;\n\n export let repositories;\n\n export let onSelect;\n\n let matchedHints;\n\n let keyboardSelectedHint;\n let mouseSelectedHint;\n\n let value = '';\n\n let input;\n\n $: {\n console.time('RepositorySelect#computeMatch');\n\n let opts = computeMatch(value, repositories);\n\n console.timeEnd('RepositorySelect#computeMatch');\n\n matchedHints = opts.matchedHints;\n\n keyboardSelectedHint = (\n matchedHints && keyboardSelectedHint && matchedHints.find(\n hint => hint.name === keyboardSelectedHint.name\n ) || opts.keyboardSelectedHint\n );\n }\n\n $: selectedHint = mouseSelectedHint || keyboardSelectedHint;\n\n function computeMatch(search, repositories) {\n\n const matchedHints = repositories.reduce((matchedHints, name) => {\n\n if (!name.toLowerCase().includes(search)) {\n return matchedHints;\n }\n\n const idx = name.indexOf(search);\n\n const hint = {\n name: name,\n parts: [\n {\n text: name.substring(0, idx)\n },\n {\n text: name.substring(idx, idx + search.length),\n matched: true\n },\n {\n text: name.substring(idx + search.length)\n }\n ],\n apply: (currentValue) => {\n\n return {\n val: name,\n idx: name.length\n };\n }\n };\n\n matchedHints.push(hint);\n\n return matchedHints;\n }, []);\n\n return {\n keyboardSelectedHint: matchedHints[0],\n matchedHints\n };\n }\n\n function applyHint(hint) {\n\n const {\n val,\n idx\n } = hint.apply(value);\n\n input.value = value = val;\n input.selectionEnd = input.selectionStart = idx;\n\n const [ owner, repo ] = val.split('/');\n\n return onSelect(owner, repo);\n }\n\n function handleInput(event) {\n value = event.target.value;\n }\n\n function nextHint(currentHint, direction) {\n\n const hints = (matchedHints || []);\n\n const currentIndex = hints.findIndex(hint => hint.name === currentHint.name);\n\n let nextIndex = currentIndex + direction;\n\n if (nextIndex < 0) {\n nextIndex = hints.length - 1;\n }\n\n if (nextIndex === hints.length) {\n nextIndex = 0;\n }\n\n return hints[nextIndex];\n }\n\n function handleInputKey(event) {\n\n const key = event.key;\n\n if (key === 'Enter') {\n if (keyboardSelectedHint) {\n applyHint(keyboardSelectedHint);\n event.preventDefault();\n }\n }\n\n if (key === 'ArrowUp') {\n keyboardSelectedHint = nextHint(keyboardSelectedHint, -1);\n event.preventDefault();\n }\n\n if (key === 'ArrowDown') {\n keyboardSelectedHint = nextHint(keyboardSelectedHint, 1);\n event.preventDefault();\n }\n\n if (key === 'Escape' && !value) {\n input.blur();\n\n event.preventDefault();\n }\n }\n\n onMount(() => {\n input.focus();\n });\n\n function checkClose(event) {\n\n if (event.key === 'Escape') {\n event.preventDefault();\n\n onClose();\n }\n }\n\n function checkSubmit(event) {\n event.preventDefault();\n\n if (!value) {\n return;\n }\n\n const [ owner, repo ] = value.split('/');\n\n if (!repo || !owner) {\n return;\n }\n\n return onSelect(owner, repo);\n }\n</script>\n\n<style lang=\"scss\">\n\n @import './HelpDropdown';\n\n .repository-select {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n z-index: 10;\n }\n\n .overlay {\n width: 100%;\n height: 100%;\n\n background: rgba(30, 30, 30, .30);\n }\n\n .issue-creator {\n position: absolute;\n z-index: 2;\n width: 500px;\n max-width: 100%;\n\n background: white;\n top: 30%;\n left: 50%;\n transform: translate(-50%);\n\n line-height: 1.5;\n\n border-radius: 5px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n }\n</style>\n\n<svelte:window on:keydown={ checkClose } />\n\n<div class=\"repository-select\">\n <div aria-hidden=\"true\" class=\"overlay\" on:click={ onClose }></div>\n\n <form class=\"issue-creator px-4 py-2\" on:submit={ checkSubmit }>\n\n <slot name=\"header\"></slot>\n\n <div class=\"form-group dropdown-parent\">\n\n <input\n id={ inputId }\n bind:this={ input }\n value={ value }\n on:input={ handleInput }\n on:keydown={ handleInputKey }\n placeholder=\"Choose repository\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n aria-label=\"Repository name input\"\n class=\"form-control form-control-lg\"\n type=\"text\"\n />\n\n {#if value && matchedHints.length }\n <div class=\"help-dropdown\">\n <HintList\n hints={ matchedHints }\n selectedHint={ selectedHint }\n onHover={ hint => mouseSelectedHint = hint }\n onBlur={ () => mouseSelectedHint = null }\n onSelect={ applyHint }\n />\n </div>\n {/if}\n </div>\n </form>\n\n</div>","<script>\n import RepositorySelect from './RepositorySelect.svelte';\n\n export let repositories;\n\n export let open;\n export let onCreate;\n export let onClose;\n</script>\n\n{#if open}\n <RepositorySelect\n repositories={ repositories }\n onClose={ onClose }\n onSelect={ onCreate }\n >\n <h4 slot=\"header\" class=\"chooser-header my-3\">\n Create new Issue\n </h4>\n </RepositorySelect>\n{/if}","export default class Api {\n\n moveIssue(id, column, before, after) {\n const body = JSON.stringify({\n id,\n before,\n after,\n column\n });\n\n const url = this.appURL('/board/issues/move');\n\n return fetchJSON(url, {\n method: 'POST',\n body\n });\n }\n\n listCards(filter) {\n const url = this.appURL(`/board/cards${buildQueryString(filter)}`);\n\n return fetchJSON(url);\n }\n\n getBoard() {\n const url = this.appURL('/board');\n\n return fetchJSON(url);\n }\n\n getLoggedInUser() {\n const url = this.appURL('/login_check');\n\n return fetchJSON(url);\n }\n\n listUpdates(filter, cursor) {\n const url = this.appURL(`/board/updates?cursor=${cursor}${buildQueryString(filter, '&')}`);\n\n return fetchJSON(url);\n }\n\n appURL(location) {\n const appBase = '/wuffle';\n\n return `${appBase}${location}`;\n }\n\n}\n\n\n// helpers ////////////////////\n\nfunction fetchJSON(url, options) {\n return fetch(url, {\n ...options,\n credentials: 'include'\n }).then(response => {\n const {\n ok,\n status\n } = response;\n\n if (!ok) {\n const error = new Error('HTTP ' + status);\n\n error.status = status;\n error.response = response;\n\n throw error;\n }\n\n return response;\n }).then(r => r.text()).then(t => JSON.parse(t));\n}\n\n\nfunction buildQueryString(filter, separator = '?') {\n if (filter) {\n return `${separator}s=${encodeURIComponent(filter)}`;\n } else {\n return '';\n }\n}","var R = typeof globalThis < \"u\" ? globalThis : typeof window < \"u\" ? window : typeof global < \"u\" ? global : typeof self < \"u\" ? self : {};\nfunction Ee(e) {\n return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, \"default\") ? e.default : e;\n}\nvar Ae = function(n, i) {\n return Array.prototype.slice.call(n, i);\n}, He = typeof setImmediate == \"function\", J;\nHe ? J = function(e) {\n setImmediate(e);\n} : J = function(e) {\n setTimeout(e, 0);\n};\nvar Le = J, ze = Le, Ge = function(n, i, r) {\n n && ze(function() {\n n.apply(r || null, i || []);\n });\n}, le = Ae, Ke = Ge, Ue = function(n, i) {\n var r = i || {}, c = {};\n return n === void 0 && (n = {}), n.on = function(o, s) {\n return c[o] ? c[o].push(s) : c[o] = [s], n;\n }, n.once = function(o, s) {\n return s._once = !0, n.on(o, s), n;\n }, n.off = function(o, s) {\n var w = arguments.length;\n if (w === 1)\n delete c[o];\n else if (w === 0)\n c = {};\n else {\n var S = c[o];\n if (!S)\n return n;\n S.splice(S.indexOf(s), 1);\n }\n return n;\n }, n.emit = function() {\n var o = le(arguments);\n return n.emitterSnapshot(o.shift()).apply(this, o);\n }, n.emitterSnapshot = function(o) {\n var s = (c[o] || []).slice(0);\n return function() {\n var w = le(arguments), S = this || n;\n if (o === \"error\" && r.throws !== !1 && !s.length)\n throw w.length === 1 ? w[0] : w;\n return s.forEach(function(y) {\n r.async ? Ke(y, w, S) : y.apply(S, w), y._once && n.off(o, y);\n }), n;\n };\n }, n;\n};\nconst Ve = /* @__PURE__ */ Ee(Ue);\nvar we = R.CustomEvent;\nfunction We() {\n try {\n var e = new we(\"cat\", { detail: { foo: \"bar\" } });\n return e.type === \"cat\" && e.detail.foo === \"bar\";\n } catch {\n }\n return !1;\n}\nvar qe = We() ? we : (\n // IE >= 9\n typeof document < \"u\" && typeof document.createEvent == \"function\" ? function(n, i) {\n var r = document.createEvent(\"CustomEvent\");\n return i ? r.initCustomEvent(n, i.bubbles, i.cancelable, i.detail) : r.initCustomEvent(n, !1, !1, void 0), r;\n } : (\n // IE <= 8\n function(n, i) {\n var r = document.createEventObject();\n return r.type = n, i ? (r.bubbles = !!i.bubbles, r.cancelable = !!i.cancelable, r.detail = i.detail) : (r.bubbles = !1, r.cancelable = !1, r.detail = void 0), r;\n }\n )\n), ye = [], q = \"\", Je = /^on/;\nfor (q in R)\n Je.test(q) && ye.push(q.slice(2));\nvar Qe = ye, Ze = qe, et = Qe, $ = R.document, Ce = nt, Se = it, k = [];\nR.addEventListener || (Ce = rt, Se = ot);\nvar tt = {\n add: Ce,\n remove: Se,\n fabricate: at\n};\nfunction nt(e, n, i, r) {\n return e.addEventListener(n, i, r);\n}\nfunction rt(e, n, i) {\n return e.attachEvent(\"on\" + n, ct(e, n, i));\n}\nfunction it(e, n, i, r) {\n return e.removeEventListener(n, i, r);\n}\nfunction ot(e, n, i) {\n var r = Oe(e, n, i);\n if (r)\n return e.detachEvent(\"on\" + n, r);\n}\nfunction at(e, n, i) {\n var r = et.indexOf(n) === -1 ? o() : c();\n e.dispatchEvent ? e.dispatchEvent(r) : e.fireEvent(\"on\" + n, r);\n function c() {\n var s;\n return $.createEvent ? (s = $.createEvent(\"Event\"), s.initEvent(n, !0, !0)) : $.createEventObject && (s = $.createEventObject()), s;\n }\n function o() {\n return new Ze(n, { detail: i });\n }\n}\nfunction ut(e, n, i) {\n return function(c) {\n var o = c || R.event;\n o.target = o.target || o.srcElement, o.preventDefault = o.preventDefault || function() {\n o.returnValue = !1;\n }, o.stopPropagation = o.stopPropagation || function() {\n o.cancelBubble = !0;\n }, o.which = o.which || o.keyCode, i.call(e, o);\n };\n}\nfunction ct(e, n, i) {\n var r = Oe(e, n, i) || ut(e, n, i);\n return k.push({\n wrapper: r,\n element: e,\n type: n,\n fn: i\n }), r;\n}\nfunction Oe(e, n, i) {\n var r = ft(e, n, i);\n if (r) {\n var c = k[r].wrapper;\n return k.splice(r, 1), c;\n }\n}\nfunction ft(e, n, i) {\n var r, c;\n for (r = 0; r < k.length; r++)\n if (c = k[r], c.element === e && c.type === n && c.fn === i)\n return r;\n}\nconst N = /* @__PURE__ */ Ee(tt);\nvar ve = {}, lt = \"(?:^|\\\\s)\", vt = \"(?:\\\\s|$)\";\nfunction Te(e) {\n var n = ve[e];\n return n ? n.lastIndex = 0 : ve[e] = n = new RegExp(lt + e + vt, \"g\"), n;\n}\nfunction j(e, n) {\n var i = e.className;\n i.length ? Te(n).test(i) || (e.className += \" \" + n) : e.className = n;\n}\nfunction F(e, n) {\n e.className = e.className.replace(Te(n), \" \").trim();\n}\nwindow.global || (window.global = window);\nvar I = document, C = I.documentElement;\nfunction pt(e, n) {\n var i = arguments.length;\n i === 1 && Array.isArray(e) === !1 && (n = e, e = []);\n var r, c, o, s, w, S, A, y, Y, d, H, M = null, P, u = n || {};\n u.moves === void 0 && (u.moves = pe), u.accepts === void 0 && (u.accepts = pe), u.invalid === void 0 && (u.invalid = Ie), u.containers === void 0 && (u.containers = e || []), u.isContainer === void 0 && (u.isContainer = dt), u.copy === void 0 && (u.copy = !1), u.copySortSource === void 0 && (u.copySortSource = !1), u.revertOnSpill === void 0 && (u.revertOnSpill = !1), u.removeOnSpill === void 0 && (u.removeOnSpill = !1), u.direction === void 0 && (u.direction = \"vertical\"), u.ignoreInputTextSelection === void 0 && (u.ignoreInputTextSelection = !0), u.mirrorContainer === void 0 && (u.mirrorContainer = I.body);\n var v = Ve({\n containers: u.containers,\n start: Ne,\n end: ne,\n cancel: ae,\n remove: oe,\n destroy: Me,\n canMove: Be,\n dragging: !1\n });\n return u.removeOnSpill === !0 && v.on(\"over\", Pe).on(\"out\", xe), Q(), v;\n function L(t) {\n return v.containers.indexOf(t) !== -1 || u.isContainer(t);\n }\n function Q(t) {\n var a = t ? \"remove\" : \"add\";\n x(C, a, \"mousedown\", Xe), x(C, a, \"mouseup\", K);\n }\n function z(t) {\n var a = t ? \"remove\" : \"add\";\n x(C, a, \"mousemove\", Ye);\n }\n function Z(t) {\n var a = t ? \"remove\" : \"add\";\n N[a](C, \"selectstart\", ee), N[a](C, \"click\", ee);\n }\n function Me() {\n Q(!0), K({});\n }\n function ee(t) {\n P && t.preventDefault();\n }\n function Xe(t) {\n S = t.clientX, A = t.clientY;\n var a = se(t) !== 1 || t.metaKey || t.ctrlKey;\n if (!a) {\n var f = t.target, l = G(f);\n l && (P = l, z(), t.type === \"mousedown\" && (be(f) ? f.focus() : t.preventDefault()));\n }\n }\n function Ye(t) {\n if (P) {\n if (se(t) === 0) {\n K({});\n return;\n }\n if (!(t.clientX !== void 0 && Math.abs(t.clientX - S) <= (u.slideFactorX || 0) && t.clientY !== void 0 && Math.abs(t.clientY - A) <= (u.slideFactorY || 0))) {\n if (u.ignoreInputTextSelection) {\n var a = _(\"clientX\", t) || 0, f = _(\"clientY\", t) || 0, l = I.elementFromPoint(a, f);\n if (be(l))\n return;\n }\n var g = P;\n z(!0), Z(), ne(), te(g);\n var m = st(o);\n s = _(\"pageX\", t) - m.left, w = _(\"pageY\", t) - m.top, j(d || o, \"gu-transit\"), De(), W(t);\n }\n }\n }\n function G(t) {\n if (!(v.dragging && r) && !L(t)) {\n for (var a = t; h(t) && L(h(t)) === !1; )\n if (u.invalid(t, a) || (t = h(t), !t))\n return;\n var f = h(t);\n if (f && !u.invalid(t, a)) {\n var l = u.moves(t, f, a, D(t));\n if (l)\n return {\n item: t,\n source: f\n };\n }\n }\n }\n function Be(t) {\n return !!G(t);\n }\n function Ne(t) {\n var a = G(t);\n a && te(a);\n }\n function te(t) {\n Re(t.item, t.source) && (d = t.item.cloneNode(!0), v.emit(\"cloned\", d, t.item, \"copy\")), c = t.source, o = t.item, y = Y = D(t.item), v.dragging = !0, v.emit(\"drag\", o, c);\n }\n function Ie() {\n return !1;\n }\n function ne() {\n if (v.dragging) {\n var t = d || o;\n ie(t, h(t));\n }\n }\n function re() {\n P = !1, z(!0), Z(!0);\n }\n function K(t) {\n if (re(), !!v.dragging) {\n var a = d || o, f = _(\"clientX\", t) || 0, l = _(\"clientY\", t) || 0, g = me(r, f, l), m = ue(g, f, l);\n m && (d && u.copySortSource || !d || m !== c) ? ie(a, m) : u.removeOnSpill ? oe() : ae();\n }\n }\n function ie(t, a) {\n var f = h(t);\n d && u.copySortSource && a === c && f.removeChild(o), V(a) ? v.emit(\"cancel\", t, c, c) : v.emit(\"drop\", t, a, c, Y), U();\n }\n function oe() {\n if (v.dragging) {\n var t = d || o, a = h(t);\n a && a.removeChild(t), v.emit(d ? \"cancel\" : \"remove\", t, a, c), U();\n }\n }\n function ae(t) {\n if (v.dragging) {\n var a = arguments.length > 0 ? t : u.revertOnSpill, f = d || o, l = h(f), g = V(l);\n g === !1 && a && (d ? l && l.removeChild(d) : c.insertBefore(f, y)), g || a ? v.emit(\"cancel\", f, c, c) : v.emit(\"drop\", f, l, c, Y), U();\n }\n }\n function U() {\n var t = d || o;\n re(), ke(), t && F(t, \"gu-transit\"), H && clearTimeout(H), v.dragging = !1, M && v.emit(\"out\", t, M, c), v.emit(\"dragend\", t), c = o = d = y = Y = H = M = null;\n }\n function V(t, a) {\n var f;\n return a !== void 0 ? f = a : r ? f = Y : f = D(d || o), t === c && f === y;\n }\n function ue(t, a, f) {\n for (var l = t; l && !g(); )\n l = h(l);\n return l;\n function g() {\n var m = L(l);\n if (m === !1)\n return !1;\n var B = ce(l, t), p = fe(l, B, a, f), O = V(l, p);\n return O ? !0 : u.accepts(o, l, c, p);\n }\n }\n function W(t) {\n if (!r)\n return;\n t.preventDefault();\n var a = _(\"clientX\", t) || 0, f = _(\"clientY\", t) || 0, l = a - s, g = f - w;\n r.style.left = l + \"px\", r.style.top = g + \"px\";\n var m = d || o, B = me(r, a, f), p = ue(B, a, f), O = p !== null && p !== M;\n (O || p === null) && (je(), M = p, $e());\n var b = h(m);\n if (p === c && d && !u.copySortSource) {\n b && b.removeChild(m);\n return;\n }\n var E, X = ce(p, B);\n if (X !== null)\n E = fe(p, X, a, f);\n else if (u.revertOnSpill === !0 && !d)\n E = y, p = c;\n else {\n d && b && b.removeChild(m);\n return;\n }\n (E === null && O || E !== m && E !== D(m)) && (Y = E, p.insertBefore(m, E), v.emit(\"shadow\", m, p, c));\n function T(Fe) {\n v.emit(Fe, m, M, c);\n }\n function $e() {\n O && T(\"over\");\n }\n function je() {\n M && T(\"out\");\n }\n }\n function Pe(t) {\n F(t, \"gu-hide\");\n }\n function xe(t) {\n v.dragging && j(t, \"gu-hide\");\n }\n function De() {\n if (!r) {\n var t = o.getBoundingClientRect();\n r = o.cloneNode(!0), r.style.width = ge(t) + \"px\", r.style.height = he(t) + \"px\", F(r, \"gu-transit\"), j(r, \"gu-mirror\"), u.mirrorContainer.appendChild(r), x(C, \"add\", \"mousemove\", W), j(u.mirrorContainer, \"gu-unselectable\"), v.emit(\"cloned\", r, o, \"mirror\");\n }\n }\n function ke() {\n r && (F(u.mirrorContainer, \"gu-unselectable\"), x(C, \"remove\", \"mousemove\", W), h(r).removeChild(r), r = null);\n }\n function ce(t, a) {\n for (var f = a; f !== t && h(f) !== t; )\n f = h(f);\n return f === C ? null : f;\n }\n function fe(t, a, f, l) {\n var g = (typeof u.direction == \"function\" ? u.direction(o, t, c) : u.direction) === \"horizontal\", m = a !== t ? p() : B();\n return m;\n function B() {\n var b = t.children.length, E, X, T;\n for (E = 0; E < b; E++)\n if (X = t.children[E], T = X.getBoundingClientRect(), g && T.left + T.width / 2 > f || !g && T.top + T.height / 2 > l)\n return X;\n return null;\n }\n function p() {\n var b = a.getBoundingClientRect();\n return O(g ? f > b.left + ge(b) / 2 : l > b.top + he(b) / 2);\n }\n function O(b) {\n return b ? D(a) : a;\n }\n }\n function Re(t, a) {\n return typeof u.copy == \"boolean\" ? u.copy : u.copy(t, a);\n }\n}\nfunction x(e, n, i, r) {\n var c = {\n mouseup: \"touchend\",\n mousedown: \"touchstart\",\n mousemove: \"touchmove\"\n }, o = {\n mouseup: \"pointerup\",\n mousedown: \"pointerdown\",\n mousemove: \"pointermove\"\n }, s = {\n mouseup: \"MSPointerUp\",\n mousedown: \"MSPointerDown\",\n mousemove: \"MSPointerMove\"\n };\n global.navigator.pointerEnabled ? N[n](e, o[i], r) : global.navigator.msPointerEnabled ? N[n](e, s[i], r) : (N[n](e, c[i], r), N[n](e, i, r));\n}\nfunction se(e) {\n if (e.touches !== void 0)\n return e.touches.length;\n if (e.which !== void 0 && e.which !== 0)\n return e.which;\n if (e.buttons !== void 0)\n return e.buttons;\n var n = e.button;\n if (n !== void 0)\n return n & 1 ? 1 : n & 2 ? 3 : n & 4 ? 2 : 0;\n}\nfunction st(e) {\n var n = e.getBoundingClientRect();\n return {\n left: n.left + de(\"scrollLeft\", \"pageXOffset\"),\n top: n.top + de(\"scrollTop\", \"pageYOffset\")\n };\n}\nfunction de(e, n) {\n return typeof global[n] < \"u\" ? global[n] : C.clientHeight ? C[e] : I.body[e];\n}\nfunction me(e, n, i) {\n e = e || {};\n var r = e.className || \"\", c;\n return e.className += \" gu-hide\", c = I.elementFromPoint(n, i), e.className = r, c;\n}\nfunction dt() {\n return !1;\n}\nfunction pe() {\n return !0;\n}\nfunction ge(e) {\n return e.width || e.right - e.left;\n}\nfunction he(e) {\n return e.height || e.bottom - e.top;\n}\nfunction h(e) {\n return e.parentNode === I ? null : e.parentNode;\n}\nfunction be(e) {\n return e.tagName === \"INPUT\" || e.tagName === \"TEXTAREA\" || e.tagName === \"SELECT\" || _e(e);\n}\nfunction _e(e) {\n return !e || e.contentEditable === \"false\" ? !1 : e.contentEditable === \"true\" ? !0 : _e(h(e));\n}\nfunction D(e) {\n return e.nextElementSibling || n();\n function n() {\n var i = e;\n do\n i = i.nextSibling;\n while (i && i.nodeType !== 1);\n return i;\n }\n}\nfunction mt(e) {\n return e.targetTouches && e.targetTouches.length ? e.targetTouches[0] : e.changedTouches && e.changedTouches.length ? e.changedTouches[0] : e;\n}\nfunction _(e, n) {\n var i = mt(n), r = {\n pageX: \"clientX\",\n // IE8\n pageY: \"clientY\"\n // IE8\n };\n return e in r && !(e in i) && r[e] in i && (e = r[e]), i[e];\n}\nexport {\n pt as default\n};\n","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2080%2080%22%3E%3Cpath%20d%3D%22M12%200h56c7%200%2012%205%2012%2012v56c0%207-5%2012-12%2012H12C5%2080%200%2075%200%2068V12C0%205%205%200%2012%200z%22%20fill%3D%22%23999%22%2F%3E%3Cpath%20d%3D%22M15%2010h21c3%200%205%202%205%205v6c0%203-2%205-5%205H15c-2%200-4-2-4-5v-6c0-3%202-5%204-5zm0%2020h21c3%200%205%202%205%205v6c0%202-2%204-5%204H15c-2%200-4-1-4-4v-6c0-3%202-5%204-5zm27%2022h21c2%200%204%202%204%205v6c0%202-2%204-4%204H42c-2%200-4-2-4-4v-6c0-3%202-5%204-5z%22%20fill%3D%22%23fff%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2080%2080%22%3E%3Cpath%20d%3D%22M12%200h56c7%200%2012%205%2012%2012v56c0%207-5%2012-12%2012H12C5%2080%200%2075%200%2068V12C0%205%205%200%2012%200z%22%20fill%3D%22%23d35f5f%22%2F%3E%3Cpath%20d%3D%22M30%2038l19%207c3%201%204%204%203%206l-2%206c-1%202-4%203-6%203l-20-8c-2-1-3-3-2-6l2-6c1-2%203-3%206-2z%22%20fill%3D%22%23fff%22%2F%3E%3Cpath%20d%3D%22M12%2066l18-10c2-1%205-1%206%202l3%205c1%202%201%205-1%206L19%2080c-2%201-5%200-6-2l-3-6c-1-2%200-4%202-6z%22%20fill%3D%22%23fff%22%2F%3E%3Cpath%20d%3D%22M46%2060l20%205c2%201%204%203%203%206l-1%206c-1%202-3%204-6%203l-20-6c-3%200-4-3-3-5l1-6c1-2%203-4%206-3z%22%20fill%3D%22%23fff%22%2F%3E%3C%2Fsvg%3E\"","<script>\n import BoardFilter from './BoardFilter.svelte';\n\n import Avatar from './components/Avatar.svelte';\n import Loader from './components/Loader.svelte';\n\n import PoweredBy from './PoweredBy.svelte';\n\n import Notifications from './components/Notifications.svelte';\n import Notification from './components/Notification.svelte';\n\n import Card from './Card.svelte';\n\n import CreateIssue from './CreateIssue.svelte';\n\n import Api from './Api';\n\n import Dragula from '@bpmn-io/draggle';\n\n import {\n isNewIssueShortcut,\n isLoginShortcut\n } from './shortcuts';\n\n import {\n Id,\n createLocalStore,\n createHistory,\n isClosingLink,\n isOpenOrMerged,\n isPull,\n periodic,\n throttle\n } from './util';\n\n import loaderImage from './logo-gray.svg';\n import errorImage from './error.svg';\n\n import { onMount } from 'svelte';\n\n const DEFAULT_PER_COLUMN_RENDER_COUNT = 15;\n\n const POLL_KEY = 'Taskboard_polling';\n\n const api = new Api();\n const localStore = createLocalStore();\n const history = createHistory();\n\n const navId = Id();\n\n let name = '';\n let columns = [];\n let items = {};\n\n let itemsById = {};\n\n let loading = true;\n let updating = 0;\n let error = null;\n let warnings = [];\n\n let user = null;\n let cursor = null;\n\n let accessNotification = false;\n\n let showCreate = false;\n\n let renderCountByColumn = {};\n\n let filterOptions = {};\n\n $: defaultCollapsed = columns.reduce((defaultCollapsed, column) => {\n defaultCollapsed[column.name] = column.collapsed;\n\n return defaultCollapsed;\n }, {});\n\n let filter = parseSearchFilter();\n\n let localCollapsed = parseCollapsedColumns();\n\n $: collapsed = {\n ...defaultCollapsed,\n ...localCollapsed\n };\n\n $: updateBoardLocation(filter, localCollapsed);\n\n // shown items\n $: shownItems = Object.keys(items).reduce((shownItems, column) => {\n\n const columnItems = items[column];\n\n shownItems[column] = columnItems.filter(item => !isClosingPull(item));\n\n return shownItems;\n }, {});\n\n // actually rendered items\n $: renderedItems = Object.keys(shownItems).reduce((renderedItems, column) => {\n\n const renderCount = renderCountByColumn[column] || DEFAULT_PER_COLUMN_RENDER_COUNT;\n const items = shownItems[column];\n\n renderedItems[column] = items.slice(0, renderCount);\n\n return renderedItems;\n }, {});\n\n function action(name, options = {}) {\n\n return fn => {\n\n return fn()\n .then(result => {\n discardWarning(name);\n\n return result;\n })\n .catch(err => {\n return handleWarning(name, err, options);\n });\n };\n }\n\n function handleWarning(action, error, options) {\n console.error(`[action] [${action}] failed`, error);\n\n if (options.verbose === false) {\n return;\n }\n\n const index = warnings.findIndex(w => w.action === action);\n\n const warning = {\n action,\n error\n };\n\n if (index !== -1) {\n warnings = [\n ...warnings.slice(0, index),\n warning,\n ...warnings.slice(index + 1)\n ];\n } else {\n warnings = [\n ...warnings,\n warning\n ];\n }\n }\n\n function discardWarnings() {\n warnings = [];\n }\n\n function discardWarning(action) {\n warnings = warnings.filter(w => w.action !== action);\n }\n\n function handleError(_error) {\n console.error(_error);\n\n error = _error;\n }\n\n function discardError() {\n error = null;\n }\n\n function loadBoard() {\n discardError();\n discardWarnings();\n\n loading = true;\n\n return Promise.all([\n fetchBoard(),\n loginCheck(),\n fetchCards(filter)\n ]).then(_ => {\n discardError();\n }).catch(error => {\n handleError(error);\n }).finally(() => {\n loading = false;\n });\n }\n\n function setupHooks() {\n\n const poll = localStore.get(POLL_KEY, true);\n\n const teardownHooks = [\n\n // poll for issue updates every three seconds\n poll && periodic(pollUpdates, 1000 * 3),\n\n // check login every 1 minutes\n poll && periodic(loginCheck, 1000 * 60 * 1),\n\n // hook into history changes\n history.onPop(() => {\n const newFilter = parseSearchFilter();\n\n localCollapsed = parseCollapsedColumns();\n\n filterChanged(newFilter);\n })\n ];\n\n return () => teardownHooks.forEach(fn => fn && fn());\n }\n\n onMount(() => {\n loadBoard();\n setupHooks();\n });\n\n function applyFilter(qualifier, value, add) {\n\n if (!value.startsWith('\"')) {\n value = '\"' + value + '\"';\n }\n\n const criteria = value && `${qualifier}:${value}`;\n\n if (!criteria) {\n return;\n }\n\n let newFilter;\n\n const criteriaIndex = filter.indexOf(criteria);\n\n if (criteriaIndex === 0) {\n newFilter = filter.substring(criteria.length + 1);\n } else if (criteriaIndex > 0) {\n newFilter = filter.substring(0, criteriaIndex - 1) + filter.substring(criteriaIndex + criteria.length);\n } else {\n if (add && filter.trim()) {\n newFilter = `${filter} ${qualifier}:${value}`;\n } else {\n newFilter = criteria;\n }\n }\n\n return filterChanged(newFilter);\n }\n\n function filterChanged(value) {\n\n if (value === filter) {\n return;\n }\n\n if (value.trim() !== filter.trim()) {\n\n action('Fetching cards')(\n () => fetchCards(value)\n );\n }\n\n filter = value;\n }\n\n function parseSearchFilter() {\n if (typeof window === 'undefined') {\n return '';\n }\n\n const url = new URL(window.location.href);\n\n return url.searchParams.get('s') || '';\n }\n\n function parseCollapsedColumns() {\n if (typeof window === 'undefined') {\n return '';\n }\n\n const url = new URL(window.location.href);\n\n const collapsed = url.searchParams.get('c');\n\n if (!collapsed) {\n return {};\n }\n\n return collapsed.split(',').filter(c => c).reduce((collapsed, column) => {\n\n const split = column.split('!');\n\n collapsed[split[1] || split[0]] = split.length === 1;\n\n return collapsed;\n }, {});\n }\n\n function updateBoardLocation(filter, collapsed) {\n const ref = buildBoardLink(filter, collapsed);\n\n if (ref !== window.location.href) {\n history.push(ref);\n }\n }\n\n function buildBoardLink(filter, collapsed) {\n\n const url = new URL(window.location.href);\n\n const searchParams = url.searchParams;\n\n const searchParam = filter;\n const collapsedParam = Object.entries(collapsed).filter(([ key, value ]) => {\n return defaultCollapsed[key] !== value;\n }).map(\n ([ key, value ]) => (value ? '' : '!') + key\n ).join(',');\n\n if (searchParam) {\n searchParams.set('s', searchParam);\n } else {\n searchParams.delete('s');\n }\n\n if (collapsedParam) {\n searchParams.set('c', collapsedParam);\n } else {\n searchParams.delete('c');\n }\n\n return url.toString();\n }\n\n function loginCheck() {\n return action('Login check')(\n () => api.getLoggedInUser().then(newUser => {\n\n if (user && !newUser) {\n window.location.reload();\n } else {\n user = newUser;\n }\n })\n );\n }\n\n function fetchBoard() {\n const boardEl = document.querySelector('script[type=\"application/json+config\"]');\n\n if (boardEl) {\n const text = boardEl.textContent;\n\n if (text) {\n const result = JSON.parse(text);\n\n columns = result.columns;\n name = result.name;\n }\n }\n\n return api.getBoard().then(result => {\n columns = result.columns;\n name = result.name;\n });\n }\n\n function updateCards(_items, _cursor) {\n console.time('Taskboard#updateCards');\n\n const _itemsById = {};\n const _filterOptions = {};\n\n for (const columnItems of Object.values(_items)) {\n\n for (const item of columnItems) {\n const {\n id,\n user,\n milestone,\n assignees,\n labels,\n repository,\n requested_reviewers\n } = item;\n\n const repoOptions = _filterOptions['repo'] = _filterOptions['repo'] || {};\n\n repoOptions[repository.owner.login + '/' + repository.name] = true;\n\n if (milestone) {\n const milestoneOptions = _filterOptions['milestone'] = _filterOptions['milestone'] || {};\n\n milestoneOptions[milestone.title] = true;\n }\n\n if (user) {\n const authorOptions = _filterOptions['author'] = _filterOptions['author'] || {};\n\n authorOptions[user.login] = true;\n }\n\n assignees.forEach(assignee => {\n const assigneeOptions = _filterOptions['assignee'] = _filterOptions['assignee'] || {};\n\n assigneeOptions[assignee.login] = true;\n });\n\n if (requested_reviewers) {\n requested_reviewers.forEach(reviewer => {\n const reviewerOptions = _filterOptions['reviewer'] = _filterOptions['reviewer'] || {};\n\n reviewerOptions[reviewer.login] = true;\n });\n }\n\n labels.forEach(label => {\n\n if (!label.column_label) {\n const labelOptions = _filterOptions['label'] = _filterOptions['label'] || {};\n\n labelOptions[label.name] = true;\n }\n });\n\n _itemsById[id] = item;\n }\n\n }\n\n items = _items;\n itemsById = _itemsById;\n filterOptions = Object.entries(_filterOptions).reduce((opts, entry) => {\n\n const [ key, value ] = entry;\n\n opts[key] = Object.keys(value);\n\n return opts;\n }, {});\n\n cursor = _cursor;\n console.timeEnd('Taskboard#updateCards');\n }\n\n function fetchCards(newFilter) {\n\n updating++;\n\n return api.listCards(newFilter).then(result => {\n\n // do not apply updates for outdated filters\n if (newFilter !== filter) {\n return;\n }\n\n const {\n items,\n cursor\n } = result;\n\n updateCards(items, cursor);\n }).finally(() => updating--);\n }\n\n\n function pollUpdates() {\n\n if (updating) {\n return;\n }\n\n const currentFilter = filter;\n\n return action('Update check')(\n () => api.listUpdates(currentFilter, cursor).then(updates => {\n\n if (!updates.length) {\n return;\n }\n\n if (currentFilter !== filter) {\n return;\n }\n\n const {\n items: _items,\n itemsById: _itemsById,\n cursor: _cursor\n } = applyUpdates(updates, items, itemsById);\n\n items = _items;\n itemsById = _itemsById;\n cursor = _cursor;\n })\n );\n }\n\n function applyUpdates(updates, items, itemsById) {\n\n const cursor = updates[updates.length - 1].id;\n\n updates.forEach(update => {\n const {\n type,\n issue\n } = update;\n\n const {\n id\n } = issue;\n\n const from = itemsById[id];\n\n const to = type !== 'remove' && issue;\n\n items = {\n ...items,\n ...moveItem(items, issue, from, to)\n };\n\n // remove from index\n if (type === 'remove') {\n const {\n [id]: removedItem,\n ...remainingItems\n } = itemsById;\n\n itemsById = remainingItems;\n } else {\n\n // update in index\n itemsById = {\n ...itemsById,\n [id]: issue\n };\n }\n });\n\n return {\n cursor,\n itemsById,\n items\n };\n }\n\n const drake = Dragula({\n isContainer: (el) => {\n return el.matches('[data-column-id]');\n }\n });\n\n function getCardId(el) {\n const dataset = el.dataset;\n return dataset.cardId;\n }\n\n function getCardOrder(el) {\n const dataset = el.dataset;\n return parseFloat(dataset.cardOrder);\n }\n\n function getColumnId(el) {\n const dataset = el.dataset;\n return dataset.columnId;\n }\n\n function checkCancel(event) {\n if (event.key === 'Escape') {\n drake.cancel(true);\n }\n }\n\n drake.on('drag', () => {\n document.addEventListener('keydown', checkCancel);\n });\n\n drake.on('dragend', () => {\n document.removeEventListener('keydown', checkCancel);\n });\n\n drake.on('drop', (el, target, source, nextEl) => {\n const cardId = getCardId(el);\n const cardOrder = getCardOrder(el);\n\n const previousEl = el.previousElementSibling;\n\n const nextOrder = nextEl && getCardOrder(nextEl);\n const previousOrder = previousEl && getCardOrder(previousEl);\n\n const newOrder =\n previousOrder && nextOrder\n ? (previousOrder + nextOrder) / 2\n : previousOrder\n ? previousOrder + 731241.218\n : nextOrder\n ? nextOrder - 811231.691\n : -71271.88455;\n\n handleCardDrop(\n itemsById[cardId],\n {\n order: cardOrder,\n column: getColumnId(source)\n },\n {\n order: newOrder,\n column: getColumnId(target)\n }\n );\n\n });\n\n function handleCardDrop(card, from, to) {\n\n const { before, after } = moveCard(card, from, to);\n\n return api.moveIssue(\n card.id,\n to.column,\n before && before.id,\n after && after.id\n ).catch(err => {\n console.warn('reverting card movement', err);\n\n accessNotification = user ? 'forbidden' : 'authentication-required';\n\n setTimeout(() => {\n accessNotification = false;\n }, 8000);\n\n moveCard(card, to, from);\n });\n }\n\n function removeItem(item, list = []) {\n const { id } = item;\n\n return list.filter(existing => existing.id !== id);\n }\n\n function insertItem(item, order, list = []) {\n const insertIdx = list.findIndex(existing => existing.order > order);\n\n if (insertIdx === -1) {\n return [ ...list, item ];\n }\n\n return [\n ...list.slice(0, insertIdx),\n item,\n ...list.slice(insertIdx)\n ];\n\n }\n\n function moveCard(card, from, to) {\n\n // temporarily update card with new column and ordering\n card.column = to.column;\n card.order = to.order;\n\n const updatedItems = moveItem(items, card, from, to);\n\n items = {\n ...items,\n ...updatedItems\n };\n\n const targetColumn = updatedItems[to.column];\n\n const cardIndex = targetColumn.findIndex(el => el.id === card.id);\n\n return {\n after: targetColumn[cardIndex - 1],\n before: targetColumn[cardIndex + 1]\n };\n }\n\n function moveItem(items, item, from, to) {\n\n const oldColumn = from && from.column;\n\n const newColumn = to && to.column;\n const newOrder = to && to.order;\n\n // remove from old column\n if (oldColumn) {\n const updatedColumn = removeItem(item, items[oldColumn]);\n\n items = {\n ...items,\n [oldColumn]: updatedColumn\n };\n }\n\n // add to new column\n if (newColumn) {\n const updatedColumn = insertItem(item, newOrder, items[newColumn]);\n\n items = {\n ...items,\n [newColumn]: updatedColumn\n };\n }\n\n return items;\n }\n\n function toggleCollapse(column) {\n\n localCollapsed = {\n ...localCollapsed,\n [column.name]: !collapsed[column.name]\n };\n }\n\n function isClosingPull(item) {\n return isPull(item) && isOpenOrMerged(item) && item.links.some(link => {\n return isClosingLink(link) && itemsById[link.target.id];\n });\n }\n\n function checkRender(columnName) {\n\n return throttle(function(event) {\n\n const node = event.target;\n\n const {\n scrollHeight,\n scrollTop,\n offsetHeight\n } = node;\n\n if (scrollTop + offsetHeight > scrollHeight * .95) {\n\n const columnItems = shownItems[columnName] || [];\n\n const columnRenderedCount = renderCountByColumn[columnName] || DEFAULT_PER_COLUMN_RENDER_COUNT;\n\n if (columnRenderedCount < columnItems.length) {\n\n renderCountByColumn = {\n ...renderCountByColumn,\n [columnName]: columnRenderedCount + DEFAULT_PER_COLUMN_RENDER_COUNT / 5\n };\n }\n }\n }, 5);\n }\n\n function openCreateIssue() {\n showCreate = true;\n }\n\n function closeCreateIssue() {\n showCreate = false;\n }\n\n function createIssue(owner, repo) {\n closeCreateIssue();\n\n window.open(\n `https://github.com/${owner}/${repo}/issues/new/choose`,\n '_blank'\n );\n }\n\n function handleGlobalKey(event) {\n\n if (isNewIssueShortcut(event)) {\n openCreateIssue();\n\n event.preventDefault();\n }\n\n if (isLoginShortcut(event)) {\n window.location.href = user ? '/wuffle/logout' : '/wuffle/login';\n\n event.preventDefault();\n }\n }\n</script>\n\n<style lang=\"scss\">\n @import \"variables\";\n\n @import \"./Taskboard\";\n\n .muted {\n color: $gray-600;\n }\n\n .taskboard {\n position: relative;\n }\n</style>\n\n<svelte:window on:keydown={ handleGlobalKey } />\n\n<div class=\"taskboard\">\n\n <Loader shown={ loading }>\n <img src={ loaderImage } width=\"64\" alt=\"Loading\" />\n </Loader>\n\n <CreateIssue\n repositories={ filterOptions['repo'] }\n onCreate={ createIssue }\n open={ showCreate }\n onClose={ closeCreateIssue }\n />\n\n {#if error}\n <div class=\"taskboard-error\">\n\n <img src={ errorImage } width=\"128\" alt=\"An error occured\" />\n\n <p>We could not load the board.</p>\n\n <button class=\"btn btn-primary\" on:click={ () => loadBoard() }>\n Retry\n </button>\n </div>\n {/if}\n\n <Notifications>\n {#if !error}\n {#each warnings as warning}\n <Notification type=\"warning\" message=\"{ warning.action } failed\">\n Could not reach the board back-end. <a href>Reload board.</a>\n </Notification>\n {/each}\n {/if}\n\n {#if accessNotification}\n <Notification type=\"error\" message=\"Failed to move card\">\n {#if accessNotification === 'forbidden'}\n It seems like you do not have write access to the underlying GitHub repository.\n {:else}\n Please <a href=\"/wuffle/login\" title=\"Login via GitHub (l)\">login via GitHub</a> to interact with cards.\n {/if}\n </Notification>\n {/if}\n </Notifications>\n\n <PoweredBy />\n\n <nav class=\"navbar navbar-expand navbar-light taskboard-header\">\n\n <a class=\"navbar-brand m-0 mr-3 my-2\" href=\"/\" title=\"{ name } - Wuffle board\">\n <img src=\"./logo.svg\" height=\"30px\" alt=\"\" class=\"logo\" />\n </a>\n <button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\"#{navId}\" aria-controls={navId} aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n\n <div class=\"collapse navbar-collapse\" id={navId}>\n\n <form class=\"form-inline board-filter-parent my-2 my-lg-0\" on:submit|preventDefault={ () => {} }>\n <BoardFilter\n value={ filter }\n completionOptions={ filterOptions }\n onChange={ filterChanged }\n placeholder={ 'Filter board...' }\n />\n </form>\n\n <form class=\"form-inline mx-3 my-2 my-sm-0\" on:submit|preventDefault={ openCreateIssue }>\n <button class=\"btn btn-outline-primary\" type=\"submit\" title=\"Create new issue (n)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" height=\"16\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M7.75 2a.75.75 0 01.75.75V7h4.25a.75.75 0 110 1.5H8.5v4.25a.75.75 0 11-1.5 0V8.5H2.75a.75.75 0 010-1.5H7V2.75A.75.75 0 017.75 2z\"></path></svg>\n </button>\n </form>\n </div>\n\n <div class=\"taskboard-header-login ml-2\">\n {#if user}\n <a href=\"/wuffle/logout\" title={ `Logged in as ${user.login}. Logout (l)` }>\n <Avatar rounded>\n <img src=\"{ user.avatar_url }&s=40\" style=\"max-width: 100%\" alt=\"Logged in user avatar\" />\n </Avatar>\n </a>\n {:else}\n <a href=\"/wuffle/login\" title=\"Login with GitHub (l)\">\n <Avatar rounded>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" height=\"1.3em\" fill=\"currentColor\"><path d=\"M4.243 4.757a3.757 3.757 0 115.851 3.119 6.006 6.006 0 013.9 5.339.75.75 0 01-.715.784H2.721a.75.75 0 01-.714-.784 6.006 6.006 0 013.9-5.34 3.753 3.753 0 01-1.664-3.118z\"></path></svg>\n </Avatar>\n </a>\n {/if}\n </div>\n </nav>\n\n <main class=\"taskboard-board scroll-container-h\">\n\n {#if !error}\n {#each columns as column }\n <div class=\"taskboard-column\" class:collapsed={ collapsed[column.name] }>\n <div class=\"taskboard-column-header\">\n <button\n class=\"taskboard-column-collapse btn btn-link\"\n title=\"{ collapsed[column.name] ? 'Expand' : 'Collapse' } column\"\n on:click={ (e) => e.preventDefault() || toggleCollapse(column) }\n >\n {#if collapsed[column.name] }\n <svg viewBox=\"64 64 896 896\" height=\"1em\" aria-hidden=\"true\" fill=\"currentColor\"><path d=\"M602 548c0 4 4 8 8 8h186v74c0 6 7 9 11 6l150-120c3-3 3-8 0-11L807 386c-4-4-11-1-11 5v75H609c-4 0-7 3-7 7zM68 514l149 122c4 3 11 0 11-6v-76h186c4 0 8-2 8-6v-77c0-4-4-7-8-7H228v-75c0-6-7-9-11-5L68 503c-4 3-4 8 0 11z\"/></svg>\n {:else}\n <svg viewBox=\"64 64 896 896\" height=\"1em\" aria-hidden=\"true\" fill=\"currentColor\"><path d=\"M605 515l149 122c5 3 12 0 12-6v-76h186c4 0 7-2 7-6v-77c0-4-3-7-7-7H766v-75c0-6-7-9-12-5L605 504c-4 3-4 8 0 11zM65 547c0 4 3 8 7 8h186v74c0 6 7 9 12 6l149-120c4-3 4-8 0-11L270 385c-5-4-12-1-12 5v75H72c-4 0-7 3-7 7z\"/></svg>\n {/if}\n </button>\n <span class=\"taskboard-column-name\">\n { column.name }\n </span>\n <span class=\"taskboard-column-issue-count\">\n { (shownItems[column.name] || []).length }\n </span>\n </div>\n\n {#if !collapsed[column.name] }\n <div class=\"taskboard-column-items scroll-container-v\"\n data-column-id={ column.name }\n on:scroll={ checkRender(column.name) }>\n\n {#each (renderedItems[column.name] || []) as item, index (item.id) }\n <div\n class=\"card-container\"\n data-card-id={ item.id }\n data-card-order={ item.order }\n >\n <Card\n item={item}\n onSelect={ applyFilter }\n />\n </div>\n {/each}\n\n </div>\n {/if}\n </div>\n {/each}\n {/if}\n </main>\n</div>","export function isClosingLink(link) {\n const {\n type\n } = link;\n\n return type === 'CLOSES';\n}\n\nexport function isClosedByLink(link) {\n const {\n type\n } = link;\n\n return type === 'CLOSED_BY';\n}","import {\n debounce\n} from 'min-dash';\n\nimport Taskboard from './Taskboard.svelte';\n\nconsole.timeEnd('Wuffle#load');\n\nconsole.time('Taskboard#create');\n\nconst taskboard = new Taskboard({\n target: document.body\n});\n\nconsole.timeEnd('Taskboard#create');\n\nif ('serviceWorker' in navigator) {\n\n const triggerReload = debounce(() => {\n window.location.reload();\n }, 1500);\n\n window.addEventListener('load', () => {\n navigator.serviceWorker.register('/service-worker.js').catch((err) => {\n console.warn('Failed to register service worker', err);\n });\n\n navigator.serviceWorker.addEventListener('message', event => {\n if (event.data.message === 'resource.changed') {\n console.log('Resource changed', event.data.url);\n\n triggerReload();\n }\n });\n });\n}\n\nexport default taskboard;"],"names":["debounce","fn","timeout","timer","lastArgs","lastThis","lastNow","fire","force","now","Date","scheduledDiff","schedule","apply","clear","setTimeout","clearTimeout","undefined","callback","args","this","flush","cancel","noop","identity","x","run","blank_object","Object","create","run_all","fns","forEach","is_function","thing","src_url_equal_anchor","src_url_equal","element_src","url","document","createElement","href","not_equal","a","b","create_slot","definition","ctx","$$scope","slot_ctx","get_slot_context","tar","src","k","assign","slice","get_slot_changes","dirty","lets","merged","len","Math","max","length","i","update_slot_base","slot","slot_definition","slot_changes","get_slot_context_fn","slot_context","p","get_all_dirty_from_scope","null_to_empty","value","split_css_unit","split","match","parseFloat","is_client","window","performance","raf","cb","requestAnimationFrame","tasks","Set","run_tasks","task","c","delete","f","size","globals","globalThis","global","append","target","node","appendChild","get_root_for_style","root","getRootNode","ownerDocument","host","append_empty_stylesheet","style_element","element","textContent","style","head","sheet","append_stylesheet","insert","anchor","insertBefore","detach","parentNode","removeChild","destroy_each","iterations","detaching","d","name","svg_element","createElementNS","text","data","createTextNode","space","empty","listen","event","handler","options","addEventListener","removeEventListener","prevent_default","preventDefault","call","attr","attribute","removeAttribute","getAttribute","setAttribute","set_data","set_input_value","input","set_style","key","important","removeProperty","setProperty","toggle_class","toggle","classList","managed_styles","Map","current_component","active","create_rule","duration","delay","ease","uid","step","keyframes","t","rule","str","hash","charCodeAt","doc","stylesheet","rules","get","info","set","create_style_information","insertRule","cssRules","animation","delete_rule","previous","next","filter","anim","indexOf","deleted","join","ownerNode","set_current_component","component","onMount","Error","get_current_component","$$","on_mount","push","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","Promise","resolve","update_scheduled","add_render_callback","seen_callbacks","promise","flushidx","saved_component","update","e","pop","has","add","fragment","before_update","after_update","dispatch","direction","kind","dispatchEvent","type","detail","bubbles","cancelable","CustomEvent","custom_event","outroing","outros","group_outros","r","check_outros","transition_in","block","local","transition_out","o","null_transition","create_bidirectional_transition","params","intro","original_inert_value","config","running_program","pending_program","animation_name","clear_animation","init","program","abs","start","end","group","go","easing","linear","tick","css","inert","fulfill","loop","then","ensure_array_like","array_like_or_iterator","Array","from","destroy_block","lookup","outro_and_destroy_block","update_keyed_each","old_blocks","get_key","dynamic","list","destroy","create_each_block","get_context","n","old_indexes","new_blocks","new_lookup","deltas","updates","child_ctx","will_move","did_move","m","first","new_block","old_block","new_key","old_key","create_component","mount_component","new_on_destroy","map","on_destroy","destroy_component","filtered","targets","flush_render_callbacks","make_dirty","fill","instance","create_fragment","props","append_styles","parent_component","bound","on_disconnect","context","callbacks","skip_bound","ready","ret","rest","hydrate","nodes","childNodes","children","l","SvelteComponent","$$set","$destroy","$on","index","splice","$set","obj","keys","__svelte","v","Id","LocalStore","defaultValue","serializedValue","localStorage","getItem","JSON","parse","error","console","warn","setItem","stringify","FakeLocalStore","History","history","pushState","onPop","FakeHistory","periodic","interval","canceled","success","err","isOpenOrMerged","issue","state","isOpen","isMerged","isPull","pull_request","t_value","span","matched","each_value_1","parts","li","action_result","scrollIntoView_action","scrollIntoView","ul","ul_class_value","hint","onHover","onBlur","handleMousedown","hasModifier","ctrlKey","shiftKey","altKey","metaKey","isGlobal","body","isApplyFilterClick","isAddFilterClick","div","each_value","categories","each_blocks","t1_value","if_block","hr","create_if_block_1","hints","values","h3","current","t1","hintlist_changes","input_1","input_1_title_value","toLowerCase","$$value","$$invalidate","focussed","mouseSelectedHint","rounded","$$props","div1","div0","cubicOut","fly","y","opacity","getComputedStyle","target_opacity","transform","od","xValue","xUnit","yValue","yUnit","u","div2","message","button","button_title_value","arguments","a_title_value","create_if_block","svg","path","path0","path1","create_if_block_2","item","closed","draft","create_if_block_5","create_if_block_6","create_if_block_3","svg_class_value","if_block0","create_if_block_4","if_block1","if_block2","t0_value","conclusion","status","a_href_value","html_url","t0","t2","t2_value","description","target_url","check_runs","statuses","failure","in_progress","queued","action_required","img","img_src_value","avatar_url","img_alt_value","login","user","id","onSelect","number","repository","repositoryName","owner","repoUrl","assignees","comments","isArray","comment","requested_reviewers","reviews","concat","review","find","reviewer","reduce","byUser","existingReview","changes_requested","approved","commented","dismissed","qualifier","span0","span1","ref","hovered","title","state_reason","cardUrl","linkTitle","CHILD_OF","DEPENDS_ON","PARENT_OF","CLOSED_BY","REQUIRED_BY","CLOSES","LINKED_TO","LINKED_BY","t3_value","t3","onClick","tag_changes","cardlink_changes","cardstatus","CardStatus","cardstatus_changes","if_block3","if_block4","a0","a0_title_value","div5","div4","div3","a1","keyFn","found","showChildren","form","inputId","matchedHints","keyboardSelectedHint","onClose","repositories","applyHint","val","idx","selectionEnd","selectionStart","repo","nextHint","currentHint","nextIndex","findIndex","focus","time","opts","search","includes","substring","currentValue","computeMatch","timeEnd","selectedHint","blur","h4","open","onCreate","Api","moveIssue","column","before","after","fetchJSON","appURL","method","listCards","buildQueryString","getBoard","getLoggedInUser","listUpdates","cursor","location","fetch","credentials","response","ok","separator","encodeURIComponent","R","self","Ee","__esModule","prototype","hasOwnProperty","default","ze","setImmediate","le","Ke","Ue","on","s","once","_once","off","w","S","emit","emitterSnapshot","shift","throws","async","Ve","we","qe","foo","We","createEvent","initCustomEvent","createEventObject","ye","q","Je","test","Ze","et","$","Ce","Se","Oe","ft","wrapper","attachEvent","srcElement","returnValue","stopPropagation","cancelBubble","which","keyCode","ut","ct","detachEvent","N","remove","fabricate","initEvent","fireEvent","ve","lt","vt","Te","lastIndex","RegExp","j","className","F","replace","trim","I","C","documentElement","pt","A","Y","H","P","M","moves","pe","accepts","invalid","containers","isContainer","dt","copy","copySortSource","revertOnSpill","removeOnSpill","ignoreInputTextSelection","mirrorContainer","G","te","ne","ae","oe","Q","K","canMove","dragging","L","Xe","z","Ye","Z","ee","clientX","clientY","se","be","slideFactorX","slideFactorY","_","elementFromPoint","g","getBoundingClientRect","left","de","top","st","cloneNode","width","ge","height","he","W","De","h","D","source","Re","ie","re","ue","me","V","U","B","ce","fe","O","T","E","X","Fe","navigator","pointerEnabled","mouseup","mousedown","mousemove","msPointerEnabled","touches","buttons","clientHeight","right","bottom","tagName","_e","contentEditable","nextElementSibling","nextSibling","nodeType","targetTouches","changedTouches","mt","pageX","pageY","loaderImage","errorImage","action","notification_changes","div_data_column_id_value","div_data_card_id_value","div_data_card_order_value","order","create_if_block_7","nav","button0","form0","form1","main","createissue_changes","parseSearchFilter","URL","searchParams","getCardOrder","el","dataset","cardOrder","getColumnId","columnId","moveItem","items","to","oldColumn","newColumn","newOrder","updatedColumn","existing","removeItem","insertIdx","insertItem","api","localStore","navId","columns","itemsById","loading","updating","warnings","accessNotification","showCreate","renderCountByColumn","filterOptions","localCollapsed","parseCollapsedColumns","result","discardWarning","catch","verbose","warning","handleWarning","handleError","_error","discardError","loadBoard","all","fetchBoard","loginCheck","fetchCards","finally","filterChanged","collapsed","updateBoardLocation","searchParam","collapsedParam","entries","defaultCollapsed","toString","buildBoardLink","newUser","reload","boardEl","querySelector","updateCards","_items","_cursor","_itemsById","_filterOptions","columnItems","milestone","labels","assignee","label","column_label","entry","newFilter","pollUpdates","currentFilter","removedItem","remainingItems","applyUpdates","poll","teardownHooks","setupHooks","drake","Dragula","matches","checkCancel","moveCard","card","updatedItems","targetColumn","cardIndex","toggleCollapse","openCreateIssue","closeCreateIssue","nextEl","cardId","getCardId","previousEl","previousElementSibling","nextOrder","previousOrder","handleCardDrop","shownItems","links","some","link","isClosingLink","isClosingPull","renderedItems","renderCount","startsWith","criteria","criteriaIndex","columnName","throttling","throttle","scrollHeight","scrollTop","offsetHeight","columnRenderedCount","DEFAULT_PER_COLUMN_RENDER_COUNT","isNewIssueShortcut","isLoginShortcut","taskboard","triggerReload","serviceWorker","register","log"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,25,26,39]}
1
+ {"version":3,"file":"bundle.js","sources":["../../../node_modules/esm-env/false.js","../../../node_modules/svelte/src/internal/shared/utils.js","../../../node_modules/svelte/src/internal/client/constants.js","../../../node_modules/svelte/src/internal/client/reactivity/equality.js","../../../node_modules/svelte/src/internal/flags/index.js","../../../node_modules/svelte/src/constants.js","../../../node_modules/svelte/src/internal/client/reactivity/sources.js","../../../node_modules/svelte/src/internal/client/runtime.js","../../../node_modules/svelte/src/internal/client/errors.js","../../../node_modules/svelte/src/internal/client/dom/hydration.js","../../../node_modules/svelte/src/internal/client/proxy.js","../../../node_modules/svelte/src/internal/client/dom/operations.js","../../../node_modules/svelte/src/internal/client/reactivity/deriveds.js","../../../node_modules/svelte/src/internal/client/reactivity/effects.js","../../../node_modules/svelte/src/internal/client/dom/task.js","../../../node_modules/svelte/src/utils.js","../../../node_modules/svelte/src/internal/client/dom/elements/misc.js","../../../node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js","../../../node_modules/svelte/src/internal/client/dom/elements/events.js","../../../node_modules/svelte/src/internal/client/dom/reconciler.js","../../../node_modules/svelte/src/internal/client/dom/template.js","../../../node_modules/svelte/src/internal/client/render.js","../../../node_modules/svelte/src/internal/client/dom/blocks/if.js","../../../node_modules/svelte/src/internal/client/dom/blocks/each.js","../../../node_modules/svelte/src/internal/client/dom/blocks/snippet.js","../../../node_modules/svelte/src/internal/client/dom/elements/actions.js","../../../node_modules/clsx/dist/clsx.mjs","../../../node_modules/svelte/src/internal/shared/attributes.js","../../../node_modules/svelte/src/internal/client/dom/elements/attributes.js","../../../node_modules/svelte/src/internal/client/dom/elements/class.js","../../../node_modules/svelte/src/internal/client/timing.js","../../../node_modules/svelte/src/internal/client/loop.js","../../../node_modules/svelte/src/internal/client/dom/elements/transitions.js","../../../node_modules/svelte/src/internal/client/dom/elements/bindings/input.js","../../../node_modules/svelte/src/internal/client/dom/elements/bindings/this.js","../../../node_modules/svelte/src/internal/client/reactivity/store.js","../../../node_modules/svelte/src/internal/client/reactivity/props.js","../../../node_modules/svelte/src/index-client.js","../../../node_modules/svelte/src/internal/shared/errors.js","../../../node_modules/svelte/src/internal/disclose-version.js","../../../node_modules/svelte/src/version.js","../../../node_modules/@bpmn-io/draggle/dist/dragula.js","../../board/src/util/Id.js","../../board/src/util/local-store.js","../../board/src/util/history.js","../../board/src/util/index.js","../../board/src/components/HintList.svelte","../../board/src/shortcuts.js","../../board/src/BoardFilter.svelte","../../../node_modules/min-dash/dist/index.esm.js","../../board/src/components/Avatar.svelte","../../../node_modules/svelte/src/transition/index.js","../../board/src/components/Notification.svelte","../../board/src/components/Tag.svelte","../../board/src/components/PullRequestIcon.svelte","../../board/src/components/LinkIcon.svelte","../../board/src/CardStatus.svelte","../../board/src/CollaboratorLinks.svelte","../../board/src/CardLink.svelte","../../board/src/Card.svelte","../../board/src/RepositorySelect.svelte","../../board/src/Api.js","../../board/src/logo-gray.svg","../../board/src/Taskboard.svelte","../../board/src/main.js","../../board/src/util/links.js","../../board/src/components/Loader.svelte","../../board/src/error.svg"],"sourcesContent":["export default false;\n","// Store the references to globals in case someone tries to monkey patch these, causing the below\n// to de-opt (this occurs often when using popular extensions).\nexport var is_array = Array.isArray;\nexport var array_from = Array.from;\nexport var object_keys = Object.keys;\nexport var define_property = Object.defineProperty;\nexport var get_descriptor = Object.getOwnPropertyDescriptor;\nexport var get_descriptors = Object.getOwnPropertyDescriptors;\nexport var object_prototype = Object.prototype;\nexport var array_prototype = Array.prototype;\nexport var get_prototype_of = Object.getPrototypeOf;\n\n/**\n * @param {any} thing\n * @returns {thing is Function}\n */\nexport function is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\nexport const noop = () => {};\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/**\n * @template [T=any]\n * @param {any} value\n * @returns {value is PromiseLike<T>}\n */\nexport function is_promise(value) {\n\treturn typeof value?.then === 'function';\n}\n\n/** @param {Function} fn */\nexport function run(fn) {\n\treturn fn();\n}\n\n/** @param {Array<() => void>} arr */\nexport function run_all(arr) {\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tarr[i]();\n\t}\n}\n\n/**\n * TODO replace with Promise.withResolvers once supported widely enough\n * @template T\n */\nexport function deferred() {\n\t/** @type {(value: T) => void} */\n\tvar resolve;\n\n\t/** @type {(reason: any) => void} */\n\tvar reject;\n\n\t/** @type {Promise<T>} */\n\tvar promise = new Promise((res, rej) => {\n\t\tresolve = res;\n\t\treject = rej;\n\t});\n\n\t// @ts-expect-error\n\treturn { promise, resolve, reject };\n}\n\n/**\n * @template V\n * @param {V} value\n * @param {V | (() => V)} fallback\n * @param {boolean} [lazy]\n * @returns {V}\n */\nexport function fallback(value, fallback, lazy = false) {\n\treturn value === undefined\n\t\t? lazy\n\t\t\t? /** @type {() => V} */ (fallback)()\n\t\t\t: /** @type {V} */ (fallback)\n\t\t: value;\n}\n","export const DERIVED = 1 << 1;\nexport const EFFECT = 1 << 2;\nexport const RENDER_EFFECT = 1 << 3;\nexport const BLOCK_EFFECT = 1 << 4;\nexport const BRANCH_EFFECT = 1 << 5;\nexport const ROOT_EFFECT = 1 << 6;\nexport const BOUNDARY_EFFECT = 1 << 7;\nexport const UNOWNED = 1 << 8;\nexport const DISCONNECTED = 1 << 9;\nexport const CLEAN = 1 << 10;\nexport const DIRTY = 1 << 11;\nexport const MAYBE_DIRTY = 1 << 12;\nexport const INERT = 1 << 13;\nexport const DESTROYED = 1 << 14;\nexport const EFFECT_RAN = 1 << 15;\n/** 'Transparent' effects do not create a transition boundary */\nexport const EFFECT_TRANSPARENT = 1 << 16;\n/** Svelte 4 legacy mode props need to be handled with deriveds and be recognized elsewhere, hence the dedicated flag */\nexport const LEGACY_DERIVED_PROP = 1 << 17;\nexport const INSPECT_EFFECT = 1 << 18;\nexport const HEAD_EFFECT = 1 << 19;\nexport const EFFECT_HAS_DERIVED = 1 << 20;\n\nexport const STATE_SYMBOL = Symbol('$state');\nexport const STATE_SYMBOL_METADATA = Symbol('$state metadata');\nexport const LEGACY_PROPS = Symbol('legacy props');\nexport const LOADING_ATTR_SYMBOL = Symbol('');\n","/** @import { Equals } from '#client' */\n/** @type {Equals} */\nexport function equals(value) {\n\treturn value === this.v;\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function safe_not_equal(a, b) {\n\treturn a != a\n\t\t? b == b\n\t\t: a !== b || (a !== null && typeof a === 'object') || typeof a === 'function';\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function not_equal(a, b) {\n\treturn a !== b;\n}\n\n/** @type {Equals} */\nexport function safe_equals(value) {\n\treturn !safe_not_equal(value, this.v);\n}\n","export let legacy_mode_flag = false;\nexport let tracing_mode_flag = false;\n\nexport function enable_legacy_mode_flag() {\n\tlegacy_mode_flag = true;\n}\n\nexport function enable_tracing_mode_flag() {\n\ttracing_mode_flag = true;\n}\n","export const EACH_ITEM_REACTIVE = 1;\nexport const EACH_INDEX_REACTIVE = 1 << 1;\n/** See EachBlock interface metadata.is_controlled for an explanation what this is */\nexport const EACH_IS_CONTROLLED = 1 << 2;\nexport const EACH_IS_ANIMATED = 1 << 3;\nexport const EACH_ITEM_IMMUTABLE = 1 << 4;\n\nexport const PROPS_IS_IMMUTABLE = 1;\nexport const PROPS_IS_RUNES = 1 << 1;\nexport const PROPS_IS_UPDATED = 1 << 2;\nexport const PROPS_IS_BINDABLE = 1 << 3;\nexport const PROPS_IS_LAZY_INITIAL = 1 << 4;\n\nexport const TRANSITION_IN = 1;\nexport const TRANSITION_OUT = 1 << 1;\nexport const TRANSITION_GLOBAL = 1 << 2;\n\nexport const TEMPLATE_FRAGMENT = 1;\nexport const TEMPLATE_USE_IMPORT_NODE = 1 << 1;\n\nexport const HYDRATION_START = '[';\n/** used to indicate that an `{:else}...` block was rendered */\nexport const HYDRATION_START_ELSE = '[!';\nexport const HYDRATION_END = ']';\nexport const HYDRATION_ERROR = {};\n\nexport const ELEMENT_IS_NAMESPACED = 1;\nexport const ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1;\n\nexport const UNINITIALIZED = Symbol();\n\n// Dev-time component properties\nexport const FILENAME = Symbol('filename');\nexport const HMR = Symbol('hmr');\n\nexport const NAMESPACE_SVG = 'http://www.w3.org/2000/svg';\nexport const NAMESPACE_MATHML = 'http://www.w3.org/1998/Math/MathML';\n\n// we use a list of ignorable runtime warnings because not every runtime warning\n// can be ignored and we want to keep the validation for svelte-ignore in place\nexport const IGNORABLE_RUNTIME_WARNINGS = /** @type {const} */ ([\n\t'state_snapshot_uncloneable',\n\t'binding_property_non_reactive',\n\t'hydration_attribute_changed',\n\t'hydration_html_changed',\n\t'ownership_invalid_binding',\n\t'ownership_invalid_mutation'\n]);\n\n/**\n * Whitespace inside one of these elements will not result in\n * a whitespace node being created in any circumstances. (This\n * list is almost certainly very incomplete)\n * TODO this is currently unused\n */\nexport const ELEMENTS_WITHOUT_TEXT = ['audio', 'datalist', 'dl', 'optgroup', 'select', 'video'];\n","/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tcomponent_context,\n\tactive_reaction,\n\tnew_deps,\n\tactive_effect,\n\tuntracked_writes,\n\tget,\n\tis_runes,\n\tschedule_effect,\n\tset_untracked_writes,\n\tset_signal_status,\n\tuntrack,\n\tincrement_version,\n\tupdate_effect,\n\tderived_sources,\n\tset_derived_sources,\n\tcheck_dirtiness,\n\tset_is_flushing_effect,\n\tis_flushing_effect\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport {\n\tCLEAN,\n\tDERIVED,\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tINSPECT_EFFECT,\n\tUNOWNED,\n\tMAYBE_DIRTY,\n\tBLOCK_EFFECT\n} from '../constants.js';\nimport * as e from '../errors.js';\nimport { legacy_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { get_stack } from '../dev/tracing.js';\n\nexport let inspect_effects = new Set();\n\n/**\n * @param {Set<any>} v\n */\nexport function set_inspect_effects(v) {\n\tinspect_effects = v;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n * @returns {Source<V>}\n */\nexport function source(v, stack) {\n\t/** @type {Value} */\n\tvar signal = {\n\t\tf: 0, // TODO ideally we could skip this altogether, but it causes type errors\n\t\tv,\n\t\treactions: null,\n\t\tequals,\n\t\tversion: 0\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = stack ?? get_stack('CreatedAt');\n\t\tsignal.debug = null;\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {V} v\n */\nexport function state(v) {\n\treturn push_derived_source(source(v));\n}\n\n/**\n * @template V\n * @param {V} initial_value\n * @param {boolean} [immutable]\n * @returns {Source<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function mutable_source(initial_value, immutable = false) {\n\tconst s = source(initial_value);\n\tif (!immutable) {\n\t\ts.equals = safe_equals;\n\t}\n\n\t// bind the signal to the component context, in case we need to\n\t// track updates to trigger beforeUpdate/afterUpdate callbacks\n\tif (legacy_mode_flag && component_context !== null && component_context.l !== null) {\n\t\t(component_context.l.s ??= []).push(s);\n\t}\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {boolean} [immutable]\n * @returns {Source<V>}\n */\nexport function mutable_state(v, immutable = false) {\n\treturn push_derived_source(mutable_source(v, immutable));\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n */\n/*#__NO_SIDE_EFFECTS__*/\nfunction push_derived_source(source) {\n\tif (active_reaction !== null && (active_reaction.f & DERIVED) !== 0) {\n\t\tif (derived_sources === null) {\n\t\t\tset_derived_sources([source]);\n\t\t} else {\n\t\t\tderived_sources.push(source);\n\t\t}\n\t}\n\n\treturn source;\n}\n\n/**\n * @template V\n * @param {Value<V>} source\n * @param {V} value\n */\nexport function mutate(source, value) {\n\tset(\n\t\tsource,\n\t\tuntrack(() => get(source))\n\t);\n\treturn value;\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @returns {V}\n */\nexport function set(source, value) {\n\tif (\n\t\tactive_reaction !== null &&\n\t\tis_runes() &&\n\t\t(active_reaction.f & (DERIVED | BLOCK_EFFECT)) !== 0 &&\n\t\t// If the source was created locally within the current derived, then\n\t\t// we allow the mutation.\n\t\t(derived_sources === null || !derived_sources.includes(source))\n\t) {\n\t\te.state_unsafe_mutation();\n\t}\n\n\treturn internal_set(source, value);\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @returns {V}\n */\nexport function internal_set(source, value) {\n\tif (!source.equals(value)) {\n\t\tsource.v = value;\n\t\tsource.version = increment_version();\n\n\t\tif (DEV && tracing_mode_flag) {\n\t\t\tsource.updated = get_stack('UpdatedAt');\n\t\t}\n\n\t\tmark_reactions(source, DIRTY);\n\n\t\t// If the current signal is running for the first time, it won't have any\n\t\t// reactions as we only allocate and assign the reactions after the signal\n\t\t// has fully executed. So in the case of ensuring it registers the reaction\n\t\t// properly for itself, we need to ensure the current effect actually gets\n\t\t// scheduled. i.e: `$effect(() => x++)`\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tactive_effect !== null &&\n\t\t\t(active_effect.f & CLEAN) !== 0 &&\n\t\t\t(active_effect.f & BRANCH_EFFECT) === 0\n\t\t) {\n\t\t\tif (new_deps !== null && new_deps.includes(source)) {\n\t\t\t\tset_signal_status(active_effect, DIRTY);\n\t\t\t\tschedule_effect(active_effect);\n\t\t\t} else {\n\t\t\t\tif (untracked_writes === null) {\n\t\t\t\t\tset_untracked_writes([source]);\n\t\t\t\t} else {\n\t\t\t\t\tuntracked_writes.push(source);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (DEV && inspect_effects.size > 0) {\n\t\t\tconst inspects = Array.from(inspect_effects);\n\t\t\tvar previously_flushing_effect = is_flushing_effect;\n\t\t\tset_is_flushing_effect(true);\n\t\t\ttry {\n\t\t\t\tfor (const effect of inspects) {\n\t\t\t\t\t// Mark clean inspect-effects as maybe dirty and then check their dirtiness\n\t\t\t\t\t// instead of just updating the effects - this way we avoid overfiring.\n\t\t\t\t\tif ((effect.f & CLEAN) !== 0) {\n\t\t\t\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t\t\t\t}\n\t\t\t\t\tif (check_dirtiness(effect)) {\n\t\t\t\t\t\tupdate_effect(effect);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tset_is_flushing_effect(previously_flushing_effect);\n\t\t\t}\n\t\t\tinspect_effects.clear();\n\t\t}\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {Value} signal\n * @param {number} status should be DIRTY or MAYBE_DIRTY\n * @returns {void}\n */\nfunction mark_reactions(signal, status) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tvar runes = is_runes();\n\tvar length = reactions.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tvar reaction = reactions[i];\n\t\tvar flags = reaction.f;\n\n\t\t// Skip any effects that are already dirty\n\t\tif ((flags & DIRTY) !== 0) continue;\n\n\t\t// In legacy mode, skip the current effect to prevent infinite loops\n\t\tif (!runes && reaction === active_effect) continue;\n\n\t\t// Inspect effects need to run immediately, so that the stack trace makes sense\n\t\tif (DEV && (flags & INSPECT_EFFECT) !== 0) {\n\t\t\tinspect_effects.add(reaction);\n\t\t\tcontinue;\n\t\t}\n\n\t\tset_signal_status(reaction, status);\n\n\t\t// If the signal a) was previously clean or b) is an unowned derived, then mark it\n\t\tif ((flags & (CLEAN | UNOWNED)) !== 0) {\n\t\t\tif ((flags & DERIVED) !== 0) {\n\t\t\t\tmark_reactions(/** @type {Derived} */ (reaction), MAYBE_DIRTY);\n\t\t\t} else {\n\t\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t\t}\n\t\t}\n\t}\n}\n","/** @import { ComponentContext, Derived, Effect, Reaction, Signal, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport { define_property, get_descriptors, get_prototype_of } from '../shared/utils.js';\nimport {\n\tdestroy_block_effect_children,\n\tdestroy_effect_children,\n\tdestroy_effect_deriveds,\n\teffect,\n\texecute_effect_teardown,\n\tunlink_effect\n} from './reactivity/effects.js';\nimport {\n\tEFFECT,\n\tRENDER_EFFECT,\n\tDIRTY,\n\tMAYBE_DIRTY,\n\tCLEAN,\n\tDERIVED,\n\tUNOWNED,\n\tDESTROYED,\n\tINERT,\n\tBRANCH_EFFECT,\n\tSTATE_SYMBOL,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tLEGACY_DERIVED_PROP,\n\tDISCONNECTED,\n\tBOUNDARY_EFFECT\n} from './constants.js';\nimport { flush_tasks } from './dom/task.js';\nimport { add_owner } from './dev/ownership.js';\nimport { internal_set, set, source } from './reactivity/sources.js';\nimport { destroy_derived, execute_derived, update_derived } from './reactivity/deriveds.js';\nimport * as e from './errors.js';\nimport { lifecycle_outside_component } from '../shared/errors.js';\nimport { FILENAME } from '../../constants.js';\nimport { legacy_mode_flag, tracing_mode_flag } from '../flags/index.js';\nimport { tracing_expressions, get_stack } from './dev/tracing.js';\n\nconst FLUSH_MICROTASK = 0;\nconst FLUSH_SYNC = 1;\n// Used for DEV time error handling\n/** @param {WeakSet<Error>} value */\nconst handled_errors = new WeakSet();\nexport let is_throwing_error = false;\n\n// Used for controlling the flush of effects.\nlet scheduler_mode = FLUSH_MICROTASK;\n// Used for handling scheduling\nlet is_micro_task_queued = false;\n\n/** @type {Effect | null} */\nlet last_scheduled_effect = null;\n\nexport let is_flushing_effect = false;\nexport let is_destroying_effect = false;\n\n/** @param {boolean} value */\nexport function set_is_flushing_effect(value) {\n\tis_flushing_effect = value;\n}\n\n/** @param {boolean} value */\nexport function set_is_destroying_effect(value) {\n\tis_destroying_effect = value;\n}\n\n// Handle effect queues\n\n/** @type {Effect[]} */\nlet queued_root_effects = [];\n\nlet flush_count = 0;\n/** @type {Effect[]} Stack of effects, dev only */\nlet dev_effect_stack = [];\n// Handle signal reactivity tree dependencies and reactions\n\n/** @type {null | Reaction} */\nexport let active_reaction = null;\n\n/** @param {null | Reaction} reaction */\nexport function set_active_reaction(reaction) {\n\tactive_reaction = reaction;\n}\n\n/** @type {null | Effect} */\nexport let active_effect = null;\n\n/** @param {null | Effect} effect */\nexport function set_active_effect(effect) {\n\tactive_effect = effect;\n}\n\n/**\n * When sources are created within a derived, we record them so that we can safely allow\n * local mutations to these sources without the side-effect error being invoked unnecessarily.\n * @type {null | Source[]}\n */\nexport let derived_sources = null;\n\n/**\n * @param {Source[] | null} sources\n */\nexport function set_derived_sources(sources) {\n\tderived_sources = sources;\n}\n\n/**\n * The dependencies of the reaction that is currently being executed. In many cases,\n * the dependencies are unchanged between runs, and so this will be `null` unless\n * and until a new dependency is accessed — we track this via `skipped_deps`\n * @type {null | Value[]}\n */\nexport let new_deps = null;\n\nlet skipped_deps = 0;\n\n/**\n * Tracks writes that the effect it's executed in doesn't listen to yet,\n * so that the dependency can be added to the effect later on if it then reads it\n * @type {null | Source[]}\n */\nexport let untracked_writes = null;\n\n/** @param {null | Source[]} value */\nexport function set_untracked_writes(value) {\n\tuntracked_writes = value;\n}\n\n/** @type {number} Used by sources and deriveds for handling updates to unowned deriveds it starts from 1 to differentiate between a created effect and a run one for tracing */\nlet current_version = 1;\n\n// If we are working with a get() chain that has no active container,\n// to prevent memory leaks, we skip adding the reaction.\nexport let skip_reaction = false;\n// Handle collecting all signals which are read during a specific time frame\n/** @type {Set<Value> | null} */\nexport let captured_signals = null;\n\n/** @param {Set<Value> | null} value */\nexport function set_captured_signals(value) {\n\tcaptured_signals = value;\n}\n\n// Handling runtime component context\n/** @type {ComponentContext | null} */\nexport let component_context = null;\n\n/** @param {ComponentContext | null} context */\nexport function set_component_context(context) {\n\tcomponent_context = context;\n}\n\n/**\n * The current component function. Different from current component context:\n * ```html\n * <!-- App.svelte -->\n * <Foo>\n * <Bar /> <!-- context == Foo.svelte, function == App.svelte -->\n * </Foo>\n * ```\n * @type {ComponentContext['function']}\n */\nexport let dev_current_component_function = null;\n\n/** @param {ComponentContext['function']} fn */\nexport function set_dev_current_component_function(fn) {\n\tdev_current_component_function = fn;\n}\n\nexport function increment_version() {\n\treturn ++current_version;\n}\n\n/** @returns {boolean} */\nexport function is_runes() {\n\treturn !legacy_mode_flag || (component_context !== null && component_context.l === null);\n}\n\n/**\n * Determines whether a derived or effect is dirty.\n * If it is MAYBE_DIRTY, will set the status to CLEAN\n * @param {Reaction} reaction\n * @returns {boolean}\n */\nexport function check_dirtiness(reaction) {\n\tvar flags = reaction.f;\n\n\tif ((flags & DIRTY) !== 0) {\n\t\treturn true;\n\t}\n\n\tif ((flags & MAYBE_DIRTY) !== 0) {\n\t\tvar dependencies = reaction.deps;\n\t\tvar is_unowned = (flags & UNOWNED) !== 0;\n\n\t\tif (dependencies !== null) {\n\t\t\tvar i;\n\n\t\t\tif ((flags & DISCONNECTED) !== 0) {\n\t\t\t\tfor (i = 0; i < dependencies.length; i++) {\n\t\t\t\t\t(dependencies[i].reactions ??= []).push(reaction);\n\t\t\t\t}\n\n\t\t\t\treaction.f ^= DISCONNECTED;\n\t\t\t}\n\n\t\t\tfor (i = 0; i < dependencies.length; i++) {\n\t\t\t\tvar dependency = dependencies[i];\n\n\t\t\t\tif (check_dirtiness(/** @type {Derived} */ (dependency))) {\n\t\t\t\t\tupdate_derived(/** @type {Derived} */ (dependency));\n\t\t\t\t}\n\n\t\t\t\t// If we are working with an unowned signal as part of an effect (due to !skip_reaction)\n\t\t\t\t// and the version hasn't changed, we still need to check that this reaction\n\t\t\t\t// is linked to the dependency source – otherwise future updates will not be caught.\n\t\t\t\tif (\n\t\t\t\t\tis_unowned &&\n\t\t\t\t\tactive_effect !== null &&\n\t\t\t\t\t!skip_reaction &&\n\t\t\t\t\t!dependency?.reactions?.includes(reaction)\n\t\t\t\t) {\n\t\t\t\t\t(dependency.reactions ??= []).push(reaction);\n\t\t\t\t}\n\n\t\t\t\tif (dependency.version > reaction.version) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Unowned signals should never be marked as clean unless they\n\t\t// are used within an active_effect without skip_reaction\n\t\tif (!is_unowned || (active_effect !== null && !skip_reaction)) {\n\t\t\tset_signal_status(reaction, CLEAN);\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {unknown} error\n * @param {Effect} effect\n */\nfunction propagate_error(error, effect) {\n\t/** @type {Effect | null} */\n\tvar current = effect;\n\n\twhile (current !== null) {\n\t\tif ((current.f & BOUNDARY_EFFECT) !== 0) {\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tcurrent.fn(error);\n\t\t\t\treturn;\n\t\t\t} catch {\n\t\t\t\t// Remove boundary flag from effect\n\t\t\t\tcurrent.f ^= BOUNDARY_EFFECT;\n\t\t\t}\n\t\t}\n\n\t\tcurrent = current.parent;\n\t}\n\n\tis_throwing_error = false;\n\tthrow error;\n}\n\n/**\n * @param {Effect} effect\n */\nfunction should_rethrow_error(effect) {\n\treturn (\n\t\t(effect.f & DESTROYED) === 0 &&\n\t\t(effect.parent === null || (effect.parent.f & BOUNDARY_EFFECT) === 0)\n\t);\n}\n\nexport function reset_is_throwing_error() {\n\tis_throwing_error = false;\n}\n\n/**\n * @param {unknown} error\n * @param {Effect} effect\n * @param {Effect | null} previous_effect\n * @param {ComponentContext | null} component_context\n */\nexport function handle_error(error, effect, previous_effect, component_context) {\n\tif (is_throwing_error) {\n\t\tif (previous_effect === null) {\n\t\t\tis_throwing_error = false;\n\t\t}\n\n\t\tif (should_rethrow_error(effect)) {\n\t\t\tthrow error;\n\t\t}\n\n\t\treturn;\n\t}\n\n\tif (previous_effect !== null) {\n\t\tis_throwing_error = true;\n\t}\n\n\tif (\n\t\t!DEV ||\n\t\tcomponent_context === null ||\n\t\t!(error instanceof Error) ||\n\t\thandled_errors.has(error)\n\t) {\n\t\tpropagate_error(error, effect);\n\t\treturn;\n\t}\n\n\thandled_errors.add(error);\n\n\tconst component_stack = [];\n\n\tconst effect_name = effect.fn?.name;\n\n\tif (effect_name) {\n\t\tcomponent_stack.push(effect_name);\n\t}\n\n\t/** @type {ComponentContext | null} */\n\tlet current_context = component_context;\n\n\twhile (current_context !== null) {\n\t\tif (DEV) {\n\t\t\t/** @type {string} */\n\t\t\tvar filename = current_context.function?.[FILENAME];\n\n\t\t\tif (filename) {\n\t\t\t\tconst file = filename.split('/').pop();\n\t\t\t\tcomponent_stack.push(file);\n\t\t\t}\n\t\t}\n\n\t\tcurrent_context = current_context.p;\n\t}\n\n\tconst indent = /Firefox/.test(navigator.userAgent) ? ' ' : '\\t';\n\tdefine_property(error, 'message', {\n\t\tvalue: error.message + `\\n${component_stack.map((name) => `\\n${indent}in ${name}`).join('')}\\n`\n\t});\n\tdefine_property(error, 'component_stack', {\n\t\tvalue: component_stack\n\t});\n\n\tconst stack = error.stack;\n\n\t// Filter out internal files from callstack\n\tif (stack) {\n\t\tconst lines = stack.split('\\n');\n\t\tconst new_lines = [];\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst line = lines[i];\n\t\t\tif (line.includes('svelte/src/internal')) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnew_lines.push(line);\n\t\t}\n\t\tdefine_property(error, 'stack', {\n\t\t\tvalue: new_lines.join('\\n')\n\t\t});\n\t}\n\n\tpropagate_error(error, effect);\n\n\tif (should_rethrow_error(effect)) {\n\t\tthrow error;\n\t}\n}\n\n/**\n * @template V\n * @param {Reaction} reaction\n * @returns {V}\n */\nexport function update_reaction(reaction) {\n\tvar previous_deps = new_deps;\n\tvar previous_skipped_deps = skipped_deps;\n\tvar previous_untracked_writes = untracked_writes;\n\tvar previous_reaction = active_reaction;\n\tvar previous_skip_reaction = skip_reaction;\n\tvar prev_derived_sources = derived_sources;\n\tvar previous_component_context = component_context;\n\tvar flags = reaction.f;\n\n\tnew_deps = /** @type {null | Value[]} */ (null);\n\tskipped_deps = 0;\n\tuntracked_writes = null;\n\tactive_reaction = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;\n\tskip_reaction = !is_flushing_effect && (flags & UNOWNED) !== 0;\n\tderived_sources = null;\n\tcomponent_context = reaction.ctx;\n\n\ttry {\n\t\tvar result = /** @type {Function} */ (0, reaction.fn)();\n\t\tvar deps = reaction.deps;\n\n\t\tif (new_deps !== null) {\n\t\t\tvar i;\n\n\t\t\tremove_reactions(reaction, skipped_deps);\n\n\t\t\tif (deps !== null && skipped_deps > 0) {\n\t\t\t\tdeps.length = skipped_deps + new_deps.length;\n\t\t\t\tfor (i = 0; i < new_deps.length; i++) {\n\t\t\t\t\tdeps[skipped_deps + i] = new_deps[i];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treaction.deps = deps = new_deps;\n\t\t\t}\n\n\t\t\tif (!skip_reaction) {\n\t\t\t\tfor (i = skipped_deps; i < deps.length; i++) {\n\t\t\t\t\t(deps[i].reactions ??= []).push(reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (deps !== null && skipped_deps < deps.length) {\n\t\t\tremove_reactions(reaction, skipped_deps);\n\t\t\tdeps.length = skipped_deps;\n\t\t}\n\n\t\treturn result;\n\t} finally {\n\t\tnew_deps = previous_deps;\n\t\tskipped_deps = previous_skipped_deps;\n\t\tuntracked_writes = previous_untracked_writes;\n\t\tactive_reaction = previous_reaction;\n\t\tskip_reaction = previous_skip_reaction;\n\t\tderived_sources = prev_derived_sources;\n\t\tcomponent_context = previous_component_context;\n\t}\n}\n\n/**\n * @template V\n * @param {Reaction} signal\n * @param {Value<V>} dependency\n * @returns {void}\n */\nfunction remove_reaction(signal, dependency) {\n\tlet reactions = dependency.reactions;\n\tif (reactions !== null) {\n\t\tvar index = reactions.indexOf(signal);\n\t\tif (index !== -1) {\n\t\t\tvar new_length = reactions.length - 1;\n\t\t\tif (new_length === 0) {\n\t\t\t\treactions = dependency.reactions = null;\n\t\t\t} else {\n\t\t\t\t// Swap with last element and then remove.\n\t\t\t\treactions[index] = reactions[new_length];\n\t\t\t\treactions.pop();\n\t\t\t}\n\t\t}\n\t}\n\t// If the derived has no reactions, then we can disconnect it from the graph,\n\t// allowing it to either reconnect in the future, or be GC'd by the VM.\n\tif (\n\t\treactions === null &&\n\t\t(dependency.f & DERIVED) !== 0 &&\n\t\t// Destroying a child effect while updating a parent effect can cause a dependency to appear\n\t\t// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`\n\t\t// allows us to skip the expensive work of disconnecting and immediately reconnecting it\n\t\t(new_deps === null || !new_deps.includes(dependency))\n\t) {\n\t\tset_signal_status(dependency, MAYBE_DIRTY);\n\t\t// If we are working with a derived that is owned by an effect, then mark it as being\n\t\t// disconnected.\n\t\tif ((dependency.f & (UNOWNED | DISCONNECTED)) === 0) {\n\t\t\tdependency.f ^= DISCONNECTED;\n\t\t}\n\t\tremove_reactions(/** @type {Derived} **/ (dependency), 0);\n\t}\n}\n\n/**\n * @param {Reaction} signal\n * @param {number} start_index\n * @returns {void}\n */\nexport function remove_reactions(signal, start_index) {\n\tvar dependencies = signal.deps;\n\tif (dependencies === null) return;\n\n\tfor (var i = start_index; i < dependencies.length; i++) {\n\t\tremove_reaction(signal, dependencies[i]);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @returns {void}\n */\nexport function update_effect(effect) {\n\tvar flags = effect.f;\n\n\tif ((flags & DESTROYED) !== 0) {\n\t\treturn;\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar previous_effect = active_effect;\n\tvar previous_component_context = component_context;\n\n\tactive_effect = effect;\n\n\tif (DEV) {\n\t\tvar previous_component_fn = dev_current_component_function;\n\t\tdev_current_component_function = effect.component_function;\n\t}\n\n\ttry {\n\t\tif ((flags & BLOCK_EFFECT) !== 0) {\n\t\t\tdestroy_block_effect_children(effect);\n\t\t} else {\n\t\t\tdestroy_effect_children(effect);\n\t\t}\n\t\tdestroy_effect_deriveds(effect);\n\n\t\texecute_effect_teardown(effect);\n\t\tvar teardown = update_reaction(effect);\n\t\teffect.teardown = typeof teardown === 'function' ? teardown : null;\n\t\teffect.version = current_version;\n\n\t\tif (DEV) {\n\t\t\tdev_effect_stack.push(effect);\n\t\t}\n\t} catch (error) {\n\t\thandle_error(error, effect, previous_effect, previous_component_context || effect.ctx);\n\t} finally {\n\t\tactive_effect = previous_effect;\n\n\t\tif (DEV) {\n\t\t\tdev_current_component_function = previous_component_fn;\n\t\t}\n\t}\n}\n\nfunction log_effect_stack() {\n\t// eslint-disable-next-line no-console\n\tconsole.error(\n\t\t'Last ten effects were: ',\n\t\tdev_effect_stack.slice(-10).map((d) => d.fn)\n\t);\n\tdev_effect_stack = [];\n}\n\nfunction infinite_loop_guard() {\n\tif (flush_count > 1000) {\n\t\tflush_count = 0;\n\t\ttry {\n\t\t\te.effect_update_depth_exceeded();\n\t\t} catch (error) {\n\t\t\tif (DEV) {\n\t\t\t\t// stack is garbage, ignore. Instead add a console.error message.\n\t\t\t\tdefine_property(error, 'stack', {\n\t\t\t\t\tvalue: ''\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Try and handle the error so it can be caught at a boundary, that's\n\t\t\t// if there's an effect available from when it was last scheduled\n\t\t\tif (last_scheduled_effect !== null) {\n\t\t\t\tif (DEV) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\thandle_error(error, last_scheduled_effect, null, null);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// Only log the effect stack if the error is re-thrown\n\t\t\t\t\t\tlog_effect_stack();\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\thandle_error(error, last_scheduled_effect, null, null);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (DEV) {\n\t\t\t\t\tlog_effect_stack();\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\tflush_count++;\n}\n\n/**\n * @param {Array<Effect>} root_effects\n * @returns {void}\n */\nfunction flush_queued_root_effects(root_effects) {\n\tvar length = root_effects.length;\n\tif (length === 0) {\n\t\treturn;\n\t}\n\tinfinite_loop_guard();\n\n\tvar previously_flushing_effect = is_flushing_effect;\n\tis_flushing_effect = true;\n\n\ttry {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tvar effect = root_effects[i];\n\n\t\t\tif ((effect.f & CLEAN) === 0) {\n\t\t\t\teffect.f ^= CLEAN;\n\t\t\t}\n\n\t\t\t/** @type {Effect[]} */\n\t\t\tvar collected_effects = [];\n\n\t\t\tprocess_effects(effect, collected_effects);\n\t\t\tflush_queued_effects(collected_effects);\n\t\t}\n\t} finally {\n\t\tis_flushing_effect = previously_flushing_effect;\n\t}\n}\n\n/**\n * @param {Array<Effect>} effects\n * @returns {void}\n */\nfunction flush_queued_effects(effects) {\n\tvar length = effects.length;\n\tif (length === 0) return;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tvar effect = effects[i];\n\n\t\tif ((effect.f & (DESTROYED | INERT)) === 0) {\n\t\t\ttry {\n\t\t\t\tif (check_dirtiness(effect)) {\n\t\t\t\t\tupdate_effect(effect);\n\n\t\t\t\t\t// Effects with no dependencies or teardown do not get added to the effect tree.\n\t\t\t\t\t// Deferred effects (e.g. `$effect(...)`) _are_ added to the tree because we\n\t\t\t\t\t// don't know if we need to keep them until they are executed. Doing the check\n\t\t\t\t\t// here (rather than in `update_effect`) allows us to skip the work for\n\t\t\t\t\t// immediate effects.\n\t\t\t\t\tif (effect.deps === null && effect.first === null && effect.nodes_start === null) {\n\t\t\t\t\t\tif (effect.teardown === null) {\n\t\t\t\t\t\t\t// remove this effect from the graph\n\t\t\t\t\t\t\tunlink_effect(effect);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// keep the effect in the graph, but free up some memory\n\t\t\t\t\t\t\teffect.fn = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\thandle_error(error, effect, null, effect.ctx);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction process_deferred() {\n\tis_micro_task_queued = false;\n\tif (flush_count > 1001) {\n\t\treturn;\n\t}\n\tconst previous_queued_root_effects = queued_root_effects;\n\tqueued_root_effects = [];\n\tflush_queued_root_effects(previous_queued_root_effects);\n\n\tif (!is_micro_task_queued) {\n\t\tflush_count = 0;\n\t\tlast_scheduled_effect = null;\n\t\tif (DEV) {\n\t\t\tdev_effect_stack = [];\n\t\t}\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function schedule_effect(signal) {\n\tif (scheduler_mode === FLUSH_MICROTASK) {\n\t\tif (!is_micro_task_queued) {\n\t\t\tis_micro_task_queued = true;\n\t\t\tqueueMicrotask(process_deferred);\n\t\t}\n\t}\n\n\tlast_scheduled_effect = signal;\n\n\tvar effect = signal;\n\n\twhile (effect.parent !== null) {\n\t\teffect = effect.parent;\n\t\tvar flags = effect.f;\n\n\t\tif ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {\n\t\t\tif ((flags & CLEAN) === 0) return;\n\t\t\teffect.f ^= CLEAN;\n\t\t}\n\t}\n\n\tqueued_root_effects.push(effect);\n}\n\n/**\n *\n * This function both runs render effects and collects user effects in topological order\n * from the starting effect passed in. Effects will be collected when they match the filtered\n * bitwise flag passed in only. The collected effects array will be populated with all the user\n * effects to be flushed.\n *\n * @param {Effect} effect\n * @param {Effect[]} collected_effects\n * @returns {void}\n */\nfunction process_effects(effect, collected_effects) {\n\tvar current_effect = effect.first;\n\tvar effects = [];\n\n\tmain_loop: while (current_effect !== null) {\n\t\tvar flags = current_effect.f;\n\t\tvar is_branch = (flags & BRANCH_EFFECT) !== 0;\n\t\tvar is_skippable_branch = is_branch && (flags & CLEAN) !== 0;\n\t\tvar sibling = current_effect.next;\n\n\t\tif (!is_skippable_branch && (flags & INERT) === 0) {\n\t\t\tif ((flags & RENDER_EFFECT) !== 0) {\n\t\t\t\tif (is_branch) {\n\t\t\t\t\tcurrent_effect.f ^= CLEAN;\n\t\t\t\t} else {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (check_dirtiness(current_effect)) {\n\t\t\t\t\t\t\tupdate_effect(current_effect);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\thandle_error(error, current_effect, null, current_effect.ctx);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar child = current_effect.first;\n\n\t\t\t\tif (child !== null) {\n\t\t\t\t\tcurrent_effect = child;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t} else if ((flags & EFFECT) !== 0) {\n\t\t\t\teffects.push(current_effect);\n\t\t\t}\n\t\t}\n\n\t\tif (sibling === null) {\n\t\t\tlet parent = current_effect.parent;\n\n\t\t\twhile (parent !== null) {\n\t\t\t\tif (effect === parent) {\n\t\t\t\t\tbreak main_loop;\n\t\t\t\t}\n\t\t\t\tvar parent_sibling = parent.next;\n\t\t\t\tif (parent_sibling !== null) {\n\t\t\t\t\tcurrent_effect = parent_sibling;\n\t\t\t\t\tcontinue main_loop;\n\t\t\t\t}\n\t\t\t\tparent = parent.parent;\n\t\t\t}\n\t\t}\n\n\t\tcurrent_effect = sibling;\n\t}\n\n\t// We might be dealing with many effects here, far more than can be spread into\n\t// an array push call (callstack overflow). So let's deal with each effect in a loop.\n\tfor (var i = 0; i < effects.length; i++) {\n\t\tchild = effects[i];\n\t\tcollected_effects.push(child);\n\t\tprocess_effects(child, collected_effects);\n\t}\n}\n\n/**\n * Internal version of `flushSync` with the option to not flush previous effects.\n * Returns the result of the passed function, if given.\n * @param {() => any} [fn]\n * @returns {any}\n */\nexport function flush_sync(fn) {\n\tvar previous_scheduler_mode = scheduler_mode;\n\tvar previous_queued_root_effects = queued_root_effects;\n\n\ttry {\n\t\tinfinite_loop_guard();\n\n\t\t/** @type {Effect[]} */\n\t\tconst root_effects = [];\n\n\t\tscheduler_mode = FLUSH_SYNC;\n\t\tqueued_root_effects = root_effects;\n\t\tis_micro_task_queued = false;\n\n\t\tflush_queued_root_effects(previous_queued_root_effects);\n\n\t\tvar result = fn?.();\n\n\t\tflush_tasks();\n\t\tif (queued_root_effects.length > 0 || root_effects.length > 0) {\n\t\t\tflush_sync();\n\t\t}\n\n\t\tflush_count = 0;\n\t\tlast_scheduled_effect = null;\n\t\tif (DEV) {\n\t\t\tdev_effect_stack = [];\n\t\t}\n\n\t\treturn result;\n\t} finally {\n\t\tscheduler_mode = previous_scheduler_mode;\n\t\tqueued_root_effects = previous_queued_root_effects;\n\t}\n}\n\n/**\n * Returns a promise that resolves once any pending state changes have been applied.\n * @returns {Promise<void>}\n */\nexport async function tick() {\n\tawait Promise.resolve();\n\t// By calling flush_sync we guarantee that any pending state changes are applied after one tick.\n\t// TODO look into whether we can make flushing subsequent updates synchronously in the future.\n\tflush_sync();\n}\n\n/**\n * @template V\n * @param {Value<V>} signal\n * @returns {V}\n */\nexport function get(signal) {\n\tvar flags = signal.f;\n\tvar is_derived = (flags & DERIVED) !== 0;\n\n\t// If the derived is destroyed, just execute it again without retaining\n\t// its memoisation properties as the derived is stale\n\tif (is_derived && (flags & DESTROYED) !== 0) {\n\t\tvar value = execute_derived(/** @type {Derived} */ (signal));\n\t\t// Ensure the derived remains destroyed\n\t\tdestroy_derived(/** @type {Derived} */ (signal));\n\t\treturn value;\n\t}\n\n\tif (captured_signals !== null) {\n\t\tcaptured_signals.add(signal);\n\t}\n\n\t// Register the dependency on the current reaction signal.\n\tif (active_reaction !== null) {\n\t\tif (derived_sources !== null && derived_sources.includes(signal)) {\n\t\t\te.state_unsafe_local_read();\n\t\t}\n\t\tvar deps = active_reaction.deps;\n\n\t\t// If the signal is accessing the same dependencies in the same\n\t\t// order as it did last time, increment `skipped_deps`\n\t\t// rather than updating `new_deps`, which creates GC cost\n\t\tif (new_deps === null && deps !== null && deps[skipped_deps] === signal) {\n\t\t\tskipped_deps++;\n\t\t} else if (new_deps === null) {\n\t\t\tnew_deps = [signal];\n\t\t} else {\n\t\t\tnew_deps.push(signal);\n\t\t}\n\n\t\tif (\n\t\t\tuntracked_writes !== null &&\n\t\t\tactive_effect !== null &&\n\t\t\t(active_effect.f & CLEAN) !== 0 &&\n\t\t\t(active_effect.f & BRANCH_EFFECT) === 0 &&\n\t\t\tuntracked_writes.includes(signal)\n\t\t) {\n\t\t\tset_signal_status(active_effect, DIRTY);\n\t\t\tschedule_effect(active_effect);\n\t\t}\n\t} else if (is_derived && /** @type {Derived} */ (signal).deps === null) {\n\t\tvar derived = /** @type {Derived} */ (signal);\n\t\tvar parent = derived.parent;\n\t\tvar target = derived;\n\n\t\twhile (parent !== null) {\n\t\t\t// Attach the derived to the nearest parent effect, if there are deriveds\n\t\t\t// in between then we also need to attach them too\n\t\t\tif ((parent.f & DERIVED) !== 0) {\n\t\t\t\tvar parent_derived = /** @type {Derived} */ (parent);\n\n\t\t\t\ttarget = parent_derived;\n\t\t\t\tparent = parent_derived.parent;\n\t\t\t} else {\n\t\t\t\tvar parent_effect = /** @type {Effect} */ (parent);\n\n\t\t\t\tif (!parent_effect.deriveds?.includes(target)) {\n\t\t\t\t\t(parent_effect.deriveds ??= []).push(target);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (is_derived) {\n\t\tderived = /** @type {Derived} */ (signal);\n\n\t\tif (check_dirtiness(derived)) {\n\t\t\tupdate_derived(derived);\n\t\t}\n\t}\n\n\tif (\n\t\tDEV &&\n\t\ttracing_mode_flag &&\n\t\ttracing_expressions !== null &&\n\t\tactive_reaction !== null &&\n\t\ttracing_expressions.reaction === active_reaction\n\t) {\n\t\t// Used when mapping state between special blocks like `each`\n\t\tif (signal.debug) {\n\t\t\tsignal.debug();\n\t\t} else if (signal.created) {\n\t\t\tvar entry = tracing_expressions.entries.get(signal);\n\n\t\t\tif (entry === undefined) {\n\t\t\t\tentry = { read: [] };\n\t\t\t\ttracing_expressions.entries.set(signal, entry);\n\t\t\t}\n\n\t\t\tentry.read.push(get_stack('TracedAt'));\n\t\t}\n\t}\n\n\treturn signal.v;\n}\n\n/**\n * Like `get`, but checks for `undefined`. Used for `var` declarations because they can be accessed before being declared\n * @template V\n * @param {Value<V> | undefined} signal\n * @returns {V | undefined}\n */\nexport function safe_get(signal) {\n\treturn signal && get(signal);\n}\n\n/**\n * Capture an array of all the signals that are read when `fn` is called\n * @template T\n * @param {() => T} fn\n */\nexport function capture_signals(fn) {\n\tvar previous_captured_signals = captured_signals;\n\tcaptured_signals = new Set();\n\n\tvar captured = captured_signals;\n\tvar signal;\n\n\ttry {\n\t\tuntrack(fn);\n\t\tif (previous_captured_signals !== null) {\n\t\t\tfor (signal of captured_signals) {\n\t\t\t\tprevious_captured_signals.add(signal);\n\t\t\t}\n\t\t}\n\t} finally {\n\t\tcaptured_signals = previous_captured_signals;\n\t}\n\n\treturn captured;\n}\n\n/**\n * Invokes a function and captures all signals that are read during the invocation,\n * then invalidates them.\n * @param {() => any} fn\n */\nexport function invalidate_inner_signals(fn) {\n\tvar captured = capture_signals(() => untrack(fn));\n\n\tfor (var signal of captured) {\n\t\t// Go one level up because derived signals created as part of props in legacy mode\n\t\tif ((signal.f & LEGACY_DERIVED_PROP) !== 0) {\n\t\t\tfor (const dep of /** @type {Derived} */ (signal).deps || []) {\n\t\t\t\tif ((dep.f & DERIVED) === 0) {\n\t\t\t\t\t// Use internal_set instead of set here and below to avoid mutation validation\n\t\t\t\t\tinternal_set(dep, dep.v);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tinternal_set(signal, signal.v);\n\t\t}\n\t}\n}\n\n/**\n * When used inside a [`$derived`](https://svelte.dev/docs/svelte/$derived) or [`$effect`](https://svelte.dev/docs/svelte/$effect),\n * any state read inside `fn` will not be treated as a dependency.\n *\n * ```ts\n * $effect(() => {\n * // this will run when `data` changes, but not when `time` changes\n * save(data, {\n * timestamp: untrack(() => time)\n * });\n * });\n * ```\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function untrack(fn) {\n\tconst previous_reaction = active_reaction;\n\ttry {\n\t\tactive_reaction = null;\n\t\treturn fn();\n\t} finally {\n\t\tactive_reaction = previous_reaction;\n\t}\n}\n\nconst STATUS_MASK = ~(DIRTY | MAYBE_DIRTY | CLEAN);\n\n/**\n * @param {Signal} signal\n * @param {number} status\n * @returns {void}\n */\nexport function set_signal_status(signal, status) {\n\tsignal.f = (signal.f & STATUS_MASK) | status;\n}\n\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\tconst context_map = get_or_init_context_map('getContext');\n\tconst result = /** @type {T} */ (context_map.get(key));\n\n\tif (DEV) {\n\t\tconst fn = /** @type {ComponentContext} */ (component_context).function;\n\t\tif (fn) {\n\t\t\tadd_owner(result, fn, true);\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tconst context_map = get_or_init_context_map('setContext');\n\tcontext_map.set(key, context);\n\treturn context;\n}\n\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\tconst context_map = get_or_init_context_map('hasContext');\n\treturn context_map.has(key);\n}\n\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * @template {Map<any, any>} [T=Map<any, any>]\n * @returns {T}\n */\nexport function getAllContexts() {\n\tconst context_map = get_or_init_context_map('getAllContexts');\n\n\tif (DEV) {\n\t\tconst fn = component_context?.function;\n\t\tif (fn) {\n\t\t\tfor (const value of context_map.values()) {\n\t\t\t\tadd_owner(value, fn, true);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn /** @type {T} */ (context_map);\n}\n\n/**\n * @param {string} name\n * @returns {Map<unknown, unknown>}\n */\nfunction get_or_init_context_map(name) {\n\tif (component_context === null) {\n\t\tlifecycle_outside_component(name);\n\t}\n\n\treturn (component_context.c ??= new Map(get_parent_context(component_context) || undefined));\n}\n\n/**\n * @param {ComponentContext} component_context\n * @returns {Map<unknown, unknown> | null}\n */\nfunction get_parent_context(component_context) {\n\tlet parent = component_context.p;\n\twhile (parent !== null) {\n\t\tconst context_map = parent.c;\n\t\tif (context_map !== null) {\n\t\t\treturn context_map;\n\t\t}\n\t\tparent = parent.p;\n\t}\n\treturn null;\n}\n\n/**\n * @template {number | bigint} T\n * @param {Value<T>} signal\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update(signal, d = 1) {\n\tvar value = get(signal);\n\tvar result = d === 1 ? value++ : value--;\n\n\tset(signal, value);\n\n\t// @ts-expect-error\n\treturn result;\n}\n\n/**\n * @template {number | bigint} T\n * @param {Value<T>} signal\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update_pre(signal, d = 1) {\n\tvar value = get(signal);\n\n\t// @ts-expect-error\n\treturn set(signal, d === 1 ? ++value : --value);\n}\n\n/**\n * @param {Record<string, unknown>} obj\n * @param {string[]} keys\n * @returns {Record<string, unknown>}\n */\nexport function exclude_from_object(obj, keys) {\n\t/** @type {Record<string, unknown>} */\n\tvar result = {};\n\n\tfor (var key in obj) {\n\t\tif (!keys.includes(key)) {\n\t\t\tresult[key] = obj[key];\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * @param {Record<string, unknown>} props\n * @param {any} runes\n * @param {Function} [fn]\n * @returns {void}\n */\nexport function push(props, runes = false, fn) {\n\tcomponent_context = {\n\t\tp: component_context,\n\t\tc: null,\n\t\te: null,\n\t\tm: false,\n\t\ts: props,\n\t\tx: null,\n\t\tl: null\n\t};\n\n\tif (legacy_mode_flag && !runes) {\n\t\tcomponent_context.l = {\n\t\t\ts: null,\n\t\t\tu: null,\n\t\t\tr1: [],\n\t\t\tr2: source(false)\n\t\t};\n\t}\n\n\tif (DEV) {\n\t\t// component function\n\t\tcomponent_context.function = fn;\n\t\tdev_current_component_function = fn;\n\t}\n}\n\n/**\n * @template {Record<string, any>} T\n * @param {T} [component]\n * @returns {T}\n */\nexport function pop(component) {\n\tconst context_stack_item = component_context;\n\tif (context_stack_item !== null) {\n\t\tif (component !== undefined) {\n\t\t\tcontext_stack_item.x = component;\n\t\t}\n\t\tconst component_effects = context_stack_item.e;\n\t\tif (component_effects !== null) {\n\t\t\tvar previous_effect = active_effect;\n\t\t\tvar previous_reaction = active_reaction;\n\t\t\tcontext_stack_item.e = null;\n\t\t\ttry {\n\t\t\t\tfor (var i = 0; i < component_effects.length; i++) {\n\t\t\t\t\tvar component_effect = component_effects[i];\n\t\t\t\t\tset_active_effect(component_effect.effect);\n\t\t\t\t\tset_active_reaction(component_effect.reaction);\n\t\t\t\t\teffect(component_effect.fn);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tset_active_effect(previous_effect);\n\t\t\t\tset_active_reaction(previous_reaction);\n\t\t\t}\n\t\t}\n\t\tcomponent_context = context_stack_item.p;\n\t\tif (DEV) {\n\t\t\tdev_current_component_function = context_stack_item.p?.function ?? null;\n\t\t}\n\t\tcontext_stack_item.m = true;\n\t}\n\t// Micro-optimization: Don't set .a above to the empty object\n\t// so it can be garbage-collected when the return here is unused\n\treturn component || /** @type {T} */ ({});\n}\n\n/**\n * Possibly traverse an object and read all its properties so that they're all reactive in case this is `$state`.\n * Does only check first level of an object for performance reasons (heuristic should be good for 99% of all cases).\n * @param {any} value\n * @returns {void}\n */\nexport function deep_read_state(value) {\n\tif (typeof value !== 'object' || !value || value instanceof EventTarget) {\n\t\treturn;\n\t}\n\n\tif (STATE_SYMBOL in value) {\n\t\tdeep_read(value);\n\t} else if (!Array.isArray(value)) {\n\t\tfor (let key in value) {\n\t\t\tconst prop = value[key];\n\t\t\tif (typeof prop === 'object' && prop && STATE_SYMBOL in prop) {\n\t\t\t\tdeep_read(prop);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Deeply traverse an object and read all its properties\n * so that they're all reactive in case this is `$state`\n * @param {any} value\n * @param {Set<any>} visited\n * @returns {void}\n */\nexport function deep_read(value, visited = new Set()) {\n\tif (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t// We don't want to traverse DOM elements\n\t\t!(value instanceof EventTarget) &&\n\t\t!visited.has(value)\n\t) {\n\t\tvisited.add(value);\n\t\t// When working with a possible SvelteDate, this\n\t\t// will ensure we capture changes to it.\n\t\tif (value instanceof Date) {\n\t\t\tvalue.getTime();\n\t\t}\n\t\tfor (let key in value) {\n\t\t\ttry {\n\t\t\t\tdeep_read(value[key], visited);\n\t\t\t} catch (e) {\n\t\t\t\t// continue\n\t\t\t}\n\t\t}\n\t\tconst proto = get_prototype_of(value);\n\t\tif (\n\t\t\tproto !== Object.prototype &&\n\t\t\tproto !== Array.prototype &&\n\t\t\tproto !== Map.prototype &&\n\t\t\tproto !== Set.prototype &&\n\t\t\tproto !== Date.prototype\n\t\t) {\n\t\t\tconst descriptors = get_descriptors(proto);\n\t\t\tfor (let key in descriptors) {\n\t\t\t\tconst get = descriptors[key].get;\n\t\t\t\tif (get) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tget.call(value);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// continue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nif (DEV) {\n\t/**\n\t * @param {string} rune\n\t */\n\tfunction throw_rune_error(rune) {\n\t\tif (!(rune in globalThis)) {\n\t\t\t// TODO if people start adjusting the \"this can contain runes\" config through v-p-s more, adjust this message\n\t\t\t/** @type {any} */\n\t\t\tlet value; // let's hope noone modifies this global, but belts and braces\n\t\t\tObject.defineProperty(globalThis, rune, {\n\t\t\t\tconfigurable: true,\n\t\t\t\t// eslint-disable-next-line getter-return\n\t\t\t\tget: () => {\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\n\t\t\t\t\te.rune_outside_svelte(rune);\n\t\t\t\t},\n\t\t\t\tset: (v) => {\n\t\t\t\t\tvalue = v;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tthrow_rune_error('$state');\n\tthrow_rune_error('$effect');\n\tthrow_rune_error('$derived');\n\tthrow_rune_error('$inspect');\n\tthrow_rune_error('$props');\n\tthrow_rune_error('$bindable');\n}\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\n/**\n * Using `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\n * @returns {never}\n */\nexport function bind_invalid_checkbox_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_checkbox_value\\nUsing \\`bind:value\\` together with a checkbox input is not allowed. Use \\`bind:checked\\` instead\\nhttps://svelte.dev/e/bind_invalid_checkbox_value`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_checkbox_value`);\n\t}\n}\n\n/**\n * Component %component% has an export named `%key%` that a consumer component is trying to access using `bind:%key%`, which is disallowed. Instead, use `bind:this` (e.g. `<%name% bind:this={component} />`) and then access the property on the bound component instance (e.g. `component.%key%`)\n * @param {string} component\n * @param {string} key\n * @param {string} name\n * @returns {never}\n */\nexport function bind_invalid_export(component, key, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_export\\nComponent ${component} has an export named \\`${key}\\` that a consumer component is trying to access using \\`bind:${key}\\`, which is disallowed. Instead, use \\`bind:this\\` (e.g. \\`<${name} bind:this={component} />\\`) and then access the property on the bound component instance (e.g. \\`component.${key}\\`)\\nhttps://svelte.dev/e/bind_invalid_export`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_export`);\n\t}\n}\n\n/**\n * A component is attempting to bind to a non-bindable property `%key%` belonging to %component% (i.e. `<%name% bind:%key%={...}>`). To mark a property as bindable: `let { %key% = $bindable() } = $props()`\n * @param {string} key\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function bind_not_bindable(key, component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_not_bindable\\nA component is attempting to bind to a non-bindable property \\`${key}\\` belonging to ${component} (i.e. \\`<${name} bind:${key}={...}>\\`). To mark a property as bindable: \\`let { ${key} = $bindable() } = $props()\\`\\nhttps://svelte.dev/e/bind_not_bindable`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_not_bindable`);\n\t}\n}\n\n/**\n * %parent% called `%method%` on an instance of %component%, which is no longer valid in Svelte 5\n * @param {string} parent\n * @param {string} method\n * @param {string} component\n * @returns {never}\n */\nexport function component_api_changed(parent, method, component) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_changed\\n${parent} called \\`${method}\\` on an instance of ${component}, which is no longer valid in Svelte 5\\nhttps://svelte.dev/e/component_api_changed`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_changed`);\n\t}\n}\n\n/**\n * Attempted to instantiate %component% with `new %name%`, which is no longer valid in Svelte 5. If this component is not under your control, set the `compatibility.componentApi` compiler option to `4` to keep it working.\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function component_api_invalid_new(component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_invalid_new\\nAttempted to instantiate ${component} with \\`new ${name}\\`, which is no longer valid in Svelte 5. If this component is not under your control, set the \\`compatibility.componentApi\\` compiler option to \\`4\\` to keep it working.\\nhttps://svelte.dev/e/component_api_invalid_new`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_invalid_new`);\n\t}\n}\n\n/**\n * A derived value cannot reference itself recursively\n * @returns {never}\n */\nexport function derived_references_self() {\n\tif (DEV) {\n\t\tconst error = new Error(`derived_references_self\\nA derived value cannot reference itself recursively\\nhttps://svelte.dev/e/derived_references_self`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/derived_references_self`);\n\t}\n}\n\n/**\n * Keyed each block has duplicate key `%value%` at indexes %a% and %b%\n * @param {string} a\n * @param {string} b\n * @param {string | undefined | null} [value]\n * @returns {never}\n */\nexport function each_key_duplicate(a, b, value) {\n\tif (DEV) {\n\t\tconst error = new Error(`each_key_duplicate\\n${value ? `Keyed each block has duplicate key \\`${value}\\` at indexes ${a} and ${b}` : `Keyed each block has duplicate key at indexes ${a} and ${b}`}\\nhttps://svelte.dev/e/each_key_duplicate`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/each_key_duplicate`);\n\t}\n}\n\n/**\n * `%rune%` cannot be used inside an effect cleanup function\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_in_teardown(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_teardown\\n\\`${rune}\\` cannot be used inside an effect cleanup function\\nhttps://svelte.dev/e/effect_in_teardown`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_teardown`);\n\t}\n}\n\n/**\n * Effect cannot be created inside a `$derived` value that was not itself created inside an effect\n * @returns {never}\n */\nexport function effect_in_unowned_derived() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_unowned_derived\\nEffect cannot be created inside a \\`$derived\\` value that was not itself created inside an effect\\nhttps://svelte.dev/e/effect_in_unowned_derived`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_unowned_derived`);\n\t}\n}\n\n/**\n * `%rune%` can only be used inside an effect (e.g. during component initialisation)\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_orphan(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_orphan\\n\\`${rune}\\` can only be used inside an effect (e.g. during component initialisation)\\nhttps://svelte.dev/e/effect_orphan`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_orphan`);\n\t}\n}\n\n/**\n * Maximum update depth exceeded. This can happen when a reactive block or effect repeatedly sets a new value. Svelte limits the number of nested updates to prevent infinite loops\n * @returns {never}\n */\nexport function effect_update_depth_exceeded() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_update_depth_exceeded\\nMaximum update depth exceeded. This can happen when a reactive block or effect repeatedly sets a new value. Svelte limits the number of nested updates to prevent infinite loops\\nhttps://svelte.dev/e/effect_update_depth_exceeded`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);\n\t}\n}\n\n/**\n * Failed to hydrate the application\n * @returns {never}\n */\nexport function hydration_failed() {\n\tif (DEV) {\n\t\tconst error = new Error(`hydration_failed\\nFailed to hydrate the application\\nhttps://svelte.dev/e/hydration_failed`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydration_failed`);\n\t}\n}\n\n/**\n * Could not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\n * @returns {never}\n */\nexport function invalid_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet\\nCould not \\`{@render}\\` snippet due to the expression being \\`null\\` or \\`undefined\\`. Consider using optional chaining \\`{@render snippet?.()}\\`\\nhttps://svelte.dev/e/invalid_snippet`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet`);\n\t}\n}\n\n/**\n * `%name%(...)` cannot be used in runes mode\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_legacy_only(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_legacy_only\\n\\`${name}(...)\\` cannot be used in runes mode\\nhttps://svelte.dev/e/lifecycle_legacy_only`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_legacy_only`);\n\t}\n}\n\n/**\n * Cannot do `bind:%key%={undefined}` when `%key%` has a fallback value\n * @param {string} key\n * @returns {never}\n */\nexport function props_invalid_value(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_invalid_value\\nCannot do \\`bind:${key}={undefined}\\` when \\`${key}\\` has a fallback value\\nhttps://svelte.dev/e/props_invalid_value`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_invalid_value`);\n\t}\n}\n\n/**\n * Rest element properties of `$props()` such as `%property%` are readonly\n * @param {string} property\n * @returns {never}\n */\nexport function props_rest_readonly(property) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_rest_readonly\\nRest element properties of \\`$props()\\` such as \\`${property}\\` are readonly\\nhttps://svelte.dev/e/props_rest_readonly`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_rest_readonly`);\n\t}\n}\n\n/**\n * The `%rune%` rune is only available inside `.svelte` and `.svelte.js/ts` files\n * @param {string} rune\n * @returns {never}\n */\nexport function rune_outside_svelte(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`rune_outside_svelte\\nThe \\`${rune}\\` rune is only available inside \\`.svelte\\` and \\`.svelte.js/ts\\` files\\nhttps://svelte.dev/e/rune_outside_svelte`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/rune_outside_svelte`);\n\t}\n}\n\n/**\n * Property descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\n * @returns {never}\n */\nexport function state_descriptors_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_descriptors_fixed\\nProperty descriptors defined on \\`$state\\` objects must contain \\`value\\` and always be \\`enumerable\\`, \\`configurable\\` and \\`writable\\`.\\nhttps://svelte.dev/e/state_descriptors_fixed`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_descriptors_fixed`);\n\t}\n}\n\n/**\n * Cannot set prototype of `$state` object\n * @returns {never}\n */\nexport function state_prototype_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_prototype_fixed\\nCannot set prototype of \\`$state\\` object\\nhttps://svelte.dev/e/state_prototype_fixed`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_prototype_fixed`);\n\t}\n}\n\n/**\n * Reading state that was created inside the same derived is forbidden. Consider using `untrack` to read locally created state\n * @returns {never}\n */\nexport function state_unsafe_local_read() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_unsafe_local_read\\nReading state that was created inside the same derived is forbidden. Consider using \\`untrack\\` to read locally created state\\nhttps://svelte.dev/e/state_unsafe_local_read`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_unsafe_local_read`);\n\t}\n}\n\n/**\n * Updating state inside a derived or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\n * @returns {never}\n */\nexport function state_unsafe_mutation() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_unsafe_mutation\\nUpdating state inside a derived or a template expression is forbidden. If the value should not be reactive, declare it without \\`$state\\`\\nhttps://svelte.dev/e/state_unsafe_mutation`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_unsafe_mutation`);\n\t}\n}","/** @import { TemplateNode } from '#client' */\n\nimport {\n\tHYDRATION_END,\n\tHYDRATION_ERROR,\n\tHYDRATION_START,\n\tHYDRATION_START_ELSE\n} from '../../../constants.js';\nimport * as w from '../warnings.js';\nimport { get_next_sibling } from './operations.js';\n\n/**\n * Use this variable to guard everything related to hydration code so it can be treeshaken out\n * if the user doesn't use the `hydrate` method and these code paths are therefore not needed.\n */\nexport let hydrating = false;\n\n/** @param {boolean} value */\nexport function set_hydrating(value) {\n\thydrating = value;\n}\n\n/**\n * The node that is currently being hydrated. This starts out as the first node inside the opening\n * <!--[--> comment, and updates each time a component calls `$.child(...)` or `$.sibling(...)`.\n * When entering a block (e.g. `{#if ...}`), `hydrate_node` is the block opening comment; by the\n * time we leave the block it is the closing comment, which serves as the block's anchor.\n * @type {TemplateNode}\n */\nexport let hydrate_node;\n\n/** @param {TemplateNode} node */\nexport function set_hydrate_node(node) {\n\tif (node === null) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\treturn (hydrate_node = node);\n}\n\nexport function hydrate_next() {\n\treturn set_hydrate_node(/** @type {TemplateNode} */ (get_next_sibling(hydrate_node)));\n}\n\n/** @param {TemplateNode} node */\nexport function reset(node) {\n\tif (!hydrating) return;\n\n\t// If the node has remaining siblings, something has gone wrong\n\tif (get_next_sibling(hydrate_node) !== null) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\thydrate_node = node;\n}\n\n/**\n * @param {HTMLTemplateElement} template\n */\nexport function hydrate_template(template) {\n\tif (hydrating) {\n\t\t// @ts-expect-error TemplateNode doesn't include DocumentFragment, but it's actually fine\n\t\thydrate_node = template.content;\n\t}\n}\n\nexport function next(count = 1) {\n\tif (hydrating) {\n\t\tvar i = count;\n\t\tvar node = hydrate_node;\n\n\t\twhile (i--) {\n\t\t\tnode = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\t}\n\n\t\thydrate_node = node;\n\t}\n}\n\n/**\n * Removes all nodes starting at `hydrate_node` up until the next hydration end comment\n */\nexport function remove_nodes() {\n\tvar depth = 0;\n\tvar node = hydrate_node;\n\n\twhile (true) {\n\t\tif (node.nodeType === 8) {\n\t\t\tvar data = /** @type {Comment} */ (node).data;\n\n\t\t\tif (data === HYDRATION_END) {\n\t\t\t\tif (depth === 0) return node;\n\t\t\t\tdepth -= 1;\n\t\t\t} else if (data === HYDRATION_START || data === HYDRATION_START_ELSE) {\n\t\t\t\tdepth += 1;\n\t\t\t}\n\t\t}\n\n\t\tvar next = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\tnode.remove();\n\t\tnode = next;\n\t}\n}\n","/** @import { ProxyMetadata, ProxyStateObject, Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport { get, component_context, active_effect } from './runtime.js';\nimport {\n\tarray_prototype,\n\tget_descriptor,\n\tget_prototype_of,\n\tis_array,\n\tobject_prototype\n} from '../shared/utils.js';\nimport { check_ownership, widen_ownership } from './dev/ownership.js';\nimport { source, set } from './reactivity/sources.js';\nimport { STATE_SYMBOL, STATE_SYMBOL_METADATA } from './constants.js';\nimport { UNINITIALIZED } from '../../constants.js';\nimport * as e from './errors.js';\nimport { get_stack } from './dev/tracing.js';\nimport { tracing_mode_flag } from '../flags/index.js';\n\n/**\n * @template T\n * @param {T} value\n * @param {ProxyMetadata | null} [parent]\n * @param {Source<T>} [prev] dev mode only\n * @returns {T}\n */\nexport function proxy(value, parent = null, prev) {\n\t/** @type {Error | null} */\n\tvar stack = null;\n\tif (DEV && tracing_mode_flag) {\n\t\tstack = get_stack('CreatedAt');\n\t}\n\t// if non-proxyable, or is already a proxy, return `value`\n\tif (typeof value !== 'object' || value === null || STATE_SYMBOL in value) {\n\t\treturn value;\n\t}\n\n\tconst prototype = get_prototype_of(value);\n\n\tif (prototype !== object_prototype && prototype !== array_prototype) {\n\t\treturn value;\n\t}\n\n\t/** @type {Map<any, Source<any>>} */\n\tvar sources = new Map();\n\tvar is_proxied_array = is_array(value);\n\tvar version = source(0);\n\n\tif (is_proxied_array) {\n\t\t// We need to create the length source eagerly to ensure that\n\t\t// mutations to the array are properly synced with our proxy\n\t\tsources.set('length', source(/** @type {any[]} */ (value).length, stack));\n\t}\n\n\t/** @type {ProxyMetadata} */\n\tvar metadata;\n\n\tif (DEV) {\n\t\tmetadata = {\n\t\t\tparent,\n\t\t\towners: null\n\t\t};\n\n\t\tif (prev) {\n\t\t\t// Reuse owners from previous state; necessary because reassignment is not guaranteed to have correct component context.\n\t\t\t// If no previous proxy exists we play it safe and assume ownerless state\n\t\t\t// @ts-expect-error\n\t\t\tconst prev_owners = prev.v?.[STATE_SYMBOL_METADATA]?.owners;\n\t\t\tmetadata.owners = prev_owners ? new Set(prev_owners) : null;\n\t\t} else {\n\t\t\tmetadata.owners =\n\t\t\t\tparent === null\n\t\t\t\t\t? component_context !== null\n\t\t\t\t\t\t? new Set([component_context.function])\n\t\t\t\t\t\t: null\n\t\t\t\t\t: new Set();\n\t\t}\n\t}\n\n\treturn new Proxy(/** @type {any} */ (value), {\n\t\tdefineProperty(_, prop, descriptor) {\n\t\t\tif (\n\t\t\t\t!('value' in descriptor) ||\n\t\t\t\tdescriptor.configurable === false ||\n\t\t\t\tdescriptor.enumerable === false ||\n\t\t\t\tdescriptor.writable === false\n\t\t\t) {\n\t\t\t\t// we disallow non-basic descriptors, because unless they are applied to the\n\t\t\t\t// target object — which we avoid, so that state can be forked — we will run\n\t\t\t\t// afoul of the various invariants\n\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor#invariants\n\t\t\t\te.state_descriptors_fixed();\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\n\t\t\tif (s === undefined) {\n\t\t\t\ts = source(descriptor.value, stack);\n\t\t\t\tsources.set(prop, s);\n\t\t\t} else {\n\t\t\t\tset(s, proxy(descriptor.value, metadata));\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tdeleteProperty(target, prop) {\n\t\t\tvar s = sources.get(prop);\n\n\t\t\tif (s === undefined) {\n\t\t\t\tif (prop in target) {\n\t\t\t\t\tsources.set(prop, source(UNINITIALIZED, stack));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// When working with arrays, we need to also ensure we update the length when removing\n\t\t\t\t// an indexed property\n\t\t\t\tif (is_proxied_array && typeof prop === 'string') {\n\t\t\t\t\tvar ls = /** @type {Source<number>} */ (sources.get('length'));\n\t\t\t\t\tvar n = Number(prop);\n\n\t\t\t\t\tif (Number.isInteger(n) && n < ls.v) {\n\t\t\t\t\t\tset(ls, n);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tset(s, UNINITIALIZED);\n\t\t\t\tupdate_version(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tget(target, prop, receiver) {\n\t\t\tif (DEV && prop === STATE_SYMBOL_METADATA) {\n\t\t\t\treturn metadata;\n\t\t\t}\n\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar exists = prop in target;\n\n\t\t\t// create a source, but only if it's an own property and not a prototype property\n\t\t\tif (s === undefined && (!exists || get_descriptor(target, prop)?.writable)) {\n\t\t\t\ts = source(proxy(exists ? target[prop] : UNINITIALIZED, metadata), stack);\n\t\t\t\tsources.set(prop, s);\n\t\t\t}\n\n\t\t\tif (s !== undefined) {\n\t\t\t\tvar v = get(s);\n\n\t\t\t\t// In case of something like `foo = bar.map(...)`, foo would have ownership\n\t\t\t\t// of the array itself, while the individual items would have ownership\n\t\t\t\t// of the component that created bar. That means if we later do `foo[0].baz = 42`,\n\t\t\t\t// we could get a false-positive ownership violation, since the two proxies\n\t\t\t\t// are not connected to each other via the parent metadata relationship.\n\t\t\t\t// For this reason, we need to widen the ownership of the children\n\t\t\t\t// upon access when we detect they are not connected.\n\t\t\t\tif (DEV) {\n\t\t\t\t\t/** @type {ProxyMetadata | undefined} */\n\t\t\t\t\tvar prop_metadata = v?.[STATE_SYMBOL_METADATA];\n\t\t\t\t\tif (prop_metadata && prop_metadata?.parent !== metadata) {\n\t\t\t\t\t\twiden_ownership(metadata, prop_metadata);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn v === UNINITIALIZED ? undefined : v;\n\t\t\t}\n\n\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t},\n\n\t\tgetOwnPropertyDescriptor(target, prop) {\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\tif (descriptor && 'value' in descriptor) {\n\t\t\t\tvar s = sources.get(prop);\n\t\t\t\tif (s) descriptor.value = get(s);\n\t\t\t} else if (descriptor === undefined) {\n\t\t\t\tvar source = sources.get(prop);\n\t\t\t\tvar value = source?.v;\n\n\t\t\t\tif (source !== undefined && value !== UNINITIALIZED) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\twritable: true\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn descriptor;\n\t\t},\n\n\t\thas(target, prop) {\n\t\t\tif (DEV && prop === STATE_SYMBOL_METADATA) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = (s !== undefined && s.v !== UNINITIALIZED) || Reflect.has(target, prop);\n\n\t\t\tif (\n\t\t\t\ts !== undefined ||\n\t\t\t\t(active_effect !== null && (!has || get_descriptor(target, prop)?.writable))\n\t\t\t) {\n\t\t\t\tif (s === undefined) {\n\t\t\t\t\ts = source(has ? proxy(target[prop], metadata) : UNINITIALIZED, stack);\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\n\t\t\t\tvar value = get(s);\n\t\t\t\tif (value === UNINITIALIZED) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn has;\n\t\t},\n\n\t\tset(target, prop, value, receiver) {\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = prop in target;\n\n\t\t\t// variable.length = value -> clear all signals with index >= value\n\t\t\tif (is_proxied_array && prop === 'length') {\n\t\t\t\tfor (var i = value; i < /** @type {Source<number>} */ (s).v; i += 1) {\n\t\t\t\t\tvar other_s = sources.get(i + '');\n\t\t\t\t\tif (other_s !== undefined) {\n\t\t\t\t\t\tset(other_s, UNINITIALIZED);\n\t\t\t\t\t} else if (i in target) {\n\t\t\t\t\t\t// If the item exists in the original, we need to create a uninitialized source,\n\t\t\t\t\t\t// else a later read of the property would result in a source being created with\n\t\t\t\t\t\t// the value of the original item at that index.\n\t\t\t\t\t\tother_s = source(UNINITIALIZED, stack);\n\t\t\t\t\t\tsources.set(i + '', other_s);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we haven't yet created a source for this property, we need to ensure\n\t\t\t// we do so otherwise if we read it later, then the write won't be tracked and\n\t\t\t// the heuristics of effects will be different vs if we had read the proxied\n\t\t\t// object property before writing to that property.\n\t\t\tif (s === undefined) {\n\t\t\t\tif (!has || get_descriptor(target, prop)?.writable) {\n\t\t\t\t\ts = source(undefined, stack);\n\t\t\t\t\tset(s, proxy(value, metadata));\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thas = s.v !== UNINITIALIZED;\n\t\t\t\tset(s, proxy(value, metadata));\n\t\t\t}\n\n\t\t\tif (DEV) {\n\t\t\t\t/** @type {ProxyMetadata | undefined} */\n\t\t\t\tvar prop_metadata = value?.[STATE_SYMBOL_METADATA];\n\t\t\t\tif (prop_metadata && prop_metadata?.parent !== metadata) {\n\t\t\t\t\twiden_ownership(metadata, prop_metadata);\n\t\t\t\t}\n\t\t\t\tcheck_ownership(metadata);\n\t\t\t}\n\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\t// Set the new value before updating any signals so that any listeners get the new value\n\t\t\tif (descriptor?.set) {\n\t\t\t\tdescriptor.set.call(receiver, value);\n\t\t\t}\n\n\t\t\tif (!has) {\n\t\t\t\t// If we have mutated an array directly, we might need to\n\t\t\t\t// signal that length has also changed. Do it before updating metadata\n\t\t\t\t// to ensure that iterating over the array as a result of a metadata update\n\t\t\t\t// will not cause the length to be out of sync.\n\t\t\t\tif (is_proxied_array && typeof prop === 'string') {\n\t\t\t\t\tvar ls = /** @type {Source<number>} */ (sources.get('length'));\n\t\t\t\t\tvar n = Number(prop);\n\n\t\t\t\t\tif (Number.isInteger(n) && n >= ls.v) {\n\t\t\t\t\t\tset(ls, n + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tupdate_version(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\townKeys(target) {\n\t\t\tget(version);\n\n\t\t\tvar own_keys = Reflect.ownKeys(target).filter((key) => {\n\t\t\t\tvar source = sources.get(key);\n\t\t\t\treturn source === undefined || source.v !== UNINITIALIZED;\n\t\t\t});\n\n\t\t\tfor (var [key, source] of sources) {\n\t\t\t\tif (source.v !== UNINITIALIZED && !(key in target)) {\n\t\t\t\t\town_keys.push(key);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn own_keys;\n\t\t},\n\n\t\tsetPrototypeOf() {\n\t\t\te.state_prototype_fixed();\n\t\t}\n\t});\n}\n\n/**\n * @param {Source<number>} signal\n * @param {1 | -1} [d]\n */\nfunction update_version(signal, d = 1) {\n\tset(signal, signal.v + d);\n}\n\n/**\n * @param {any} value\n */\nexport function get_proxied_value(value) {\n\tif (value !== null && typeof value === 'object' && STATE_SYMBOL in value) {\n\t\treturn value[STATE_SYMBOL];\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {any} a\n * @param {any} b\n */\nexport function is(a, b) {\n\treturn Object.is(get_proxied_value(a), get_proxied_value(b));\n}\n","/** @import { TemplateNode } from '#client' */\nimport { hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport { DEV } from 'esm-env';\nimport { init_array_prototype_warnings } from '../dev/equality.js';\nimport { get_descriptor } from '../../shared/utils.js';\n\n// export these for reference in the compiled code, making global name deduplication unnecessary\n/** @type {Window} */\nexport var $window;\n\n/** @type {Document} */\nexport var $document;\n\n/** @type {() => Node | null} */\nvar first_child_getter;\n/** @type {() => Node | null} */\nvar next_sibling_getter;\n\n/**\n * Initialize these lazily to avoid issues when using the runtime in a server context\n * where these globals are not available while avoiding a separate server entry point\n */\nexport function init_operations() {\n\tif ($window !== undefined) {\n\t\treturn;\n\t}\n\n\t$window = window;\n\t$document = document;\n\n\tvar element_prototype = Element.prototype;\n\tvar node_prototype = Node.prototype;\n\n\t// @ts-ignore\n\tfirst_child_getter = get_descriptor(node_prototype, 'firstChild').get;\n\t// @ts-ignore\n\tnext_sibling_getter = get_descriptor(node_prototype, 'nextSibling').get;\n\n\t// the following assignments improve perf of lookups on DOM nodes\n\t// @ts-expect-error\n\telement_prototype.__click = undefined;\n\t// @ts-expect-error\n\telement_prototype.__className = '';\n\t// @ts-expect-error\n\telement_prototype.__attributes = null;\n\t// @ts-expect-error\n\telement_prototype.__styles = null;\n\t// @ts-expect-error\n\telement_prototype.__e = undefined;\n\n\t// @ts-expect-error\n\tText.prototype.__t = undefined;\n\n\tif (DEV) {\n\t\t// @ts-expect-error\n\t\telement_prototype.__svelte_meta = null;\n\n\t\tinit_array_prototype_warnings();\n\t}\n}\n\n/**\n * @param {string} value\n * @returns {Text}\n */\nexport function create_text(value = '') {\n\treturn document.createTextNode(value);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {Node | null}\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_first_child(node) {\n\treturn first_child_getter.call(node);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {Node | null}\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_next_sibling(node) {\n\treturn next_sibling_getter.call(node);\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @template {Node} N\n * @param {N} node\n * @param {boolean} is_text\n * @returns {Node | null}\n */\nexport function child(node, is_text) {\n\tif (!hydrating) {\n\t\treturn get_first_child(node);\n\t}\n\n\tvar child = /** @type {TemplateNode} */ (get_first_child(hydrate_node));\n\n\t// Child can be null if we have an element with a single child, like `<p>{text}</p>`, where `text` is empty\n\tif (child === null) {\n\t\tchild = hydrate_node.appendChild(create_text());\n\t} else if (is_text && child.nodeType !== 3) {\n\t\tvar text = create_text();\n\t\tchild?.before(text);\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\tset_hydrate_node(child);\n\treturn child;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {DocumentFragment | TemplateNode[]} fragment\n * @param {boolean} is_text\n * @returns {Node | null}\n */\nexport function first_child(fragment, is_text) {\n\tif (!hydrating) {\n\t\t// when not hydrating, `fragment` is a `DocumentFragment` (the result of calling `open_frag`)\n\t\tvar first = /** @type {DocumentFragment} */ (get_first_child(/** @type {Node} */ (fragment)));\n\n\t\t// TODO prevent user comments with the empty string when preserveComments is true\n\t\tif (first instanceof Comment && first.data === '') return get_next_sibling(first);\n\n\t\treturn first;\n\t}\n\n\t// if an {expression} is empty during SSR, there might be no\n\t// text node to hydrate — we must therefore create one\n\tif (is_text && hydrate_node?.nodeType !== 3) {\n\t\tvar text = create_text();\n\n\t\thydrate_node?.before(text);\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\treturn hydrate_node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {number} count\n * @param {boolean} is_text\n * @returns {Node | null}\n */\nexport function sibling(node, count = 1, is_text = false) {\n\tlet next_sibling = hydrating ? hydrate_node : node;\n\tvar last_sibling;\n\n\twhile (count--) {\n\t\tlast_sibling = next_sibling;\n\t\tnext_sibling = /** @type {TemplateNode} */ (get_next_sibling(next_sibling));\n\t}\n\n\tif (!hydrating) {\n\t\treturn next_sibling;\n\t}\n\n\tvar type = next_sibling?.nodeType;\n\n\t// if a sibling {expression} is empty during SSR, there might be no\n\t// text node to hydrate — we must therefore create one\n\tif (is_text && type !== 3) {\n\t\tvar text = create_text();\n\t\t// If the next sibling is `null` and we're handling text then it's because\n\t\t// the SSR content was empty for the text, so we need to generate a new text\n\t\t// node and insert it after the last sibling\n\t\tif (next_sibling === null) {\n\t\t\tlast_sibling?.after(text);\n\t\t} else {\n\t\t\tnext_sibling.before(text);\n\t\t}\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\tset_hydrate_node(next_sibling);\n\treturn /** @type {TemplateNode} */ (next_sibling);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {void}\n */\nexport function clear_text_content(node) {\n\tnode.textContent = '';\n}\n","/** @import { Derived, Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tCLEAN,\n\tDERIVED,\n\tDESTROYED,\n\tDIRTY,\n\tEFFECT_HAS_DERIVED,\n\tMAYBE_DIRTY,\n\tUNOWNED\n} from '../constants.js';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tremove_reactions,\n\tset_signal_status,\n\tskip_reaction,\n\tupdate_reaction,\n\tincrement_version,\n\tset_active_effect,\n\tcomponent_context\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport * as e from '../errors.js';\nimport { destroy_effect } from './effects.js';\nimport { inspect_effects, set_inspect_effects } from './sources.js';\nimport { get_stack } from '../dev/tracing.js';\nimport { tracing_mode_flag } from '../../flags/index.js';\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived(fn) {\n\tvar flags = DERIVED | DIRTY;\n\n\tif (active_effect === null) {\n\t\tflags |= UNOWNED;\n\t} else {\n\t\t// Since deriveds are evaluated lazily, any effects created inside them are\n\t\t// created too late to ensure that the parent effect is added to the tree\n\t\tactive_effect.f |= EFFECT_HAS_DERIVED;\n\t}\n\n\tvar parent_derived =\n\t\tactive_reaction !== null && (active_reaction.f & DERIVED) !== 0\n\t\t\t? /** @type {Derived} */ (active_reaction)\n\t\t\t: null;\n\n\t/** @type {Derived<V>} */\n\tconst signal = {\n\t\tchildren: null,\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\tequals,\n\t\tf: flags,\n\t\tfn,\n\t\treactions: null,\n\t\tv: /** @type {V} */ (null),\n\t\tversion: 0,\n\t\tparent: parent_derived ?? active_effect\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = get_stack('CreatedAt');\n\t}\n\n\tif (parent_derived !== null) {\n\t\t(parent_derived.children ??= []).push(signal);\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived_safe_equal(fn) {\n\tconst signal = derived(fn);\n\tsignal.equals = safe_equals;\n\treturn signal;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nfunction destroy_derived_children(derived) {\n\tvar children = derived.children;\n\n\tif (children !== null) {\n\t\tderived.children = null;\n\n\t\tfor (var i = 0; i < children.length; i += 1) {\n\t\t\tvar child = children[i];\n\t\t\tif ((child.f & DERIVED) !== 0) {\n\t\t\t\tdestroy_derived(/** @type {Derived} */ (child));\n\t\t\t} else {\n\t\t\t\tdestroy_effect(/** @type {Effect} */ (child));\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * The currently updating deriveds, used to detect infinite recursion\n * in dev mode and provide a nicer error than 'too much recursion'\n * @type {Derived[]}\n */\nlet stack = [];\n\n/**\n * @param {Derived} derived\n * @returns {Effect | null}\n */\nfunction get_derived_parent_effect(derived) {\n\tvar parent = derived.parent;\n\twhile (parent !== null) {\n\t\tif ((parent.f & DERIVED) === 0) {\n\t\t\treturn /** @type {Effect} */ (parent);\n\t\t}\n\t\tparent = parent.parent;\n\t}\n\treturn null;\n}\n\n/**\n * @template T\n * @param {Derived} derived\n * @returns {T}\n */\nexport function execute_derived(derived) {\n\tvar value;\n\tvar prev_active_effect = active_effect;\n\n\tset_active_effect(get_derived_parent_effect(derived));\n\n\tif (DEV) {\n\t\tlet prev_inspect_effects = inspect_effects;\n\t\tset_inspect_effects(new Set());\n\t\ttry {\n\t\t\tif (stack.includes(derived)) {\n\t\t\t\te.derived_references_self();\n\t\t\t}\n\n\t\t\tstack.push(derived);\n\n\t\t\tdestroy_derived_children(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t\tset_inspect_effects(prev_inspect_effects);\n\t\t\tstack.pop();\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tdestroy_derived_children(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t}\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function update_derived(derived) {\n\tvar value = execute_derived(derived);\n\tvar status =\n\t\t(skip_reaction || (derived.f & UNOWNED) !== 0) && derived.deps !== null ? MAYBE_DIRTY : CLEAN;\n\n\tset_signal_status(derived, status);\n\n\tif (!derived.equals(value)) {\n\t\tderived.v = value;\n\t\tderived.version = increment_version();\n\t}\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function destroy_derived(derived) {\n\tdestroy_derived_children(derived);\n\tremove_reactions(derived, 0);\n\tset_signal_status(derived, DESTROYED);\n\n\tderived.v = derived.children = derived.deps = derived.ctx = derived.reactions = null;\n}\n","/** @import { ComponentContext, ComponentContextLegacy, Derived, Effect, TemplateNode, TransitionManager } from '#client' */\nimport {\n\tcheck_dirtiness,\n\tcomponent_context,\n\tactive_effect,\n\tactive_reaction,\n\tdev_current_component_function,\n\tupdate_effect,\n\tget,\n\tis_destroying_effect,\n\tis_flushing_effect,\n\tremove_reactions,\n\tschedule_effect,\n\tset_active_reaction,\n\tset_is_destroying_effect,\n\tset_is_flushing_effect,\n\tset_signal_status,\n\tuntrack,\n\tskip_reaction\n} from '../runtime.js';\nimport {\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tRENDER_EFFECT,\n\tEFFECT,\n\tDESTROYED,\n\tINERT,\n\tEFFECT_RAN,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tEFFECT_TRANSPARENT,\n\tDERIVED,\n\tUNOWNED,\n\tCLEAN,\n\tINSPECT_EFFECT,\n\tHEAD_EFFECT,\n\tMAYBE_DIRTY,\n\tEFFECT_HAS_DERIVED\n} from '../constants.js';\nimport { set } from './sources.js';\nimport * as e from '../errors.js';\nimport { DEV } from 'esm-env';\nimport { define_property } from '../../shared/utils.js';\nimport { get_next_sibling } from '../dom/operations.js';\nimport { destroy_derived } from './deriveds.js';\n\n/**\n * @param {'$effect' | '$effect.pre' | '$inspect'} rune\n */\nexport function validate_effect(rune) {\n\tif (active_effect === null && active_reaction === null) {\n\t\te.effect_orphan(rune);\n\t}\n\n\tif (active_reaction !== null && (active_reaction.f & UNOWNED) !== 0) {\n\t\te.effect_in_unowned_derived();\n\t}\n\n\tif (is_destroying_effect) {\n\t\te.effect_in_teardown(rune);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect} parent_effect\n */\nfunction push_effect(effect, parent_effect) {\n\tvar parent_last = parent_effect.last;\n\tif (parent_last === null) {\n\t\tparent_effect.last = parent_effect.first = effect;\n\t} else {\n\t\tparent_last.next = effect;\n\t\teffect.prev = parent_last;\n\t\tparent_effect.last = effect;\n\t}\n}\n\n/**\n * @param {number} type\n * @param {null | (() => void | (() => void))} fn\n * @param {boolean} sync\n * @param {boolean} push\n * @returns {Effect}\n */\nfunction create_effect(type, fn, sync, push = true) {\n\tvar is_root = (type & ROOT_EFFECT) !== 0;\n\tvar parent_effect = active_effect;\n\n\tif (DEV) {\n\t\t// Ensure the parent is never an inspect effect\n\t\twhile (parent_effect !== null && (parent_effect.f & INSPECT_EFFECT) !== 0) {\n\t\t\tparent_effect = parent_effect.parent;\n\t\t}\n\t}\n\n\t/** @type {Effect} */\n\tvar effect = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\tderiveds: null,\n\t\tnodes_start: null,\n\t\tnodes_end: null,\n\t\tf: type | DIRTY,\n\t\tfirst: null,\n\t\tfn,\n\t\tlast: null,\n\t\tnext: null,\n\t\tparent: is_root ? null : parent_effect,\n\t\tprev: null,\n\t\tteardown: null,\n\t\ttransitions: null,\n\t\tversion: 0\n\t};\n\n\tif (DEV) {\n\t\teffect.component_function = dev_current_component_function;\n\t}\n\n\tif (sync) {\n\t\tvar previously_flushing_effect = is_flushing_effect;\n\n\t\ttry {\n\t\t\tset_is_flushing_effect(true);\n\t\t\tupdate_effect(effect);\n\t\t\teffect.f |= EFFECT_RAN;\n\t\t} catch (e) {\n\t\t\tdestroy_effect(effect);\n\t\t\tthrow e;\n\t\t} finally {\n\t\t\tset_is_flushing_effect(previously_flushing_effect);\n\t\t}\n\t} else if (fn !== null) {\n\t\tschedule_effect(effect);\n\t}\n\n\t// if an effect has no dependencies, no DOM and no teardown function,\n\t// don't bother adding it to the effect tree\n\tvar inert =\n\t\tsync &&\n\t\teffect.deps === null &&\n\t\teffect.first === null &&\n\t\teffect.nodes_start === null &&\n\t\teffect.teardown === null &&\n\t\t(effect.f & EFFECT_HAS_DERIVED) === 0;\n\n\tif (!inert && !is_root && push) {\n\t\tif (parent_effect !== null) {\n\t\t\tpush_effect(effect, parent_effect);\n\t\t}\n\n\t\t// if we're in a derived, add the effect there too\n\t\tif (active_reaction !== null && (active_reaction.f & DERIVED) !== 0) {\n\t\t\tvar derived = /** @type {Derived} */ (active_reaction);\n\t\t\t(derived.children ??= []).push(effect);\n\t\t}\n\t}\n\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect.tracking()`\n * @returns {boolean}\n */\nexport function effect_tracking() {\n\tif (active_reaction === null) {\n\t\treturn false;\n\t}\n\n\t// If it's skipped, that's because we're inside an unowned\n\t// that is not being tracked by another reaction\n\treturn !skip_reaction;\n}\n\n/**\n * @param {() => void} fn\n */\nexport function teardown(fn) {\n\tconst effect = create_effect(RENDER_EFFECT, null, false);\n\tset_signal_status(effect, CLEAN);\n\teffect.teardown = fn;\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect(...)`\n * @param {() => void | (() => void)} fn\n */\nexport function user_effect(fn) {\n\tvalidate_effect('$effect');\n\n\t// Non-nested `$effect(...)` in a component should be deferred\n\t// until the component is mounted\n\tvar defer =\n\t\tactive_effect !== null &&\n\t\t(active_effect.f & BRANCH_EFFECT) !== 0 &&\n\t\tcomponent_context !== null &&\n\t\t!component_context.m;\n\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect'\n\t\t});\n\t}\n\n\tif (defer) {\n\t\tvar context = /** @type {ComponentContext} */ (component_context);\n\t\t(context.e ??= []).push({\n\t\t\tfn,\n\t\t\teffect: active_effect,\n\t\t\treaction: active_reaction\n\t\t});\n\t} else {\n\t\tvar signal = effect(fn);\n\t\treturn signal;\n\t}\n}\n\n/**\n * Internal representation of `$effect.pre(...)`\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function user_pre_effect(fn) {\n\tvalidate_effect('$effect.pre');\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect.pre'\n\t\t});\n\t}\n\treturn render_effect(fn);\n}\n\n/** @param {() => void | (() => void)} fn */\nexport function inspect_effect(fn) {\n\treturn create_effect(INSPECT_EFFECT, fn, true);\n}\n\n/**\n * Internal representation of `$effect.root(...)`\n * @param {() => void | (() => void)} fn\n * @returns {() => void}\n */\nexport function effect_root(fn) {\n\tconst effect = create_effect(ROOT_EFFECT, fn, true);\n\n\treturn () => {\n\t\tdestroy_effect(effect);\n\t};\n}\n\n/**\n * An effect root whose children can transition out\n * @param {() => void} fn\n * @returns {(options?: { outro?: boolean }) => Promise<void>}\n */\nexport function component_root(fn) {\n\tconst effect = create_effect(ROOT_EFFECT, fn, true);\n\n\treturn (options = {}) => {\n\t\treturn new Promise((fulfil) => {\n\t\t\tif (options.outro) {\n\t\t\t\tpause_effect(effect, () => {\n\t\t\t\t\tdestroy_effect(effect);\n\t\t\t\t\tfulfil(undefined);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdestroy_effect(effect);\n\t\t\t\tfulfil(undefined);\n\t\t\t}\n\t\t});\n\t};\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function effect(fn) {\n\treturn create_effect(EFFECT, fn, false);\n}\n\n/**\n * Internal representation of `$: ..`\n * @param {() => any} deps\n * @param {() => void | (() => void)} fn\n */\nexport function legacy_pre_effect(deps, fn) {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\t/** @type {{ effect: null | Effect, ran: boolean }} */\n\tvar token = { effect: null, ran: false };\n\tcontext.l.r1.push(token);\n\n\ttoken.effect = render_effect(() => {\n\t\tdeps();\n\n\t\t// If this legacy pre effect has already run before the end of the reset, then\n\t\t// bail out to emulate the same behavior.\n\t\tif (token.ran) return;\n\n\t\ttoken.ran = true;\n\t\tset(context.l.r2, true);\n\t\tuntrack(fn);\n\t});\n}\n\nexport function legacy_pre_effect_reset() {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\trender_effect(() => {\n\t\tif (!get(context.l.r2)) return;\n\n\t\t// Run dirty `$:` statements\n\t\tfor (var token of context.l.r1) {\n\t\t\tvar effect = token.effect;\n\n\t\t\t// If the effect is CLEAN, then make it MAYBE_DIRTY. This ensures we traverse through\n\t\t\t// the effects dependencies and correctly ensure each dependency is up-to-date.\n\t\t\tif ((effect.f & CLEAN) !== 0) {\n\t\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t\t}\n\n\t\t\tif (check_dirtiness(effect)) {\n\t\t\t\tupdate_effect(effect);\n\t\t\t}\n\n\t\t\ttoken.ran = false;\n\t\t}\n\n\t\tcontext.l.r2.v = false; // set directly to avoid rerunning this effect\n\t});\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function render_effect(fn) {\n\treturn create_effect(RENDER_EFFECT, fn, true);\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function template_effect(fn) {\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '{expression}'\n\t\t});\n\t}\n\treturn block(fn);\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function block(fn, flags = 0) {\n\treturn create_effect(RENDER_EFFECT | BLOCK_EFFECT | flags, fn, true);\n}\n\n/**\n * @param {(() => void)} fn\n * @param {boolean} [push]\n */\nexport function branch(fn, push = true) {\n\treturn create_effect(RENDER_EFFECT | BRANCH_EFFECT, fn, true, push);\n}\n\n/**\n * @param {Effect} effect\n */\nexport function execute_effect_teardown(effect) {\n\tvar teardown = effect.teardown;\n\tif (teardown !== null) {\n\t\tconst previously_destroying_effect = is_destroying_effect;\n\t\tconst previous_reaction = active_reaction;\n\t\tset_is_destroying_effect(true);\n\t\tset_active_reaction(null);\n\t\ttry {\n\t\t\tteardown.call(null);\n\t\t} finally {\n\t\t\tset_is_destroying_effect(previously_destroying_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t}\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function destroy_effect_deriveds(signal) {\n\tvar deriveds = signal.deriveds;\n\n\tif (deriveds !== null) {\n\t\tsignal.deriveds = null;\n\n\t\tfor (var i = 0; i < deriveds.length; i += 1) {\n\t\t\tdestroy_derived(deriveds[i]);\n\t\t}\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @param {boolean} remove_dom\n * @returns {void}\n */\nexport function destroy_effect_children(signal, remove_dom = false) {\n\tvar effect = signal.first;\n\tsignal.first = signal.last = null;\n\n\twhile (effect !== null) {\n\t\tvar next = effect.next;\n\t\tdestroy_effect(effect, remove_dom);\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function destroy_block_effect_children(signal) {\n\tvar effect = signal.first;\n\n\twhile (effect !== null) {\n\t\tvar next = effect.next;\n\t\tif ((effect.f & BRANCH_EFFECT) === 0) {\n\t\t\tdestroy_effect(effect);\n\t\t}\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} [remove_dom]\n * @returns {void}\n */\nexport function destroy_effect(effect, remove_dom = true) {\n\tvar removed = false;\n\n\tif ((remove_dom || (effect.f & HEAD_EFFECT) !== 0) && effect.nodes_start !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar node = effect.nodes_start;\n\t\tvar end = effect.nodes_end;\n\n\t\twhile (node !== null) {\n\t\t\t/** @type {TemplateNode | null} */\n\t\t\tvar next = node === end ? null : /** @type {TemplateNode} */ (get_next_sibling(node));\n\n\t\t\tnode.remove();\n\t\t\tnode = next;\n\t\t}\n\n\t\tremoved = true;\n\t}\n\n\tdestroy_effect_children(effect, remove_dom && !removed);\n\tdestroy_effect_deriveds(effect);\n\tremove_reactions(effect, 0);\n\tset_signal_status(effect, DESTROYED);\n\n\tvar transitions = effect.transitions;\n\n\tif (transitions !== null) {\n\t\tfor (const transition of transitions) {\n\t\t\ttransition.stop();\n\t\t}\n\t}\n\n\texecute_effect_teardown(effect);\n\n\tvar parent = effect.parent;\n\n\t// If the parent doesn't have any children, then skip this work altogether\n\tif (parent !== null && parent.first !== null) {\n\t\tunlink_effect(effect);\n\t}\n\n\tif (DEV) {\n\t\teffect.component_function = null;\n\t}\n\n\t// `first` and `child` are nulled out in destroy_effect_children\n\t// we don't null out `parent` so that error propagation can work correctly\n\teffect.next =\n\t\teffect.prev =\n\t\teffect.teardown =\n\t\teffect.ctx =\n\t\teffect.deps =\n\t\teffect.fn =\n\t\teffect.nodes_start =\n\t\teffect.nodes_end =\n\t\t\tnull;\n}\n\n/**\n * Detach an effect from the effect tree, freeing up memory and\n * reducing the amount of work that happens on subsequent traversals\n * @param {Effect} effect\n */\nexport function unlink_effect(effect) {\n\tvar parent = effect.parent;\n\tvar prev = effect.prev;\n\tvar next = effect.next;\n\n\tif (prev !== null) prev.next = next;\n\tif (next !== null) next.prev = prev;\n\n\tif (parent !== null) {\n\t\tif (parent.first === effect) parent.first = next;\n\t\tif (parent.last === effect) parent.last = prev;\n\t}\n}\n\n/**\n * When a block effect is removed, we don't immediately destroy it or yank it\n * out of the DOM, because it might have transitions. Instead, we 'pause' it.\n * It stays around (in memory, and in the DOM) until outro transitions have\n * completed, and if the state change is reversed then we _resume_ it.\n * A paused effect does not update, and the DOM subtree becomes inert.\n * @param {Effect} effect\n * @param {() => void} [callback]\n */\nexport function pause_effect(effect, callback) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\n\tpause_children(effect, transitions, true);\n\n\trun_out_transitions(transitions, () => {\n\t\tdestroy_effect(effect);\n\t\tif (callback) callback();\n\t});\n}\n\n/**\n * @param {TransitionManager[]} transitions\n * @param {() => void} fn\n */\nexport function run_out_transitions(transitions, fn) {\n\tvar remaining = transitions.length;\n\tif (remaining > 0) {\n\t\tvar check = () => --remaining || fn();\n\t\tfor (var transition of transitions) {\n\t\t\ttransition.out(check);\n\t\t}\n\t} else {\n\t\tfn();\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {TransitionManager[]} transitions\n * @param {boolean} local\n */\nexport function pause_children(effect, transitions, local) {\n\tif ((effect.f & INERT) !== 0) return;\n\teffect.f ^= INERT;\n\n\tif (effect.transitions !== null) {\n\t\tfor (const transition of effect.transitions) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransitions.push(transition);\n\t\t\t}\n\t\t}\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || (child.f & BRANCH_EFFECT) !== 0;\n\t\t// TODO we don't need to call pause_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tpause_children(child, transitions, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n}\n\n/**\n * The opposite of `pause_effect`. We call this if (for example)\n * `x` becomes falsy then truthy: `{#if x}...{/if}`\n * @param {Effect} effect\n */\nexport function resume_effect(effect) {\n\tresume_children(effect, true);\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} local\n */\nfunction resume_children(effect, local) {\n\tif ((effect.f & INERT) === 0) return;\n\n\t// If a dependency of this effect changed while it was paused,\n\t// apply the change now\n\tif (check_dirtiness(effect)) {\n\t\tupdate_effect(effect);\n\t}\n\n\t// Ensure we toggle the flag after possibly updating the effect so that\n\t// each block logic can correctly operate on inert items\n\teffect.f ^= INERT;\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || (child.f & BRANCH_EFFECT) !== 0;\n\t\t// TODO we don't need to call resume_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tresume_children(child, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n\n\tif (effect.transitions !== null) {\n\t\tfor (const transition of effect.transitions) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransition.in();\n\t\t\t}\n\t\t}\n\t}\n}\n","import { run_all } from '../../shared/utils.js';\n\n// Fallback for when requestIdleCallback is not available\nexport const request_idle_callback =\n\ttypeof requestIdleCallback === 'undefined'\n\t\t? (/** @type {() => void} */ cb) => setTimeout(cb, 1)\n\t\t: requestIdleCallback;\n\nlet is_micro_task_queued = false;\nlet is_idle_task_queued = false;\n\n/** @type {Array<() => void>} */\nlet current_queued_micro_tasks = [];\n/** @type {Array<() => void>} */\nlet current_queued_idle_tasks = [];\n\nfunction process_micro_tasks() {\n\tis_micro_task_queued = false;\n\tconst tasks = current_queued_micro_tasks.slice();\n\tcurrent_queued_micro_tasks = [];\n\trun_all(tasks);\n}\n\nfunction process_idle_tasks() {\n\tis_idle_task_queued = false;\n\tconst tasks = current_queued_idle_tasks.slice();\n\tcurrent_queued_idle_tasks = [];\n\trun_all(tasks);\n}\n\n/**\n * @param {() => void} fn\n */\nexport function queue_micro_task(fn) {\n\tif (!is_micro_task_queued) {\n\t\tis_micro_task_queued = true;\n\t\tqueueMicrotask(process_micro_tasks);\n\t}\n\tcurrent_queued_micro_tasks.push(fn);\n}\n\n/**\n * @param {() => void} fn\n */\nexport function queue_idle_task(fn) {\n\tif (!is_idle_task_queued) {\n\t\tis_idle_task_queued = true;\n\t\trequest_idle_callback(process_idle_tasks);\n\t}\n\tcurrent_queued_idle_tasks.push(fn);\n}\n\n/**\n * Synchronously run any queued tasks.\n */\nexport function flush_tasks() {\n\tif (is_micro_task_queued) {\n\t\tprocess_micro_tasks();\n\t}\n\tif (is_idle_task_queued) {\n\t\tprocess_idle_tasks();\n\t}\n}\n","const regex_return_characters = /\\r/g;\n\n/**\n * @param {string} str\n * @returns {string}\n */\nexport function hash(str) {\n\tstr = str.replace(regex_return_characters, '');\n\tlet hash = 5381;\n\tlet i = str.length;\n\n\twhile (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n\treturn (hash >>> 0).toString(36);\n}\n\nconst VOID_ELEMENT_NAMES = [\n\t'area',\n\t'base',\n\t'br',\n\t'col',\n\t'command',\n\t'embed',\n\t'hr',\n\t'img',\n\t'input',\n\t'keygen',\n\t'link',\n\t'meta',\n\t'param',\n\t'source',\n\t'track',\n\t'wbr'\n];\n\n/**\n * Returns `true` if `name` is of a void element\n * @param {string} name\n */\nexport function is_void(name) {\n\treturn VOID_ELEMENT_NAMES.includes(name) || name.toLowerCase() === '!doctype';\n}\n\nconst RESERVED_WORDS = [\n\t'arguments',\n\t'await',\n\t'break',\n\t'case',\n\t'catch',\n\t'class',\n\t'const',\n\t'continue',\n\t'debugger',\n\t'default',\n\t'delete',\n\t'do',\n\t'else',\n\t'enum',\n\t'eval',\n\t'export',\n\t'extends',\n\t'false',\n\t'finally',\n\t'for',\n\t'function',\n\t'if',\n\t'implements',\n\t'import',\n\t'in',\n\t'instanceof',\n\t'interface',\n\t'let',\n\t'new',\n\t'null',\n\t'package',\n\t'private',\n\t'protected',\n\t'public',\n\t'return',\n\t'static',\n\t'super',\n\t'switch',\n\t'this',\n\t'throw',\n\t'true',\n\t'try',\n\t'typeof',\n\t'var',\n\t'void',\n\t'while',\n\t'with',\n\t'yield'\n];\n\n/**\n * Returns `true` if `word` is a reserved JavaScript keyword\n * @param {string} word\n */\nexport function is_reserved(word) {\n\treturn RESERVED_WORDS.includes(word);\n}\n\n/**\n * @param {string} name\n */\nexport function is_capture_event(name) {\n\treturn name.endsWith('capture') && name !== 'gotpointercapture' && name !== 'lostpointercapture';\n}\n\n/** List of Element events that will be delegated */\nconst DELEGATED_EVENTS = [\n\t'beforeinput',\n\t'click',\n\t'change',\n\t'dblclick',\n\t'contextmenu',\n\t'focusin',\n\t'focusout',\n\t'input',\n\t'keydown',\n\t'keyup',\n\t'mousedown',\n\t'mousemove',\n\t'mouseout',\n\t'mouseover',\n\t'mouseup',\n\t'pointerdown',\n\t'pointermove',\n\t'pointerout',\n\t'pointerover',\n\t'pointerup',\n\t'touchend',\n\t'touchmove',\n\t'touchstart'\n];\n\n/**\n * Returns `true` if `event_name` is a delegated event\n * @param {string} event_name\n */\nexport function is_delegated(event_name) {\n\treturn DELEGATED_EVENTS.includes(event_name);\n}\n\n/**\n * Attributes that are boolean, i.e. they are present or not present.\n */\nconst DOM_BOOLEAN_ATTRIBUTES = [\n\t'allowfullscreen',\n\t'async',\n\t'autofocus',\n\t'autoplay',\n\t'checked',\n\t'controls',\n\t'default',\n\t'disabled',\n\t'formnovalidate',\n\t'hidden',\n\t'indeterminate',\n\t'ismap',\n\t'loop',\n\t'multiple',\n\t'muted',\n\t'nomodule',\n\t'novalidate',\n\t'open',\n\t'playsinline',\n\t'readonly',\n\t'required',\n\t'reversed',\n\t'seamless',\n\t'selected',\n\t'webkitdirectory'\n];\n\n/**\n * Returns `true` if `name` is a boolean attribute\n * @param {string} name\n */\nexport function is_boolean_attribute(name) {\n\treturn DOM_BOOLEAN_ATTRIBUTES.includes(name);\n}\n\n/**\n * @type {Record<string, string>}\n * List of attribute names that should be aliased to their property names\n * because they behave differently between setting them as an attribute and\n * setting them as a property.\n */\nconst ATTRIBUTE_ALIASES = {\n\t// no `class: 'className'` because we handle that separately\n\tformnovalidate: 'formNoValidate',\n\tismap: 'isMap',\n\tnomodule: 'noModule',\n\tplaysinline: 'playsInline',\n\treadonly: 'readOnly',\n\tdefaultvalue: 'defaultValue',\n\tdefaultchecked: 'defaultChecked',\n\tsrcobject: 'srcObject'\n};\n\n/**\n * @param {string} name\n */\nexport function normalize_attribute(name) {\n\tname = name.toLowerCase();\n\treturn ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nconst DOM_PROPERTIES = [\n\t...DOM_BOOLEAN_ATTRIBUTES,\n\t'formNoValidate',\n\t'isMap',\n\t'noModule',\n\t'playsInline',\n\t'readOnly',\n\t'value',\n\t'inert',\n\t'volume',\n\t'defaultValue',\n\t'defaultChecked',\n\t'srcObject'\n];\n\n/**\n * @param {string} name\n */\nexport function is_dom_property(name) {\n\treturn DOM_PROPERTIES.includes(name);\n}\n\nconst NON_STATIC_PROPERTIES = ['autofocus', 'muted', 'defaultValue', 'defaultChecked'];\n\n/**\n * Returns `true` if the given attribute cannot be set through the template\n * string, i.e. needs some kind of JavaScript handling to work.\n * @param {string} name\n */\nexport function cannot_be_set_statically(name) {\n\treturn NON_STATIC_PROPERTIES.includes(name);\n}\n\n/**\n * Subset of delegated events which should be passive by default.\n * These two are already passive via browser defaults on window, document and body.\n * But since\n * - we're delegating them\n * - they happen often\n * - they apply to mobile which is generally less performant\n * we're marking them as passive by default for other elements, too.\n */\nconst PASSIVE_EVENTS = ['touchstart', 'touchmove'];\n\n/**\n * Returns `true` if `name` is a passive event\n * @param {string} name\n */\nexport function is_passive_event(name) {\n\treturn PASSIVE_EVENTS.includes(name);\n}\n\nconst CONTENT_EDITABLE_BINDINGS = ['textContent', 'innerHTML', 'innerText'];\n\n/** @param {string} name */\nexport function is_content_editable_binding(name) {\n\treturn CONTENT_EDITABLE_BINDINGS.includes(name);\n}\n\nconst LOAD_ERROR_ELEMENTS = [\n\t'body',\n\t'embed',\n\t'iframe',\n\t'img',\n\t'link',\n\t'object',\n\t'script',\n\t'style',\n\t'track'\n];\n\n/**\n * Returns `true` if the element emits `load` and `error` events\n * @param {string} name\n */\nexport function is_load_error_element(name) {\n\treturn LOAD_ERROR_ELEMENTS.includes(name);\n}\n\nconst SVG_ELEMENTS = [\n\t'altGlyph',\n\t'altGlyphDef',\n\t'altGlyphItem',\n\t'animate',\n\t'animateColor',\n\t'animateMotion',\n\t'animateTransform',\n\t'circle',\n\t'clipPath',\n\t'color-profile',\n\t'cursor',\n\t'defs',\n\t'desc',\n\t'discard',\n\t'ellipse',\n\t'feBlend',\n\t'feColorMatrix',\n\t'feComponentTransfer',\n\t'feComposite',\n\t'feConvolveMatrix',\n\t'feDiffuseLighting',\n\t'feDisplacementMap',\n\t'feDistantLight',\n\t'feDropShadow',\n\t'feFlood',\n\t'feFuncA',\n\t'feFuncB',\n\t'feFuncG',\n\t'feFuncR',\n\t'feGaussianBlur',\n\t'feImage',\n\t'feMerge',\n\t'feMergeNode',\n\t'feMorphology',\n\t'feOffset',\n\t'fePointLight',\n\t'feSpecularLighting',\n\t'feSpotLight',\n\t'feTile',\n\t'feTurbulence',\n\t'filter',\n\t'font',\n\t'font-face',\n\t'font-face-format',\n\t'font-face-name',\n\t'font-face-src',\n\t'font-face-uri',\n\t'foreignObject',\n\t'g',\n\t'glyph',\n\t'glyphRef',\n\t'hatch',\n\t'hatchpath',\n\t'hkern',\n\t'image',\n\t'line',\n\t'linearGradient',\n\t'marker',\n\t'mask',\n\t'mesh',\n\t'meshgradient',\n\t'meshpatch',\n\t'meshrow',\n\t'metadata',\n\t'missing-glyph',\n\t'mpath',\n\t'path',\n\t'pattern',\n\t'polygon',\n\t'polyline',\n\t'radialGradient',\n\t'rect',\n\t'set',\n\t'solidcolor',\n\t'stop',\n\t'svg',\n\t'switch',\n\t'symbol',\n\t'text',\n\t'textPath',\n\t'tref',\n\t'tspan',\n\t'unknown',\n\t'use',\n\t'view',\n\t'vkern'\n];\n\n/** @param {string} name */\nexport function is_svg(name) {\n\treturn SVG_ELEMENTS.includes(name);\n}\n\nconst MATHML_ELEMENTS = [\n\t'annotation',\n\t'annotation-xml',\n\t'maction',\n\t'math',\n\t'merror',\n\t'mfrac',\n\t'mi',\n\t'mmultiscripts',\n\t'mn',\n\t'mo',\n\t'mover',\n\t'mpadded',\n\t'mphantom',\n\t'mprescripts',\n\t'mroot',\n\t'mrow',\n\t'ms',\n\t'mspace',\n\t'msqrt',\n\t'mstyle',\n\t'msub',\n\t'msubsup',\n\t'msup',\n\t'mtable',\n\t'mtd',\n\t'mtext',\n\t'mtr',\n\t'munder',\n\t'munderover',\n\t'semantics'\n];\n\n/** @param {string} name */\nexport function is_mathml(name) {\n\treturn MATHML_ELEMENTS.includes(name);\n}\n\nconst RUNES = /** @type {const} */ ([\n\t'$state',\n\t'$state.raw',\n\t'$state.snapshot',\n\t'$props',\n\t'$bindable',\n\t'$derived',\n\t'$derived.by',\n\t'$effect',\n\t'$effect.pre',\n\t'$effect.tracking',\n\t'$effect.root',\n\t'$inspect',\n\t'$inspect().with',\n\t'$inspect.trace',\n\t'$host'\n]);\n\n/**\n * @param {string} name\n * @returns {name is RUNES[number]}\n */\nexport function is_rune(name) {\n\treturn RUNES.includes(/** @type {RUNES[number]} */ (name));\n}\n\n/** List of elements that require raw contents and should not have SSR comments put in them */\nconst RAW_TEXT_ELEMENTS = /** @type {const} */ (['textarea', 'script', 'style', 'title']);\n\n/** @param {string} name */\nexport function is_raw_text_element(name) {\n\treturn RAW_TEXT_ELEMENTS.includes(/** @type {RAW_TEXT_ELEMENTS[number]} */ (name));\n}\n\n/**\n * Prevent devtools trying to make `location` a clickable link by inserting a zero-width space\n * @param {string | undefined} location\n */\nexport function sanitize_location(location) {\n\treturn location?.replace(/\\//g, '/\\u200b');\n}\n","import { hydrating } from '../hydration.js';\nimport { clear_text_content, get_first_child } from '../operations.js';\nimport { queue_micro_task } from '../task.js';\n\n/**\n * @param {HTMLElement} dom\n * @param {boolean} value\n * @returns {void}\n */\nexport function autofocus(dom, value) {\n\tif (value) {\n\t\tconst body = document.body;\n\t\tdom.autofocus = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tif (document.activeElement === body) {\n\t\t\t\tdom.focus();\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * The child of a textarea actually corresponds to the defaultValue property, so we need\n * to remove it upon hydration to avoid a bug when someone resets the form value.\n * @param {HTMLTextAreaElement} dom\n * @returns {void}\n */\nexport function remove_textarea_child(dom) {\n\tif (hydrating && get_first_child(dom) !== null) {\n\t\tclear_text_content(dom);\n\t}\n}\n\nlet listening_to_form_reset = false;\n\nexport function add_form_reset_listener() {\n\tif (!listening_to_form_reset) {\n\t\tlistening_to_form_reset = true;\n\t\tdocument.addEventListener(\n\t\t\t'reset',\n\t\t\t(evt) => {\n\t\t\t\t// Needs to happen one tick later or else the dom properties of the form\n\t\t\t\t// elements have not updated to their reset values yet\n\t\t\t\tPromise.resolve().then(() => {\n\t\t\t\t\tif (!evt.defaultPrevented) {\n\t\t\t\t\t\tfor (const e of /**@type {HTMLFormElement} */ (evt.target).elements) {\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\te.__on_r?.();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t// In the capture phase to guarantee we get noticed of it (no possiblity of stopPropagation)\n\t\t\t{ capture: true }\n\t\t);\n\t}\n}\n","import { teardown } from '../../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../../runtime.js';\nimport { add_form_reset_listener } from '../misc.js';\n\n/**\n * Fires the handler once immediately (unless corresponding arg is set to `false`),\n * then listens to the given events until the render effect context is destroyed\n * @param {EventTarget} target\n * @param {Array<string>} events\n * @param {(event?: Event) => void} handler\n * @param {any} call_handler_immediately\n */\nexport function listen(target, events, handler, call_handler_immediately = true) {\n\tif (call_handler_immediately) {\n\t\thandler();\n\t}\n\n\tfor (var name of events) {\n\t\ttarget.addEventListener(name, handler);\n\t}\n\n\tteardown(() => {\n\t\tfor (var name of events) {\n\t\t\ttarget.removeEventListener(name, handler);\n\t\t}\n\t});\n}\n\n/**\n * @template T\n * @param {() => T} fn\n */\nexport function without_reactive_context(fn) {\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * Listen to the given event, and then instantiate a global form reset listener if not already done,\n * to notify all bindings when the form is reset\n * @param {HTMLElement} element\n * @param {string} event\n * @param {(is_reset?: true) => void} handler\n * @param {(is_reset?: true) => void} [on_reset]\n */\nexport function listen_to_event_and_reset_event(element, event, handler, on_reset = handler) {\n\telement.addEventListener(event, () => without_reactive_context(handler));\n\t// @ts-expect-error\n\tconst prev = element.__on_r;\n\tif (prev) {\n\t\t// special case for checkbox that can have multiple binds (group & checked)\n\t\t// @ts-expect-error\n\t\telement.__on_r = () => {\n\t\t\tprev();\n\t\t\ton_reset(true);\n\t\t};\n\t} else {\n\t\t// @ts-expect-error\n\t\telement.__on_r = () => on_reset(true);\n\t}\n\n\tadd_form_reset_listener();\n}\n","/** @import { Location } from 'locate-character' */\nimport { teardown } from '../../reactivity/effects.js';\nimport { define_property, is_array } from '../../../shared/utils.js';\nimport { hydrating } from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport { FILENAME } from '../../../../constants.js';\nimport * as w from '../../warnings.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { without_reactive_context } from './bindings/shared.js';\n\n/** @type {Set<string>} */\nexport const all_registered_events = new Set();\n\n/** @type {Set<(events: Array<string>) => void>} */\nexport const root_event_handles = new Set();\n\n/**\n * SSR adds onload and onerror attributes to catch those events before the hydration.\n * This function detects those cases, removes the attributes and replays the events.\n * @param {HTMLElement} dom\n */\nexport function replay_events(dom) {\n\tif (!hydrating) return;\n\n\tif (dom.onload) {\n\t\tdom.removeAttribute('onload');\n\t}\n\tif (dom.onerror) {\n\t\tdom.removeAttribute('onerror');\n\t}\n\t// @ts-expect-error\n\tconst event = dom.__e;\n\tif (event !== undefined) {\n\t\t// @ts-expect-error\n\t\tdom.__e = undefined;\n\t\tqueueMicrotask(() => {\n\t\t\tif (dom.isConnected) {\n\t\t\t\tdom.dispatchEvent(event);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @param {string} event_name\n * @param {EventTarget} dom\n * @param {EventListener} handler\n * @param {AddEventListenerOptions} options\n */\nexport function create_event(event_name, dom, handler, options) {\n\t/**\n\t * @this {EventTarget}\n\t */\n\tfunction target_handler(/** @type {Event} */ event) {\n\t\tif (!options.capture) {\n\t\t\t// Only call in the bubble phase, else delegated events would be called before the capturing events\n\t\t\thandle_event_propagation.call(dom, event);\n\t\t}\n\t\tif (!event.cancelBubble) {\n\t\t\treturn without_reactive_context(() => {\n\t\t\t\treturn handler.call(this, event);\n\t\t\t});\n\t\t}\n\t}\n\n\t// Chrome has a bug where pointer events don't work when attached to a DOM element that has been cloned\n\t// with cloneNode() and the DOM element is disconnected from the document. To ensure the event works, we\n\t// defer the attachment till after it's been appended to the document. TODO: remove this once Chrome fixes\n\t// this bug. The same applies to wheel events and touch events.\n\tif (\n\t\tevent_name.startsWith('pointer') ||\n\t\tevent_name.startsWith('touch') ||\n\t\tevent_name === 'wheel'\n\t) {\n\t\tqueue_micro_task(() => {\n\t\t\tdom.addEventListener(event_name, target_handler, options);\n\t\t});\n\t} else {\n\t\tdom.addEventListener(event_name, target_handler, options);\n\t}\n\n\treturn target_handler;\n}\n\n/**\n * Attaches an event handler to an element and returns a function that removes the handler. Using this\n * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n * (with attributes like `onclick`), which use event delegation for performance reasons\n *\n * @param {EventTarget} element\n * @param {string} type\n * @param {EventListener} handler\n * @param {AddEventListenerOptions} [options]\n */\nexport function on(element, type, handler, options = {}) {\n\tvar target_handler = create_event(type, element, handler, options);\n\n\treturn () => {\n\t\telement.removeEventListener(type, target_handler, options);\n\t};\n}\n\n/**\n * @param {string} event_name\n * @param {Element} dom\n * @param {EventListener} handler\n * @param {boolean} capture\n * @param {boolean} [passive]\n * @returns {void}\n */\nexport function event(event_name, dom, handler, capture, passive) {\n\tvar options = { capture, passive };\n\tvar target_handler = create_event(event_name, dom, handler, options);\n\n\t// @ts-ignore\n\tif (dom === document.body || dom === window || dom === document) {\n\t\tteardown(() => {\n\t\t\tdom.removeEventListener(event_name, target_handler, options);\n\t\t});\n\t}\n}\n\n/**\n * @param {Array<string>} events\n * @returns {void}\n */\nexport function delegate(events) {\n\tfor (var i = 0; i < events.length; i++) {\n\t\tall_registered_events.add(events[i]);\n\t}\n\n\tfor (var fn of root_event_handles) {\n\t\tfn(events);\n\t}\n}\n\n/**\n * @this {EventTarget}\n * @param {Event} event\n * @returns {void}\n */\nexport function handle_event_propagation(event) {\n\tvar handler_element = this;\n\tvar owner_document = /** @type {Node} */ (handler_element).ownerDocument;\n\tvar event_name = event.type;\n\tvar path = event.composedPath?.() || [];\n\tvar current_target = /** @type {null | Element} */ (path[0] || event.target);\n\n\t// composedPath contains list of nodes the event has propagated through.\n\t// We check __root to skip all nodes below it in case this is a\n\t// parent of the __root node, which indicates that there's nested\n\t// mounted apps. In this case we don't want to trigger events multiple times.\n\tvar path_idx = 0;\n\n\t// @ts-expect-error is added below\n\tvar handled_at = event.__root;\n\n\tif (handled_at) {\n\t\tvar at_idx = path.indexOf(handled_at);\n\t\tif (\n\t\t\tat_idx !== -1 &&\n\t\t\t(handler_element === document || handler_element === /** @type {any} */ (window))\n\t\t) {\n\t\t\t// This is the fallback document listener or a window listener, but the event was already handled\n\t\t\t// -> ignore, but set handle_at to document/window so that we're resetting the event\n\t\t\t// chain in case someone manually dispatches the same event object again.\n\t\t\t// @ts-expect-error\n\t\t\tevent.__root = handler_element;\n\t\t\treturn;\n\t\t}\n\n\t\t// We're deliberately not skipping if the index is higher, because\n\t\t// someone could create an event programmatically and emit it multiple times,\n\t\t// in which case we want to handle the whole propagation chain properly each time.\n\t\t// (this will only be a false negative if the event is dispatched multiple times and\n\t\t// the fallback document listener isn't reached in between, but that's super rare)\n\t\tvar handler_idx = path.indexOf(handler_element);\n\t\tif (handler_idx === -1) {\n\t\t\t// handle_idx can theoretically be -1 (happened in some JSDOM testing scenarios with an event listener on the window object)\n\t\t\t// so guard against that, too, and assume that everything was handled at this point.\n\t\t\treturn;\n\t\t}\n\n\t\tif (at_idx <= handler_idx) {\n\t\t\tpath_idx = at_idx;\n\t\t}\n\t}\n\n\tcurrent_target = /** @type {Element} */ (path[path_idx] || event.target);\n\t// there can only be one delegated event per element, and we either already handled the current target,\n\t// or this is the very first target in the chain which has a non-delegated listener, in which case it's safe\n\t// to handle a possible delegated event on it later (through the root delegation listener for example).\n\tif (current_target === handler_element) return;\n\n\t// Proxy currentTarget to correct target\n\tdefine_property(event, 'currentTarget', {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn current_target || owner_document;\n\t\t}\n\t});\n\n\t// This started because of Chromium issue https://chromestatus.com/feature/5128696823545856,\n\t// where removal or moving of of the DOM can cause sync `blur` events to fire, which can cause logic\n\t// to run inside the current `active_reaction`, which isn't what we want at all. However, on reflection,\n\t// it's probably best that all event handled by Svelte have this behaviour, as we don't really want\n\t// an event handler to run in the context of another reaction or effect.\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\t/**\n\t\t * @type {unknown}\n\t\t */\n\t\tvar throw_error;\n\t\t/**\n\t\t * @type {unknown[]}\n\t\t */\n\t\tvar other_errors = [];\n\n\t\twhile (current_target !== null) {\n\t\t\t/** @type {null | Element} */\n\t\t\tvar parent_element =\n\t\t\t\tcurrent_target.assignedSlot ||\n\t\t\t\tcurrent_target.parentNode ||\n\t\t\t\t/** @type {any} */ (current_target).host ||\n\t\t\t\tnull;\n\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tvar delegated = current_target['__' + event_name];\n\n\t\t\t\tif (delegated !== undefined && !(/** @type {any} */ (current_target).disabled)) {\n\t\t\t\t\tif (is_array(delegated)) {\n\t\t\t\t\t\tvar [fn, ...data] = delegated;\n\t\t\t\t\t\tfn.apply(current_target, [event, ...data]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdelegated.call(current_target, event);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (throw_error) {\n\t\t\t\t\tother_errors.push(error);\n\t\t\t\t} else {\n\t\t\t\t\tthrow_error = error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (event.cancelBubble || parent_element === handler_element || parent_element === null) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent_target = parent_element;\n\t\t}\n\n\t\tif (throw_error) {\n\t\t\tfor (let error of other_errors) {\n\t\t\t\t// Throw the rest of the errors, one-by-one on a microtask\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow throw_error;\n\t\t}\n\t} finally {\n\t\t// @ts-expect-error is used above\n\t\tevent.__root = handler_element;\n\t\t// @ts-ignore remove proxy on currentTarget\n\t\tdelete event.currentTarget;\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * In dev, warn if an event handler is not a function, as it means the\n * user probably called the handler or forgot to add a `() =>`\n * @param {() => (event: Event, ...args: any) => void} thunk\n * @param {EventTarget} element\n * @param {[Event, ...any]} args\n * @param {any} component\n * @param {[number, number]} [loc]\n * @param {boolean} [remove_parens]\n */\nexport function apply(\n\tthunk,\n\telement,\n\targs,\n\tcomponent,\n\tloc,\n\thas_side_effects = false,\n\tremove_parens = false\n) {\n\tlet handler;\n\tlet error;\n\n\ttry {\n\t\thandler = thunk();\n\t} catch (e) {\n\t\terror = e;\n\t}\n\n\tif (typeof handler === 'function') {\n\t\thandler.apply(element, args);\n\t} else if (has_side_effects || handler != null || error) {\n\t\tconst filename = component?.[FILENAME];\n\t\tconst location = loc ? ` at ${filename}:${loc[0]}:${loc[1]}` : ` in ${filename}`;\n\n\t\tconst event_name = args[0].type;\n\t\tconst description = `\\`${event_name}\\` handler${location}`;\n\t\tconst suggestion = remove_parens ? 'remove the trailing `()`' : 'add a leading `() =>`';\n\n\t\tw.event_handler_invalid(description, suggestion);\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n","/** @param {string} html */\nexport function create_fragment_from_html(html) {\n\tvar elem = document.createElement('template');\n\telem.innerHTML = html;\n\treturn elem.content;\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport { create_text, get_first_child } from './operations.js';\nimport { create_fragment_from_html } from './reconciler.js';\nimport { active_effect } from '../runtime.js';\nimport { TEMPLATE_FRAGMENT, TEMPLATE_USE_IMPORT_NODE } from '../../../constants.js';\n\n/**\n * @param {TemplateNode} start\n * @param {TemplateNode | null} end\n */\nexport function assign_nodes(start, end) {\n\tvar effect = /** @type {Effect} */ (active_effect);\n\tif (effect.nodes_start === null) {\n\t\teffect.nodes_start = start;\n\t\teffect.nodes_end = end;\n\t}\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function template(content, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tnode = create_fragment_from_html(has_start ? content : '<!>' + content);\n\t\t\tif (!is_fragment) node = /** @type {Node} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function template_with_script(content, flags) {\n\tvar fn = template(content, flags);\n\treturn () => run_scripts(/** @type {Element | DocumentFragment} */ (fn()));\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @param {'svg' | 'math'} ns\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function ns_template(content, flags, ns = 'svg') {\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar wrapped = `<${ns}>${has_start ? content : '<!>' + content}</${ns}>`;\n\n\t/** @type {Element | DocumentFragment} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (!node) {\n\t\t\tvar fragment = /** @type {DocumentFragment} */ (create_fragment_from_html(wrapped));\n\t\t\tvar root = /** @type {Element} */ (get_first_child(fragment));\n\n\t\t\tif (is_fragment) {\n\t\t\t\tnode = document.createDocumentFragment();\n\t\t\t\twhile (get_first_child(root)) {\n\t\t\t\t\tnode.appendChild(/** @type {Node} */ (get_first_child(root)));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode = /** @type {Element} */ (get_first_child(root));\n\t\t\t}\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (node.cloneNode(true));\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function svg_template_with_script(content, flags) {\n\tvar fn = ns_template(content, flags);\n\treturn () => run_scripts(/** @type {Element | DocumentFragment} */ (fn()));\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function mathml_template(content, flags) {\n\treturn ns_template(content, flags, 'math');\n}\n\n/**\n * Creating a document fragment from HTML that contains script tags will not execute\n * the scripts. We need to replace the script tags with new ones so that they are executed.\n * @param {Element | DocumentFragment} node\n * @returns {Node | Node[]}\n */\nfunction run_scripts(node) {\n\t// scripts were SSR'd, in which case they will run\n\tif (hydrating) return node;\n\n\tconst is_fragment = node.nodeType === 11;\n\tconst scripts =\n\t\t/** @type {HTMLElement} */ (node).tagName === 'SCRIPT'\n\t\t\t? [/** @type {HTMLScriptElement} */ (node)]\n\t\t\t: node.querySelectorAll('script');\n\tconst effect = /** @type {Effect} */ (active_effect);\n\n\tfor (const script of scripts) {\n\t\tconst clone = document.createElement('script');\n\t\tfor (var attribute of script.attributes) {\n\t\t\tclone.setAttribute(attribute.name, attribute.value);\n\t\t}\n\n\t\tclone.textContent = script.textContent;\n\n\t\t// The script has changed - if it's at the edges, the effect now points at dead nodes\n\t\tif (is_fragment ? node.firstChild === script : node === script) {\n\t\t\teffect.nodes_start = clone;\n\t\t}\n\t\tif (is_fragment ? node.lastChild === script : node === script) {\n\t\t\teffect.nodes_end = clone;\n\t\t}\n\n\t\tscript.replaceWith(clone);\n\t}\n\treturn node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {any} value\n */\nexport function text(value = '') {\n\tif (!hydrating) {\n\t\tvar t = create_text(value + '');\n\t\tassign_nodes(t, t);\n\t\treturn t;\n\t}\n\n\tvar node = hydrate_node;\n\n\tif (node.nodeType !== 3) {\n\t\t// if an {expression} is empty during SSR, we need to insert an empty text node\n\t\tnode.before((node = create_text()));\n\t\tset_hydrate_node(node);\n\t}\n\n\tassign_nodes(node, node);\n\treturn node;\n}\n\nexport function comment() {\n\t// we're not delegating to `template` here for performance reasons\n\tif (hydrating) {\n\t\tassign_nodes(hydrate_node, null);\n\t\treturn hydrate_node;\n\t}\n\n\tvar frag = document.createDocumentFragment();\n\tvar start = document.createComment('');\n\tvar anchor = create_text();\n\tfrag.append(start, anchor);\n\n\tassign_nodes(start, anchor);\n\n\treturn frag;\n}\n\n/**\n * Assign the created (or in hydration mode, traversed) dom elements to the current block\n * and insert the elements into the dom (in client mode).\n * @param {Text | Comment | Element} anchor\n * @param {DocumentFragment | Element} dom\n */\nexport function append(anchor, dom) {\n\tif (hydrating) {\n\t\t/** @type {Effect} */ (active_effect).nodes_end = hydrate_node;\n\t\thydrate_next();\n\t\treturn;\n\t}\n\n\tif (anchor === null) {\n\t\t// edge case — void `<svelte:element>` with content\n\t\treturn;\n\t}\n\n\tanchor.before(/** @type {Node} */ (dom));\n}\n","/** @import { ComponentContext, Effect, TemplateNode } from '#client' */\n/** @import { Component, ComponentType, SvelteComponent, MountOptions } from '../../index.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tinit_operations\n} from './dom/operations.js';\nimport { HYDRATION_END, HYDRATION_ERROR, HYDRATION_START } from '../../constants.js';\nimport { push, pop, component_context, active_effect } from './runtime.js';\nimport { component_root, branch } from './reactivity/effects.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tset_hydrate_node,\n\tset_hydrating\n} from './dom/hydration.js';\nimport { array_from } from '../shared/utils.js';\nimport {\n\tall_registered_events,\n\thandle_event_propagation,\n\troot_event_handles\n} from './dom/elements/events.js';\nimport { reset_head_anchor } from './dom/blocks/svelte-head.js';\nimport * as w from './warnings.js';\nimport * as e from './errors.js';\nimport { assign_nodes } from './dom/template.js';\nimport { is_passive_event } from '../../utils.js';\n\n/**\n * This is normally true — block effects should run their intro transitions —\n * but is false during hydration (unless `options.intro` is `true`) and\n * when creating the children of a `<svelte:element>` that just changed tag\n */\nexport let should_intro = true;\n\n/** @param {boolean} value */\nexport function set_should_intro(value) {\n\tshould_intro = value;\n}\n\n/**\n * @param {Element} text\n * @param {string} value\n * @returns {void}\n */\nexport function set_text(text, value) {\n\t// For objects, we apply string coercion (which might make things like $state array references in the template reactive) before diffing\n\tvar str = value == null ? '' : typeof value === 'object' ? value + '' : value;\n\t// @ts-expect-error\n\tif (str !== (text.__t ??= text.nodeValue)) {\n\t\t// @ts-expect-error\n\t\ttext.__t = str;\n\t\ttext.nodeValue = str == null ? '' : str + '';\n\t}\n}\n\n/**\n * Mounts a component to the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component.\n * Transitions will play during the initial render unless the `intro` option is set to `false`.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {MountOptions<Props>} options\n * @returns {Exports}\n */\nexport function mount(component, options) {\n\treturn _mount(component, options);\n}\n\n/**\n * Hydrates a component on the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {{} extends Props ? {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops?: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n * \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n * \t} : {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n * \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n * \t}} options\n * @returns {Exports}\n */\nexport function hydrate(component, options) {\n\tinit_operations();\n\toptions.intro = options.intro ?? false;\n\tconst target = options.target;\n\tconst was_hydrating = hydrating;\n\tconst previous_hydrate_node = hydrate_node;\n\n\ttry {\n\t\tvar anchor = /** @type {TemplateNode} */ (get_first_child(target));\n\t\twhile (\n\t\t\tanchor &&\n\t\t\t(anchor.nodeType !== 8 || /** @type {Comment} */ (anchor).data !== HYDRATION_START)\n\t\t) {\n\t\t\tanchor = /** @type {TemplateNode} */ (get_next_sibling(anchor));\n\t\t}\n\n\t\tif (!anchor) {\n\t\t\tthrow HYDRATION_ERROR;\n\t\t}\n\n\t\tset_hydrating(true);\n\t\tset_hydrate_node(/** @type {Comment} */ (anchor));\n\t\thydrate_next();\n\n\t\tconst instance = _mount(component, { ...options, anchor });\n\n\t\tif (\n\t\t\thydrate_node === null ||\n\t\t\thydrate_node.nodeType !== 8 ||\n\t\t\t/** @type {Comment} */ (hydrate_node).data !== HYDRATION_END\n\t\t) {\n\t\t\tw.hydration_mismatch();\n\t\t\tthrow HYDRATION_ERROR;\n\t\t}\n\n\t\tset_hydrating(false);\n\n\t\treturn /** @type {Exports} */ (instance);\n\t} catch (error) {\n\t\tif (error === HYDRATION_ERROR) {\n\t\t\tif (options.recover === false) {\n\t\t\t\te.hydration_failed();\n\t\t\t}\n\n\t\t\t// If an error occured above, the operations might not yet have been initialised.\n\t\t\tinit_operations();\n\t\t\tclear_text_content(target);\n\n\t\t\tset_hydrating(false);\n\t\t\treturn mount(component, options);\n\t\t}\n\n\t\tthrow error;\n\t} finally {\n\t\tset_hydrating(was_hydrating);\n\t\tset_hydrate_node(previous_hydrate_node);\n\t\treset_head_anchor();\n\t}\n}\n\n/** @type {Map<string, number>} */\nconst document_listeners = new Map();\n\n/**\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<any>> | Component<any>} Component\n * @param {MountOptions} options\n * @returns {Exports}\n */\nfunction _mount(Component, { target, anchor, props = {}, events, context, intro = true }) {\n\tinit_operations();\n\n\tvar registered_events = new Set();\n\n\t/** @param {Array<string>} events */\n\tvar event_handle = (events) => {\n\t\tfor (var i = 0; i < events.length; i++) {\n\t\t\tvar event_name = events[i];\n\n\t\t\tif (registered_events.has(event_name)) continue;\n\t\t\tregistered_events.add(event_name);\n\n\t\t\tvar passive = is_passive_event(event_name);\n\n\t\t\t// Add the event listener to both the container and the document.\n\t\t\t// The container listener ensures we catch events from within in case\n\t\t\t// the outer content stops propagation of the event.\n\t\t\ttarget.addEventListener(event_name, handle_event_propagation, { passive });\n\n\t\t\tvar n = document_listeners.get(event_name);\n\n\t\t\tif (n === undefined) {\n\t\t\t\t// The document listener ensures we catch events that originate from elements that were\n\t\t\t\t// manually moved outside of the container (e.g. via manual portals).\n\t\t\t\tdocument.addEventListener(event_name, handle_event_propagation, { passive });\n\t\t\t\tdocument_listeners.set(event_name, 1);\n\t\t\t} else {\n\t\t\t\tdocument_listeners.set(event_name, n + 1);\n\t\t\t}\n\t\t}\n\t};\n\n\tevent_handle(array_from(all_registered_events));\n\troot_event_handles.add(event_handle);\n\n\t/** @type {Exports} */\n\t// @ts-expect-error will be defined because the render effect runs synchronously\n\tvar component = undefined;\n\n\tvar unmount = component_root(() => {\n\t\tvar anchor_node = anchor ?? target.appendChild(create_text());\n\n\t\tbranch(() => {\n\t\t\tif (context) {\n\t\t\t\tpush({});\n\t\t\t\tvar ctx = /** @type {ComponentContext} */ (component_context);\n\t\t\t\tctx.c = context;\n\t\t\t}\n\n\t\t\tif (events) {\n\t\t\t\t// We can't spread the object or else we'd lose the state proxy stuff, if it is one\n\t\t\t\t/** @type {any} */ (props).$$events = events;\n\t\t\t}\n\n\t\t\tif (hydrating) {\n\t\t\t\tassign_nodes(/** @type {TemplateNode} */ (anchor_node), null);\n\t\t\t}\n\n\t\t\tshould_intro = intro;\n\t\t\t// @ts-expect-error the public typings are not what the actual function looks like\n\t\t\tcomponent = Component(anchor_node, props) || {};\n\t\t\tshould_intro = true;\n\n\t\t\tif (hydrating) {\n\t\t\t\t/** @type {Effect} */ (active_effect).nodes_end = hydrate_node;\n\t\t\t}\n\n\t\t\tif (context) {\n\t\t\t\tpop();\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tfor (var event_name of registered_events) {\n\t\t\t\ttarget.removeEventListener(event_name, handle_event_propagation);\n\n\t\t\t\tvar n = /** @type {number} */ (document_listeners.get(event_name));\n\n\t\t\t\tif (--n === 0) {\n\t\t\t\t\tdocument.removeEventListener(event_name, handle_event_propagation);\n\t\t\t\t\tdocument_listeners.delete(event_name);\n\t\t\t\t} else {\n\t\t\t\t\tdocument_listeners.set(event_name, n);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\troot_event_handles.delete(event_handle);\n\n\t\t\tif (anchor_node !== anchor) {\n\t\t\t\tanchor_node.parentNode?.removeChild(anchor_node);\n\t\t\t}\n\t\t};\n\t});\n\n\tmounted_components.set(component, unmount);\n\treturn component;\n}\n\n/**\n * References of the components that were mounted or hydrated.\n * Uses a `WeakMap` to avoid memory leaks.\n */\nlet mounted_components = new WeakMap();\n\n/**\n * Unmounts a component that was previously mounted using `mount` or `hydrate`.\n *\n * Since 5.13.0, if `options.outro` is `true`, [transitions](https://svelte.dev/docs/svelte/transition) will play before the component is removed from the DOM.\n *\n * Returns a `Promise` that resolves after transitions have completed if `options.outro` is true, or immediately otherwise (prior to 5.13.0, returns `void`).\n *\n * ```js\n * import { mount, unmount } from 'svelte';\n * import App from './App.svelte';\n *\n * const app = mount(App, { target: document.body });\n *\n * // later...\n * unmount(app, { outro: true });\n * ```\n * @param {Record<string, any>} component\n * @param {{ outro?: boolean }} [options]\n * @returns {Promise<void>}\n */\nexport function unmount(component, options) {\n\tconst fn = mounted_components.get(component);\n\n\tif (fn) {\n\t\tmounted_components.delete(component);\n\t\treturn fn(options);\n\t}\n\n\tif (DEV) {\n\t\tw.lifecycle_double_unmount();\n\t}\n\n\treturn Promise.resolve();\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { EFFECT_TRANSPARENT } from '../../constants.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tremove_nodes,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport { block, branch, pause_effect, resume_effect } from '../../reactivity/effects.js';\nimport { HYDRATION_START_ELSE, UNINITIALIZED } from '../../../../constants.js';\n\n/**\n * @param {TemplateNode} node\n * @param {(branch: (fn: (anchor: Node) => void, flag?: boolean) => void) => void} fn\n * @param {boolean} [elseif] True if this is an `{:else if ...}` block rather than an `{#if ...}`, as that affects which transitions are considered 'local'\n * @returns {void}\n */\nexport function if_block(node, fn, elseif = false) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar anchor = node;\n\n\t/** @type {Effect | null} */\n\tvar consequent_effect = null;\n\n\t/** @type {Effect | null} */\n\tvar alternate_effect = null;\n\n\t/** @type {UNINITIALIZED | boolean | null} */\n\tvar condition = UNINITIALIZED;\n\n\tvar flags = elseif ? EFFECT_TRANSPARENT : 0;\n\n\tvar has_branch = false;\n\n\tconst set_branch = (/** @type {(anchor: Node) => void} */ fn, flag = true) => {\n\t\thas_branch = true;\n\t\tupdate_branch(flag, fn);\n\t};\n\n\tconst update_branch = (\n\t\t/** @type {boolean | null} */ new_condition,\n\t\t/** @type {null | ((anchor: Node) => void)} */ fn\n\t) => {\n\t\tif (condition === (condition = new_condition)) return;\n\n\t\t/** Whether or not there was a hydration mismatch. Needs to be a `let` or else it isn't treeshaken out */\n\t\tlet mismatch = false;\n\n\t\tif (hydrating) {\n\t\t\tconst is_else = /** @type {Comment} */ (anchor).data === HYDRATION_START_ELSE;\n\n\t\t\tif (!!condition === is_else) {\n\t\t\t\t// Hydration mismatch: remove everything inside the anchor and start fresh.\n\t\t\t\t// This could happen with `{#if browser}...{/if}`, for example\n\t\t\t\tanchor = remove_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tset_hydrating(false);\n\t\t\t\tmismatch = true;\n\t\t\t}\n\t\t}\n\n\t\tif (condition) {\n\t\t\tif (consequent_effect) {\n\t\t\t\tresume_effect(consequent_effect);\n\t\t\t} else if (fn) {\n\t\t\t\tconsequent_effect = branch(() => fn(anchor));\n\t\t\t}\n\n\t\t\tif (alternate_effect) {\n\t\t\t\tpause_effect(alternate_effect, () => {\n\t\t\t\t\talternate_effect = null;\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tif (alternate_effect) {\n\t\t\t\tresume_effect(alternate_effect);\n\t\t\t} else if (fn) {\n\t\t\t\talternate_effect = branch(() => fn(anchor));\n\t\t\t}\n\n\t\t\tif (consequent_effect) {\n\t\t\t\tpause_effect(consequent_effect, () => {\n\t\t\t\t\tconsequent_effect = null;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (mismatch) {\n\t\t\t// continue in hydration mode\n\t\t\tset_hydrating(true);\n\t\t}\n\t};\n\n\tblock(() => {\n\t\thas_branch = false;\n\t\tfn(set_branch);\n\t\tif (!has_branch) {\n\t\t\tupdate_branch(null, null);\n\t\t}\n\t}, flags);\n\n\tif (hydrating) {\n\t\tanchor = hydrate_node;\n\t}\n}\n","/** @import { EachItem, EachState, Effect, MaybeSource, Source, TemplateNode, TransitionManager, Value } from '#client' */\nimport {\n\tEACH_INDEX_REACTIVE,\n\tEACH_IS_ANIMATED,\n\tEACH_IS_CONTROLLED,\n\tEACH_ITEM_IMMUTABLE,\n\tEACH_ITEM_REACTIVE,\n\tHYDRATION_END,\n\tHYDRATION_START_ELSE\n} from '../../../../constants.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tremove_nodes,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling\n} from '../operations.js';\nimport {\n\tblock,\n\tbranch,\n\tdestroy_effect,\n\trun_out_transitions,\n\tpause_children,\n\tpause_effect,\n\tresume_effect\n} from '../../reactivity/effects.js';\nimport { source, mutable_source, internal_set } from '../../reactivity/sources.js';\nimport { array_from, is_array } from '../../../shared/utils.js';\nimport { INERT } from '../../constants.js';\nimport { queue_micro_task } from '../task.js';\nimport { active_effect, active_reaction } from '../../runtime.js';\nimport { DEV } from 'esm-env';\n\n/**\n * The row of a keyed each block that is currently updating. We track this\n * so that `animate:` directives have something to attach themselves to\n * @type {EachItem | null}\n */\nexport let current_each_item = null;\n\n/** @param {EachItem | null} item */\nexport function set_current_each_item(item) {\n\tcurrent_each_item = item;\n}\n\n/**\n * @param {any} _\n * @param {number} i\n */\nexport function index(_, i) {\n\treturn i;\n}\n\n/**\n * Pause multiple effects simultaneously, and coordinate their\n * subsequent destruction. Used in each blocks\n * @param {EachState} state\n * @param {EachItem[]} items\n * @param {null | Node} controlled_anchor\n * @param {Map<any, EachItem>} items_map\n */\nfunction pause_effects(state, items, controlled_anchor, items_map) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\tvar length = items.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tpause_children(items[i].e, transitions, true);\n\t}\n\n\tvar is_controlled = length > 0 && transitions.length === 0 && controlled_anchor !== null;\n\t// If we have a controlled anchor, it means that the each block is inside a single\n\t// DOM element, so we can apply a fast-path for clearing the contents of the element.\n\tif (is_controlled) {\n\t\tvar parent_node = /** @type {Element} */ (\n\t\t\t/** @type {Element} */ (controlled_anchor).parentNode\n\t\t);\n\t\tclear_text_content(parent_node);\n\t\tparent_node.append(/** @type {Element} */ (controlled_anchor));\n\t\titems_map.clear();\n\t\tlink(state, items[0].prev, items[length - 1].next);\n\t}\n\n\trun_out_transitions(transitions, () => {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tvar item = items[i];\n\t\t\tif (!is_controlled) {\n\t\t\t\titems_map.delete(item.k);\n\t\t\t\tlink(state, item.prev, item.next);\n\t\t\t}\n\t\t\tdestroy_effect(item.e, !is_controlled);\n\t\t}\n\t});\n}\n\n/**\n * @template V\n * @param {Element | Comment} node The next sibling node, or the parent node if this is a 'controlled' block\n * @param {number} flags\n * @param {() => V[]} get_collection\n * @param {(value: V, index: number) => any} get_key\n * @param {(anchor: Node, item: MaybeSource<V>, index: MaybeSource<number>) => void} render_fn\n * @param {null | ((anchor: Node) => void)} fallback_fn\n * @returns {void}\n */\nexport function each(node, flags, get_collection, get_key, render_fn, fallback_fn = null) {\n\tvar anchor = node;\n\n\t/** @type {EachState} */\n\tvar state = { flags, items: new Map(), first: null };\n\n\tvar is_controlled = (flags & EACH_IS_CONTROLLED) !== 0;\n\n\tif (is_controlled) {\n\t\tvar parent_node = /** @type {Element} */ (node);\n\n\t\tanchor = hydrating\n\t\t\t? set_hydrate_node(/** @type {Comment | Text} */ (get_first_child(parent_node)))\n\t\t\t: parent_node.appendChild(create_text());\n\t}\n\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\t/** @type {Effect | null} */\n\tvar fallback = null;\n\n\tvar was_empty = false;\n\n\tblock(() => {\n\t\tvar collection = get_collection();\n\n\t\tvar array = is_array(collection)\n\t\t\t? collection\n\t\t\t: collection == null\n\t\t\t\t? []\n\t\t\t\t: array_from(collection);\n\n\t\tvar length = array.length;\n\n\t\tif (was_empty && length === 0) {\n\t\t\t// ignore updates if the array is empty,\n\t\t\t// and it already was empty on previous run\n\t\t\treturn;\n\t\t}\n\t\twas_empty = length === 0;\n\n\t\t/** `true` if there was a hydration mismatch. Needs to be a `let` or else it isn't treeshaken out */\n\t\tlet mismatch = false;\n\n\t\tif (hydrating) {\n\t\t\tvar is_else = /** @type {Comment} */ (anchor).data === HYDRATION_START_ELSE;\n\n\t\t\tif (is_else !== (length === 0)) {\n\t\t\t\t// hydration mismatch — remove the server-rendered DOM and start over\n\t\t\t\tanchor = remove_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tset_hydrating(false);\n\t\t\t\tmismatch = true;\n\t\t\t}\n\t\t}\n\n\t\t// this is separate to the previous block because `hydrating` might change\n\t\tif (hydrating) {\n\t\t\t/** @type {EachItem | null} */\n\t\t\tvar prev = null;\n\n\t\t\t/** @type {EachItem} */\n\t\t\tvar item;\n\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tif (\n\t\t\t\t\thydrate_node.nodeType === 8 &&\n\t\t\t\t\t/** @type {Comment} */ (hydrate_node).data === HYDRATION_END\n\t\t\t\t) {\n\t\t\t\t\t// The server rendered fewer items than expected,\n\t\t\t\t\t// so break out and continue appending non-hydrated items\n\t\t\t\t\tanchor = /** @type {Comment} */ (hydrate_node);\n\t\t\t\t\tmismatch = true;\n\t\t\t\t\tset_hydrating(false);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tvar value = array[i];\n\t\t\t\tvar key = get_key(value, i);\n\t\t\t\titem = create_item(\n\t\t\t\t\thydrate_node,\n\t\t\t\t\tstate,\n\t\t\t\t\tprev,\n\t\t\t\t\tnull,\n\t\t\t\t\tvalue,\n\t\t\t\t\tkey,\n\t\t\t\t\ti,\n\t\t\t\t\trender_fn,\n\t\t\t\t\tflags,\n\t\t\t\t\tget_collection\n\t\t\t\t);\n\t\t\t\tstate.items.set(key, item);\n\n\t\t\t\tprev = item;\n\t\t\t}\n\n\t\t\t// remove excess nodes\n\t\t\tif (length > 0) {\n\t\t\t\tset_hydrate_node(remove_nodes());\n\t\t\t}\n\t\t}\n\n\t\tif (!hydrating) {\n\t\t\tvar effect = /** @type {Effect} */ (active_reaction);\n\t\t\treconcile(\n\t\t\t\tarray,\n\t\t\t\tstate,\n\t\t\t\tanchor,\n\t\t\t\trender_fn,\n\t\t\t\tflags,\n\t\t\t\t(effect.f & INERT) !== 0,\n\t\t\t\tget_key,\n\t\t\t\tget_collection\n\t\t\t);\n\t\t}\n\n\t\tif (fallback_fn !== null) {\n\t\t\tif (length === 0) {\n\t\t\t\tif (fallback) {\n\t\t\t\t\tresume_effect(fallback);\n\t\t\t\t} else {\n\t\t\t\t\tfallback = branch(() => fallback_fn(anchor));\n\t\t\t\t}\n\t\t\t} else if (fallback !== null) {\n\t\t\t\tpause_effect(fallback, () => {\n\t\t\t\t\tfallback = null;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (mismatch) {\n\t\t\t// continue in hydration mode\n\t\t\tset_hydrating(true);\n\t\t}\n\n\t\t// When we mount the each block for the first time, the collection won't be\n\t\t// connected to this effect as the effect hasn't finished running yet and its deps\n\t\t// won't be assigned. However, it's possible that when reconciling the each block\n\t\t// that a mutation occurred and it's made the collection MAYBE_DIRTY, so reading the\n\t\t// collection again can provide consistency to the reactive graph again as the deriveds\n\t\t// will now be `CLEAN`.\n\t\tget_collection();\n\t});\n\n\tif (hydrating) {\n\t\tanchor = hydrate_node;\n\t}\n}\n\n/**\n * Add, remove, or reorder items output by an each block as its input changes\n * @template V\n * @param {Array<V>} array\n * @param {EachState} state\n * @param {Element | Comment | Text} anchor\n * @param {(anchor: Node, item: MaybeSource<V>, index: number | Source<number>) => void} render_fn\n * @param {number} flags\n * @param {boolean} is_inert\n * @param {(value: V, index: number) => any} get_key\n * @param {() => V[]} get_collection\n * @returns {void}\n */\nfunction reconcile(array, state, anchor, render_fn, flags, is_inert, get_key, get_collection) {\n\tvar is_animated = (flags & EACH_IS_ANIMATED) !== 0;\n\tvar should_update = (flags & (EACH_ITEM_REACTIVE | EACH_INDEX_REACTIVE)) !== 0;\n\n\tvar length = array.length;\n\tvar items = state.items;\n\tvar first = state.first;\n\tvar current = first;\n\n\t/** @type {undefined | Set<EachItem>} */\n\tvar seen;\n\n\t/** @type {EachItem | null} */\n\tvar prev = null;\n\n\t/** @type {undefined | Set<EachItem>} */\n\tvar to_animate;\n\n\t/** @type {EachItem[]} */\n\tvar matched = [];\n\n\t/** @type {EachItem[]} */\n\tvar stashed = [];\n\n\t/** @type {V} */\n\tvar value;\n\n\t/** @type {any} */\n\tvar key;\n\n\t/** @type {EachItem | undefined} */\n\tvar item;\n\n\t/** @type {number} */\n\tvar i;\n\n\tif (is_animated) {\n\t\tfor (i = 0; i < length; i += 1) {\n\t\t\tvalue = array[i];\n\t\t\tkey = get_key(value, i);\n\t\t\titem = items.get(key);\n\n\t\t\tif (item !== undefined) {\n\t\t\t\titem.a?.measure();\n\t\t\t\t(to_animate ??= new Set()).add(item);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (i = 0; i < length; i += 1) {\n\t\tvalue = array[i];\n\t\tkey = get_key(value, i);\n\t\titem = items.get(key);\n\n\t\tif (item === undefined) {\n\t\t\tvar child_anchor = current ? /** @type {TemplateNode} */ (current.e.nodes_start) : anchor;\n\n\t\t\tprev = create_item(\n\t\t\t\tchild_anchor,\n\t\t\t\tstate,\n\t\t\t\tprev,\n\t\t\t\tprev === null ? state.first : prev.next,\n\t\t\t\tvalue,\n\t\t\t\tkey,\n\t\t\t\ti,\n\t\t\t\trender_fn,\n\t\t\t\tflags,\n\t\t\t\tget_collection\n\t\t\t);\n\n\t\t\titems.set(key, prev);\n\n\t\t\tmatched = [];\n\t\t\tstashed = [];\n\n\t\t\tcurrent = prev.next;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (should_update) {\n\t\t\tupdate_item(item, value, i, flags);\n\t\t}\n\n\t\tif ((item.e.f & INERT) !== 0) {\n\t\t\tresume_effect(item.e);\n\t\t\tif (is_animated) {\n\t\t\t\titem.a?.unfix();\n\t\t\t\t(to_animate ??= new Set()).delete(item);\n\t\t\t}\n\t\t}\n\n\t\tif (item !== current) {\n\t\t\tif (seen !== undefined && seen.has(item)) {\n\t\t\t\tif (matched.length < stashed.length) {\n\t\t\t\t\t// more efficient to move later items to the front\n\t\t\t\t\tvar start = stashed[0];\n\t\t\t\t\tvar j;\n\n\t\t\t\t\tprev = start.prev;\n\n\t\t\t\t\tvar a = matched[0];\n\t\t\t\t\tvar b = matched[matched.length - 1];\n\n\t\t\t\t\tfor (j = 0; j < matched.length; j += 1) {\n\t\t\t\t\t\tmove(matched[j], start, anchor);\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (j = 0; j < stashed.length; j += 1) {\n\t\t\t\t\t\tseen.delete(stashed[j]);\n\t\t\t\t\t}\n\n\t\t\t\t\tlink(state, a.prev, b.next);\n\t\t\t\t\tlink(state, prev, a);\n\t\t\t\t\tlink(state, b, start);\n\n\t\t\t\t\tcurrent = start;\n\t\t\t\t\tprev = b;\n\t\t\t\t\ti -= 1;\n\n\t\t\t\t\tmatched = [];\n\t\t\t\t\tstashed = [];\n\t\t\t\t} else {\n\t\t\t\t\t// more efficient to move earlier items to the back\n\t\t\t\t\tseen.delete(item);\n\t\t\t\t\tmove(item, current, anchor);\n\n\t\t\t\t\tlink(state, item.prev, item.next);\n\t\t\t\t\tlink(state, item, prev === null ? state.first : prev.next);\n\t\t\t\t\tlink(state, prev, item);\n\n\t\t\t\t\tprev = item;\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tmatched = [];\n\t\t\tstashed = [];\n\n\t\t\twhile (current !== null && current.k !== key) {\n\t\t\t\t// If the each block isn't inert and an item has an effect that is already inert,\n\t\t\t\t// skip over adding it to our seen Set as the item is already being handled\n\t\t\t\tif (is_inert || (current.e.f & INERT) === 0) {\n\t\t\t\t\t(seen ??= new Set()).add(current);\n\t\t\t\t}\n\t\t\t\tstashed.push(current);\n\t\t\t\tcurrent = current.next;\n\t\t\t}\n\n\t\t\tif (current === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\titem = current;\n\t\t}\n\n\t\tmatched.push(item);\n\t\tprev = item;\n\t\tcurrent = item.next;\n\t}\n\n\tif (current !== null || seen !== undefined) {\n\t\tvar to_destroy = seen === undefined ? [] : array_from(seen);\n\n\t\twhile (current !== null) {\n\t\t\t// If the each block isn't inert, then inert effects are currently outroing and will be removed once the transition is finished\n\t\t\tif (is_inert || (current.e.f & INERT) === 0) {\n\t\t\t\tto_destroy.push(current);\n\t\t\t}\n\t\t\tcurrent = current.next;\n\t\t}\n\n\t\tvar destroy_length = to_destroy.length;\n\n\t\tif (destroy_length > 0) {\n\t\t\tvar controlled_anchor = (flags & EACH_IS_CONTROLLED) !== 0 && length === 0 ? anchor : null;\n\n\t\t\tif (is_animated) {\n\t\t\t\tfor (i = 0; i < destroy_length; i += 1) {\n\t\t\t\t\tto_destroy[i].a?.measure();\n\t\t\t\t}\n\n\t\t\t\tfor (i = 0; i < destroy_length; i += 1) {\n\t\t\t\t\tto_destroy[i].a?.fix();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpause_effects(state, to_destroy, controlled_anchor, items);\n\t\t}\n\t}\n\n\tif (is_animated) {\n\t\tqueue_micro_task(() => {\n\t\t\tif (to_animate === undefined) return;\n\t\t\tfor (item of to_animate) {\n\t\t\t\titem.a?.apply();\n\t\t\t}\n\t\t});\n\t}\n\n\t/** @type {Effect} */ (active_effect).first = state.first && state.first.e;\n\t/** @type {Effect} */ (active_effect).last = prev && prev.e;\n}\n\n/**\n * @param {EachItem} item\n * @param {any} value\n * @param {number} index\n * @param {number} type\n * @returns {void}\n */\nfunction update_item(item, value, index, type) {\n\tif ((type & EACH_ITEM_REACTIVE) !== 0) {\n\t\tinternal_set(item.v, value);\n\t}\n\n\tif ((type & EACH_INDEX_REACTIVE) !== 0) {\n\t\tinternal_set(/** @type {Value<number>} */ (item.i), index);\n\t} else {\n\t\titem.i = index;\n\t}\n}\n\n/**\n * @template V\n * @param {Node} anchor\n * @param {EachState} state\n * @param {EachItem | null} prev\n * @param {EachItem | null} next\n * @param {V} value\n * @param {unknown} key\n * @param {number} index\n * @param {(anchor: Node, item: V | Source<V>, index: number | Value<number>) => void} render_fn\n * @param {number} flags\n * @param {() => V[]} get_collection\n * @returns {EachItem}\n */\nfunction create_item(\n\tanchor,\n\tstate,\n\tprev,\n\tnext,\n\tvalue,\n\tkey,\n\tindex,\n\trender_fn,\n\tflags,\n\tget_collection\n) {\n\tvar previous_each_item = current_each_item;\n\tvar reactive = (flags & EACH_ITEM_REACTIVE) !== 0;\n\tvar mutable = (flags & EACH_ITEM_IMMUTABLE) === 0;\n\n\tvar v = reactive ? (mutable ? mutable_source(value) : source(value)) : value;\n\tvar i = (flags & EACH_INDEX_REACTIVE) === 0 ? index : source(index);\n\n\tif (DEV && reactive) {\n\t\t// For tracing purposes, we need to link the source signal we create with the\n\t\t// collection + index so that tracing works as intended\n\t\t/** @type {Value} */ (v).debug = () => {\n\t\t\tvar collection_index = typeof i === 'number' ? index : i.v;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\t\t\tget_collection()[collection_index];\n\t\t};\n\t}\n\n\t/** @type {EachItem} */\n\tvar item = {\n\t\ti,\n\t\tv,\n\t\tk: key,\n\t\ta: null,\n\t\t// @ts-expect-error\n\t\te: null,\n\t\tprev,\n\t\tnext\n\t};\n\n\tcurrent_each_item = item;\n\n\ttry {\n\t\titem.e = branch(() => render_fn(anchor, v, i), hydrating);\n\n\t\titem.e.prev = prev && prev.e;\n\t\titem.e.next = next && next.e;\n\n\t\tif (prev === null) {\n\t\t\tstate.first = item;\n\t\t} else {\n\t\t\tprev.next = item;\n\t\t\tprev.e.next = item.e;\n\t\t}\n\n\t\tif (next !== null) {\n\t\t\tnext.prev = item;\n\t\t\tnext.e.prev = item.e;\n\t\t}\n\n\t\treturn item;\n\t} finally {\n\t\tcurrent_each_item = previous_each_item;\n\t}\n}\n\n/**\n * @param {EachItem} item\n * @param {EachItem | null} next\n * @param {Text | Element | Comment} anchor\n */\nfunction move(item, next, anchor) {\n\tvar end = item.next ? /** @type {TemplateNode} */ (item.next.e.nodes_start) : anchor;\n\n\tvar dest = next ? /** @type {TemplateNode} */ (next.e.nodes_start) : anchor;\n\tvar node = /** @type {TemplateNode} */ (item.e.nodes_start);\n\n\twhile (node !== end) {\n\t\tvar next_node = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\tdest.before(node);\n\t\tnode = next_node;\n\t}\n}\n\n/**\n * @param {EachState} state\n * @param {EachItem | null} prev\n * @param {EachItem | null} next\n */\nfunction link(state, prev, next) {\n\tif (prev === null) {\n\t\tstate.first = next;\n\t} else {\n\t\tprev.next = next;\n\t\tprev.e.next = next && next.e;\n\t}\n\n\tif (next !== null) {\n\t\tnext.prev = prev;\n\t\tnext.e.prev = prev && prev.e;\n\t}\n}\n","/** @import { Snippet } from 'svelte' */\n/** @import { Effect, TemplateNode } from '#client' */\n/** @import { Getters } from '#shared' */\nimport { EFFECT_TRANSPARENT } from '../../constants.js';\nimport { branch, block, destroy_effect, teardown } from '../../reactivity/effects.js';\nimport {\n\tdev_current_component_function,\n\tset_dev_current_component_function\n} from '../../runtime.js';\nimport { hydrate_next, hydrate_node, hydrating } from '../hydration.js';\nimport { create_fragment_from_html } from '../reconciler.js';\nimport { assign_nodes } from '../template.js';\nimport * as w from '../../warnings.js';\nimport * as e from '../../errors.js';\nimport { DEV } from 'esm-env';\nimport { get_first_child, get_next_sibling } from '../operations.js';\nimport { noop } from '../../../shared/utils.js';\n\n/**\n * @template {(node: TemplateNode, ...args: any[]) => void} SnippetFn\n * @param {TemplateNode} node\n * @param {() => SnippetFn | null | undefined} get_snippet\n * @param {(() => any)[]} args\n * @returns {void}\n */\nexport function snippet(node, get_snippet, ...args) {\n\tvar anchor = node;\n\n\t/** @type {SnippetFn | null | undefined} */\n\t// @ts-ignore\n\tvar snippet = noop;\n\n\t/** @type {Effect | null} */\n\tvar snippet_effect;\n\n\tblock(() => {\n\t\tif (snippet === (snippet = get_snippet())) return;\n\n\t\tif (snippet_effect) {\n\t\t\tdestroy_effect(snippet_effect);\n\t\t\tsnippet_effect = null;\n\t\t}\n\n\t\tif (DEV && snippet == null) {\n\t\t\te.invalid_snippet();\n\t\t}\n\n\t\tsnippet_effect = branch(() => /** @type {SnippetFn} */ (snippet)(anchor, ...args));\n\t}, EFFECT_TRANSPARENT);\n\n\tif (hydrating) {\n\t\tanchor = hydrate_node;\n\t}\n}\n\n/**\n * In development, wrap the snippet function so that it passes validation, and so that the\n * correct component context is set for ownership checks\n * @param {any} component\n * @param {(node: TemplateNode, ...args: any[]) => void} fn\n */\nexport function wrap_snippet(component, fn) {\n\treturn (/** @type {TemplateNode} */ node, /** @type {any[]} */ ...args) => {\n\t\tvar previous_component_function = dev_current_component_function;\n\t\tset_dev_current_component_function(component);\n\n\t\ttry {\n\t\t\treturn fn(node, ...args);\n\t\t} finally {\n\t\t\tset_dev_current_component_function(previous_component_function);\n\t\t}\n\t};\n}\n\n/**\n * Create a snippet programmatically\n * @template {unknown[]} Params\n * @param {(...params: Getters<Params>) => {\n * render: () => string\n * setup?: (element: Element) => void | (() => void)\n * }} fn\n * @returns {Snippet<Params>}\n */\nexport function createRawSnippet(fn) {\n\t// @ts-expect-error the types are a lie\n\treturn (/** @type {TemplateNode} */ anchor, /** @type {Getters<Params>} */ ...params) => {\n\t\tvar snippet = fn(...params);\n\n\t\t/** @type {Element} */\n\t\tvar element;\n\n\t\tif (hydrating) {\n\t\t\telement = /** @type {Element} */ (hydrate_node);\n\t\t\thydrate_next();\n\t\t} else {\n\t\t\tvar html = snippet.render().trim();\n\t\t\tvar fragment = create_fragment_from_html(html);\n\t\t\telement = /** @type {Element} */ (get_first_child(fragment));\n\n\t\t\tif (DEV && (get_next_sibling(element) !== null || element.nodeType !== 1)) {\n\t\t\t\tw.invalid_raw_snippet_render();\n\t\t\t}\n\n\t\t\tanchor.before(element);\n\t\t}\n\n\t\tconst result = snippet.setup?.(element);\n\t\tassign_nodes(element, element);\n\n\t\tif (typeof result === 'function') {\n\t\t\tteardown(result);\n\t\t}\n\t};\n}\n","/** @import { ActionPayload } from '#client' */\nimport { effect, render_effect } from '../../reactivity/effects.js';\nimport { safe_not_equal } from '../../reactivity/equality.js';\nimport { deep_read_state, untrack } from '../../runtime.js';\n\n/**\n * @template P\n * @param {Element} dom\n * @param {(dom: Element, value?: P) => ActionPayload<P>} action\n * @param {() => P} [get_value]\n * @returns {void}\n */\nexport function action(dom, action, get_value) {\n\teffect(() => {\n\t\tvar payload = untrack(() => action(dom, get_value?.()) || {});\n\n\t\tif (get_value && payload?.update) {\n\t\t\tvar inited = false;\n\t\t\t/** @type {P} */\n\t\t\tvar prev = /** @type {any} */ ({}); // initialize with something so it's never equal on first run\n\n\t\t\trender_effect(() => {\n\t\t\t\tvar value = get_value();\n\n\t\t\t\t// Action's update method is coarse-grained, i.e. when anything in the passed value changes, update.\n\t\t\t\t// This works in legacy mode because of mutable_source being updated as a whole, but when using $state\n\t\t\t\t// together with actions and mutation, it wouldn't notice the change without a deep read.\n\t\t\t\tdeep_read_state(value);\n\n\t\t\t\tif (inited && safe_not_equal(prev, value)) {\n\t\t\t\t\tprev = value;\n\t\t\t\t\t/** @type {Function} */ (payload.update)(value);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tinited = true;\n\t\t}\n\n\t\tif (payload?.destroy) {\n\t\t\treturn () => /** @type {Function} */ (payload.destroy)();\n\t\t}\n\t});\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import { escape_html } from '../../escaping.js';\nimport { clsx as _clsx } from 'clsx';\n\n/**\n * `<div translate={false}>` should be rendered as `<div translate=\"no\">` and _not_\n * `<div translate=\"false\">`, which is equivalent to `<div translate=\"yes\">`. There\n * may be other odd cases that need to be added to this list in future\n * @type {Record<string, Map<any, string>>}\n */\nconst replacements = {\n\ttranslate: new Map([\n\t\t[true, 'yes'],\n\t\t[false, 'no']\n\t])\n};\n\n/**\n * @template V\n * @param {string} name\n * @param {V} value\n * @param {boolean} [is_boolean]\n * @returns {string}\n */\nexport function attr(name, value, is_boolean = false) {\n\tif (value == null || (!value && is_boolean) || (value === '' && name === 'class')) return '';\n\tconst normalized = (name in replacements && replacements[name].get(value)) || value;\n\tconst assignment = is_boolean ? '' : `=\"${escape_html(normalized, true)}\"`;\n\treturn ` ${name}${assignment}`;\n}\n\n/**\n * Small wrapper around clsx to preserve Svelte's (weird) handling of falsy values.\n * TODO Svelte 6 revisit this, and likely turn all falsy values into the empty string (what clsx also does)\n * @param {any} value\n */\nexport function clsx(value) {\n\tif (typeof value === 'object') {\n\t\treturn _clsx(value);\n\t} else {\n\t\treturn value ?? '';\n\t}\n}\n","import { DEV } from 'esm-env';\nimport { hydrating } from '../hydration.js';\nimport { get_descriptors, get_prototype_of } from '../../../shared/utils.js';\nimport { create_event, delegate } from './events.js';\nimport { add_form_reset_listener, autofocus } from './misc.js';\nimport * as w from '../../warnings.js';\nimport { LOADING_ATTR_SYMBOL } from '../../constants.js';\nimport { queue_idle_task } from '../task.js';\nimport { is_capture_event, is_delegated, normalize_attribute } from '../../../../utils.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { clsx } from '../../../shared/attributes.js';\n\n/**\n * The value/checked attribute in the template actually corresponds to the defaultValue property, so we need\n * to remove it upon hydration to avoid a bug when someone resets the form value.\n * @param {HTMLInputElement} input\n * @returns {void}\n */\nexport function remove_input_defaults(input) {\n\tif (!hydrating) return;\n\n\tvar already_removed = false;\n\n\t// We try and remove the default attributes later, rather than sync during hydration.\n\t// Doing it sync during hydration has a negative impact on performance, but deferring the\n\t// work in an idle task alleviates this greatly. If a form reset event comes in before\n\t// the idle callback, then we ensure the input defaults are cleared just before.\n\tvar remove_defaults = () => {\n\t\tif (already_removed) return;\n\t\talready_removed = true;\n\n\t\t// Remove the attributes but preserve the values\n\t\tif (input.hasAttribute('value')) {\n\t\t\tvar value = input.value;\n\t\t\tset_attribute(input, 'value', null);\n\t\t\tinput.value = value;\n\t\t}\n\n\t\tif (input.hasAttribute('checked')) {\n\t\t\tvar checked = input.checked;\n\t\t\tset_attribute(input, 'checked', null);\n\t\t\tinput.checked = checked;\n\t\t}\n\t};\n\n\t// @ts-expect-error\n\tinput.__on_r = remove_defaults;\n\tqueue_idle_task(remove_defaults);\n\tadd_form_reset_listener();\n}\n\n/**\n * @param {Element} element\n * @param {any} value\n */\nexport function set_value(element, value) {\n\t// @ts-expect-error\n\tvar attributes = (element.__attributes ??= {});\n\n\tif (\n\t\tattributes.value ===\n\t\t\t(attributes.value =\n\t\t\t\t// treat null and undefined the same for the initial value\n\t\t\t\tvalue ?? undefined) ||\n\t\t// @ts-expect-error\n\t\t// `progress` elements always need their value set when its `0`\n\t\t(element.value === value && (value !== 0 || element.nodeName !== 'PROGRESS'))\n\t) {\n\t\treturn;\n\t}\n\n\t// @ts-expect-error\n\telement.value = value;\n}\n\n/**\n * @param {Element} element\n * @param {boolean} checked\n */\nexport function set_checked(element, checked) {\n\t// @ts-expect-error\n\tvar attributes = (element.__attributes ??= {});\n\n\tif (\n\t\tattributes.checked ===\n\t\t(attributes.checked =\n\t\t\t// treat null and undefined the same for the initial value\n\t\t\tchecked ?? undefined)\n\t) {\n\t\treturn;\n\t}\n\n\t// @ts-expect-error\n\telement.checked = checked;\n}\n\n/**\n * Sets the `selected` attribute on an `option` element.\n * Not set through the property because that doesn't reflect to the DOM,\n * which means it wouldn't be taken into account when a form is reset.\n * @param {HTMLOptionElement} element\n * @param {boolean} selected\n */\nexport function set_selected(element, selected) {\n\tif (selected) {\n\t\t// The selected option could've changed via user selection, and\n\t\t// setting the value without this check would set it back.\n\t\tif (!element.hasAttribute('selected')) {\n\t\t\telement.setAttribute('selected', '');\n\t\t}\n\t} else {\n\t\telement.removeAttribute('selected');\n\t}\n}\n\n/**\n * Applies the default checked property without influencing the current checked property.\n * @param {HTMLInputElement} element\n * @param {boolean} checked\n */\nexport function set_default_checked(element, checked) {\n\tconst existing_value = element.checked;\n\telement.defaultChecked = checked;\n\telement.checked = existing_value;\n}\n\n/**\n * Applies the default value property without influencing the current value property.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * @param {string} value\n */\nexport function set_default_value(element, value) {\n\tconst existing_value = element.value;\n\telement.defaultValue = value;\n\telement.value = existing_value;\n}\n\n/**\n * @param {Element} element\n * @param {string} attribute\n * @param {string | null} value\n * @param {boolean} [skip_warning]\n */\nexport function set_attribute(element, attribute, value, skip_warning) {\n\t// @ts-expect-error\n\tvar attributes = (element.__attributes ??= {});\n\n\tif (hydrating) {\n\t\tattributes[attribute] = element.getAttribute(attribute);\n\n\t\tif (\n\t\t\tattribute === 'src' ||\n\t\t\tattribute === 'srcset' ||\n\t\t\t(attribute === 'href' && element.nodeName === 'LINK')\n\t\t) {\n\t\t\tif (!skip_warning) {\n\t\t\t\tcheck_src_in_dev_hydration(element, attribute, value ?? '');\n\t\t\t}\n\n\t\t\t// If we reset these attributes, they would result in another network request, which we want to avoid.\n\t\t\t// We assume they are the same between client and server as checking if they are equal is expensive\n\t\t\t// (we can't just compare the strings as they can be different between client and server but result in the\n\t\t\t// same url, so we would need to create hidden anchor elements to compare them)\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (attributes[attribute] === (attributes[attribute] = value)) return;\n\n\tif (attribute === 'style' && '__styles' in element) {\n\t\t// reset styles to force style: directive to update\n\t\telement.__styles = {};\n\t}\n\n\tif (attribute === 'loading') {\n\t\t// @ts-expect-error\n\t\telement[LOADING_ATTR_SYMBOL] = value;\n\t}\n\n\tif (value == null) {\n\t\telement.removeAttribute(attribute);\n\t} else if (typeof value !== 'string' && get_setters(element).includes(attribute)) {\n\t\t// @ts-ignore\n\t\telement[attribute] = value;\n\t} else {\n\t\telement.setAttribute(attribute, value);\n\t}\n}\n\n/**\n * @param {Element} dom\n * @param {string} attribute\n * @param {string} value\n */\nexport function set_xlink_attribute(dom, attribute, value) {\n\tdom.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\n\n/**\n * @param {HTMLElement} node\n * @param {string} prop\n * @param {any} value\n */\nexport function set_custom_element_data(node, prop, value) {\n\t// We need to ensure that setting custom element props, which can\n\t// invoke lifecycle methods on other custom elements, does not also\n\t// associate those lifecycle methods with the current active reaction\n\t// or effect\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\ttry {\n\t\tif (\n\t\t\t// Don't compute setters for custom elements while they aren't registered yet,\n\t\t\t// because during their upgrade/instantiation they might add more setters.\n\t\t\t// Instead, fall back to a simple \"an object, then set as property\" heuristic.\n\t\t\tsetters_cache.has(node.nodeName) || customElements.get(node.tagName.toLowerCase())\n\t\t\t\t? get_setters(node).includes(prop)\n\t\t\t\t: value && typeof value === 'object'\n\t\t) {\n\t\t\t// @ts-expect-error\n\t\t\tnode[prop] = value;\n\t\t} else {\n\t\t\t// We did getters etc checks already, stringify before passing to set_attribute\n\t\t\t// to ensure it doesn't invoke the same logic again, and potentially populating\n\t\t\t// the setters cache too early.\n\t\t\tset_attribute(node, prop, value == null ? value : String(value));\n\t\t}\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * Spreads attributes onto a DOM element, taking into account the currently set attributes\n * @param {Element & ElementCSSInlineStyle} element\n * @param {Record<string, any> | undefined} prev\n * @param {Record<string, any>} next New attributes - this function mutates this object\n * @param {string} [css_hash]\n * @param {boolean} [preserve_attribute_case]\n * @param {boolean} [is_custom_element]\n * @param {boolean} [skip_warning]\n * @returns {Record<string, any>}\n */\nexport function set_attributes(\n\telement,\n\tprev,\n\tnext,\n\tcss_hash,\n\tpreserve_attribute_case = false,\n\tis_custom_element = false,\n\tskip_warning = false\n) {\n\tvar current = prev || {};\n\tvar is_option_element = element.tagName === 'OPTION';\n\n\tfor (var key in prev) {\n\t\tif (!(key in next)) {\n\t\t\tnext[key] = null;\n\t\t}\n\t}\n\n\tif (next.class) {\n\t\tnext.class = clsx(next.class);\n\t}\n\n\tif (css_hash !== undefined) {\n\t\tnext.class = next.class ? next.class + ' ' + css_hash : css_hash;\n\t}\n\n\tvar setters = get_setters(element);\n\n\t// @ts-expect-error\n\tvar attributes = /** @type {Record<string, unknown>} **/ (element.__attributes ??= {});\n\n\t// since key is captured we use const\n\tfor (const key in next) {\n\t\t// let instead of var because referenced in a closure\n\t\tlet value = next[key];\n\n\t\t// Up here because we want to do this for the initial value, too, even if it's undefined,\n\t\t// and this wouldn't be reached in case of undefined because of the equality check below\n\t\tif (is_option_element && key === 'value' && value == null) {\n\t\t\t// The <option> element is a special case because removing the value attribute means\n\t\t\t// the value is set to the text content of the option element, and setting the value\n\t\t\t// to null or undefined means the value is set to the string \"null\" or \"undefined\".\n\t\t\t// To align with how we handle this case in non-spread-scenarios, this logic is needed.\n\t\t\t// There's a super-edge-case bug here that is left in in favor of smaller code size:\n\t\t\t// Because of the \"set missing props to null\" logic above, we can't differentiate\n\t\t\t// between a missing value and an explicitly set value of null or undefined. That means\n\t\t\t// that once set, the value attribute of an <option> element can't be removed. This is\n\t\t\t// a very rare edge case, and removing the attribute altogether isn't possible either\n\t\t\t// for the <option value={undefined}> case, so we're not losing any functionality here.\n\t\t\t// @ts-ignore\n\t\t\telement.value = element.__value = '';\n\t\t\tcurrent[key] = value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar prev_value = current[key];\n\t\tif (value === prev_value) continue;\n\n\t\tcurrent[key] = value;\n\n\t\tvar prefix = key[0] + key[1]; // this is faster than key.slice(0, 2)\n\t\tif (prefix === '$$') continue;\n\n\t\tif (prefix === 'on') {\n\t\t\t/** @type {{ capture?: true }} */\n\t\t\tconst opts = {};\n\t\t\tconst event_handle_key = '$$' + key;\n\t\t\tlet event_name = key.slice(2);\n\t\t\tvar delegated = is_delegated(event_name);\n\n\t\t\tif (is_capture_event(event_name)) {\n\t\t\t\tevent_name = event_name.slice(0, -7);\n\t\t\t\topts.capture = true;\n\t\t\t}\n\n\t\t\tif (!delegated && prev_value) {\n\t\t\t\t// Listening to same event but different handler -> our handle function below takes care of this\n\t\t\t\t// If we were to remove and add listeners in this case, it could happen that the event is \"swallowed\"\n\t\t\t\t// (the browser seems to not know yet that a new one exists now) and doesn't reach the handler\n\t\t\t\t// https://github.com/sveltejs/svelte/issues/11903\n\t\t\t\tif (value != null) continue;\n\n\t\t\t\telement.removeEventListener(event_name, current[event_handle_key], opts);\n\t\t\t\tcurrent[event_handle_key] = null;\n\t\t\t}\n\n\t\t\tif (value != null) {\n\t\t\t\tif (!delegated) {\n\t\t\t\t\t/**\n\t\t\t\t\t * @this {any}\n\t\t\t\t\t * @param {Event} evt\n\t\t\t\t\t */\n\t\t\t\t\tfunction handle(evt) {\n\t\t\t\t\t\tcurrent[key].call(this, evt);\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrent[event_handle_key] = create_event(event_name, element, handle, opts);\n\t\t\t\t} else {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\telement[`__${event_name}`] = value;\n\t\t\t\t\tdelegate([event_name]);\n\t\t\t\t}\n\t\t\t} else if (delegated) {\n\t\t\t\t// @ts-ignore\n\t\t\t\telement[`__${event_name}`] = undefined;\n\t\t\t}\n\t\t} else if (key === 'style' && value != null) {\n\t\t\telement.style.cssText = value + '';\n\t\t} else if (key === 'autofocus') {\n\t\t\tautofocus(/** @type {HTMLElement} */ (element), Boolean(value));\n\t\t} else if (key === '__value' || (key === 'value' && value != null)) {\n\t\t\t// @ts-ignore\n\t\t\telement.value = element[key] = element.__value = value;\n\t\t} else if (key === 'selected' && is_option_element) {\n\t\t\tset_selected(/** @type {HTMLOptionElement} */ (element), value);\n\t\t} else {\n\t\t\tvar name = key;\n\t\t\tif (!preserve_attribute_case) {\n\t\t\t\tname = normalize_attribute(name);\n\t\t\t}\n\n\t\t\tvar is_default = name === 'defaultValue' || name === 'defaultChecked';\n\n\t\t\tif (value == null && !is_custom_element && !is_default) {\n\t\t\t\tattributes[key] = null;\n\n\t\t\t\tif (name === 'value' || name === 'checked') {\n\t\t\t\t\t// removing value/checked also removes defaultValue/defaultChecked — preserve\n\t\t\t\t\tlet input = /** @type {HTMLInputElement} */ (element);\n\n\t\t\t\t\tif (name === 'value') {\n\t\t\t\t\t\tlet prev = input.defaultValue;\n\t\t\t\t\t\tinput.removeAttribute(name);\n\t\t\t\t\t\tinput.defaultValue = prev;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet prev = input.defaultChecked;\n\t\t\t\t\t\tinput.removeAttribute(name);\n\t\t\t\t\t\tinput.defaultChecked = prev;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\telement.removeAttribute(key);\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tis_default ||\n\t\t\t\t(setters.includes(name) && (is_custom_element || typeof value !== 'string'))\n\t\t\t) {\n\t\t\t\t// @ts-ignore\n\t\t\t\telement[name] = value;\n\t\t\t} else if (typeof value !== 'function') {\n\t\t\t\tif (hydrating && (name === 'src' || name === 'href' || name === 'srcset')) {\n\t\t\t\t\tif (!skip_warning) check_src_in_dev_hydration(element, name, value ?? '');\n\t\t\t\t} else {\n\t\t\t\t\tset_attribute(element, name, value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (key === 'style' && '__styles' in element) {\n\t\t\t// reset styles to force style: directive to update\n\t\t\telement.__styles = {};\n\t\t}\n\t}\n\n\treturn current;\n}\n\n/** @type {Map<string, string[]>} */\nvar setters_cache = new Map();\n\n/** @param {Element} element */\nfunction get_setters(element) {\n\tvar setters = setters_cache.get(element.nodeName);\n\tif (setters) return setters;\n\tsetters_cache.set(element.nodeName, (setters = []));\n\n\tvar descriptors;\n\tvar proto = element; // In the case of custom elements there might be setters on the instance\n\tvar element_proto = Element.prototype;\n\n\t// Stop at Element, from there on there's only unnecessary setters we're not interested in\n\t// Do not use contructor.name here as that's unreliable in some browser environments\n\twhile (element_proto !== proto) {\n\t\tdescriptors = get_descriptors(proto);\n\n\t\tfor (var key in descriptors) {\n\t\t\tif (descriptors[key].set) {\n\t\t\t\tsetters.push(key);\n\t\t\t}\n\t\t}\n\n\t\tproto = get_prototype_of(proto);\n\t}\n\n\treturn setters;\n}\n\n/**\n * @param {any} element\n * @param {string} attribute\n * @param {string} value\n */\nfunction check_src_in_dev_hydration(element, attribute, value) {\n\tif (!DEV) return;\n\tif (attribute === 'srcset' && srcset_url_equal(element, value)) return;\n\tif (src_url_equal(element.getAttribute(attribute) ?? '', value)) return;\n\n\tw.hydration_attribute_changed(\n\t\tattribute,\n\t\telement.outerHTML.replace(element.innerHTML, element.innerHTML && '...'),\n\t\tString(value)\n\t);\n}\n\n/**\n * @param {string} element_src\n * @param {string} url\n * @returns {boolean}\n */\nfunction src_url_equal(element_src, url) {\n\tif (element_src === url) return true;\n\treturn new URL(element_src, document.baseURI).href === new URL(url, document.baseURI).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\n * @param {string} srcset\n * @returns {boolean}\n */\nfunction srcset_url_equal(element, srcset) {\n\tvar element_urls = split_srcset(element.srcset);\n\tvar 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/**\n * @param {HTMLImageElement} element\n * @returns {void}\n */\nexport function handle_lazy_img(element) {\n\t// If we're using an image that has a lazy loading attribute, we need to apply\n\t// the loading and src after the img element has been appended to the document.\n\t// Otherwise the lazy behaviour will not work due to our cloneNode heuristic for\n\t// templates.\n\tif (!hydrating && element.loading === 'lazy') {\n\t\tvar src = element.src;\n\t\t// @ts-expect-error\n\t\telement[LOADING_ATTR_SYMBOL] = null;\n\t\telement.loading = 'eager';\n\t\telement.removeAttribute('src');\n\t\trequestAnimationFrame(() => {\n\t\t\t// @ts-expect-error\n\t\t\tif (element[LOADING_ATTR_SYMBOL] !== 'eager') {\n\t\t\t\telement.loading = 'lazy';\n\t\t\t}\n\t\t\telement.src = src;\n\t\t});\n\t}\n}\n","import { hydrating } from '../hydration.js';\n\n/**\n * @param {SVGElement} dom\n * @param {string} value\n * @param {string} [hash]\n * @returns {void}\n */\nexport function set_svg_class(dom, value, hash) {\n\t// @ts-expect-error need to add __className to patched prototype\n\tvar prev_class_name = dom.__className;\n\tvar next_class_name = to_class(value, hash);\n\n\tif (hydrating && dom.getAttribute('class') === next_class_name) {\n\t\t// In case of hydration don't reset the class as it's already correct.\n\t\t// @ts-expect-error need to add __className to patched prototype\n\t\tdom.__className = next_class_name;\n\t} else if (\n\t\tprev_class_name !== next_class_name ||\n\t\t(hydrating && dom.getAttribute('class') !== next_class_name)\n\t) {\n\t\tif (next_class_name === '') {\n\t\t\tdom.removeAttribute('class');\n\t\t} else {\n\t\t\tdom.setAttribute('class', next_class_name);\n\t\t}\n\n\t\t// @ts-expect-error need to add __className to patched prototype\n\t\tdom.__className = next_class_name;\n\t}\n}\n\n/**\n * @param {MathMLElement} dom\n * @param {string} value\n * @param {string} [hash]\n * @returns {void}\n */\nexport function set_mathml_class(dom, value, hash) {\n\t// @ts-expect-error need to add __className to patched prototype\n\tvar prev_class_name = dom.__className;\n\tvar next_class_name = to_class(value, hash);\n\n\tif (hydrating && dom.getAttribute('class') === next_class_name) {\n\t\t// In case of hydration don't reset the class as it's already correct.\n\t\t// @ts-expect-error need to add __className to patched prototype\n\t\tdom.__className = next_class_name;\n\t} else if (\n\t\tprev_class_name !== next_class_name ||\n\t\t(hydrating && dom.getAttribute('class') !== next_class_name)\n\t) {\n\t\tif (next_class_name === '') {\n\t\t\tdom.removeAttribute('class');\n\t\t} else {\n\t\t\tdom.setAttribute('class', next_class_name);\n\t\t}\n\n\t\t// @ts-expect-error need to add __className to patched prototype\n\t\tdom.__className = next_class_name;\n\t}\n}\n\n/**\n * @param {HTMLElement} dom\n * @param {string} value\n * @param {string} [hash]\n * @returns {void}\n */\nexport function set_class(dom, value, hash) {\n\t// @ts-expect-error need to add __className to patched prototype\n\tvar prev_class_name = dom.__className;\n\tvar next_class_name = to_class(value, hash);\n\n\tif (hydrating && dom.className === next_class_name) {\n\t\t// In case of hydration don't reset the class as it's already correct.\n\t\t// @ts-expect-error need to add __className to patched prototype\n\t\tdom.__className = next_class_name;\n\t} else if (\n\t\tprev_class_name !== next_class_name ||\n\t\t(hydrating && dom.className !== next_class_name)\n\t) {\n\t\t// Removing the attribute when the value is only an empty string causes\n\t\t// peformance issues vs simply making the className an empty string. So\n\t\t// we should only remove the class if the the value is nullish.\n\t\tif (value == null && !hash) {\n\t\t\tdom.removeAttribute('class');\n\t\t} else {\n\t\t\tdom.className = next_class_name;\n\t\t}\n\n\t\t// @ts-expect-error need to add __className to patched prototype\n\t\tdom.__className = next_class_name;\n\t}\n}\n\n/**\n * @template V\n * @param {V} value\n * @param {string} [hash]\n * @returns {string | V}\n */\nfunction to_class(value, hash) {\n\treturn (value == null ? '' : value) + (hash ? ' ' + hash : '');\n}\n\n/**\n * @param {Element} dom\n * @param {string} class_name\n * @param {boolean} value\n * @returns {void}\n */\nexport function toggle_class(dom, class_name, value) {\n\tif (value) {\n\t\tif (dom.classList.contains(class_name)) return;\n\t\tdom.classList.add(class_name);\n\t} else {\n\t\tif (!dom.classList.contains(class_name)) return;\n\t\tdom.classList.remove(class_name);\n\t}\n}\n","/** @import { Raf } from '#client' */\nimport { noop } from '../shared/utils.js';\n\nimport { BROWSER } from 'esm-env';\n\nconst now = BROWSER ? () => performance.now() : () => Date.now();\n\n/** @type {Raf} */\nexport const raf = {\n\t// don't access requestAnimationFrame eagerly outside method\n\t// this allows basic testing of user code without JSDOM\n\t// bunder will eval and remove ternary when the user's app is built\n\ttick: /** @param {any} _ */ (_) => (BROWSER ? requestAnimationFrame : noop)(_),\n\tnow: () => now(),\n\ttasks: new Set()\n};\n","/** @import { TaskCallback, Task, TaskEntry } from '#client' */\nimport { raf } from './timing.js';\n\n// TODO move this into timing.js where it probably belongs\n\n/**\n * @returns {void}\n */\nfunction run_tasks() {\n\t// use `raf.now()` instead of the `requestAnimationFrame` callback argument, because\n\t// otherwise things can get wonky https://github.com/sveltejs/svelte/pull/14541\n\tconst now = raf.now();\n\n\traf.tasks.forEach((task) => {\n\t\tif (!task.c(now)) {\n\t\t\traf.tasks.delete(task);\n\t\t\ttask.f();\n\t\t}\n\t});\n\n\tif (raf.tasks.size !== 0) {\n\t\traf.tick(run_tasks);\n\t}\n}\n\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n * @param {TaskCallback} callback\n * @returns {Task}\n */\nexport function loop(callback) {\n\t/** @type {TaskEntry} */\n\tlet task;\n\n\tif (raf.tasks.size === 0) {\n\t\traf.tick(run_tasks);\n\t}\n\n\treturn {\n\t\tpromise: new Promise((fulfill) => {\n\t\t\traf.tasks.add((task = { c: callback, f: fulfill }));\n\t\t}),\n\t\tabort() {\n\t\t\traf.tasks.delete(task);\n\t\t}\n\t};\n}\n","/** @import { AnimateFn, Animation, AnimationConfig, EachItem, Effect, TransitionFn, TransitionManager } from '#client' */\nimport { noop, is_function } from '../../../shared/utils.js';\nimport { effect } from '../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction,\n\tuntrack\n} from '../../runtime.js';\nimport { loop } from '../../loop.js';\nimport { should_intro } from '../../render.js';\nimport { current_each_item } from '../blocks/each.js';\nimport { TRANSITION_GLOBAL, TRANSITION_IN, TRANSITION_OUT } from '../../../../constants.js';\nimport { BLOCK_EFFECT, EFFECT_RAN, EFFECT_TRANSPARENT } from '../../constants.js';\nimport { queue_micro_task } from '../task.js';\n\n/**\n * @param {Element} element\n * @param {'introstart' | 'introend' | 'outrostart' | 'outroend'} type\n * @returns {void}\n */\nfunction dispatch_event(element, type) {\n\telement.dispatchEvent(new CustomEvent(type));\n}\n\n/**\n * Converts a property to the camel-case format expected by Element.animate(), KeyframeEffect(), and KeyframeEffect.setKeyframes().\n * @param {string} style\n * @returns {string}\n */\nfunction css_property_to_camelcase(style) {\n\t// in compliance with spec\n\tif (style === 'float') return 'cssFloat';\n\tif (style === 'offset') return 'cssOffset';\n\n\t// do not rename custom @properties\n\tif (style.startsWith('--')) return style;\n\n\tconst parts = style.split('-');\n\tif (parts.length === 1) return parts[0];\n\treturn (\n\t\tparts[0] +\n\t\tparts\n\t\t\t.slice(1)\n\t\t\t.map(/** @param {any} word */ (word) => word[0].toUpperCase() + word.slice(1))\n\t\t\t.join('')\n\t);\n}\n\n/**\n * @param {string} css\n * @returns {Keyframe}\n */\nfunction css_to_keyframe(css) {\n\t/** @type {Keyframe} */\n\tconst keyframe = {};\n\tconst parts = css.split(';');\n\tfor (const part of parts) {\n\t\tconst [property, value] = part.split(':');\n\t\tif (!property || value === undefined) break;\n\n\t\tconst formatted_property = css_property_to_camelcase(property.trim());\n\t\tkeyframe[formatted_property] = value.trim();\n\t}\n\treturn keyframe;\n}\n\n/** @param {number} t */\nconst linear = (t) => t;\n\n/**\n * Called inside keyed `{#each ...}` blocks (as `$.animation(...)`). This creates an animation manager\n * and attaches it to the block, so that moves can be animated following reconciliation.\n * @template P\n * @param {Element} element\n * @param {() => AnimateFn<P | undefined>} get_fn\n * @param {(() => P) | null} get_params\n */\nexport function animation(element, get_fn, get_params) {\n\tvar item = /** @type {EachItem} */ (current_each_item);\n\n\t/** @type {DOMRect} */\n\tvar from;\n\n\t/** @type {DOMRect} */\n\tvar to;\n\n\t/** @type {Animation | undefined} */\n\tvar animation;\n\n\t/** @type {null | { position: string, width: string, height: string, transform: string }} */\n\tvar original_styles = null;\n\n\titem.a ??= {\n\t\telement,\n\t\tmeasure() {\n\t\t\tfrom = this.element.getBoundingClientRect();\n\t\t},\n\t\tapply() {\n\t\t\tanimation?.abort();\n\n\t\t\tto = this.element.getBoundingClientRect();\n\n\t\t\tif (\n\t\t\t\tfrom.left !== to.left ||\n\t\t\t\tfrom.right !== to.right ||\n\t\t\t\tfrom.top !== to.top ||\n\t\t\t\tfrom.bottom !== to.bottom\n\t\t\t) {\n\t\t\t\tconst options = get_fn()(this.element, { from, to }, get_params?.());\n\n\t\t\t\tanimation = animate(this.element, options, undefined, 1, () => {\n\t\t\t\t\tanimation?.abort();\n\t\t\t\t\tanimation = undefined;\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tfix() {\n\t\t\t// If an animation is already running, transforming the element is likely to fail,\n\t\t\t// because the styles applied by the animation take precedence. In the case of crossfade,\n\t\t\t// that means the `translate(...)` of the crossfade transition overrules the `translate(...)`\n\t\t\t// we would apply below, leading to the element jumping somewhere to the top left.\n\t\t\tif (element.getAnimations().length) return;\n\n\t\t\t// It's important to destructure these to get fixed values - the object itself has getters,\n\t\t\t// and changing the style to 'absolute' can for example influence the width.\n\t\t\tvar { position, width, height } = getComputedStyle(element);\n\n\t\t\tif (position !== 'absolute' && position !== 'fixed') {\n\t\t\t\tvar style = /** @type {HTMLElement | SVGElement} */ (element).style;\n\n\t\t\t\toriginal_styles = {\n\t\t\t\t\tposition: style.position,\n\t\t\t\t\twidth: style.width,\n\t\t\t\t\theight: style.height,\n\t\t\t\t\ttransform: style.transform\n\t\t\t\t};\n\n\t\t\t\tstyle.position = 'absolute';\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.height = height;\n\t\t\t\tvar to = element.getBoundingClientRect();\n\n\t\t\t\tif (from.left !== to.left || from.top !== to.top) {\n\t\t\t\t\tvar transform = `translate(${from.left - to.left}px, ${from.top - to.top}px)`;\n\t\t\t\t\tstyle.transform = style.transform ? `${style.transform} ${transform}` : transform;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tunfix() {\n\t\t\tif (original_styles) {\n\t\t\t\tvar style = /** @type {HTMLElement | SVGElement} */ (element).style;\n\n\t\t\t\tstyle.position = original_styles.position;\n\t\t\t\tstyle.width = original_styles.width;\n\t\t\t\tstyle.height = original_styles.height;\n\t\t\t\tstyle.transform = original_styles.transform;\n\t\t\t}\n\t\t}\n\t};\n\n\t// in the case of a `<svelte:element>`, it's possible for `$.animation(...)` to be called\n\t// when an animation manager already exists, if the tag changes. in that case, we need to\n\t// swap out the element rather than creating a new manager, in case it happened at the same\n\t// moment as a reconciliation\n\titem.a.element = element;\n}\n\n/**\n * Called inside block effects as `$.transition(...)`. This creates a transition manager and\n * attaches it to the current effect — later, inside `pause_effect` and `resume_effect`, we\n * use this to create `intro` and `outro` transitions.\n * @template P\n * @param {number} flags\n * @param {HTMLElement} element\n * @param {() => TransitionFn<P | undefined>} get_fn\n * @param {(() => P) | null} get_params\n * @returns {void}\n */\nexport function transition(flags, element, get_fn, get_params) {\n\tvar is_intro = (flags & TRANSITION_IN) !== 0;\n\tvar is_outro = (flags & TRANSITION_OUT) !== 0;\n\tvar is_both = is_intro && is_outro;\n\tvar is_global = (flags & TRANSITION_GLOBAL) !== 0;\n\n\t/** @type {'in' | 'out' | 'both'} */\n\tvar direction = is_both ? 'both' : is_intro ? 'in' : 'out';\n\n\t/** @type {AnimationConfig | ((opts: { direction: 'in' | 'out' }) => AnimationConfig) | undefined} */\n\tvar current_options;\n\n\tvar inert = element.inert;\n\n\t/** @type {Animation | undefined} */\n\tvar intro;\n\n\t/** @type {Animation | undefined} */\n\tvar outro;\n\n\tfunction get_options() {\n\t\tvar previous_reaction = active_reaction;\n\t\tvar previous_effect = active_effect;\n\t\tset_active_reaction(null);\n\t\tset_active_effect(null);\n\t\ttry {\n\t\t\t// If a transition is still ongoing, we use the existing options rather than generating\n\t\t\t// new ones. This ensures that reversible transitions reverse smoothly, rather than\n\t\t\t// jumping to a new spot because (for example) a different `duration` was used\n\t\t\treturn (current_options ??= get_fn()(element, get_params?.() ?? /** @type {P} */ ({}), {\n\t\t\t\tdirection\n\t\t\t}));\n\t\t} finally {\n\t\t\tset_active_reaction(previous_reaction);\n\t\t\tset_active_effect(previous_effect);\n\t\t}\n\t}\n\n\t/** @type {TransitionManager} */\n\tvar transition = {\n\t\tis_global,\n\t\tin() {\n\t\t\telement.inert = inert;\n\n\t\t\tif (!is_intro) {\n\t\t\t\toutro?.abort();\n\t\t\t\toutro?.reset?.();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!is_outro) {\n\t\t\t\t// if we intro then outro then intro again, we want to abort the first intro,\n\t\t\t\t// if it's not a bidirectional transition\n\t\t\t\tintro?.abort();\n\t\t\t}\n\n\t\t\tdispatch_event(element, 'introstart');\n\n\t\t\tintro = animate(element, get_options(), outro, 1, () => {\n\t\t\t\tdispatch_event(element, 'introend');\n\n\t\t\t\t// Ensure we cancel the animation to prevent leaking\n\t\t\t\tintro?.abort();\n\t\t\t\tintro = current_options = undefined;\n\t\t\t});\n\t\t},\n\t\tout(fn) {\n\t\t\tif (!is_outro) {\n\t\t\t\tfn?.();\n\t\t\t\tcurrent_options = undefined;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telement.inert = true;\n\n\t\t\tdispatch_event(element, 'outrostart');\n\n\t\t\toutro = animate(element, get_options(), intro, 0, () => {\n\t\t\t\tdispatch_event(element, 'outroend');\n\t\t\t\tfn?.();\n\t\t\t});\n\t\t},\n\t\tstop: () => {\n\t\t\tintro?.abort();\n\t\t\toutro?.abort();\n\t\t}\n\t};\n\n\tvar e = /** @type {Effect} */ (active_effect);\n\n\t(e.transitions ??= []).push(transition);\n\n\t// if this is a local transition, we only want to run it if the parent (branch) effect's\n\t// parent (block) effect is where the state change happened. we can determine that by\n\t// looking at whether the block effect is currently initializing\n\tif (is_intro && should_intro) {\n\t\tvar run = is_global;\n\n\t\tif (!run) {\n\t\t\tvar block = /** @type {Effect | null} */ (e.parent);\n\n\t\t\t// skip over transparent blocks (e.g. snippets, else-if blocks)\n\t\t\twhile (block && (block.f & EFFECT_TRANSPARENT) !== 0) {\n\t\t\t\twhile ((block = block.parent)) {\n\t\t\t\t\tif ((block.f & BLOCK_EFFECT) !== 0) break;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trun = !block || (block.f & EFFECT_RAN) !== 0;\n\t\t}\n\n\t\tif (run) {\n\t\t\teffect(() => {\n\t\t\t\tuntrack(() => transition.in());\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Animates an element, according to the provided configuration\n * @param {Element} element\n * @param {AnimationConfig | ((opts: { direction: 'in' | 'out' }) => AnimationConfig)} options\n * @param {Animation | undefined} counterpart The corresponding intro/outro to this outro/intro\n * @param {number} t2 The target `t` value — `1` for intro, `0` for outro\n * @param {(() => void)} on_finish Called after successfully completing the animation\n * @returns {Animation}\n */\nfunction animate(element, options, counterpart, t2, on_finish) {\n\tvar is_intro = t2 === 1;\n\n\tif (is_function(options)) {\n\t\t// In the case of a deferred transition (such as `crossfade`), `option` will be\n\t\t// a function rather than an `AnimationConfig`. We need to call this function\n\t\t// once the DOM has been updated...\n\t\t/** @type {Animation} */\n\t\tvar a;\n\t\tvar aborted = false;\n\n\t\tqueue_micro_task(() => {\n\t\t\tif (aborted) return;\n\t\t\tvar o = options({ direction: is_intro ? 'in' : 'out' });\n\t\t\ta = animate(element, o, counterpart, t2, on_finish);\n\t\t});\n\n\t\t// ...but we want to do so without using `async`/`await` everywhere, so\n\t\t// we return a facade that allows everything to remain synchronous\n\t\treturn {\n\t\t\tabort: () => {\n\t\t\t\taborted = true;\n\t\t\t\ta?.abort();\n\t\t\t},\n\t\t\tdeactivate: () => a.deactivate(),\n\t\t\treset: () => a.reset(),\n\t\t\tt: () => a.t()\n\t\t};\n\t}\n\n\tcounterpart?.deactivate();\n\n\tif (!options?.duration) {\n\t\ton_finish();\n\n\t\treturn {\n\t\t\tabort: noop,\n\t\t\tdeactivate: noop,\n\t\t\treset: noop,\n\t\t\tt: () => t2\n\t\t};\n\t}\n\n\tconst { delay = 0, css, tick, easing = linear } = options;\n\n\tvar keyframes = [];\n\n\tif (is_intro && counterpart === undefined) {\n\t\tif (tick) {\n\t\t\ttick(0, 1); // TODO put in nested effect, to avoid interleaved reads/writes?\n\t\t}\n\n\t\tif (css) {\n\t\t\tvar styles = css_to_keyframe(css(0, 1));\n\t\t\tkeyframes.push(styles, styles);\n\t\t}\n\t}\n\n\tvar get_t = () => 1 - t2;\n\n\t// create a dummy animation that lasts as long as the delay (but with whatever devtools\n\t// multiplier is in effect). in the common case that it is `0`, we keep it anyway so that\n\t// the CSS keyframes aren't created until the DOM is updated\n\tvar animation = element.animate(keyframes, { duration: delay });\n\n\tanimation.onfinish = () => {\n\t\t// for bidirectional transitions, we start from the current position,\n\t\t// rather than doing a full intro/outro\n\t\tvar t1 = counterpart?.t() ?? 1 - t2;\n\t\tcounterpart?.abort();\n\n\t\tvar delta = t2 - t1;\n\t\tvar duration = /** @type {number} */ (options.duration) * Math.abs(delta);\n\t\tvar keyframes = [];\n\n\t\tif (duration > 0) {\n\t\t\tif (css) {\n\t\t\t\tvar n = Math.ceil(duration / (1000 / 60)); // `n` must be an integer, or we risk missing the `t2` value\n\n\t\t\t\tfor (var i = 0; i <= n; i += 1) {\n\t\t\t\t\tvar t = t1 + delta * easing(i / n);\n\t\t\t\t\tvar styles = css(t, 1 - t);\n\t\t\t\t\tkeyframes.push(css_to_keyframe(styles));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tget_t = () => {\n\t\t\t\tvar time = /** @type {number} */ (\n\t\t\t\t\t/** @type {globalThis.Animation} */ (animation).currentTime\n\t\t\t\t);\n\n\t\t\t\treturn t1 + delta * easing(time / duration);\n\t\t\t};\n\n\t\t\tif (tick) {\n\t\t\t\tloop(() => {\n\t\t\t\t\tif (animation.playState !== 'running') return false;\n\n\t\t\t\t\tvar t = get_t();\n\t\t\t\t\ttick(t, 1 - t);\n\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tanimation = element.animate(keyframes, { duration, fill: 'forwards' });\n\n\t\tanimation.onfinish = () => {\n\t\t\tget_t = () => t2;\n\t\t\ttick?.(t2, 1 - t2);\n\t\t\ton_finish();\n\t\t};\n\t};\n\n\treturn {\n\t\tabort: () => {\n\t\t\tif (animation) {\n\t\t\t\tanimation.cancel();\n\t\t\t\t// This prevents memory leaks in Chromium\n\t\t\t\tanimation.effect = null;\n\t\t\t\t// This prevents onfinish to be launched after cancel(),\n\t\t\t\t// which can happen in some rare cases\n\t\t\t\t// see https://github.com/sveltejs/svelte/issues/13681\n\t\t\t\tanimation.onfinish = noop;\n\t\t\t}\n\t\t},\n\t\tdeactivate: () => {\n\t\t\ton_finish = noop;\n\t\t},\n\t\treset: () => {\n\t\t\tif (t2 === 0) {\n\t\t\t\ttick?.(1, 0);\n\t\t\t}\n\t\t},\n\t\tt: () => get_t()\n\t};\n}\n","import { DEV } from 'esm-env';\nimport { render_effect, teardown } from '../../../reactivity/effects.js';\nimport { listen_to_event_and_reset_event } from './shared.js';\nimport * as e from '../../../errors.js';\nimport { is } from '../../../proxy.js';\nimport { queue_micro_task } from '../../task.js';\nimport { hydrating } from '../../hydration.js';\nimport { is_runes, untrack } from '../../../runtime.js';\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_value(input, get, set = get) {\n\tvar runes = is_runes();\n\n\tlisten_to_event_and_reset_event(input, 'input', (is_reset) => {\n\t\tif (DEV && input.type === 'checkbox') {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.bind_invalid_checkbox_value();\n\t\t}\n\n\t\t/** @type {any} */\n\t\tvar value = is_reset ? input.defaultValue : input.value;\n\t\tvalue = is_numberlike_input(input) ? to_number(value) : value;\n\t\tset(value);\n\n\t\t// In runes mode, respect any validation in accessors (doesn't apply in legacy mode,\n\t\t// because we use mutable state which ensures the render effect always runs)\n\t\tif (runes && value !== (value = get())) {\n\t\t\tvar start = input.selectionStart;\n\t\t\tvar end = input.selectionEnd;\n\n\t\t\t// the value is coerced on assignment\n\t\t\tinput.value = value ?? '';\n\n\t\t\t// Restore selection\n\t\t\tif (end !== null) {\n\t\t\t\tinput.selectionStart = start;\n\t\t\t\tinput.selectionEnd = Math.min(end, input.value.length);\n\t\t\t}\n\t\t}\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the updated value from the input instead.\n\t\t(hydrating && input.defaultValue !== input.value) ||\n\t\t// If defaultValue is set, then value == defaultValue\n\t\t// TODO Svelte 6: remove input.value check and set to empty string?\n\t\t(untrack(get) == null && input.value)\n\t) {\n\t\tset(is_numberlike_input(input) ? to_number(input.value) : input.value);\n\t}\n\n\trender_effect(() => {\n\t\tif (DEV && input.type === 'checkbox') {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.bind_invalid_checkbox_value();\n\t\t}\n\n\t\tvar value = get();\n\n\t\tif (is_numberlike_input(input) && value === to_number(input.value)) {\n\t\t\t// handles 0 vs 00 case (see https://github.com/sveltejs/svelte/issues/9959)\n\t\t\treturn;\n\t\t}\n\n\t\tif (input.type === 'date' && !value && !input.value) {\n\t\t\t// Handles the case where a temporarily invalid date is set (while typing, for example with a leading 0 for the day)\n\t\t\t// and prevents this state from clearing the other parts of the date input (see https://github.com/sveltejs/svelte/issues/7897)\n\t\t\treturn;\n\t\t}\n\n\t\t// don't set the value of the input if it's the same to allow\n\t\t// minlength to work properly\n\t\tif (value !== input.value) {\n\t\t\t// @ts-expect-error the value is coerced on assignment\n\t\t\tinput.value = value ?? '';\n\t\t}\n\t});\n}\n\n/** @type {Set<HTMLInputElement[]>} */\nconst pending = new Set();\n\n/**\n * @param {HTMLInputElement[]} inputs\n * @param {null | [number]} group_index\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_group(inputs, group_index, input, get, set = get) {\n\tvar is_checkbox = input.getAttribute('type') === 'checkbox';\n\tvar binding_group = inputs;\n\n\t// needs to be let or related code isn't treeshaken out if it's always false\n\tlet hydration_mismatch = false;\n\n\tif (group_index !== null) {\n\t\tfor (var index of group_index) {\n\t\t\t// @ts-expect-error\n\t\t\tbinding_group = binding_group[index] ??= [];\n\t\t}\n\t}\n\n\tbinding_group.push(input);\n\n\tlisten_to_event_and_reset_event(\n\t\tinput,\n\t\t'change',\n\t\t() => {\n\t\t\t// @ts-ignore\n\t\t\tvar value = input.__value;\n\n\t\t\tif (is_checkbox) {\n\t\t\t\tvalue = get_binding_group_value(binding_group, value, input.checked);\n\t\t\t}\n\n\t\t\tset(value);\n\t\t},\n\t\t// TODO better default value handling\n\t\t() => set(is_checkbox ? [] : null)\n\t);\n\n\trender_effect(() => {\n\t\tvar value = get();\n\n\t\t// If we are hydrating and the value has since changed, then use the update value\n\t\t// from the input instead.\n\t\tif (hydrating && input.defaultChecked !== input.checked) {\n\t\t\thydration_mismatch = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (is_checkbox) {\n\t\t\tvalue = value || [];\n\t\t\t// @ts-ignore\n\t\t\tinput.checked = value.includes(input.__value);\n\t\t} else {\n\t\t\t// @ts-ignore\n\t\t\tinput.checked = is(input.__value, value);\n\t\t}\n\t});\n\n\tteardown(() => {\n\t\tvar index = binding_group.indexOf(input);\n\n\t\tif (index !== -1) {\n\t\t\tbinding_group.splice(index, 1);\n\t\t}\n\t});\n\n\tif (!pending.has(binding_group)) {\n\t\tpending.add(binding_group);\n\n\t\tqueue_micro_task(() => {\n\t\t\t// necessary to maintain binding group order in all insertion scenarios\n\t\t\tbinding_group.sort((a, b) => (a.compareDocumentPosition(b) === 4 ? -1 : 1));\n\t\t\tpending.delete(binding_group);\n\t\t});\n\t}\n\n\tqueue_micro_task(() => {\n\t\tif (hydration_mismatch) {\n\t\t\tvar value;\n\n\t\t\tif (is_checkbox) {\n\t\t\t\tvalue = get_binding_group_value(binding_group, value, input.checked);\n\t\t\t} else {\n\t\t\t\tvar hydration_input = binding_group.find((input) => input.checked);\n\t\t\t\t// @ts-ignore\n\t\t\t\tvalue = hydration_input?.__value;\n\t\t\t}\n\n\t\t\tset(value);\n\t\t}\n\t});\n}\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_checked(input, get, set = get) {\n\tlisten_to_event_and_reset_event(input, 'change', (is_reset) => {\n\t\tvar value = is_reset ? input.defaultChecked : input.checked;\n\t\tset(value);\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the update value from the input instead.\n\t\t(hydrating && input.defaultChecked !== input.checked) ||\n\t\t// If defaultChecked is set, then checked == defaultChecked\n\t\tuntrack(get) == null\n\t) {\n\t\tset(input.checked);\n\t}\n\n\trender_effect(() => {\n\t\tvar value = get();\n\t\tinput.checked = Boolean(value);\n\t});\n}\n\n/**\n * @template V\n * @param {Array<HTMLInputElement>} group\n * @param {V} __value\n * @param {boolean} checked\n * @returns {V[]}\n */\nfunction get_binding_group_value(group, __value, checked) {\n\tvar value = new Set();\n\n\tfor (var i = 0; i < group.length; i += 1) {\n\t\tif (group[i].checked) {\n\t\t\t// @ts-ignore\n\t\t\tvalue.add(group[i].__value);\n\t\t}\n\t}\n\n\tif (!checked) {\n\t\tvalue.delete(__value);\n\t}\n\n\treturn Array.from(value);\n}\n\n/**\n * @param {HTMLInputElement} input\n */\nfunction is_numberlike_input(input) {\n\tvar type = input.type;\n\treturn type === 'number' || type === 'range';\n}\n\n/**\n * @param {string} value\n */\nfunction to_number(value) {\n\treturn value === '' ? null : +value;\n}\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => FileList | null} get\n * @param {(value: FileList | null) => void} set\n */\nexport function bind_files(input, get, set = get) {\n\tlisten_to_event_and_reset_event(input, 'change', () => {\n\t\tset(input.files);\n\t});\n\n\trender_effect(() => {\n\t\tinput.files = get();\n\t});\n}\n","import { STATE_SYMBOL } from '../../../constants.js';\nimport { effect, render_effect } from '../../../reactivity/effects.js';\nimport { untrack } from '../../../runtime.js';\nimport { queue_micro_task } from '../../task.js';\n\n/**\n * @param {any} bound_value\n * @param {Element} element_or_component\n * @returns {boolean}\n */\nfunction is_bound_this(bound_value, element_or_component) {\n\treturn (\n\t\tbound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component\n\t);\n}\n\n/**\n * @param {any} element_or_component\n * @param {(value: unknown, ...parts: unknown[]) => void} update\n * @param {(...parts: unknown[]) => unknown} get_value\n * @param {() => unknown[]} [get_parts] Set if the this binding is used inside an each block,\n * \t\t\t\t\t\t\t\t\t\treturns all the parts of the each block context that are used in the expression\n * @returns {void}\n */\nexport function bind_this(element_or_component = {}, update, get_value, get_parts) {\n\teffect(() => {\n\t\t/** @type {unknown[]} */\n\t\tvar old_parts;\n\n\t\t/** @type {unknown[]} */\n\t\tvar parts;\n\n\t\trender_effect(() => {\n\t\t\told_parts = parts;\n\t\t\t// We only track changes to the parts, not the value itself to avoid unnecessary reruns.\n\t\t\tparts = get_parts?.() || [];\n\n\t\t\tuntrack(() => {\n\t\t\t\tif (element_or_component !== get_value(...parts)) {\n\t\t\t\t\tupdate(element_or_component, ...parts);\n\t\t\t\t\t// If this is an effect rerun (cause: each block context changes), then nullfiy the binding at\n\t\t\t\t\t// the previous position if it isn't already taken over by a different effect.\n\t\t\t\t\tif (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) {\n\t\t\t\t\t\tupdate(null, ...old_parts);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\t// We cannot use effects in the teardown phase, we we use a microtask instead.\n\t\t\tqueue_micro_task(() => {\n\t\t\t\tif (parts && is_bound_this(get_value(...parts), element_or_component)) {\n\t\t\t\t\tupdate(null, ...parts);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t});\n\n\treturn element_or_component;\n}\n","/** @import { StoreReferencesContainer } from '#client' */\n/** @import { Store } from '#shared' */\nimport { subscribe_to_store } from '../../../store/utils.js';\nimport { noop } from '../../shared/utils.js';\nimport { get } from '../runtime.js';\nimport { teardown } from './effects.js';\nimport { mutable_source, set } from './sources.js';\n\n/**\n * Whether or not the prop currently being read is a store binding, as in\n * `<Child bind:x={$y} />`. If it is, we treat the prop as mutable even in\n * runes mode, and skip `binding_property_non_reactive` validation\n */\nlet is_store_binding = false;\n\n/**\n * Gets the current value of a store. If the store isn't subscribed to yet, it will create a proxy\n * signal that will be updated when the store is. The store references container is needed to\n * track reassignments to stores and to track the correct component context.\n * @template V\n * @param {Store<V> | null | undefined} store\n * @param {string} store_name\n * @param {StoreReferencesContainer} stores\n * @returns {V}\n */\nexport function store_get(store, store_name, stores) {\n\tconst entry = (stores[store_name] ??= {\n\t\tstore: null,\n\t\tsource: mutable_source(undefined),\n\t\tunsubscribe: noop\n\t});\n\n\tif (entry.store !== store) {\n\t\tentry.unsubscribe();\n\t\tentry.store = store ?? null;\n\n\t\tif (store == null) {\n\t\t\tentry.source.v = undefined; // see synchronous callback comment below\n\t\t\tentry.unsubscribe = noop;\n\t\t} else {\n\t\t\tvar is_synchronous_callback = true;\n\n\t\t\tentry.unsubscribe = subscribe_to_store(store, (v) => {\n\t\t\t\tif (is_synchronous_callback) {\n\t\t\t\t\t// If the first updates to the store value (possibly multiple of them) are synchronously\n\t\t\t\t\t// inside a derived, we will hit the `state_unsafe_mutation` error if we `set` the value\n\t\t\t\t\tentry.source.v = v;\n\t\t\t\t} else {\n\t\t\t\t\tset(entry.source, v);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tis_synchronous_callback = false;\n\t\t}\n\t}\n\n\treturn get(entry.source);\n}\n\n/**\n * Unsubscribe from a store if it's not the same as the one in the store references container.\n * We need this in addition to `store_get` because someone could unsubscribe from a store but\n * then never subscribe to the new one (if any), causing the subscription to stay open wrongfully.\n * @param {Store<any> | null | undefined} store\n * @param {string} store_name\n * @param {StoreReferencesContainer} stores\n */\nexport function store_unsub(store, store_name, stores) {\n\t/** @type {StoreReferencesContainer[''] | undefined} */\n\tlet entry = stores[store_name];\n\n\tif (entry && entry.store !== store) {\n\t\t// Don't reset store yet, so that store_get above can resubscribe to new store if necessary\n\t\tentry.unsubscribe();\n\t\tentry.unsubscribe = noop;\n\t}\n\n\treturn store;\n}\n\n/**\n * Sets the new value of a store and returns that value.\n * @template V\n * @param {Store<V>} store\n * @param {V} value\n * @returns {V}\n */\nexport function store_set(store, value) {\n\tstore.set(value);\n\treturn value;\n}\n\n/**\n * @param {StoreReferencesContainer} stores\n * @param {string} store_name\n */\nexport function invalidate_store(stores, store_name) {\n\tvar entry = stores[store_name];\n\tif (entry.store !== null) {\n\t\tstore_set(entry.store, entry.source.v);\n\t}\n}\n\n/**\n * Unsubscribes from all auto-subscribed stores on destroy\n * @returns {StoreReferencesContainer}\n */\nexport function setup_stores() {\n\t/** @type {StoreReferencesContainer} */\n\tconst stores = {};\n\n\tteardown(() => {\n\t\tfor (var store_name in stores) {\n\t\t\tconst ref = stores[store_name];\n\t\t\tref.unsubscribe();\n\t\t}\n\t});\n\n\treturn stores;\n}\n\n/**\n * Updates a store with a new value.\n * @param {Store<V>} store the store to update\n * @param {any} expression the expression that mutates the store\n * @param {V} new_value the new store value\n * @template V\n */\nexport function store_mutate(store, expression, new_value) {\n\tstore.set(new_value);\n\treturn expression;\n}\n\n/**\n * @param {Store<number>} store\n * @param {number} store_value\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_store(store, store_value, d = 1) {\n\tstore.set(store_value + d);\n\treturn store_value;\n}\n\n/**\n * @param {Store<number>} store\n * @param {number} store_value\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre_store(store, store_value, d = 1) {\n\tconst value = store_value + d;\n\tstore.set(value);\n\treturn value;\n}\n\n/**\n * Called inside prop getters to communicate that the prop is a store binding\n */\nexport function mark_store_binding() {\n\tis_store_binding = true;\n}\n\n/**\n * Returns a tuple that indicates whether `fn()` reads a prop that is a store binding.\n * Used to prevent `binding_property_non_reactive` validation false positives and\n * ensure that these props are treated as mutable even in runes mode\n * @template T\n * @param {() => T} fn\n * @returns {[T, boolean]}\n */\nexport function capture_store_binding(fn) {\n\tvar previous_is_store_binding = is_store_binding;\n\n\ttry {\n\t\tis_store_binding = false;\n\t\treturn [fn(), is_store_binding];\n\t} finally {\n\t\tis_store_binding = previous_is_store_binding;\n\t}\n}\n","/** @import { Source } from './types.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tPROPS_IS_BINDABLE,\n\tPROPS_IS_IMMUTABLE,\n\tPROPS_IS_LAZY_INITIAL,\n\tPROPS_IS_RUNES,\n\tPROPS_IS_UPDATED\n} from '../../../constants.js';\nimport { get_descriptor, is_function } from '../../shared/utils.js';\nimport { mutable_source, set, source } from './sources.js';\nimport { derived, derived_safe_equal } from './deriveds.js';\nimport {\n\tactive_effect,\n\tget,\n\tcaptured_signals,\n\tset_active_effect,\n\tuntrack,\n\tupdate\n} from '../runtime.js';\nimport { safe_equals } from './equality.js';\nimport * as e from '../errors.js';\nimport {\n\tBRANCH_EFFECT,\n\tLEGACY_DERIVED_PROP,\n\tLEGACY_PROPS,\n\tROOT_EFFECT,\n\tSTATE_SYMBOL\n} from '../constants.js';\nimport { proxy } from '../proxy.js';\nimport { capture_store_binding } from './store.js';\nimport { legacy_mode_flag } from '../../flags/index.js';\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_prop(fn, d = 1) {\n\tconst value = fn();\n\tfn(value + d);\n\treturn value;\n}\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre_prop(fn, d = 1) {\n\tconst value = fn() + d;\n\tfn(value);\n\treturn value;\n}\n\n/**\n * The proxy handler for rest props (i.e. `const { x, ...rest } = $props()`).\n * Is passed the full `$$props` object and excludes the named props.\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, name?: string }>}}\n */\nconst rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\treturn target.props[key];\n\t},\n\tset(target, key) {\n\t\tif (DEV) {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.props_rest_readonly(`${target.name}.${String(key)}`);\n\t\t}\n\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @param {string} [name]\n * @returns {Record<string, unknown>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function rest_props(props, exclude, name) {\n\treturn new Proxy(\n\t\tDEV ? { props, exclude, name, other: {}, to_proxy: [] } : { props, exclude },\n\t\trest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for legacy $$restProps and $$props\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, special: Record<string | symbol, (v?: unknown) => unknown>, version: Source<number> }>}}\n */\nconst legacy_rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tget(target.version);\n\t\treturn key in target.special ? target.special[key]() : target.props[key];\n\t},\n\tset(target, key, value) {\n\t\tif (!(key in target.special)) {\n\t\t\t// Handle props that can temporarily get out of sync with the parent\n\t\t\t/** @type {Record<string, (v?: unknown) => unknown>} */\n\t\t\ttarget.special[key] = prop(\n\t\t\t\t{\n\t\t\t\t\tget [key]() {\n\t\t\t\t\t\treturn target.props[key];\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t/** @type {string} */ (key),\n\t\t\t\tPROPS_IS_UPDATED\n\t\t\t);\n\t\t}\n\n\t\ttarget.special[key](value);\n\t\tupdate(target.version); // $$props is coarse-grained: when $$props.x is updated, usages of $$props.y etc are also rerun\n\t\treturn true;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\tdeleteProperty(target, key) {\n\t\t// Svelte 4 allowed for deletions on $$restProps\n\t\tif (target.exclude.includes(key)) return true;\n\t\ttarget.exclude.push(key);\n\t\tupdate(target.version);\n\t\treturn true;\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @returns {Record<string, unknown>}\n */\nexport function legacy_rest_props(props, exclude) {\n\treturn new Proxy({ props, exclude, special: {}, version: source(0) }, legacy_rest_props_handler);\n}\n\n/**\n * The proxy handler for spread props. Handles the incoming array of props\n * that looks like `() => { dynamic: props }, { static: prop }, ..` and wraps\n * them so that the whole thing is passed to the component as the `$$props` argument.\n * @template {Record<string | symbol, unknown>} T\n * @type {ProxyHandler<{ props: Array<T | (() => T)> }>}}\n */\nconst spread_props_handler = {\n\tget(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) return p[key];\n\t\t}\n\t},\n\tset(target, key, value) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tconst desc = get_descriptor(p, key);\n\t\t\tif (desc && desc.set) {\n\t\t\t\tdesc.set(value);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) {\n\t\t\t\tconst descriptor = get_descriptor(p, key);\n\t\t\t\tif (descriptor && !descriptor.configurable) {\n\t\t\t\t\t// Prevent a \"Non-configurability Report Error\": The target is an array, it does\n\t\t\t\t\t// not actually contain this property. If it is now described as non-configurable,\n\t\t\t\t\t// the proxy throws a validation error. Setting it to true avoids that.\n\t\t\t\t\tdescriptor.configurable = true;\n\t\t\t\t}\n\t\t\t\treturn descriptor;\n\t\t\t}\n\t\t}\n\t},\n\thas(target, key) {\n\t\t// To prevent a false positive `is_entry_props` in the `prop` function\n\t\tif (key === STATE_SYMBOL || key === LEGACY_PROPS) return false;\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (p != null && key in p) return true;\n\t\t}\n\n\t\treturn false;\n\t},\n\townKeys(target) {\n\t\t/** @type {Array<string | symbol>} */\n\t\tconst keys = [];\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tfor (const key in p) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\t\t}\n\n\t\treturn keys;\n\t}\n};\n\n/**\n * @param {Array<Record<string, unknown> | (() => Record<string, unknown>)>} props\n * @returns {any}\n */\nexport function spread_props(...props) {\n\treturn new Proxy({ props }, spread_props_handler);\n}\n\n/**\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nfunction with_parent_branch(fn) {\n\tvar effect = active_effect;\n\tvar previous_effect = active_effect;\n\n\twhile (effect !== null && (effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) {\n\t\teffect = effect.parent;\n\t}\n\ttry {\n\t\tset_active_effect(effect);\n\t\treturn fn();\n\t} finally {\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * This function is responsible for synchronizing a possibly bound prop with the inner component state.\n * It is used whenever the compiler sees that the component writes to the prop, or when it has a default prop_value.\n * @template V\n * @param {Record<string, unknown>} props\n * @param {string} key\n * @param {number} flags\n * @param {V | (() => V)} [fallback]\n * @returns {(() => V | ((arg: V) => V) | ((arg: V, mutation: boolean) => V))}\n */\nexport function prop(props, key, flags, fallback) {\n\tvar immutable = (flags & PROPS_IS_IMMUTABLE) !== 0;\n\tvar runes = !legacy_mode_flag || (flags & PROPS_IS_RUNES) !== 0;\n\tvar bindable = (flags & PROPS_IS_BINDABLE) !== 0;\n\tvar lazy = (flags & PROPS_IS_LAZY_INITIAL) !== 0;\n\tvar is_store_sub = false;\n\tvar prop_value;\n\n\tif (bindable) {\n\t\t[prop_value, is_store_sub] = capture_store_binding(() => /** @type {V} */ (props[key]));\n\t} else {\n\t\tprop_value = /** @type {V} */ (props[key]);\n\t}\n\n\t// Can be the case when someone does `mount(Component, props)` with `let props = $state({...})`\n\t// or `createClassComponent(Component, props)`\n\tvar is_entry_props = STATE_SYMBOL in props || LEGACY_PROPS in props;\n\n\tvar setter =\n\t\tget_descriptor(props, key)?.set ??\n\t\t(is_entry_props && bindable && key in props ? (v) => (props[key] = v) : undefined);\n\n\tvar fallback_value = /** @type {V} */ (fallback);\n\tvar fallback_dirty = true;\n\tvar fallback_used = false;\n\n\tvar get_fallback = () => {\n\t\tfallback_used = true;\n\t\tif (fallback_dirty) {\n\t\t\tfallback_dirty = false;\n\t\t\tif (lazy) {\n\t\t\t\tfallback_value = untrack(/** @type {() => V} */ (fallback));\n\t\t\t} else {\n\t\t\t\tfallback_value = /** @type {V} */ (fallback);\n\t\t\t}\n\t\t}\n\n\t\treturn fallback_value;\n\t};\n\n\tif (prop_value === undefined && fallback !== undefined) {\n\t\tif (setter && runes) {\n\t\t\te.props_invalid_value(key);\n\t\t}\n\n\t\tprop_value = get_fallback();\n\t\tif (setter) setter(prop_value);\n\t}\n\n\t/** @type {() => V} */\n\tvar getter;\n\tif (runes) {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\t\t\tif (value === undefined) return get_fallback();\n\t\t\tfallback_dirty = true;\n\t\t\tfallback_used = false;\n\t\t\treturn value;\n\t\t};\n\t} else {\n\t\t// Svelte 4 did not trigger updates when a primitive value was updated to the same value.\n\t\t// Replicate that behavior through using a derived\n\t\tvar derived_getter = with_parent_branch(() =>\n\t\t\t(immutable ? derived : derived_safe_equal)(() => /** @type {V} */ (props[key]))\n\t\t);\n\t\tderived_getter.f |= LEGACY_DERIVED_PROP;\n\t\tgetter = () => {\n\t\t\tvar value = get(derived_getter);\n\t\t\tif (value !== undefined) fallback_value = /** @type {V} */ (undefined);\n\t\t\treturn value === undefined ? fallback_value : value;\n\t\t};\n\t}\n\n\t// easy mode — prop is never written to\n\tif ((flags & PROPS_IS_UPDATED) === 0) {\n\t\treturn getter;\n\t}\n\n\t// intermediate mode — prop is written to, but the parent component had\n\t// `bind:foo` which means we can just call `$$props.foo = value` directly\n\tif (setter) {\n\t\tvar legacy_parent = props.$$legacy;\n\t\treturn function (/** @type {any} */ value, /** @type {boolean} */ mutation) {\n\t\t\tif (arguments.length > 0) {\n\t\t\t\t// We don't want to notify if the value was mutated and the parent is in runes mode.\n\t\t\t\t// In that case the state proxy (if it exists) should take care of the notification.\n\t\t\t\t// If the parent is not in runes mode, we need to notify on mutation, too, that the prop\n\t\t\t\t// has changed because the parent will not be able to detect the change otherwise.\n\t\t\t\tif (!runes || !mutation || legacy_parent || is_store_sub) {\n\t\t\t\t\t/** @type {Function} */ (setter)(mutation ? getter() : value);\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t} else {\n\t\t\t\treturn getter();\n\t\t\t}\n\t\t};\n\t}\n\n\t// hard mode. this is where it gets ugly — the value in the child should\n\t// synchronize with the parent, but it should also be possible to temporarily\n\t// set the value to something else locally.\n\tvar from_child = false;\n\tvar was_from_child = false;\n\n\t// The derived returns the current value. The underlying mutable\n\t// source is written to from various places to persist this value.\n\tvar inner_current_value = mutable_source(prop_value);\n\tvar current_value = with_parent_branch(() =>\n\t\tderived(() => {\n\t\t\tvar parent_value = getter();\n\t\t\tvar child_value = get(inner_current_value);\n\n\t\t\tif (from_child) {\n\t\t\t\tfrom_child = false;\n\t\t\t\twas_from_child = true;\n\t\t\t\treturn child_value;\n\t\t\t}\n\n\t\t\twas_from_child = false;\n\t\t\treturn (inner_current_value.v = parent_value);\n\t\t})\n\t);\n\n\tif (!immutable) current_value.equals = safe_equals;\n\n\treturn function (/** @type {any} */ value, /** @type {boolean} */ mutation) {\n\t\t// legacy nonsense — need to ensure the source is invalidated when necessary\n\t\t// also needed for when handling inspect logic so we can inspect the correct source signal\n\t\tif (captured_signals !== null) {\n\t\t\t// set this so that we don't reset to the parent value if `d`\n\t\t\t// is invalidated because of `invalidate_inner_signals` (rather\n\t\t\t// than because the parent or child value changed)\n\t\t\tfrom_child = was_from_child;\n\t\t\t// invoke getters so that signals are picked up by `invalidate_inner_signals`\n\t\t\tgetter();\n\t\t\tget(inner_current_value);\n\t\t}\n\n\t\tif (arguments.length > 0) {\n\t\t\tconst new_value = mutation ? get(current_value) : runes && bindable ? proxy(value) : value;\n\n\t\t\tif (!current_value.equals(new_value)) {\n\t\t\t\tfrom_child = true;\n\t\t\t\tset(inner_current_value, new_value);\n\t\t\t\t// To ensure the fallback value is consistent when used with proxies, we\n\t\t\t\t// update the local fallback_value, but only if the fallback is actively used\n\t\t\t\tif (fallback_used && fallback_value !== undefined) {\n\t\t\t\t\tfallback_value = new_value;\n\t\t\t\t}\n\t\t\t\tuntrack(() => get(current_value)); // force a synchronisation immediately\n\t\t\t}\n\n\t\t\treturn value;\n\t\t}\n\t\treturn get(current_value);\n\t};\n}\n","/** @import { ComponentContext, ComponentContextLegacy } from '#client' */\n/** @import { EventDispatcher } from './index.js' */\n/** @import { NotFunction } from './internal/types.js' */\nimport { component_context, flush_sync, untrack } from './internal/client/runtime.js';\nimport { is_array } from './internal/shared/utils.js';\nimport { user_effect } from './internal/client/index.js';\nimport * as e from './internal/client/errors.js';\nimport { lifecycle_outside_component } from './internal/shared/errors.js';\nimport { legacy_mode_flag } from './internal/flags/index.js';\n\n/**\n * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.\n * It must be called during the component's initialisation (but doesn't need to live *inside* the component;\n * it can be called from an external module).\n *\n * If a function is returned _synchronously_ from `onMount`, it will be called when the component is unmounted.\n *\n * `onMount` does not run inside [server-side components](https://svelte.dev/docs/svelte/svelte-server#render).\n *\n * @template T\n * @param {() => NotFunction<T> | Promise<NotFunction<T>> | (() => any)} fn\n * @returns {void}\n */\nexport function onMount(fn) {\n\tif (component_context === null) {\n\t\tlifecycle_outside_component('onMount');\n\t}\n\n\tif (legacy_mode_flag && component_context.l !== null) {\n\t\tinit_update_callbacks(component_context).m.push(fn);\n\t} else {\n\t\tuser_effect(() => {\n\t\t\tconst cleanup = untrack(fn);\n\t\t\tif (typeof cleanup === 'function') return /** @type {() => void} */ (cleanup);\n\t\t});\n\t}\n}\n\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * @param {() => any} fn\n * @returns {void}\n */\nexport function onDestroy(fn) {\n\tif (component_context === null) {\n\t\tlifecycle_outside_component('onDestroy');\n\t}\n\n\tonMount(() => () => untrack(fn));\n}\n\n/**\n * @template [T=any]\n * @param {string} type\n * @param {T} [detail]\n * @param {any}params_0\n * @returns {CustomEvent<T>}\n */\nfunction create_custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n\treturn new CustomEvent(type, { detail, bubbles, cancelable });\n}\n\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs/svelte/legacy-on#Component-events).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n * ```ts\n * const dispatch = createEventDispatcher<{\n * loaded: never; // does not take a detail argument\n * change: string; // takes a detail argument of type string, which is required\n * optional: number | null; // takes an optional detail argument of type number\n * }>();\n * ```\n *\n * @deprecated Use callback props and/or the `$host()` rune instead — see [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Event-changes-Component-events)\n * @template {Record<string, any>} [EventMap = any]\n * @returns {EventDispatcher<EventMap>}\n */\nexport function createEventDispatcher() {\n\tconst active_component_context = component_context;\n\tif (active_component_context === null) {\n\t\tlifecycle_outside_component('createEventDispatcher');\n\t}\n\n\treturn (type, detail, options) => {\n\t\tconst events = /** @type {Record<string, Function | Function[]>} */ (\n\t\t\tactive_component_context.s.$$events\n\t\t)?.[/** @type {any} */ (type)];\n\n\t\tif (events) {\n\t\t\tconst callbacks = is_array(events) ? events.slice() : [events];\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = create_custom_event(/** @type {string} */ (type), detail, options);\n\t\t\tfor (const fn of callbacks) {\n\t\t\t\tfn.call(active_component_context.x, event);\n\t\t\t}\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\n\t\treturn true;\n\t};\n}\n\n// TODO mark beforeUpdate and afterUpdate as deprecated in Svelte 6\n\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`.\n *\n * In runes mode use `$effect.pre` instead.\n *\n * @deprecated Use [`$effect.pre`](https://svelte.dev/docs/svelte/$effect#$effect.pre) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function beforeUpdate(fn) {\n\tif (component_context === null) {\n\t\tlifecycle_outside_component('beforeUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('beforeUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).b.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`.\n *\n * In runes mode use `$effect` instead.\n *\n * @deprecated Use [`$effect`](https://svelte.dev/docs/svelte/$effect) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function afterUpdate(fn) {\n\tif (component_context === null) {\n\t\tlifecycle_outside_component('afterUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('afterUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).a.push(fn);\n}\n\n/**\n * Legacy-mode: Init callbacks object for onMount/beforeUpdate/afterUpdate\n * @param {ComponentContext} context\n */\nfunction init_update_callbacks(context) {\n\tvar l = /** @type {ComponentContextLegacy} */ (context).l;\n\treturn (l.u ??= { a: [], b: [], m: [] });\n}\n\n/**\n * Synchronously flushes any pending state changes and those that result from it.\n * @param {() => void} [fn]\n * @returns {void}\n */\nexport function flushSync(fn) {\n\tflush_sync(fn);\n}\n\nexport { hydrate, mount, unmount } from './internal/client/render.js';\n\nexport {\n\tgetContext,\n\tgetAllContexts,\n\thasContext,\n\tsetContext,\n\ttick,\n\tuntrack\n} from './internal/client/runtime.js';\n\nexport { createRawSnippet } from './internal/client/dom/blocks/snippet.js';\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\n/**\n * Cannot use `{@render children(...)}` if the parent component uses `let:` directives. Consider using a named snippet instead\n * @returns {never}\n */\nexport function invalid_default_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_default_snippet\\nCannot use \\`{@render children(...)}\\` if the parent component uses \\`let:\\` directives. Consider using a named snippet instead\\nhttps://svelte.dev/e/invalid_default_snippet`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_default_snippet`);\n\t}\n}\n\n/**\n * `%name%(...)` can only be used during component initialisation\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_outside_component(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_outside_component\\n\\`${name}(...)\\` can only be used during component initialisation\\nhttps://svelte.dev/e/lifecycle_outside_component`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_outside_component`);\n\t}\n}\n\n/**\n * `%name%` is not a store with a `subscribe` method\n * @param {string} name\n * @returns {never}\n */\nexport function store_invalid_shape(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`store_invalid_shape\\n\\`${name}\\` is not a store with a \\`subscribe\\` method\\nhttps://svelte.dev/e/store_invalid_shape`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/store_invalid_shape`);\n\t}\n}\n\n/**\n * The `this` prop on `<svelte:element>` must be a string, if defined\n * @returns {never}\n */\nexport function svelte_element_invalid_this_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_element_invalid_this_value\\nThe \\`this\\` prop on \\`<svelte:element>\\` must be a string, if defined\\nhttps://svelte.dev/e/svelte_element_invalid_this_value`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_element_invalid_this_value`);\n\t}\n}","import { PUBLIC_VERSION } from '../version.js';\n\nif (typeof window !== 'undefined')\n\t// @ts-ignore\n\t(window.__svelte ||= { v: new Set() }).v.add(PUBLIC_VERSION);\n","// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n *\n * https://svelte.dev/docs/svelte-compiler#svelte-version\n * @type {string}\n */\nexport const VERSION = '5.16.0';\nexport const PUBLIC_VERSION = '5';\n","var R = typeof globalThis < \"u\" ? globalThis : typeof window < \"u\" ? window : typeof global < \"u\" ? global : typeof self < \"u\" ? self : {};\nfunction Ee(e) {\n return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, \"default\") ? e.default : e;\n}\nvar Ae = function(n, i) {\n return Array.prototype.slice.call(n, i);\n}, He = typeof setImmediate == \"function\", J;\nHe ? J = function(e) {\n setImmediate(e);\n} : J = function(e) {\n setTimeout(e, 0);\n};\nvar Le = J, ze = Le, Ge = function(n, i, r) {\n n && ze(function() {\n n.apply(r || null, i || []);\n });\n}, le = Ae, Ke = Ge, Ue = function(n, i) {\n var r = i || {}, c = {};\n return n === void 0 && (n = {}), n.on = function(o, s) {\n return c[o] ? c[o].push(s) : c[o] = [s], n;\n }, n.once = function(o, s) {\n return s._once = !0, n.on(o, s), n;\n }, n.off = function(o, s) {\n var w = arguments.length;\n if (w === 1)\n delete c[o];\n else if (w === 0)\n c = {};\n else {\n var S = c[o];\n if (!S)\n return n;\n S.splice(S.indexOf(s), 1);\n }\n return n;\n }, n.emit = function() {\n var o = le(arguments);\n return n.emitterSnapshot(o.shift()).apply(this, o);\n }, n.emitterSnapshot = function(o) {\n var s = (c[o] || []).slice(0);\n return function() {\n var w = le(arguments), S = this || n;\n if (o === \"error\" && r.throws !== !1 && !s.length)\n throw w.length === 1 ? w[0] : w;\n return s.forEach(function(y) {\n r.async ? Ke(y, w, S) : y.apply(S, w), y._once && n.off(o, y);\n }), n;\n };\n }, n;\n};\nconst Ve = /* @__PURE__ */ Ee(Ue);\nvar we = R.CustomEvent;\nfunction We() {\n try {\n var e = new we(\"cat\", { detail: { foo: \"bar\" } });\n return e.type === \"cat\" && e.detail.foo === \"bar\";\n } catch {\n }\n return !1;\n}\nvar qe = We() ? we : (\n // IE >= 9\n typeof document < \"u\" && typeof document.createEvent == \"function\" ? function(n, i) {\n var r = document.createEvent(\"CustomEvent\");\n return i ? r.initCustomEvent(n, i.bubbles, i.cancelable, i.detail) : r.initCustomEvent(n, !1, !1, void 0), r;\n } : (\n // IE <= 8\n function(n, i) {\n var r = document.createEventObject();\n return r.type = n, i ? (r.bubbles = !!i.bubbles, r.cancelable = !!i.cancelable, r.detail = i.detail) : (r.bubbles = !1, r.cancelable = !1, r.detail = void 0), r;\n }\n )\n), ye = [], q = \"\", Je = /^on/;\nfor (q in R)\n Je.test(q) && ye.push(q.slice(2));\nvar Qe = ye, Ze = qe, et = Qe, $ = R.document, Ce = nt, Se = it, k = [];\nR.addEventListener || (Ce = rt, Se = ot);\nvar tt = {\n add: Ce,\n remove: Se,\n fabricate: at\n};\nfunction nt(e, n, i, r) {\n return e.addEventListener(n, i, r);\n}\nfunction rt(e, n, i) {\n return e.attachEvent(\"on\" + n, ct(e, n, i));\n}\nfunction it(e, n, i, r) {\n return e.removeEventListener(n, i, r);\n}\nfunction ot(e, n, i) {\n var r = Oe(e, n, i);\n if (r)\n return e.detachEvent(\"on\" + n, r);\n}\nfunction at(e, n, i) {\n var r = et.indexOf(n) === -1 ? o() : c();\n e.dispatchEvent ? e.dispatchEvent(r) : e.fireEvent(\"on\" + n, r);\n function c() {\n var s;\n return $.createEvent ? (s = $.createEvent(\"Event\"), s.initEvent(n, !0, !0)) : $.createEventObject && (s = $.createEventObject()), s;\n }\n function o() {\n return new Ze(n, { detail: i });\n }\n}\nfunction ut(e, n, i) {\n return function(c) {\n var o = c || R.event;\n o.target = o.target || o.srcElement, o.preventDefault = o.preventDefault || function() {\n o.returnValue = !1;\n }, o.stopPropagation = o.stopPropagation || function() {\n o.cancelBubble = !0;\n }, o.which = o.which || o.keyCode, i.call(e, o);\n };\n}\nfunction ct(e, n, i) {\n var r = Oe(e, n, i) || ut(e, n, i);\n return k.push({\n wrapper: r,\n element: e,\n type: n,\n fn: i\n }), r;\n}\nfunction Oe(e, n, i) {\n var r = ft(e, n, i);\n if (r) {\n var c = k[r].wrapper;\n return k.splice(r, 1), c;\n }\n}\nfunction ft(e, n, i) {\n var r, c;\n for (r = 0; r < k.length; r++)\n if (c = k[r], c.element === e && c.type === n && c.fn === i)\n return r;\n}\nconst N = /* @__PURE__ */ Ee(tt);\nvar ve = {}, lt = \"(?:^|\\\\s)\", vt = \"(?:\\\\s|$)\";\nfunction Te(e) {\n var n = ve[e];\n return n ? n.lastIndex = 0 : ve[e] = n = new RegExp(lt + e + vt, \"g\"), n;\n}\nfunction j(e, n) {\n var i = e.className;\n i.length ? Te(n).test(i) || (e.className += \" \" + n) : e.className = n;\n}\nfunction F(e, n) {\n e.className = e.className.replace(Te(n), \" \").trim();\n}\nwindow.global || (window.global = window);\nvar I = document, C = I.documentElement;\nfunction pt(e, n) {\n var i = arguments.length;\n i === 1 && Array.isArray(e) === !1 && (n = e, e = []);\n var r, c, o, s, w, S, A, y, Y, d, H, M = null, P, u = n || {};\n u.moves === void 0 && (u.moves = pe), u.accepts === void 0 && (u.accepts = pe), u.invalid === void 0 && (u.invalid = Ie), u.containers === void 0 && (u.containers = e || []), u.isContainer === void 0 && (u.isContainer = dt), u.copy === void 0 && (u.copy = !1), u.copySortSource === void 0 && (u.copySortSource = !1), u.revertOnSpill === void 0 && (u.revertOnSpill = !1), u.removeOnSpill === void 0 && (u.removeOnSpill = !1), u.direction === void 0 && (u.direction = \"vertical\"), u.ignoreInputTextSelection === void 0 && (u.ignoreInputTextSelection = !0), u.mirrorContainer === void 0 && (u.mirrorContainer = I.body);\n var v = Ve({\n containers: u.containers,\n start: Ne,\n end: ne,\n cancel: ae,\n remove: oe,\n destroy: Me,\n canMove: Be,\n dragging: !1\n });\n return u.removeOnSpill === !0 && v.on(\"over\", Pe).on(\"out\", xe), Q(), v;\n function L(t) {\n return v.containers.indexOf(t) !== -1 || u.isContainer(t);\n }\n function Q(t) {\n var a = t ? \"remove\" : \"add\";\n x(C, a, \"mousedown\", Xe), x(C, a, \"mouseup\", K);\n }\n function z(t) {\n var a = t ? \"remove\" : \"add\";\n x(C, a, \"mousemove\", Ye);\n }\n function Z(t) {\n var a = t ? \"remove\" : \"add\";\n N[a](C, \"selectstart\", ee), N[a](C, \"click\", ee);\n }\n function Me() {\n Q(!0), K({});\n }\n function ee(t) {\n P && t.preventDefault();\n }\n function Xe(t) {\n S = t.clientX, A = t.clientY;\n var a = se(t) !== 1 || t.metaKey || t.ctrlKey;\n if (!a) {\n var f = t.target, l = G(f);\n l && (P = l, z(), t.type === \"mousedown\" && (be(f) ? f.focus() : t.preventDefault()));\n }\n }\n function Ye(t) {\n if (P) {\n if (se(t) === 0) {\n K({});\n return;\n }\n if (!(t.clientX !== void 0 && Math.abs(t.clientX - S) <= (u.slideFactorX || 0) && t.clientY !== void 0 && Math.abs(t.clientY - A) <= (u.slideFactorY || 0))) {\n if (u.ignoreInputTextSelection) {\n var a = _(\"clientX\", t) || 0, f = _(\"clientY\", t) || 0, l = I.elementFromPoint(a, f);\n if (be(l))\n return;\n }\n var g = P;\n z(!0), Z(), ne(), te(g);\n var m = st(o);\n s = _(\"pageX\", t) - m.left, w = _(\"pageY\", t) - m.top, j(d || o, \"gu-transit\"), De(), W(t);\n }\n }\n }\n function G(t) {\n if (!(v.dragging && r) && !L(t)) {\n for (var a = t; h(t) && L(h(t)) === !1; )\n if (u.invalid(t, a) || (t = h(t), !t))\n return;\n var f = h(t);\n if (f && !u.invalid(t, a)) {\n var l = u.moves(t, f, a, D(t));\n if (l)\n return {\n item: t,\n source: f\n };\n }\n }\n }\n function Be(t) {\n return !!G(t);\n }\n function Ne(t) {\n var a = G(t);\n a && te(a);\n }\n function te(t) {\n Re(t.item, t.source) && (d = t.item.cloneNode(!0), v.emit(\"cloned\", d, t.item, \"copy\")), c = t.source, o = t.item, y = Y = D(t.item), v.dragging = !0, v.emit(\"drag\", o, c);\n }\n function Ie() {\n return !1;\n }\n function ne() {\n if (v.dragging) {\n var t = d || o;\n ie(t, h(t));\n }\n }\n function re() {\n P = !1, z(!0), Z(!0);\n }\n function K(t) {\n if (re(), !!v.dragging) {\n var a = d || o, f = _(\"clientX\", t) || 0, l = _(\"clientY\", t) || 0, g = me(r, f, l), m = ue(g, f, l);\n m && (d && u.copySortSource || !d || m !== c) ? ie(a, m) : u.removeOnSpill ? oe() : ae();\n }\n }\n function ie(t, a) {\n var f = h(t);\n d && u.copySortSource && a === c && f.removeChild(o), V(a) ? v.emit(\"cancel\", t, c, c) : v.emit(\"drop\", t, a, c, Y), U();\n }\n function oe() {\n if (v.dragging) {\n var t = d || o, a = h(t);\n a && a.removeChild(t), v.emit(d ? \"cancel\" : \"remove\", t, a, c), U();\n }\n }\n function ae(t) {\n if (v.dragging) {\n var a = arguments.length > 0 ? t : u.revertOnSpill, f = d || o, l = h(f), g = V(l);\n g === !1 && a && (d ? l && l.removeChild(d) : c.insertBefore(f, y)), g || a ? v.emit(\"cancel\", f, c, c) : v.emit(\"drop\", f, l, c, Y), U();\n }\n }\n function U() {\n var t = d || o;\n re(), ke(), t && F(t, \"gu-transit\"), H && clearTimeout(H), v.dragging = !1, M && v.emit(\"out\", t, M, c), v.emit(\"dragend\", t), c = o = d = y = Y = H = M = null;\n }\n function V(t, a) {\n var f;\n return a !== void 0 ? f = a : r ? f = Y : f = D(d || o), t === c && f === y;\n }\n function ue(t, a, f) {\n for (var l = t; l && !g(); )\n l = h(l);\n return l;\n function g() {\n var m = L(l);\n if (m === !1)\n return !1;\n var B = ce(l, t), p = fe(l, B, a, f), O = V(l, p);\n return O ? !0 : u.accepts(o, l, c, p);\n }\n }\n function W(t) {\n if (!r)\n return;\n t.preventDefault();\n var a = _(\"clientX\", t) || 0, f = _(\"clientY\", t) || 0, l = a - s, g = f - w;\n r.style.left = l + \"px\", r.style.top = g + \"px\";\n var m = d || o, B = me(r, a, f), p = ue(B, a, f), O = p !== null && p !== M;\n (O || p === null) && (je(), M = p, $e());\n var b = h(m);\n if (p === c && d && !u.copySortSource) {\n b && b.removeChild(m);\n return;\n }\n var E, X = ce(p, B);\n if (X !== null)\n E = fe(p, X, a, f);\n else if (u.revertOnSpill === !0 && !d)\n E = y, p = c;\n else {\n d && b && b.removeChild(m);\n return;\n }\n (E === null && O || E !== m && E !== D(m)) && (Y = E, p.insertBefore(m, E), v.emit(\"shadow\", m, p, c));\n function T(Fe) {\n v.emit(Fe, m, M, c);\n }\n function $e() {\n O && T(\"over\");\n }\n function je() {\n M && T(\"out\");\n }\n }\n function Pe(t) {\n F(t, \"gu-hide\");\n }\n function xe(t) {\n v.dragging && j(t, \"gu-hide\");\n }\n function De() {\n if (!r) {\n var t = o.getBoundingClientRect();\n r = o.cloneNode(!0), r.style.width = ge(t) + \"px\", r.style.height = he(t) + \"px\", F(r, \"gu-transit\"), j(r, \"gu-mirror\"), u.mirrorContainer.appendChild(r), x(C, \"add\", \"mousemove\", W), j(u.mirrorContainer, \"gu-unselectable\"), v.emit(\"cloned\", r, o, \"mirror\");\n }\n }\n function ke() {\n r && (F(u.mirrorContainer, \"gu-unselectable\"), x(C, \"remove\", \"mousemove\", W), h(r).removeChild(r), r = null);\n }\n function ce(t, a) {\n for (var f = a; f !== t && h(f) !== t; )\n f = h(f);\n return f === C ? null : f;\n }\n function fe(t, a, f, l) {\n var g = (typeof u.direction == \"function\" ? u.direction(o, t, c) : u.direction) === \"horizontal\", m = a !== t ? p() : B();\n return m;\n function B() {\n var b = t.children.length, E, X, T;\n for (E = 0; E < b; E++)\n if (X = t.children[E], T = X.getBoundingClientRect(), g && T.left + T.width / 2 > f || !g && T.top + T.height / 2 > l)\n return X;\n return null;\n }\n function p() {\n var b = a.getBoundingClientRect();\n return O(g ? f > b.left + ge(b) / 2 : l > b.top + he(b) / 2);\n }\n function O(b) {\n return b ? D(a) : a;\n }\n }\n function Re(t, a) {\n return typeof u.copy == \"boolean\" ? u.copy : u.copy(t, a);\n }\n}\nfunction x(e, n, i, r) {\n var c = {\n mouseup: \"touchend\",\n mousedown: \"touchstart\",\n mousemove: \"touchmove\"\n }, o = {\n mouseup: \"pointerup\",\n mousedown: \"pointerdown\",\n mousemove: \"pointermove\"\n }, s = {\n mouseup: \"MSPointerUp\",\n mousedown: \"MSPointerDown\",\n mousemove: \"MSPointerMove\"\n };\n global.navigator.pointerEnabled ? N[n](e, o[i], r) : global.navigator.msPointerEnabled ? N[n](e, s[i], r) : (N[n](e, c[i], r), N[n](e, i, r));\n}\nfunction se(e) {\n if (e.touches !== void 0)\n return e.touches.length;\n if (e.which !== void 0 && e.which !== 0)\n return e.which;\n if (e.buttons !== void 0)\n return e.buttons;\n var n = e.button;\n if (n !== void 0)\n return n & 1 ? 1 : n & 2 ? 3 : n & 4 ? 2 : 0;\n}\nfunction st(e) {\n var n = e.getBoundingClientRect();\n return {\n left: n.left + de(\"scrollLeft\", \"pageXOffset\"),\n top: n.top + de(\"scrollTop\", \"pageYOffset\")\n };\n}\nfunction de(e, n) {\n return typeof global[n] < \"u\" ? global[n] : C.clientHeight ? C[e] : I.body[e];\n}\nfunction me(e, n, i) {\n e = e || {};\n var r = e.className || \"\", c;\n return e.className += \" gu-hide\", c = I.elementFromPoint(n, i), e.className = r, c;\n}\nfunction dt() {\n return !1;\n}\nfunction pe() {\n return !0;\n}\nfunction ge(e) {\n return e.width || e.right - e.left;\n}\nfunction he(e) {\n return e.height || e.bottom - e.top;\n}\nfunction h(e) {\n return e.parentNode === I ? null : e.parentNode;\n}\nfunction be(e) {\n return e.tagName === \"INPUT\" || e.tagName === \"TEXTAREA\" || e.tagName === \"SELECT\" || _e(e);\n}\nfunction _e(e) {\n return !e || e.contentEditable === \"false\" ? !1 : e.contentEditable === \"true\" ? !0 : _e(h(e));\n}\nfunction D(e) {\n return e.nextElementSibling || n();\n function n() {\n var i = e;\n do\n i = i.nextSibling;\n while (i && i.nodeType !== 1);\n return i;\n }\n}\nfunction mt(e) {\n return e.targetTouches && e.targetTouches.length ? e.targetTouches[0] : e.changedTouches && e.changedTouches.length ? e.changedTouches[0] : e;\n}\nfunction _(e, n) {\n var i = mt(n), r = {\n pageX: \"clientX\",\n // IE8\n pageY: \"clientY\"\n // IE8\n };\n return e in r && !(e in i) && r[e] in i && (e = r[e]), i[e];\n}\nexport {\n pt as default\n};\n","let uid = 0;\n\nexport default function Id() {\n return '_el_' + uid++;\n}","export class LocalStore {\n\n get(name, defaultValue) {\n\n try {\n const serializedValue = window.localStorage.getItem(name);\n\n if (serializedValue) {\n return JSON.parse(serializedValue);\n }\n } catch (error) {\n console.warn('LocalStore: Failed to retrieve %s', name, error);\n }\n\n return defaultValue;\n }\n\n set(name, value) {\n\n try {\n window.localStorage.setItem(name, JSON.stringify(value));\n } catch (error) {\n console.warn('LocalStore: Failed to set %s', name, error);\n }\n }\n\n}\n\nexport class FakeLocalStore {\n\n get(name, defaultValue) {\n return defaultValue;\n }\n\n set(name, value) { }\n\n}\n\n\nexport function createLocalStore() {\n\n if (typeof window === 'undefined' || typeof window.localStorage === 'undefined') {\n return new FakeLocalStore();\n }\n\n return new LocalStore();\n}","export class History {\n\n push(url) {\n window.history.pushState(null, null, url);\n }\n\n onPop(fn) {\n window.addEventListener('popstate', fn);\n\n return function() {\n window.removeEventListener('popstate', fn);\n };\n }\n\n}\n\nexport class FakeHistory {\n\n push(url) {}\n\n onPop(fn) {\n return function() {};\n }\n\n}\n\nexport function createHistory() {\n\n if (typeof window === 'undefined' || typeof window.history === 'undefined') {\n return new FakeHistory();\n }\n\n return new History();\n}","export { default as Id } from './Id';\n\nexport { default as autoresize } from './autoresize';\n\nexport {\n createLocalStore\n} from './local-store';\n\nexport {\n createHistory\n} from './history';\n\nexport function delay(fn, timeout) {\n setTimeout(fn, timeout);\n}\n\nexport function periodic(fn, interval) {\n\n let canceled = false;\n\n let timeout = interval;\n\n let i;\n\n function stop() {\n canceled = true;\n\n clearTimeout(i);\n }\n\n function run() {\n\n Promise.resolve({}).then(() => fn()).then(\n success => true,\n err => false\n ).then(success => {\n timeout = success === false ? timeout * 1.5 : interval;\n\n if (!canceled) {\n i = setTimeout(run, timeout);\n }\n });\n }\n\n run();\n\n return stop;\n}\n\nexport {\n isClosingLink,\n isClosedByLink\n} from './links';\n\nexport function isOpen(issue) {\n return issue.state === 'open';\n}\n\nexport function isMerged(issue) {\n return issue.merged;\n}\n\nexport function isOpenOrMerged(issue) {\n return isOpen(issue) || isMerged(issue);\n}\n\nexport function isPull(issue) {\n return issue.pull_request;\n}\n\nexport {\n debounce,\n throttle\n} from 'min-dash';\n\n\nexport function noDuplicates(keyFn) {\n\n const found = {};\n\n return function filter(element) {\n const key = keyFn(element);\n\n if (key in found) {\n return false;\n }\n\n found[key] = true;\n\n return true;\n };\n}","<script>\n let {\n className = '',\n hints,\n selectedHint,\n onHover,\n onBlur,\n onSelect\n } = $props();\n\n function handleMousedown(event, hint) {\n\n if (event.button === 0) {\n event.preventDefault();\n\n return onSelect(hint);\n }\n }\n\n function scrollIntoView(node, [ hint, selectedHint ]) {\n\n let lastSelectedHint = null;\n\n const hook = {\n update([ hint, selectedHint ]) {\n if (hint === selectedHint && hint !== lastSelectedHint) {\n lastSelectedHint = hint;\n\n node.scrollIntoView({ block: 'nearest' });\n }\n }\n };\n\n hook.update([ hint, selectedHint ]);\n\n return hook;\n }\n</script>\n\n<ul class={ [ className, 'hint-list', 'scroll-container-v' ].join(' ') }>\n {#each hints as hint(hint.name) }\n <li\n use:scrollIntoView={ [ hint, selectedHint ] }\n >\n <a\n class:active={ selectedHint === hint }\n onmouseenter={ () => onHover(hint) }\n onmouseleave={ () => onBlur(hint) }\n onmousedown={ (e) => handleMousedown(e, hint) }\n onclick={ (e) => e.preventDefault() || handleMousedown(e, hint) }\n href\n >{#each hint.parts as part}<span class:matched={ part.matched }>{ part.text }</span>{/each}</a>\n </li>\n {/each}\n</ul>\n\n<style lang=\"scss\">\n\n @import \"variables\";\n\n .hint-list {\n list-style: none;\n\n max-height: 200px;\n overflow-y: auto;\n padding: 0;\n margin: 0;\n }\n\n .hint-list:not(:first-child) {\n margin-top: 0;\n }\n\n .hint-list li {\n margin: 0 var(--container-gap);\n }\n\n .hint-list li:first-child {\n margin-top: var(--container-gap);\n }\n\n .hint-list li:last-child {\n margin-bottom: var(--container-gap);\n }\n\n .hint-list li a {\n padding: calc(var(--container-gap) / 2) var(--container-gap);\n width: 100%;\n display: block;\n border-radius: 5px;\n\n color: inherit;\n text-decoration: none;\n\n &:hover,\n &.active {\n background: scale-color($primary, $alpha: -90%);\n }\n\n &.text {\n color: $gray-600;\n }\n }\n\n .matched {\n background: scale-color($primary, $alpha: -80%);\n color: darken($primary, 10%);\n }\n</style>","function hasModifier(event) {\n const {\n ctrlKey,\n shiftKey,\n altKey,\n metaKey\n } = event;\n\n return ctrlKey || altKey || shiftKey || metaKey;\n}\n\nfunction isGlobal(event) {\n return event.target === document.body;\n}\n\nexport function isFindShortcut(event) {\n\n if (event.ctrlKey && !event.altKey && event.key.toLowerCase() === 'k') {\n return true;\n }\n\n if (!isGlobal(event) || hasModifier(event)) {\n return false;\n }\n\n return event.key === 'f';\n}\n\nexport function isNewIssueShortcut(event) {\n\n if (!isGlobal(event) || hasModifier(event)) {\n return false;\n }\n\n return event.key === 'n';\n}\n\nexport function isLoginShortcut(event) {\n\n if (!isGlobal(event) || hasModifier(event)) {\n return false;\n }\n\n return event.key === 'l';\n}\n\nexport function isApplyFilterClick(event) {\n\n const {\n shiftKey,\n altKey\n } = event;\n\n return shiftKey || altKey;\n}\n\nexport function isAddFilterClick(event) {\n\n const {\n shiftKey\n } = event;\n\n return shiftKey;\n}","<script>\n import { Id } from './util';\n\n import {\n HintList\n } from './components';\n\n import {\n isFindShortcut\n } from './shortcuts';\n\n import {\n debounce\n } from './util';\n\n let {\n className,\n value,\n placeholder,\n completionOptions = {},\n onChange\n } = $props();\n\n const userPresets = [\n [ '@me', '@me' ]\n ].map(([ name, value ]) => {\n return { name, value };\n });\n\n const temporalPresets = [\n [ 'today', '@today' ],\n [ 'last week', '@last_week' ],\n [ 'last month', '@last_month' ]\n ].map(([ name, value ]) => {\n return { name, value };\n });\n\n const staticValues = {\n is: [\n 'assigned',\n 'unassigned',\n 'epic',\n 'milestoned',\n 'open',\n 'closed',\n 'issue',\n 'pull'\n ].map(name => {\n return { name, value: `${name} ` };\n }),\n created: temporalPresets,\n updated: temporalPresets,\n assignee: userPresets,\n author: userPresets,\n reviewer: userPresets,\n commented: userPresets,\n involves: userPresets\n };\n\n const dynamicValues = $derived(\n Object.entries(completionOptions).reduce((values, entry) => {\n\n const [ key, value ] = entry;\n\n values[key] = value.slice().sort().map(name => {\n\n const separator = !name.startsWith('\"') ? '\"' : '';\n\n return { name, value: `${separator}${name}${separator} ` };\n });\n\n return values;\n }, {})\n );\n\n const qualifierCategories = [\n {\n name: 'Operators',\n options: [\n 'label',\n 'assignee',\n 'author',\n 'repo',\n 'reviewer',\n 'commented',\n 'milestone',\n 'created',\n 'updated',\n 'involves',\n 'is'\n ].map(name => {\n return {\n name,\n value: `${name}:`\n };\n })\n }\n ];\n\n let input;\n\n let focussed = $state(false);\n\n let position = $state(0);\n\n let keyboardSelectedHint = $state.raw(null);\n let mouseSelectedHint = $state.raw(null);\n\n const selectedHint = $derived(\n mouseSelectedHint || keyboardSelectedHint\n );\n\n const categoryValues = $derived(\n Object.keys({\n ...staticValues,\n ...dynamicValues\n }).reduce((values, key) => {\n values[key] = [].concat(staticValues[key] || [], dynamicValues[key] || []);\n\n return values;\n }, {})\n );\n\n const expanded = $derived(focussed || value);\n\n const {\n match,\n allHints\n } = $derived(computeMatch(value, position, categoryValues));\n\n $effect(() => {\n keyboardSelectedHint = keyboardSelectedHint && allHints.find(\n hint => hint.name === keyboardSelectedHint.name\n ) || allHints[0];\n\n mouseSelectedHint = null;\n });\n\n const searchId = Id();\n\n function computeMatch(value, searchEnd, categoryValues) {\n\n console.time('BoardFilter#computeMatch');\n\n const beforeCursor = value.substring(0, searchEnd);\n\n const searchStart = beforeCursor.lastIndexOf(' ') + 1;\n\n value = value.substring(searchStart, searchEnd).toLowerCase();\n\n const match = /^([-!]?)(?:([\\w]+)(?:(:)(?:\"([\\w-]+)\"?|([\\w-]+))?)?)$/.exec(value);\n\n if (!match) {\n console.timeEnd('BoardFilter#computeMatch');\n\n return {\n allHints: [],\n match: null\n };\n }\n\n let [\n _,\n negator,\n qualifier,\n sep,\n qualifierText,\n qualifierTextEscaped\n ] = match;\n\n const search = sep ? (qualifierText || qualifierTextEscaped || '') : qualifier;\n\n const allHints = [];\n\n const categories = sep ? [\n {\n name: 'Values',\n options: categoryValues[qualifier] || []\n }\n ] : qualifierCategories;\n\n const matchedCategories = categories.reduce((matchedCategories, category) => {\n\n const matchedValues = category.options.reduce((matchedValues, categoryOption) => {\n\n const {\n name,\n value\n } = categoryOption;\n\n if (name.toLowerCase().includes(search)) {\n\n const idx = name.indexOf(search);\n\n const hint = {\n name: name,\n parts: [\n {\n text: name.substring(0, idx)\n },\n {\n text: name.substring(idx, idx + search.length),\n matched: true\n },\n {\n text: name.substring(idx + search.length)\n }\n ],\n apply: (currentValue) => {\n\n const before = currentValue.substring(0, searchStart);\n const fix = (negator || '') + (sep ? qualifier + sep : '') + value;\n const after = currentValue.substring(searchEnd);\n\n return {\n val: `${before}${fix}${after}`,\n idx: before.length + fix.length\n };\n }\n };\n\n matchedValues.push(hint);\n allHints.push(hint);\n }\n\n return matchedValues;\n }, []);\n\n if (matchedValues.length) {\n matchedCategories.push({\n name: category.name,\n values: matchedValues\n });\n }\n\n return matchedCategories;\n }, []);\n\n console.timeEnd('BoardFilter#computeMatch');\n\n if (matchedCategories.length) {\n\n return {\n match: {\n categories: matchedCategories\n },\n allHints\n };\n }\n\n return {\n match: null,\n allHints: []\n };\n }\n\n function applyHint(hint) {\n\n const {\n val,\n idx\n } = hint.apply(value);\n\n input.value = value = val;\n input.selectionEnd = input.selectionStart = position = idx;\n\n triggerChanged(value);\n }\n\n function handleInput(event) {\n\n const target = event.target;\n\n value = target.value;\n position = target.selectionStart;\n\n triggerChanged(value);\n }\n\n function nextHint(currentHint, direction) {\n\n const hints = (allHints || []);\n\n const currentIndex = hints.findIndex(hint => hint.name === currentHint.name);\n\n let nextIndex = currentIndex + direction;\n\n if (nextIndex < 0) {\n nextIndex = hints.length - 1;\n }\n\n if (nextIndex === hints.length) {\n nextIndex = 0;\n }\n\n return hints[nextIndex];\n }\n\n function handleInputKey(event) {\n\n const key = event.key;\n\n if (key === 'Enter') {\n if (keyboardSelectedHint) {\n applyHint(keyboardSelectedHint);\n }\n\n event.preventDefault();\n }\n\n if (key === 'ArrowUp') {\n keyboardSelectedHint = nextHint(keyboardSelectedHint, -1);\n event.preventDefault();\n }\n\n if (key === 'ArrowDown') {\n keyboardSelectedHint = nextHint(keyboardSelectedHint, 1);\n event.preventDefault();\n }\n\n if (key === 'Escape' && !value) {\n input.blur();\n\n event.preventDefault();\n }\n }\n\n const triggerChanged = debounce((value) => {\n onChange && onChange(value);\n }, 500);\n\n function isInputTarget(event) {\n const {\n target\n } = event;\n\n return target === input;\n }\n\n function handleGlobalKey(event) {\n\n if (isFindShortcut(event)) {\n event.preventDefault();\n\n if (!isInputTarget(event)) {\n input.focus();\n }\n }\n }\n</script>\n\n<svelte:window onkeydown={ handleGlobalKey } />\n\n<div class=\"board-filter { className } dropdown-parent { expanded && 'expanded' }\">\n <input\n class=\"form-control\"\n type=\"search\"\n placeholder={ placeholder }\n id={searchId}\n autocomplete=\"off\"\n spellcheck=\"false\"\n title={ placeholder + ' (ctrl + k, f)'}\n bind:this={ input }\n bind:value={ value }\n oninput={ handleInput }\n onkeydown={ handleInputKey }\n onfocus={ () => focussed = true }\n onblur={ () => focussed = false }\n />\n\n {#if focussed && value && match}\n <div class=\"help-dropdown\">\n {#each match.categories as category, idx}\n {#if idx > 0}\n <hr />\n {/if}\n\n <h3 class=\"category\">{ category.name }</h3>\n\n <HintList\n hints={ category.values }\n selectedHint={ selectedHint }\n onHover={ hint => mouseSelectedHint = hint }\n onBlur={ () => mouseSelectedHint = null }\n onSelect={ applyHint }\n />\n\n {/each}\n </div>\n {:else if focussed && !value}\n <div class=\"help-dropdown\">\n <p class=\"note\">\n Filter cards by title and description.\n </p>\n\n <p class=\"note\">\n Use additional operator such as <code>created</code>, <code>updated</code>, <code>milestone</code>, <code>repo</code>, <code>assignee</code>, <code>label</code> and <code>is</code> to refine your search.\n </p>\n </div>\n {/if}\n</div>\n\n<style lang=\"scss\">\n\n @import \"variables\";\n\n @import \"./HelpDropdown\";\n\n .board-filter {\n &.expanded {\n width: 500px;\n max-width: 100%;\n }\n\n > input {\n width: 100%;\n }\n\n width: 300px;\n }\n\n .icon {\n color: $gray-300;\n }\n</style>","/**\n * Flatten array, one level deep.\n *\n * @template T\n *\n * @param {T[][] | T[] | null} [arr]\n *\n * @return {T[]}\n */\nfunction flatten(arr) {\n return Array.prototype.concat.apply([], arr);\n}\n\nconst nativeToString = Object.prototype.toString;\nconst nativeHasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction isUndefined(obj) {\n return obj === undefined;\n}\n\nfunction isDefined(obj) {\n return obj !== undefined;\n}\n\nfunction isNil(obj) {\n return obj == null;\n}\n\nfunction isArray(obj) {\n return nativeToString.call(obj) === '[object Array]';\n}\n\nfunction isObject(obj) {\n return nativeToString.call(obj) === '[object Object]';\n}\n\nfunction isNumber(obj) {\n return nativeToString.call(obj) === '[object Number]';\n}\n\n/**\n * @param {any} obj\n *\n * @return {boolean}\n */\nfunction isFunction(obj) {\n const tag = nativeToString.call(obj);\n\n return (\n tag === '[object Function]' ||\n tag === '[object AsyncFunction]' ||\n tag === '[object GeneratorFunction]' ||\n tag === '[object AsyncGeneratorFunction]' ||\n tag === '[object Proxy]'\n );\n}\n\nfunction isString(obj) {\n return nativeToString.call(obj) === '[object String]';\n}\n\n\n/**\n * Ensure collection is an array.\n *\n * @param {Object} obj\n */\nfunction ensureArray(obj) {\n\n if (isArray(obj)) {\n return;\n }\n\n throw new Error('must supply array');\n}\n\n/**\n * Return true, if target owns a property with the given key.\n *\n * @param {Object} target\n * @param {String} key\n *\n * @return {Boolean}\n */\nfunction has(target, key) {\n return !isNil(target) && nativeHasOwnProperty.call(target, key);\n}\n\n/**\n * @template T\n * @typedef { (\n * ((e: T) => boolean) |\n * ((e: T, idx: number) => boolean) |\n * ((e: T, key: string) => boolean) |\n * string |\n * number\n * ) } Matcher\n */\n\n/**\n * @template T\n * @template U\n *\n * @typedef { (\n * ((e: T) => U) | string | number\n * ) } Extractor\n */\n\n\n/**\n * @template T\n * @typedef { (val: T, key: any) => boolean } MatchFn\n */\n\n/**\n * @template T\n * @typedef { T[] } ArrayCollection\n */\n\n/**\n * @template T\n * @typedef { { [key: string]: T } } StringKeyValueCollection\n */\n\n/**\n * @template T\n * @typedef { { [key: number]: T } } NumberKeyValueCollection\n */\n\n/**\n * @template T\n * @typedef { StringKeyValueCollection<T> | NumberKeyValueCollection<T> } KeyValueCollection\n */\n\n/**\n * @template T\n * @typedef { KeyValueCollection<T> | ArrayCollection<T> } Collection\n */\n\n/**\n * Find element in collection.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param {Matcher<T>} matcher\n *\n * @return {Object}\n */\nfunction find(collection, matcher) {\n\n const matchFn = toMatcher(matcher);\n\n let match;\n\n forEach(collection, function(val, key) {\n if (matchFn(val, key)) {\n match = val;\n\n return false;\n }\n });\n\n return match;\n\n}\n\n\n/**\n * Find element index in collection.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param {Matcher<T>} matcher\n *\n * @return {number | string | undefined}\n */\nfunction findIndex(collection, matcher) {\n\n const matchFn = toMatcher(matcher);\n\n let idx = isArray(collection) ? -1 : undefined;\n\n forEach(collection, function(val, key) {\n if (matchFn(val, key)) {\n idx = key;\n\n return false;\n }\n });\n\n return idx;\n}\n\n\n/**\n * Filter elements in collection.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param {Matcher<T>} matcher\n *\n * @return {T[]} result\n */\nfunction filter(collection, matcher) {\n\n const matchFn = toMatcher(matcher);\n\n let result = [];\n\n forEach(collection, function(val, key) {\n if (matchFn(val, key)) {\n result.push(val);\n }\n });\n\n return result;\n}\n\n\n/**\n * Iterate over collection; returning something\n * (non-undefined) will stop iteration.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param { ((item: T, idx: number) => (boolean|void)) | ((item: T, key: string) => (boolean|void)) } iterator\n *\n * @return {T} return result that stopped the iteration\n */\nfunction forEach(collection, iterator) {\n\n let val,\n result;\n\n if (isUndefined(collection)) {\n return;\n }\n\n const convertKey = isArray(collection) ? toNum : identity;\n\n for (let key in collection) {\n\n if (has(collection, key)) {\n val = collection[key];\n\n result = iterator(val, convertKey(key));\n\n if (result === false) {\n return val;\n }\n }\n }\n}\n\n/**\n * Return collection without element.\n *\n * @template T\n * @param {ArrayCollection<T>} arr\n * @param {Matcher<T>} matcher\n *\n * @return {T[]}\n */\nfunction without(arr, matcher) {\n\n if (isUndefined(arr)) {\n return [];\n }\n\n ensureArray(arr);\n\n const matchFn = toMatcher(matcher);\n\n return arr.filter(function(el, idx) {\n return !matchFn(el, idx);\n });\n\n}\n\n\n/**\n * Reduce collection, returning a single result.\n *\n * @template T\n * @template V\n *\n * @param {Collection<T>} collection\n * @param {(result: V, entry: T, index: any) => V} iterator\n * @param {V} result\n *\n * @return {V} result returned from last iterator\n */\nfunction reduce(collection, iterator, result) {\n\n forEach(collection, function(value, idx) {\n result = iterator(result, value, idx);\n });\n\n return result;\n}\n\n\n/**\n * Return true if every element in the collection\n * matches the criteria.\n *\n * @param {Object|Array} collection\n * @param {Function} matcher\n *\n * @return {Boolean}\n */\nfunction every(collection, matcher) {\n\n return !!reduce(collection, function(matches, val, key) {\n return matches && matcher(val, key);\n }, true);\n}\n\n\n/**\n * Return true if some elements in the collection\n * match the criteria.\n *\n * @param {Object|Array} collection\n * @param {Function} matcher\n *\n * @return {Boolean}\n */\nfunction some(collection, matcher) {\n\n return !!find(collection, matcher);\n}\n\n\n/**\n * Transform a collection into another collection\n * by piping each member through the given fn.\n *\n * @param {Object|Array} collection\n * @param {Function} fn\n *\n * @return {Array} transformed collection\n */\nfunction map(collection, fn) {\n\n let result = [];\n\n forEach(collection, function(val, key) {\n result.push(fn(val, key));\n });\n\n return result;\n}\n\n\n/**\n * Get the collections keys.\n *\n * @param {Object|Array} collection\n *\n * @return {Array}\n */\nfunction keys(collection) {\n return collection && Object.keys(collection) || [];\n}\n\n\n/**\n * Shorthand for `keys(o).length`.\n *\n * @param {Object|Array} collection\n *\n * @return {Number}\n */\nfunction size(collection) {\n return keys(collection).length;\n}\n\n\n/**\n * Get the values in the collection.\n *\n * @param {Object|Array} collection\n *\n * @return {Array}\n */\nfunction values(collection) {\n return map(collection, (val) => val);\n}\n\n\n/**\n * Group collection members by attribute.\n *\n * @param {Object|Array} collection\n * @param {Extractor} extractor\n *\n * @return {Object} map with { attrValue => [ a, b, c ] }\n */\nfunction groupBy(collection, extractor, grouped = {}) {\n\n extractor = toExtractor(extractor);\n\n forEach(collection, function(val) {\n let discriminator = extractor(val) || '_';\n\n let group = grouped[discriminator];\n\n if (!group) {\n group = grouped[discriminator] = [];\n }\n\n group.push(val);\n });\n\n return grouped;\n}\n\n\nfunction uniqueBy(extractor, ...collections) {\n\n extractor = toExtractor(extractor);\n\n let grouped = {};\n\n forEach(collections, (c) => groupBy(c, extractor, grouped));\n\n let result = map(grouped, function(val, key) {\n return val[0];\n });\n\n return result;\n}\n\n\nconst unionBy = uniqueBy;\n\n\n\n/**\n * Sort collection by criteria.\n *\n * @template T\n *\n * @param {Collection<T>} collection\n * @param {Extractor<T, number | string>} extractor\n *\n * @return {Array}\n */\nfunction sortBy(collection, extractor) {\n\n extractor = toExtractor(extractor);\n\n let sorted = [];\n\n forEach(collection, function(value, key) {\n let disc = extractor(value, key);\n\n let entry = {\n d: disc,\n v: value\n };\n\n for (var idx = 0; idx < sorted.length; idx++) {\n let { d } = sorted[idx];\n\n if (disc < d) {\n sorted.splice(idx, 0, entry);\n return;\n }\n }\n\n // not inserted, append (!)\n sorted.push(entry);\n });\n\n return map(sorted, (e) => e.v);\n}\n\n\n/**\n * Create an object pattern matcher.\n *\n * @example\n *\n * ```javascript\n * const matcher = matchPattern({ id: 1 });\n *\n * let element = find(elements, matcher);\n * ```\n *\n * @template T\n *\n * @param {T} pattern\n *\n * @return { (el: any) => boolean } matcherFn\n */\nfunction matchPattern(pattern) {\n\n return function(el) {\n\n return every(pattern, function(val, key) {\n return el[key] === val;\n });\n\n };\n}\n\n\n/**\n * @param {string | ((e: any) => any) } extractor\n *\n * @return { (e: any) => any }\n */\nfunction toExtractor(extractor) {\n\n /**\n * @satisfies { (e: any) => any }\n */\n return isFunction(extractor) ? extractor : (e) => {\n\n // @ts-ignore: just works\n return e[extractor];\n };\n}\n\n\n/**\n * @template T\n * @param {Matcher<T>} matcher\n *\n * @return {MatchFn<T>}\n */\nfunction toMatcher(matcher) {\n return isFunction(matcher) ? matcher : (e) => {\n return e === matcher;\n };\n}\n\n\nfunction identity(arg) {\n return arg;\n}\n\nfunction toNum(arg) {\n return Number(arg);\n}\n\n/* global setTimeout clearTimeout */\n\n/**\n * @typedef { {\n * (...args: any[]): any;\n * flush: () => void;\n * cancel: () => void;\n * } } DebouncedFunction\n */\n\n/**\n * Debounce fn, calling it only once if the given time\n * elapsed between calls.\n *\n * Lodash-style the function exposes methods to `#clear`\n * and `#flush` to control internal behavior.\n *\n * @param {Function} fn\n * @param {Number} timeout\n *\n * @return {DebouncedFunction} debounced function\n */\nfunction debounce(fn, timeout) {\n\n let timer;\n\n let lastArgs;\n let lastThis;\n\n let lastNow;\n\n function fire(force) {\n\n let now = Date.now();\n\n let scheduledDiff = force ? 0 : (lastNow + timeout) - now;\n\n if (scheduledDiff > 0) {\n return schedule(scheduledDiff);\n }\n\n fn.apply(lastThis, lastArgs);\n\n clear();\n }\n\n function schedule(timeout) {\n timer = setTimeout(fire, timeout);\n }\n\n function clear() {\n if (timer) {\n clearTimeout(timer);\n }\n\n timer = lastNow = lastArgs = lastThis = undefined;\n }\n\n function flush() {\n if (timer) {\n fire(true);\n }\n\n clear();\n }\n\n /**\n * @type { DebouncedFunction }\n */\n function callback(...args) {\n lastNow = Date.now();\n\n lastArgs = args;\n lastThis = this;\n\n // ensure an execution is scheduled\n if (!timer) {\n schedule(timeout);\n }\n }\n\n callback.flush = flush;\n callback.cancel = clear;\n\n return callback;\n}\n\n/**\n * Throttle fn, calling at most once\n * in the given interval.\n *\n * @param {Function} fn\n * @param {Number} interval\n *\n * @return {Function} throttled function\n */\nfunction throttle(fn, interval) {\n let throttling = false;\n\n return function(...args) {\n\n if (throttling) {\n return;\n }\n\n fn(...args);\n throttling = true;\n\n setTimeout(() => {\n throttling = false;\n }, interval);\n };\n}\n\n/**\n * Bind function against target <this>.\n *\n * @param {Function} fn\n * @param {Object} target\n *\n * @return {Function} bound function\n */\nfunction bind(fn, target) {\n return fn.bind(target);\n}\n\n/**\n * Convenience wrapper for `Object.assign`.\n *\n * @param {Object} target\n * @param {...Object} others\n *\n * @return {Object} the target\n */\nfunction assign(target, ...others) {\n return Object.assign(target, ...others);\n}\n\n/**\n * Sets a nested property of a given object to the specified value.\n *\n * This mutates the object and returns it.\n *\n * @template T\n *\n * @param {T} target The target of the set operation.\n * @param {(string|number)[]} path The path to the nested value.\n * @param {any} value The value to set.\n *\n * @return {T}\n */\nfunction set(target, path, value) {\n\n let currentTarget = target;\n\n forEach(path, function(key, idx) {\n\n if (typeof key !== 'number' && typeof key !== 'string') {\n throw new Error('illegal key type: ' + typeof key + '. Key should be of type number or string.');\n }\n\n if (key === 'constructor') {\n throw new Error('illegal key: constructor');\n }\n\n if (key === '__proto__') {\n throw new Error('illegal key: __proto__');\n }\n\n let nextKey = path[idx + 1];\n let nextTarget = currentTarget[key];\n\n if (isDefined(nextKey) && isNil(nextTarget)) {\n nextTarget = currentTarget[key] = isNaN(+nextKey) ? {} : [];\n }\n\n if (isUndefined(nextKey)) {\n if (isUndefined(value)) {\n delete currentTarget[key];\n } else {\n currentTarget[key] = value;\n }\n } else {\n currentTarget = nextTarget;\n }\n });\n\n return target;\n}\n\n\n/**\n * Gets a nested property of a given object.\n *\n * @param {Object} target The target of the get operation.\n * @param {(string|number)[]} path The path to the nested value.\n * @param {any} [defaultValue] The value to return if no value exists.\n *\n * @return {any}\n */\nfunction get(target, path, defaultValue) {\n\n let currentTarget = target;\n\n forEach(path, function(key) {\n\n // accessing nil property yields <undefined>\n if (isNil(currentTarget)) {\n currentTarget = undefined;\n\n return false;\n }\n\n currentTarget = currentTarget[key];\n });\n\n return isUndefined(currentTarget) ? defaultValue : currentTarget;\n}\n\n/**\n * Pick properties from the given target.\n *\n * @template T\n * @template {any[]} V\n *\n * @param {T} target\n * @param {V} properties\n *\n * @return Pick<T, V>\n */\nfunction pick(target, properties) {\n\n let result = {};\n\n let obj = Object(target);\n\n forEach(properties, function(prop) {\n\n if (prop in obj) {\n result[prop] = target[prop];\n }\n });\n\n return result;\n}\n\n/**\n * Pick all target properties, excluding the given ones.\n *\n * @template T\n * @template {any[]} V\n *\n * @param {T} target\n * @param {V} properties\n *\n * @return {Omit<T, V>} target\n */\nfunction omit(target, properties) {\n\n let result = {};\n\n let obj = Object(target);\n\n forEach(obj, function(prop, key) {\n\n if (properties.indexOf(key) === -1) {\n result[key] = prop;\n }\n });\n\n return result;\n}\n\n/**\n * Recursively merge `...sources` into given target.\n *\n * Does support merging objects; does not support merging arrays.\n *\n * @param {Object} target\n * @param {...Object} sources\n *\n * @return {Object} the target\n */\nfunction merge(target, ...sources) {\n\n if (!sources.length) {\n return target;\n }\n\n forEach(sources, function(source) {\n\n // skip non-obj sources, i.e. null\n if (!source || !isObject(source)) {\n return;\n }\n\n forEach(source, function(sourceVal, key) {\n\n if (key === '__proto__') {\n return;\n }\n\n let targetVal = target[key];\n\n if (isObject(sourceVal)) {\n\n if (!isObject(targetVal)) {\n\n // override target[key] with object\n targetVal = {};\n }\n\n target[key] = merge(targetVal, sourceVal);\n } else {\n target[key] = sourceVal;\n }\n\n });\n });\n\n return target;\n}\n\nexport { assign, bind, debounce, ensureArray, every, filter, find, findIndex, flatten, forEach, get, groupBy, has, isArray, isDefined, isFunction, isNil, isNumber, isObject, isString, isUndefined, keys, map, matchPattern, merge, omit, pick, reduce, set, size, some, sortBy, throttle, unionBy, uniqueBy, values, without };\n","<script>\n let {\n rounded = false,\n children\n } = $props();\n</script>\n\n<span class=\"avatar\" class:avatar-rounded={ rounded }>\n {@render children?.()}\n\n <div class=\"avatar-shadow\"></div>\n</span>\n\n<style lang=\"scss\">\n .avatar {\n position: relative;\n display: inline-block;\n overflow: hidden;\n color: #fff;\n white-space: nowrap;\n text-align: center;\n vertical-align: middle;\n background: #ccc;\n width: 32px;\n height: 32px;\n line-height: 32px;\n }\n\n .avatar-shadow {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n\n box-shadow: inset 0 0 2px 0 rgba(0,0,0,.1);\n }\n\n .avatar-rounded {\n border-radius: 50%;\n\n .avatar-shadow {\n border-radius: 50%;\n }\n }\n</style>","/** @import { BlurParams, CrossfadeParams, DrawParams, FadeParams, FlyParams, ScaleParams, SlideParams, TransitionConfig } from './public' */\n/** @param {number} x */\nconst linear = (x) => x;\n\n/** @param {number} t */\nfunction cubic_out(t) {\n\tconst f = t - 1.0;\n\treturn f * f * f + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nfunction cubic_in_out(t) {\n\treturn t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\n\n/** @param {number | string} value\n * @returns {[number, string]}\n */\nfunction 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\n/**\n * Animates a `blur` filter alongside an element's opacity.\n *\n * @param {Element} node\n * @param {BlurParams} [params]\n * @returns {TransitionConfig}\n */\nexport function blur(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubic_in_out, amount = 5, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst f = style.filter === 'none' ? '' : style.filter;\n\tconst od = target_opacity * (1 - opacity);\n\tconst [value, unit] = split_css_unit(amount);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_t, u) => `opacity: ${target_opacity - od * u}; filter: ${f} blur(${u * value}${unit});`\n\t};\n}\n\n/**\n * Animates the opacity of an element from 0 to the current opacity for `in` transitions and from the current opacity to 0 for `out` transitions.\n *\n * @param {Element} node\n * @param {FadeParams} [params]\n * @returns {TransitionConfig}\n */\nexport function fade(node, { delay = 0, duration = 400, easing = linear } = {}) {\n\tconst o = +getComputedStyle(node).opacity;\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t) => `opacity: ${t * o}`\n\t};\n}\n\n/**\n * Animates the x and y positions and the opacity of an element. `in` transitions animate from the provided values, passed as parameters to the element's default values. `out` transitions animate from the element's default values to the provided values.\n *\n * @param {Element} node\n * @param {FlyParams} [params]\n * @returns {TransitionConfig}\n */\nexport function fly(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubic_out, x = 0, y = 0, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst transform = style.transform === 'none' ? '' : style.transform;\n\tconst od = target_opacity * (1 - opacity);\n\tconst [x_value, x_unit] = split_css_unit(x);\n\tconst [y_value, y_unit] = split_css_unit(y);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t, u) => `\n\t\t\ttransform: ${transform} translate(${(1 - t) * x_value}${x_unit}, ${(1 - t) * y_value}${y_unit});\n\t\t\topacity: ${target_opacity - od * u}`\n\t};\n}\n\n/**\n * Slides an element in and out.\n *\n * @param {Element} node\n * @param {SlideParams} [params]\n * @returns {TransitionConfig}\n */\nexport function slide(node, { delay = 0, duration = 400, easing = cubic_out, axis = 'y' } = {}) {\n\tconst style = getComputedStyle(node);\n\tconst opacity = +style.opacity;\n\tconst primary_property = axis === 'y' ? 'height' : 'width';\n\tconst primary_property_value = parseFloat(style[primary_property]);\n\tconst secondary_properties = axis === 'y' ? ['top', 'bottom'] : ['left', 'right'];\n\tconst capitalized_secondary_properties = secondary_properties.map(\n\t\t(e) => /** @type {'Left' | 'Right' | 'Top' | 'Bottom'} */ (`${e[0].toUpperCase()}${e.slice(1)}`)\n\t);\n\tconst padding_start_value = parseFloat(style[`padding${capitalized_secondary_properties[0]}`]);\n\tconst padding_end_value = parseFloat(style[`padding${capitalized_secondary_properties[1]}`]);\n\tconst margin_start_value = parseFloat(style[`margin${capitalized_secondary_properties[0]}`]);\n\tconst margin_end_value = parseFloat(style[`margin${capitalized_secondary_properties[1]}`]);\n\tconst border_width_start_value = parseFloat(\n\t\tstyle[`border${capitalized_secondary_properties[0]}Width`]\n\t);\n\tconst border_width_end_value = parseFloat(\n\t\tstyle[`border${capitalized_secondary_properties[1]}Width`]\n\t);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (t) =>\n\t\t\t'overflow: hidden;' +\n\t\t\t`opacity: ${Math.min(t * 20, 1) * opacity};` +\n\t\t\t`${primary_property}: ${t * primary_property_value}px;` +\n\t\t\t`padding-${secondary_properties[0]}: ${t * padding_start_value}px;` +\n\t\t\t`padding-${secondary_properties[1]}: ${t * padding_end_value}px;` +\n\t\t\t`margin-${secondary_properties[0]}: ${t * margin_start_value}px;` +\n\t\t\t`margin-${secondary_properties[1]}: ${t * margin_end_value}px;` +\n\t\t\t`border-${secondary_properties[0]}-width: ${t * border_width_start_value}px;` +\n\t\t\t`border-${secondary_properties[1]}-width: ${t * border_width_end_value}px;`\n\t};\n}\n\n/**\n * Animates the opacity and scale of an element. `in` transitions animate from the provided values, passed as parameters, to an element's current (default) values. `out` transitions animate from an element's default values to the provided values.\n *\n * @param {Element} node\n * @param {ScaleParams} [params]\n * @returns {TransitionConfig}\n */\nexport function scale(\n\tnode,\n\t{ delay = 0, duration = 400, easing = cubic_out, start = 0, opacity = 0 } = {}\n) {\n\tconst style = getComputedStyle(node);\n\tconst target_opacity = +style.opacity;\n\tconst transform = style.transform === 'none' ? '' : style.transform;\n\tconst sd = 1 - start;\n\tconst od = target_opacity * (1 - opacity);\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_t, u) => `\n\t\t\ttransform: ${transform} scale(${1 - sd * u});\n\t\t\topacity: ${target_opacity - od * u}\n\t\t`\n\t};\n}\n\n/**\n * Animates the stroke of an SVG element, like a snake in a tube. `in` transitions begin with the path invisible and draw the path to the screen over time. `out` transitions start in a visible state and gradually erase the path. `draw` only works with elements that have a `getTotalLength` method, like `<path>` and `<polyline>`.\n *\n * @param {SVGElement & { getTotalLength(): number }} node\n * @param {DrawParams} [params]\n * @returns {TransitionConfig}\n */\nexport function draw(node, { delay = 0, speed, duration, easing = cubic_in_out } = {}) {\n\tlet len = node.getTotalLength();\n\tconst style = getComputedStyle(node);\n\tif (style.strokeLinecap !== 'butt') {\n\t\tlen += parseInt(style.strokeWidth);\n\t}\n\tif (duration === undefined) {\n\t\tif (speed === undefined) {\n\t\t\tduration = 800;\n\t\t} else {\n\t\t\tduration = len / speed;\n\t\t}\n\t} else if (typeof duration === 'function') {\n\t\tduration = duration(len);\n\t}\n\treturn {\n\t\tdelay,\n\t\tduration,\n\t\teasing,\n\t\tcss: (_, u) => `\n\t\t\tstroke-dasharray: ${len};\n\t\t\tstroke-dashoffset: ${u * len};\n\t\t`\n\t};\n}\n\n/**\n * @template T\n * @template S\n * @param {T} tar\n * @param {S} src\n * @returns {T & S}\n */\nfunction 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/**\n * The `crossfade` function creates a pair of [transitions](https://svelte.dev/docs/svelte/transition) called `send` and `receive`. When an element is 'sent', it looks for a corresponding element being 'received', and generates a transition that transforms the element to its counterpart's position and fades it out. When an element is 'received', the reverse happens. If there is no counterpart, the `fallback` transition is used.\n *\n * @param {CrossfadeParams & {\n * \tfallback?: (node: Element, params: CrossfadeParams, intro: boolean) => TransitionConfig;\n * }} params\n * @returns {[(node: any, params: CrossfadeParams & { key: any; }) => () => TransitionConfig, (node: any, params: CrossfadeParams & { key: any; }) => () => TransitionConfig]}\n */\nexport function crossfade({ fallback, ...defaults }) {\n\t/** @type {Map<any, Element>} */\n\tconst to_receive = new Map();\n\t/** @type {Map<any, Element>} */\n\tconst to_send = new Map();\n\n\t/**\n\t * @param {Element} from_node\n\t * @param {Element} node\n\t * @param {CrossfadeParams} params\n\t * @returns {TransitionConfig}\n\t */\n\tfunction crossfade(from_node, node, params) {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = /** @param {number} d */ (d) => Math.sqrt(d) * 30,\n\t\t\teasing = cubic_out\n\t\t} = assign(assign({}, defaults), params);\n\t\tconst from = from_node.getBoundingClientRect();\n\t\tconst to = node.getBoundingClientRect();\n\t\tconst dx = from.left - to.left;\n\t\tconst dy = from.top - to.top;\n\t\tconst dw = from.width / to.width;\n\t\tconst dh = from.height / to.height;\n\t\tconst d = Math.sqrt(dx * dx + dy * dy);\n\t\tconst style = getComputedStyle(node);\n\t\tconst transform = style.transform === 'none' ? '' : style.transform;\n\t\tconst opacity = +style.opacity;\n\t\treturn {\n\t\t\tdelay,\n\t\t\tduration: typeof duration === 'function' ? duration(d) : duration,\n\t\t\teasing,\n\t\t\tcss: (t, u) => `\n\t\t\t opacity: ${t * opacity};\n\t\t\t transform-origin: top left;\n\t\t\t transform: ${transform} translate(${u * dx}px,${u * dy}px) scale(${t + (1 - t) * dw}, ${\n\t\t\t\t\t\tt + (1 - t) * dh\n\t\t\t\t\t});\n\t\t `\n\t\t};\n\t}\n\n\t/**\n\t * @param {Map<any, Element>} items\n\t * @param {Map<any, Element>} counterparts\n\t * @param {boolean} intro\n\t * @returns {(node: any, params: CrossfadeParams & { key: any; }) => () => TransitionConfig}\n\t */\n\tfunction transition(items, counterparts, intro) {\n\t\t// @ts-expect-error TODO improve typings (are the public types wrong?)\n\t\treturn (node, params) => {\n\t\t\titems.set(params.key, node);\n\t\t\treturn () => {\n\t\t\t\tif (counterparts.has(params.key)) {\n\t\t\t\t\tconst other_node = counterparts.get(params.key);\n\t\t\t\t\tcounterparts.delete(params.key);\n\t\t\t\t\treturn crossfade(/** @type {Element} */ (other_node), node, params);\n\t\t\t\t}\n\t\t\t\t// if the node is disappearing altogether\n\t\t\t\t// (i.e. wasn't claimed by the other list)\n\t\t\t\t// then we need to supply an outro\n\t\t\t\titems.delete(params.key);\n\t\t\t\treturn fallback && fallback(node, params, intro);\n\t\t\t};\n\t\t};\n\t}\n\treturn [transition(to_send, to_receive, false), transition(to_receive, to_send, true)];\n}\n","<script>\n import { fly } from 'svelte/transition';\n\n let {\n message,\n type = 'info',\n children\n } = $props();\n</script>\n\n<div\n class=\"notification\"\n class:error={ type === 'error' }\n class:warning={ type === 'warning' }\n transition:fly\n>\n <div class=\"heading\">{ message }</div>\n <div class=\"detail\">\n {@render children?.() }\n </div>\n</div>\n\n<style lang=\"scss\">\n\n @import \"variables\";\n\n .notification {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: $gray-600;\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5;\n list-style: none;\n width: 384px;\n max-width: calc(100vw - 32px);\n padding: 16px 24px;\n overflow: hidden;\n line-height: 1.5;\n background: #fff;\n border-radius: 3px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n border-left: solid 4px $info;\n\n &.error {\n border-left-color: $danger;\n }\n\n &.warning {\n border-left-color: $warning;\n }\n }\n\n .notification + .notification {\n margin-top: 16px;\n }\n\n .heading {\n color: $gray-900;\n font-weight: normal;\n font-size: 1.2em;\n margin-bottom: 5px;\n }\n</style>","<script>\n function isLight(color) {\n /* eslint no-bitwise: \"off\" */\n\n color = +('0x' + color.slice(1).replace(color.length < 5 && /./g, '$&$&'));\n\n const r = color >> 16,\n g = (color >> 8) & 255,\n b = color & 255;\n\n const hsp = Math.sqrt(\n 0.299 * (r * r) +\n 0.587 * (g * g) +\n 0.114 * (b * b)\n );\n\n return hsp > 145;\n }\n\n let {\n title = '',\n name,\n color,\n clazz = '',\n onclick,\n href = null\n } = $props();\n\n const inverted = $derived(color && isLight(color));\n</script>\n\n{#if href}\n <a\n href={ href }\n target=\"_blank\"\n title={ title || name }\n rel=\"noopener noreferrer\"\n class:inverted={ inverted }\n class=\"tag { clazz }\"\n style=\"background-color: { color }\"\n onclick={ onclick }\n >{ name }</a>\n{:else}\n <button\n class:inverted={ inverted }\n class=\"tag { clazz }\"\n class:clickable={ onclick }\n style=\"background-color: { color }\"\n onclick={ onclick }\n title={ title || name }\n >{ name }</button>\n{/if}\n\n<style lang=\"scss\">\n .tag {\n list-style: none;\n display: inline-block;\n height: auto;\n\n margin: 0 4px 4px 0;\n padding: 2px 7px;\n\n font-size: 12px;\n font-weight: 400;\n\n white-space: nowrap;\n\n overflow: hidden;\n text-overflow: ellipsis;\n\n color: white;\n background: #fafafa;\n border-radius: 6px;\n border: none;\n\n text-decoration: none;\n\n &:not(a) {\n cursor: default;\n }\n\n &.inverted {\n color: #000;\n }\n }\n\n :not(a.tag, .tag.clickable) {\n cursor: default;\n }\n</style>","<script>\n let {\n item\n } = $props();\n\n const merged = $derived(item.merged);\n const _open = $derived(item.state === 'open');\n const closed = $derived(item.state === 'closed');\n const draft = $derived(item.draft || false);\n</script>\n\n{#if closed}\n\n {#if merged}\n <svg class=\"pull-request-icon merged\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M5 3.254V3.25v.005a.75.75 0 110-.005v.004zm.45 1.9a2.25 2.25 0 10-1.95.218v5.256a2.25 2.25 0 101.5 0V7.123A5.735 5.735 0 009.25 9h1.378a2.251 2.251 0 100-1.5H9.25a4.25 4.25 0 01-3.8-2.346zM12.75 9a.75.75 0 100-1.5.75.75 0 000 1.5zm-8.5 4.5a.75.75 0 100-1.5.75.75 0 000 1.5z\"></path>\n </svg>\n {:else}\n <svg class=\"pull-request-icon closed\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M10.72 1.227a.75.75 0 011.06 0l.97.97.97-.97a.75.75 0 111.06 1.061l-.97.97.97.97a.75.75 0 01-1.06 1.06l-.97-.97-.97.97a.75.75 0 11-1.06-1.06l.97-.97-.97-.97a.75.75 0 010-1.06zM12.75 6.5a.75.75 0 00-.75.75v3.378a2.251 2.251 0 101.5 0V7.25a.75.75 0 00-.75-.75zm0 5.5a.75.75 0 100 1.5.75.75 0 000-1.5zM2.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.25 1a2.25 2.25 0 00-.75 4.372v5.256a2.251 2.251 0 101.5 0V5.372A2.25 2.25 0 003.25 1zm0 11a.75.75 0 100 1.5.75.75 0 000-1.5z\"></path></svg>\n {/if}\n\n{:else}\n\n {#if draft}\n <svg class=\"pull-request-icon open draft\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M2.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.25 1a2.25 2.25 0 00-.75 4.372v5.256a2.251 2.251 0 101.5 0V5.372A2.25 2.25 0 003.25 1zm0 11a.75.75 0 100 1.5.75.75 0 000-1.5zm9.5 3a2.25 2.25 0 100-4.5 2.25 2.25 0 000 4.5zm0-3a.75.75 0 100 1.5.75.75 0 000-1.5z\"></path><path d=\"M14 7.5a1.25 1.25 0 11-2.5 0 1.25 1.25 0 012.5 0zm0-4.25a1.25 1.25 0 11-2.5 0 1.25 1.25 0 012.5 0z\"></path>\n </svg>\n {:else}\n <svg class=\"pull-request-icon open\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M7.177 3.073L9.573.677A.25.25 0 0110 .854v4.792a.25.25 0 01-.427.177L7.177 3.427a.25.25 0 010-.354zM3.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122v5.256a2.251 2.251 0 11-1.5 0V5.372A2.25 2.25 0 011.5 3.25zM11 2.5h-1V4h1a1 1 0 011 1v5.628a2.251 2.251 0 101.5 0V5A2.5 2.5 0 0011 2.5zm1 10.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.75 12a.75.75 0 100 1.5.75.75 0 000-1.5z\"></path>\n </svg>\n {/if}\n\n{/if}\n\n<style lang=\"scss\">\n\n .pull-request-icon {\n margin-right: 3px;\n\n &.open {\n color: #1a7f37;\n }\n\n &.closed {\n color: #cf222e;\n }\n\n &.merged {\n color: #8250df;\n }\n\n &.draft {\n color: #57606a;\n }\n }\n</style>","<script>\n let {\n name,\n state = '',\n state_reason = '',\n className = ''\n } = $props();\n</script>\n\n{#if name === 'issue' || name === 'linked-to' }\n\n {#if state === 'closed'}\n\n {#if state_reason === 'not_planned' }\n <svg class=\"icon depends-on closed not-planned { className }\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\">\n <path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zm3.28 5.78a.75.75 0 00-1.06-1.06l-5.5 5.5a.75.75 0 101.06 1.06l5.5-5.5z\"></path>\n </svg>\n {:else}\n <svg class=\"icon issue closed { className }\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path d=\"M11.28 6.78a.75.75 0 00-1.06-1.06L7.25 8.69 5.78 7.22a.75.75 0 00-1.06 1.06l2 2a.75.75 0 001.06 0l3.5-3.5z\"></path><path fill-rule=\"evenodd\" d=\"M16 8A8 8 0 110 8a8 8 0 0116 0zm-1.5 0a6.5 6.5 0 11-13 0 6.5 6.5 0 0113 0z\"></path>\n </svg>\n {/if}\n\n {:else}\n <svg class=\"icon issue { className }\" class:open={ state === 'open' } viewBox=\"0 0 16 16\" width=\"1em\" height=\"1em\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path d=\"M8 9.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z\"></path><path fill-rule=\"evenodd\" d=\"M8 0a8 8 0 100 16A8 8 0 008 0zM1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0z\"></path>\n </svg>\n {/if}\n\n{/if}\n\n{#if name === 'depends-on'}\n\n {#if state === 'closed'}\n {#if state_reason === 'not_planned' }\n <svg class=\"icon depends-on closed not-planned { className }\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\">\n <path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zm3.28 5.78a.75.75 0 00-1.06-1.06l-5.5 5.5a.75.75 0 101.06 1.06l5.5-5.5z\"></path>\n </svg>\n {:else}\n <svg class=\"icon depends-on closed not-planned { className }\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path d=\"M8 9.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z\"></path><path fill-rule=\"evenodd\" d=\"M8 0a8 8 0 100 16A8 8 0 008 0zM1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0z\"></path>\n </svg>\n {/if}\n {:else}\n <svg class=\"icon depends-on { className } open\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path d=\"M1.5 8a6.5 6.5 0 0113 0A.75.75 0 0016 8a8 8 0 10-8 8 .75.75 0 000-1.5A6.5 6.5 0 011.5 8z\"></path><path d=\"M8 9.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm3.573 5.823l-2.896-2.896a.25.25 0 010-.354l2.896-2.896a.25.25 0 01.427.177V11.5h3.25a.75.75 0 010 1.5H12v2.146a.25.25 0 01-.427.177z\"></path>\n </svg>\n {/if}\n\n{/if}\n\n{#if name === 'epic'}\n <svg class=\"icon epic { state_reason === 'not_planned' ? 'not-planned' : '' } { className }\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path d=\"M8.006 1.078a.748.748 0 0 0-.477.172L3.64 4.36l-.002.002-.088.07h.012c-.344.32-.561.773-.561 1.28v8.538a.75.75 0 0 0 1.227.578L8 11.723l3.773 3.105A.75.75 0 0 0 13 14.25V5.711c0-.527-.234-1-.604-1.32h-.002l-.01-.008a1.76 1.76 0 0 0-.075-.062L8.482 1.25a.748.748 0 0 0-.476-.173Zm0 1.723.002.002L11.4 5.516h.002a.246.246 0 0 1 .098.195v6.95l-3.023-2.49a.749.749 0 0 0-.954 0L4.5 12.662V5.71c0-.082.04-.152.102-.197h.002c1.135-.903 3.402-2.713 3.402-2.713Z\"/>\n </svg>\n{/if}\n\n<style lang=\"scss\">\n .icon {\n margin-right: 3px;\n\n &.closed {\n color: #8250df;\n }\n\n &.open {\n color: #1a7f37;\n }\n\n &.not-planned {\n color: #6e7781\n }\n }\n</style>","<script>\n let {\n item\n } = $props();\n\n const check_runs = $derived(item.check_runs || []);\n const statuses = $derived(item.statuses || []);\n\n const check_run_result_map = {\n failure: 'failed',\n success: 'succeeded',\n in_progress: 'in progress',\n queued: 'queued',\n action_required: 'action required'\n };\n</script>\n\n{#if check_runs.length || statuses.length}\n <div class=\"card-status\">\n\n {#each check_runs as check_run}\n <a\n class=\"state\"\n class:success={ check_run.conclusion === 'success' || check_run.status === 'in_progress' }\n class:failure={ check_run.conclusion === 'failure' }\n class:action-required={ check_run.conclusion === 'action_required' }\n class:striped={ check_run.status === 'in_progress' || check_run.status === 'queued' }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n title={ `${ check_run.name } — ${check_run_result_map[check_run.conclusion] || check_run_result_map[check_run.status] }` }\n href={ check_run.html_url }\n ><span>{check_run.name} — {check_run_result_map[check_run.conclusion] || check_run_result_map[check_run.status] }</span></a>\n {/each}\n\n {#each statuses as status}\n <a\n class=\"state\"\n class:success={ status.state === 'success' || status.state === 'pending' }\n class:failure={ status.state === 'failure' }\n class:action-required={ status.state === 'error' }\n class:striped={ status.state === 'pending' }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n title={ `${ status.context } — ${status.description}` }\n href={ status.target_url }\n ><span>{ status.context } — {status.description}</span></a>\n {/each}\n </div>\n{/if}\n\n\n<style lang=\"scss\">\n\n @import \"variables\";\n\n $color-success: $success;\n $color-action-required: $warning;\n $color-failure: $danger;\n\n /*\n $color-success: #77da8e;\n $color-failure: #da8077;\n $color-action-required: #dac977;\n */\n\n @mixin colored-scale($color) {\n background-color: scale-color($color, $lightness: +40%);\n box-shadow: 0 1px 2px 0px scale-color($color, $saturation: -20%, $alpha: -70%);\n }\n\n .card-status {\n display: flex;\n flex-direction: row;\n align-items: stretch;\n height: 3px;\n\n width: auto;\n margin: 3px -8px -4px;\n }\n\n .state {\n flex: 1;\n\n background-color: $gray-500;\n\n > span {\n display: none;\n }\n\n &.striped {\n background-image: linear-gradient(\n 45deg,\n rgba(255,255,255,.15) 25%,\n transparent 25%,\n transparent 50%,\n rgba(255,255,255,.15) 50%,\n rgba(255,255,255,.15) 75%,\n transparent 75%,\n transparent\n );\n\n animation: progress-bar-stripes 1s linear infinite;\n\n background-size: 1rem 1rem;\n }\n\n &.success {\n @include colored-scale($color-success);\n }\n\n &.failure {\n @include colored-scale($color-failure);\n }\n\n &.action-required {\n @include colored-scale($color-action-required);\n }\n }\n\n .state + .state {\n margin-left: 1px;\n }\n\n @keyframes progress-bar-stripes {\n from { background-position: $progress-height 0; }\n to { background-position: 0 0; }\n }\n</style>","<script>\n\n import {\n isAddFilterClick,\n isApplyFilterClick\n } from './shortcuts';\n\n let {\n item,\n onSelect\n } = $props();\n\n const number = $derived(item.number);\n const repository = $derived(item.repository);\n const repositoryName = $derived(`${repository.owner.login}/${repository.name}`);\n const repoUrl = $derived(`https://github.com/${ repositoryName }`);\n\n const assignees = $derived(item.assignees);\n\n const comments = $derived(\n (\n Array.isArray(item.comments) ? item.comments : []\n ).map(comment => {\n const {\n user,\n html_url\n } = comment;\n\n return {\n state: 'commented',\n user,\n html_url\n };\n })\n );\n\n const requested_reviewers = $derived(item.requested_reviewers || []);\n\n const reviews = $derived(\n Object.values(\n [].concat(comments, item.reviews || [])\n .filter(review => !requested_reviewers.find(reviewer => reviewer.login === review.user.login))\n .reduce((byUser, review) => {\n\n const existingReview = byUser[review.user.login];\n\n // keep last definitive review (approved, changes_requested)\n // to match GitHub display and behavior\n if (\n !existingReview ||\n existingReview.state === 'commented' ||\n review.state !== 'commented'\n ) {\n byUser[review.user.login] = review;\n }\n\n return byUser;\n }, {})\n )\n );\n\n const stateToVerb = {\n changes_requested: 'requested changes',\n approved: 'approved',\n commented: 'commented',\n dismissed: 'dismissed his review'\n };\n\n function handleSelection(qualifier, value) {\n\n return onSelect && function(event) {\n\n if (!isApplyFilterClick(event)) {\n return;\n }\n\n event.preventDefault();\n\n onSelect(qualifier, value, isAddFilterClick(event));\n };\n }\n</script>\n\n{#each requested_reviewers as reviewer}\n <a\n class=\"assignee requested-reviewer\"\n title=\"{ reviewer.login } requested for review\"\n href={ reviewer.html_url }\n onclick={ handleSelection('involves', reviewer.login) }\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n <img src=\"{ reviewer.avatar_url }&s=40\" alt=\"{ reviewer.login } avatar\" />\n <div class=\"icon-shadow\"></div>\n </a>\n{/each}\n\n{#each reviews as review}\n <a\n class=\"assignee reviewer\"\n class:approved={ review.state === 'approved' }\n class:requested-changes={ review.state === 'changes_requested' }\n class:commented={ review.state === 'commented' || review.state === 'dismissed' }\n title=\"{ review.user.login } { stateToVerb[review.state] }\"\n href={ review.html_url || `${repoUrl}/pull/${number}#pullrequestreview-${review.id}` }\n onclick={ handleSelection('involves', review.user.login) }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <img src=\"{ review.user.avatar_url }&s=40\" alt=\"{ review.user.login } avatar\" />\n <div class=\"icon-shadow\"></div>\n </a>\n{/each}\n\n{#each assignees as assignee}\n <a\n class=\"assignee\"\n title=\"{ assignee.login } assigned\"\n onclick={ handleSelection('involves', assignee.login) }\n href={ assignee.html_url }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <img src=\"{ assignee.avatar_url }&s=40\" alt=\"{ assignee.login } avatar\" />\n <div class=\"icon-shadow\"></div>\n </a>\n{/each}\n\n<style lang=\"scss\">\n @import \"variables\";\n\n $separatorColor: white;\n\n @mixin review-badge($color) {\n\n &:before {\n content: '';\n display: block;\n background: $color;\n box-shadow: 0 0 0 2px $separatorColor;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n position: absolute;\n top: -2px;\n left: -2px;\n z-index: 1;\n }\n }\n\n .assignee {\n box-sizing: border-box;\n margin: 0;\n font-size: 14px;\n position: relative;\n display: flex;\n text-align: center;\n border-radius: 2px;\n\n margin-left: 3px;\n transition: margin .1s;\n\n height: 18px;\n\n img {\n height: 100%;\n border-radius: 2px;\n vertical-align: unset;\n }\n\n .icon-shadow {\n position: absolute;\n display: none;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n box-shadow: inset 0 0 2px 0 rgba(20, 20, 20, 0.3);\n border-radius: 2px;\n }\n\n &.requested-reviewer {\n @include review-badge(#bf8700);\n }\n\n &.commented {\n @include review-badge($info);\n }\n\n &.approved {\n @include review-badge($success);\n }\n\n &.requested-changes {\n @include review-badge($danger);\n }\n\n }\n\n .assignee + .assignee {\n margin-left: -6px;\n box-shadow: 0 0 0 1px $separatorColor;\n }\n\n :global {\n .hovered > .header {\n .assignee + .assignee {\n margin-left: 3px !important;\n box-shadow: none;\n }\n }\n }\n</style>","<script>\n import PullRequestIcon from './components/PullRequestIcon.svelte';\n import LinkIcon from './components/LinkIcon.svelte';\n\n import CollaboratorLinks from './CollaboratorLinks.svelte';\n\n import {\n isApplyFilterClick,\n isAddFilterClick\n } from './shortcuts';\n\n let {\n children,\n item,\n ref,\n onSelect,\n hovered = false,\n type\n } = $props();\n\n const number = $derived(item.number);\n const title = $derived(item.title);\n const repository = $derived(item.repository);\n const pull_request = $derived(item.pull_request);\n const state = $derived(item.state);\n const state_reason = $derived(item.state_reason);\n\n const repositoryName = $derived(`${repository.owner.login}/${repository.name}`);\n\n const cardUrl = $derived(`https://github.com/${ repositoryName }/issues/${ number }${ ref || '' }`);\n\n const linkTitle = $derived(({\n CHILD_OF: 'Child of',\n DEPENDS_ON: 'Depends on',\n PARENT_OF: 'Parent of',\n CLOSED_BY: 'Closed by',\n REQUIRED_BY: 'Required by',\n CLOSES: 'Closes',\n LINKED_TO: 'Linked to',\n LINKED_BY: 'Linked by'\n })[type] || type);\n\n function handleSelection(qualifier, value) {\n\n return onSelect && function(event) {\n\n if (!isApplyFilterClick(event)) {\n return;\n }\n\n event.preventDefault();\n\n onSelect(qualifier, value, isAddFilterClick(event));\n };\n }\n</script>\n\n<div class=\"card-link\"\n class:hovered={ hovered }\n onmouseenter={ () => hovered = true }\n onmouseleave={ () => hovered = false }\n role=\"paragraph\"\n>\n <div class=\"header\">\n <a href={ cardUrl }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"issue-number\"\n onclick={ handleSelection('ref', item.key) }\n title=\"{ linkTitle } { repositoryName }#{ number }\"\n >\n {#if pull_request }\n <PullRequestIcon item={ item } />\n {:else}\n {#if type === 'PARENT_OF'}\n <LinkIcon name=\"issue\" state={ state } state_reason={ state_reason } />\n {:else if type === 'CHILD_OF'}\n <LinkIcon name=\"epic\" state_reason={ state_reason } />\n {:else if type === 'DEPENDS_ON' || type === 'CLOSED_BY' }\n <LinkIcon name=\"depends-on\" state={ state } state_reason={ state_reason } />\n {:else if type === 'REQUIRED_BY' || type === 'CLOSES' }\n {#if state === 'open'}\n <LinkIcon name=\"linked-to\" state={ state } state_reason={ state_reason } />\n {:else}\n <LinkIcon name=\"issue\" state={ state } state_reason={ state_reason } />\n {/if}\n {:else if type === 'LINKED_TO'}\n <LinkIcon name=\"linked-to\" state={ state } state_reason={ state_reason } />\n {:else}\n <LinkIcon name=\"issue\" state={ state } state_reason={ state_reason } />\n {/if}\n {/if}\n\n { number }\n </a>\n\n <span class=\"short-title\" title={ title }>{ title }</span>\n\n <span class=\"collaborator-links\">\n <CollaboratorLinks item={ item } onSelect={ onSelect } />\n </span>\n </div>\n\n {@render children?.()}\n</div>\n\n<style lang=\"scss\">\n @import \"./Card\";\n\n .card-link {\n border-top: solid 1px #F0F0F0;\n margin-top: 2px;\n padding-top: 2px;\n }\n\n .card-link .short-title {\n flex: 1;\n }\n\n :global {\n .card-link .epic {\n color: #1d76db;\n }\n }\n</style>","<script>\n import {\n isPull,\n isOpenOrMerged,\n noDuplicates\n } from './util';\n\n import {\n isApplyFilterClick,\n isAddFilterClick\n } from './shortcuts';\n\n import Tag from './components/Tag.svelte';\n import PullRequestIcon from './components/PullRequestIcon.svelte';\n import EpicIcon from './components/EpicIcon.svelte';\n import LinkIcon from './components/LinkIcon.svelte';\n\n import CardStatus from './CardStatus.svelte';\n import CollaboratorLinks from './CollaboratorLinks.svelte';\n\n import CardLink from './CardLink.svelte';\n\n const linkOrder = {\n 'DEPENDS_ON': 1,\n 'CLOSED_BY': 2,\n 'PARENT_OF': 3,\n 'REQUIRED_BY': 4,\n 'LINKED_TO': 5,\n 'CHILD_OF': 6\n };\n\n let {\n item,\n className,\n onSelect\n } = $props();\n\n let showChildren = $state.raw(false);\n\n let hovered = $state.raw(false);\n\n const number = $derived(item.number);\n const title = $derived(item.title);\n const repository = $derived(item.repository);\n const milestone = $derived(item.milestone);\n const labels = $derived(item.labels.filter(l => !l.column_label));\n const links = $derived(item.links || []);\n const pull_request = $derived(item.pull_request);\n const state_reason = $derived(item.state_reason);\n\n const handleSelection = $derived(\n onSelect ? (qualifier, value) => {\n return function selectionHandler(event) {\n\n if (!isApplyFilterClick(event)) {\n return;\n }\n\n event.preventDefault();\n\n onSelect(qualifier, value, isAddFilterClick(event));\n };\n } : () => null\n );\n\n const sortedLinks = $derived(\n links.slice().sort(\n (a, b) => {\n return linkOrder[a.type] - linkOrder[b.type];\n }\n )\n );\n\n const embeddedLinks = $derived(\n sortedLinks.filter(\n (link) => !isClosingPull(link) && link.type !== 'LINKED_BY'\n )\n );\n\n const shownLinks = $derived(\n embeddedLinks.filter(link => showChildren || link.type !== 'PARENT_OF')\n );\n\n const childLinks = $derived(\n embeddedLinks.filter(l => l.type === 'PARENT_OF')\n );\n\n const completedChildLinks = $derived(\n childLinks.filter(l => l.target.state === 'closed')\n );\n\n const prLinks = $derived(\n sortedLinks.filter(\n link => isClosingPull(link) && isOpenOrMerged(link.target)\n ).filter(\n noDuplicates(link => link.target.id + link.ref)\n )\n );\n\n const repositoryName = $derived(`${repository.owner.login}/${repository.name}`);\n\n const repoUrl = $derived(`https://github.com/${ repositoryName }`);\n const milestoneUrl = $derived(milestone && (milestone.html_url || `${repoUrl}/milestone/${milestone.number}`));\n const cardUrl = $derived(item.html_url || `${repoUrl}/issues/${number}`);\n\n function isClosingPull(link) {\n const {\n type,\n target\n } = link;\n\n return isPull(target) && (type === 'CLOSED_BY' || type === 'DEPENDS_ON');\n }\n</script>\n\n<div class=\"board-card-container { className }\">\n <div class=\"board-card\"\n class:hovered={ hovered }\n onmouseenter={ () => hovered = true }\n onmouseleave={ () => hovered = false }\n role=\"button\"\n aria-roledescription=\"draggable card\"\n tabindex=\"0\"\n >\n <div class=\"header\">\n <a href={ cardUrl }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"issue-number\"\n title=\"{ repositoryName }#{ number }\"\n onclick={ handleSelection('ref', item.key) }\n >\n\n {#if childLinks.length}\n <EpicIcon />\n {:else if pull_request}\n <PullRequestIcon item={ item } />\n {:else if state_reason === 'not_planned'}\n <LinkIcon name=\"issue\" state=\"closed\" state_reason={ state_reason } />\n {/if}\n\n { number }\n </a>\n\n <span class=\"repository\" title={ repositoryName }>{ repositoryName }</span>\n\n <span class=\"collaborator-links\">\n <CollaboratorLinks item={ item } onSelect={ onSelect } />\n </span>\n </div>\n <div class=\"title\">\n { title }\n </div>\n {#if childLinks.length}\n <button\n class=\"btn btn-link progress\"\n onclick={ () => showChildren = !showChildren }\n title=\"{ completedChildLinks.length } of { childLinks.length } child tasks completed\"\n >\n <svg class=\"icon\" width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M2.5 1.75a.25.25 0 01.25-.25h8.5a.25.25 0 01.25.25v7.736a.75.75 0 101.5 0V1.75A1.75 1.75 0 0011.25 0h-8.5A1.75 1.75 0 001 1.75v11.5c0 .966.784 1.75 1.75 1.75h3.17a.75.75 0 000-1.5H2.75a.25.25 0 01-.25-.25V1.75zM4.75 4a.75.75 0 000 1.5h4.5a.75.75 0 000-1.5h-4.5zM4 7.75A.75.75 0 014.75 7h2a.75.75 0 010 1.5h-2A.75.75 0 014 7.75zm11.774 3.537a.75.75 0 00-1.048-1.074L10.7 14.145 9.281 12.72a.75.75 0 00-1.062 1.058l1.943 1.95a.75.75 0 001.055.008l4.557-4.45z\"></path>\n </svg>\n <div class=\"text\">\n { completedChildLinks.length } of { childLinks.length }\n </div>\n <div class=\"bar\">\n <div class=\"indicator\" style=\"width: { completedChildLinks.length / childLinks.length * 100 }%\"></div>\n </div>\n </button>\n {/if}\n <div class=\"footer\">\n {#if milestone}\n <Tag\n clazz=\"tag milestone\"\n name={ milestone.title }\n href={ milestoneUrl }\n title={ milestone.title }\n onclick={ handleSelection('milestone', milestone.title) }\n />\n {/if}\n\n {#each labels as { name, color }}\n <Tag\n clazz=\"tag label\"\n color=\"#{ color }\"\n name={ name }\n title={ name }\n onclick={ handleSelection('label', name) }\n />\n {/each}\n\n <div class=\"links\">\n <a href={ cardUrl } title=\"View on GitHub\" aria-label=\"View on GitHub\" target=\"_blank\" rel=\"noopener noreferrer\">\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 16\" version=\"1.1\" aria-hidden=\"true\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z\"></path>\n </svg>\n </a>\n </div>\n </div>\n\n {#if shownLinks.length}\n <div class=\"board-card-links embedded\">\n {#each shownLinks as link}\n <CardLink item={ link.target } type={ link.type } ref={ link.ref } onSelect={ onSelect } />\n {/each}\n </div>\n {/if}\n\n <CardStatus item={ item } />\n </div>\n\n {#if prLinks.length}\n <div class=\"board-card-links attached\">\n {#each prLinks as link}\n <CardLink item={ link.target } type={ link.type } ref={ link.ref } onSelect={ onSelect }>\n <CardStatus item={ link.target } />\n </CardLink>\n {/each}\n </div>\n {/if}\n\n</div>\n\n<style lang=\"scss\">\n @import \"variables\";\n\n @import \"./Card\";\n\n :global {\n .tag {\n &.label,\n &.milestone {\n margin-right: 4px;\n margin-bottom: 4px;\n }\n\n &.milestone {\n color: $gray-800 !important;\n border: solid 1px $gray-600;\n }\n }\n\n .card-link:first-child {\n border-top: none !important;\n margin-top: 1px !important;\n }\n }\n\n .board-card-links.attached {\n background: #F9F9F9;\n border-radius: 0 0 4px 4px;\n box-shadow: inset 0 3px 5px -2px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.1);\n margin-top: -6px;\n position: relative;\n padding: 7px 8px 4px 8px;\n }\n\n .progress {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 7px;\n padding: 0;\n\n cursor: pointer;\n text-decoration: none;\n\n svg {\n color: $gray-600;\n }\n\n .bar {\n border-radius: 3px;\n height: 5px;\n width: 80px;\n background: $gray-200;\n margin: auto 6px;\n\n .indicator {\n border-radius: 3px;\n background: $gray-600;\n height: 100%;\n }\n }\n\n .text {\n margin-left: 6px;\n font-size: 0.9rem;\n color: $gray-600;\n }\n }\n\n</style>","<script>\n import { onMount } from 'svelte';\n\n import { HintList } from './components';\n\n import { Id } from './util';\n\n const inputId = Id();\n\n let {\n repositories,\n header,\n onClose,\n onSelect\n } = $props();\n\n let input = null;\n\n let value = $state('');\n\n let mouseSelectedHint = $state.raw(null);\n let keyboardSelectedHint = $state.raw(null);\n\n const matchedHints = $derived(computeMatch(value, repositories));\n\n $effect(() => {\n keyboardSelectedHint = keyboardSelectedHint && matchedHints.find(\n hint => hint.name === keyboardSelectedHint.name\n ) || matchedHints[0];\n });\n\n const selectedHint = $derived(mouseSelectedHint || keyboardSelectedHint);\n\n function computeMatch(search, repositories) {\n\n console.time('RepositorySelect#computeMatch');\n\n const matchedHints = repositories.reduce((matchedHints, name) => {\n\n if (!name.toLowerCase().includes(search)) {\n return matchedHints;\n }\n\n const idx = name.indexOf(search);\n\n const hint = {\n name: name,\n parts: [\n {\n text: name.substring(0, idx)\n },\n {\n text: name.substring(idx, idx + search.length),\n matched: true\n },\n {\n text: name.substring(idx + search.length)\n }\n ],\n apply: (currentValue) => {\n\n return {\n val: name,\n idx: name.length\n };\n }\n };\n\n matchedHints.push(hint);\n\n return matchedHints;\n }, []);\n\n console.timeEnd('RepositorySelect#computeMatch');\n\n return matchedHints;\n }\n\n function applyHint(hint) {\n\n const {\n val,\n idx\n } = hint.apply(value);\n\n input.value = value = val;\n input.selectionEnd = input.selectionStart = idx;\n\n const [ owner, repo ] = val.split('/');\n\n return onSelect(owner, repo);\n }\n\n function nextHint(currentHint, direction) {\n\n const hints = (matchedHints || []);\n\n const currentIndex = hints.findIndex(hint => hint.name === currentHint.name);\n\n let nextIndex = currentIndex + direction;\n\n if (nextIndex < 0) {\n nextIndex = hints.length - 1;\n }\n\n if (nextIndex === hints.length) {\n nextIndex = 0;\n }\n\n return hints[nextIndex];\n }\n\n function handleInputKey(event) {\n\n const key = event.key;\n\n if (key === 'Enter') {\n if (keyboardSelectedHint) {\n applyHint(keyboardSelectedHint);\n event.preventDefault();\n }\n }\n\n if (key === 'ArrowUp') {\n keyboardSelectedHint = nextHint(keyboardSelectedHint, -1);\n event.preventDefault();\n }\n\n if (key === 'ArrowDown') {\n keyboardSelectedHint = nextHint(keyboardSelectedHint, 1);\n event.preventDefault();\n }\n\n if (key === 'Escape' && !value) {\n input.blur();\n\n event.preventDefault();\n }\n }\n\n onMount(() => {\n input.focus();\n });\n\n function checkClose(event) {\n\n if (event.key === 'Escape') {\n event.preventDefault();\n\n onClose();\n }\n }\n\n function checkSubmit(event) {\n event.preventDefault();\n\n if (!value) {\n return;\n }\n\n const [ owner, repo ] = value.split('/');\n\n if (!repo || !owner) {\n return;\n }\n\n return onSelect(owner, repo);\n }\n</script>\n\n<svelte:window onkeydown={ checkClose } />\n\n<div class=\"repository-select\">\n <div aria-hidden=\"true\" class=\"overlay\" onclick={ onClose }></div>\n\n <form class=\"issue-creator px-4 py-2\" onsubmit={ checkSubmit }>\n\n {@render header()}\n\n <div class=\"form-group dropdown-parent\">\n\n <input\n id={ inputId }\n bind:this={ input }\n bind:value={ value }\n onkeydown={ handleInputKey }\n placeholder=\"Choose repository\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n aria-label=\"Repository name input\"\n class=\"form-control form-control-lg\"\n type=\"text\"\n />\n\n {#if value && matchedHints.length }\n <div class=\"help-dropdown\">\n <HintList\n hints={ matchedHints }\n selectedHint={ selectedHint }\n onHover={ hint => mouseSelectedHint = hint }\n onBlur={ () => mouseSelectedHint = null }\n onSelect={ applyHint }\n />\n </div>\n {/if}\n </div>\n </form>\n\n</div>\n\n<style lang=\"scss\">\n\n @import './HelpDropdown';\n\n .repository-select {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n z-index: 10;\n }\n\n .overlay {\n width: 100%;\n height: 100%;\n\n background: rgba(30, 30, 30, .30);\n }\n\n .issue-creator {\n position: absolute;\n z-index: 2;\n width: 500px;\n max-width: 100%;\n\n background: white;\n top: 30%;\n left: 50%;\n transform: translate(-50%);\n\n line-height: 1.5;\n\n border-radius: 5px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n }\n</style>","export default class Api {\n\n moveIssue(id, column, before, after) {\n const body = JSON.stringify({\n id,\n before,\n after,\n column\n });\n\n const url = this.appURL('/board/issues/move');\n\n return fetchJSON(url, {\n method: 'POST',\n body\n });\n }\n\n listCards(filter) {\n const url = this.appURL(`/board/cards${buildQueryString(filter)}`);\n\n return fetchJSON(url);\n }\n\n getBoard() {\n const url = this.appURL('/board');\n\n return fetchJSON(url);\n }\n\n getLoggedInUser() {\n const url = this.appURL('/login_check');\n\n return fetchJSON(url);\n }\n\n listUpdates(filter, cursor) {\n const url = this.appURL(`/board/updates?cursor=${cursor}${buildQueryString(filter, '&')}`);\n\n return fetchJSON(url);\n }\n\n appURL(location) {\n const appBase = '/wuffle';\n\n return `${appBase}${location}`;\n }\n\n}\n\n\n// helpers ////////////////////\n\nfunction fetchJSON(url, options) {\n return fetch(url, {\n ...options,\n credentials: 'include'\n }).then(response => {\n const {\n ok,\n status\n } = response;\n\n if (!ok) {\n const error = new Error('HTTP ' + status);\n\n error.status = status;\n error.response = response;\n\n throw error;\n }\n\n return response;\n }).then(r => r.text()).then(t => JSON.parse(t));\n}\n\n\nfunction buildQueryString(filter, separator = '?') {\n if (filter) {\n return `${separator}s=${encodeURIComponent(filter)}`;\n } else {\n return '';\n }\n}","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2080%2080%22%3E%3Cpath%20d%3D%22M12%200h56c7%200%2012%205%2012%2012v56c0%207-5%2012-12%2012H12C5%2080%200%2075%200%2068V12C0%205%205%200%2012%200z%22%20fill%3D%22%23999%22%2F%3E%3Cpath%20d%3D%22M15%2010h21c3%200%205%202%205%205v6c0%203-2%205-5%205H15c-2%200-4-2-4-5v-6c0-3%202-5%204-5zm0%2020h21c3%200%205%202%205%205v6c0%202-2%204-5%204H15c-2%200-4-1-4-4v-6c0-3%202-5%204-5zm27%2022h21c2%200%204%202%204%205v6c0%202-2%204-4%204H42c-2%200-4-2-4-4v-6c0-3%202-5%204-5z%22%20fill%3D%22%23fff%22%2F%3E%3C%2Fsvg%3E\"","<script>\n import { onMount } from 'svelte';\n\n import Dragula from '@bpmn-io/draggle';\n\n\n import BoardFilter from './BoardFilter.svelte';\n\n import Avatar from './components/Avatar.svelte';\n import Loader from './components/Loader.svelte';\n\n import PoweredBy from './PoweredBy.svelte';\n\n import Notifications from './components/Notifications.svelte';\n import Notification from './components/Notification.svelte';\n\n import Card from './Card.svelte';\n\n import CreateIssue from './CreateIssue.svelte';\n\n import Api from './Api';\n\n import {\n isNewIssueShortcut,\n isLoginShortcut\n } from './shortcuts';\n\n import {\n Id,\n createLocalStore,\n createHistory,\n isClosingLink,\n isOpenOrMerged,\n isPull,\n periodic,\n throttle\n } from './util';\n\n import loaderImage from './logo-gray.svg';\n import errorImage from './error.svg';\n\n const DEFAULT_PER_COLUMN_RENDER_COUNT = 15;\n\n const POLL_KEY = 'Taskboard_polling';\n\n const api = new Api();\n const localStore = createLocalStore();\n const history = createHistory();\n\n const navId = Id();\n\n let name = $state('');\n let columns = $state([]);\n let items = $state({});\n\n let itemsById = $state({});\n\n let loading = $state(true);\n let updating = $state(0);\n let error = $state(null);\n let warnings = $state([]);\n\n let user = $state(null);\n let cursor = $state(null);\n\n let accessNotification = $state(false);\n\n let showCreate = $state(false);\n\n let renderCountByColumn = $state({});\n\n let filterOptions = $state({});\n\n const defaultCollapsed = $derived(\n columns.reduce((defaultCollapsed, column) => {\n defaultCollapsed[column.name] = column.collapsed;\n\n return defaultCollapsed;\n }, {})\n );\n\n let filter = $state(parseSearchFilter());\n\n let localCollapsed = $state(parseCollapsedColumns());\n\n const collapsed = $derived(\n {\n ...defaultCollapsed,\n ...localCollapsed\n }\n );\n\n $effect(() => updateBoardLocation(filter, localCollapsed));\n\n // shown items\n const shownItems = $derived(\n Object.keys(items).reduce((shownItems, column) => {\n\n const columnItems = items[column];\n\n shownItems[column] = columnItems.filter(item => !isClosingPull(item));\n\n return shownItems;\n }, {})\n );\n\n // actually rendered items\n const renderedItems = $derived(\n Object.keys(shownItems).reduce((renderedItems, column) => {\n\n const renderCount = renderCountByColumn[column] || DEFAULT_PER_COLUMN_RENDER_COUNT;\n const items = shownItems[column];\n\n renderedItems[column] = items.slice(0, renderCount);\n\n return renderedItems;\n }, {})\n );\n\n function action(name, options = {}) {\n\n return fn => {\n\n return fn()\n .then(result => {\n discardWarning(name);\n\n return result;\n })\n .catch(err => {\n return handleWarning(name, err, options);\n });\n };\n }\n\n function handleWarning(action, error, options) {\n console.error(`[action] [${action}] failed`, error);\n\n if (options.verbose === false) {\n return;\n }\n\n const index = warnings.findIndex(w => w.action === action);\n\n const warning = {\n action,\n error\n };\n\n if (index !== -1) {\n warnings = [\n ...warnings.slice(0, index),\n warning,\n ...warnings.slice(index + 1)\n ];\n } else {\n warnings = [\n ...warnings,\n warning\n ];\n }\n }\n\n function discardWarnings() {\n warnings = [];\n }\n\n function discardWarning(action) {\n warnings = warnings.filter(w => w.action !== action);\n }\n\n function handleError(_error) {\n console.error(_error);\n\n error = _error;\n }\n\n function discardError() {\n error = null;\n }\n\n function loadBoard() {\n discardError();\n discardWarnings();\n\n loading = true;\n\n return Promise.all([\n fetchBoard(),\n loginCheck(),\n fetchCards(filter)\n ]).then(_ => {\n discardError();\n }).catch(error => {\n handleError(error);\n }).finally(() => {\n loading = false;\n });\n }\n\n function setupHooks() {\n\n const poll = localStore.get(POLL_KEY, true);\n\n const teardownHooks = [\n\n // poll for issue updates every three seconds\n poll && periodic(pollUpdates, 1000 * 3),\n\n // check login every 1 minutes\n poll && periodic(loginCheck, 1000 * 60 * 1),\n\n // hook into history changes\n history.onPop(() => {\n const newFilter = parseSearchFilter();\n\n localCollapsed = parseCollapsedColumns();\n\n filterChanged(newFilter);\n })\n ];\n\n return () => teardownHooks.forEach(fn => fn && fn());\n }\n\n onMount(() => {\n loadBoard();\n setupHooks();\n });\n\n function applyFilter(qualifier, value, add) {\n\n if (!value.startsWith('\"')) {\n value = '\"' + value + '\"';\n }\n\n const criteria = value && `${qualifier}:${value}`;\n\n if (!criteria) {\n return;\n }\n\n let newFilter;\n\n const criteriaIndex = filter.indexOf(criteria);\n\n if (criteriaIndex === 0) {\n newFilter = filter.substring(criteria.length + 1);\n } else if (criteriaIndex > 0) {\n newFilter = filter.substring(0, criteriaIndex - 1) + filter.substring(criteriaIndex + criteria.length);\n } else {\n if (add && filter.trim()) {\n newFilter = `${filter} ${qualifier}:${value}`;\n } else {\n newFilter = criteria;\n }\n }\n\n return filterChanged(newFilter);\n }\n\n function filterChanged(value) {\n\n if (value === filter) {\n return;\n }\n\n if (value.trim() !== filter.trim()) {\n\n action('Fetching cards')(\n () => fetchCards(value)\n );\n }\n\n filter = value;\n }\n\n function parseSearchFilter() {\n if (typeof window === 'undefined') {\n return '';\n }\n\n const url = new URL(window.location.href);\n\n return url.searchParams.get('s') || '';\n }\n\n function parseCollapsedColumns() {\n if (typeof window === 'undefined') {\n return '';\n }\n\n const url = new URL(window.location.href);\n\n const collapsed = url.searchParams.get('c');\n\n if (!collapsed) {\n return {};\n }\n\n return collapsed.split(',').filter(c => c).reduce((collapsed, column) => {\n\n const split = column.split('!');\n\n collapsed[split[1] || split[0]] = split.length === 1;\n\n return collapsed;\n }, {});\n }\n\n function updateBoardLocation(filter, collapsed) {\n const ref = buildBoardLink(filter, collapsed);\n\n if (ref !== window.location.href) {\n history.push(ref);\n }\n }\n\n function buildBoardLink(filter, collapsed) {\n\n const url = new URL(window.location.href);\n\n const searchParams = url.searchParams;\n\n const searchParam = filter;\n const collapsedParam = Object.entries(collapsed).filter(([ key, value ]) => {\n return defaultCollapsed[key] !== value;\n }).map(\n ([ key, value ]) => (value ? '' : '!') + key\n ).join(',');\n\n if (searchParam) {\n searchParams.set('s', searchParam);\n } else {\n searchParams.delete('s');\n }\n\n if (collapsedParam) {\n searchParams.set('c', collapsedParam);\n } else {\n searchParams.delete('c');\n }\n\n return url.toString();\n }\n\n function loginCheck() {\n return action('Login check')(\n () => api.getLoggedInUser().then(newUser => {\n\n if (user && !newUser) {\n window.location.reload();\n } else {\n user = newUser;\n }\n })\n );\n }\n\n function fetchBoard() {\n const boardEl = document.querySelector('script[type=\"application/json+config\"]');\n\n if (boardEl) {\n const text = boardEl.textContent;\n\n if (text) {\n const result = JSON.parse(text);\n\n columns = result.columns;\n name = result.name;\n }\n }\n\n return api.getBoard().then(result => {\n columns = result.columns;\n name = result.name;\n });\n }\n\n function updateCards(_items, _cursor) {\n console.time('Taskboard#updateCards');\n\n const _itemsById = {};\n const _filterOptions = {};\n\n for (const columnItems of Object.values(_items)) {\n\n for (const item of columnItems) {\n const {\n id,\n user,\n milestone,\n assignees,\n labels,\n repository,\n requested_reviewers\n } = item;\n\n const repoOptions = _filterOptions['repo'] = _filterOptions['repo'] || {};\n\n repoOptions[repository.owner.login + '/' + repository.name] = true;\n\n if (milestone) {\n const milestoneOptions = _filterOptions['milestone'] = _filterOptions['milestone'] || {};\n\n milestoneOptions[milestone.title] = true;\n }\n\n if (user) {\n const authorOptions = _filterOptions['author'] = _filterOptions['author'] || {};\n\n authorOptions[user.login] = true;\n }\n\n assignees.forEach(assignee => {\n const assigneeOptions = _filterOptions['assignee'] = _filterOptions['assignee'] || {};\n\n assigneeOptions[assignee.login] = true;\n });\n\n if (requested_reviewers) {\n requested_reviewers.forEach(reviewer => {\n const reviewerOptions = _filterOptions['reviewer'] = _filterOptions['reviewer'] || {};\n\n reviewerOptions[reviewer.login] = true;\n });\n }\n\n labels.forEach(label => {\n\n if (!label.column_label) {\n const labelOptions = _filterOptions['label'] = _filterOptions['label'] || {};\n\n labelOptions[label.name] = true;\n }\n });\n\n _itemsById[id] = item;\n }\n\n }\n\n items = _items;\n itemsById = _itemsById;\n filterOptions = Object.entries(_filterOptions).reduce((opts, entry) => {\n\n const [ key, value ] = entry;\n\n opts[key] = Object.keys(value);\n\n return opts;\n }, {});\n\n cursor = _cursor;\n console.timeEnd('Taskboard#updateCards');\n }\n\n function fetchCards(newFilter) {\n\n updating++;\n\n return api.listCards(newFilter).then(result => {\n\n // do not apply updates for outdated filters\n if (newFilter !== filter) {\n return;\n }\n\n const {\n items,\n cursor\n } = result;\n\n updateCards(items, cursor);\n }).finally(() => updating--);\n }\n\n\n function pollUpdates() {\n\n if (updating) {\n return;\n }\n\n const currentFilter = filter;\n\n return action('Update check')(\n () => api.listUpdates(currentFilter, cursor).then(updates => {\n\n if (!updates.length) {\n return;\n }\n\n if (currentFilter !== filter) {\n return;\n }\n\n const {\n items: _items,\n itemsById: _itemsById,\n cursor: _cursor\n } = applyUpdates(updates, items, itemsById);\n\n items = _items;\n itemsById = _itemsById;\n cursor = _cursor;\n })\n );\n }\n\n function applyUpdates(updates, items, itemsById) {\n\n const cursor = updates[updates.length - 1].id;\n\n updates.forEach(update => {\n const {\n type,\n issue\n } = update;\n\n const {\n id\n } = issue;\n\n const from = itemsById[id];\n\n const to = type !== 'remove' && issue;\n\n items = {\n ...items,\n ...moveItem(items, issue, from, to)\n };\n\n // remove from index\n if (type === 'remove') {\n const {\n [id]: removedItem,\n ...remainingItems\n } = itemsById;\n\n itemsById = remainingItems;\n } else {\n\n // update in index\n itemsById = {\n ...itemsById,\n [id]: issue\n };\n }\n });\n\n return {\n cursor,\n itemsById,\n items\n };\n }\n\n const drake = Dragula({\n isContainer: (el) => {\n return el.matches('[data-column-id]');\n }\n });\n\n function getCardId(el) {\n const dataset = el.dataset;\n return dataset.cardId;\n }\n\n function getCardOrder(el) {\n const dataset = el.dataset;\n return parseFloat(dataset.cardOrder);\n }\n\n function getColumnId(el) {\n const dataset = el.dataset;\n return dataset.columnId;\n }\n\n function checkCancel(event) {\n if (event.key === 'Escape') {\n drake.cancel(true);\n }\n }\n\n drake.on('drag', () => {\n document.addEventListener('keydown', checkCancel);\n });\n\n drake.on('dragend', () => {\n document.removeEventListener('keydown', checkCancel);\n });\n\n drake.on('drop', (el, target, source, nextEl) => {\n const cardId = getCardId(el);\n const cardOrder = getCardOrder(el);\n\n const previousEl = el.previousElementSibling;\n\n const nextOrder = nextEl && getCardOrder(nextEl);\n const previousOrder = previousEl && getCardOrder(previousEl);\n\n const newOrder =\n previousOrder && nextOrder\n ? (previousOrder + nextOrder) / 2\n : previousOrder\n ? previousOrder + 731241.218\n : nextOrder\n ? nextOrder - 811231.691\n : -71271.88455;\n\n drake.cancel(true);\n\n handleCardDrop(\n itemsById[cardId],\n {\n order: cardOrder,\n column: getColumnId(source)\n },\n {\n order: newOrder,\n column: getColumnId(target)\n }\n );\n\n });\n\n function handleCardDrop(card, from, to) {\n\n const { before, after } = moveCard(card, from, to);\n\n return api.moveIssue(\n card.id,\n to.column,\n before && before.id,\n after && after.id\n ).catch(err => {\n console.warn('reverting card movement', err);\n\n accessNotification = user ? 'forbidden' : 'authentication-required';\n\n setTimeout(() => {\n accessNotification = false;\n }, 8000);\n\n moveCard(card, to, from);\n });\n }\n\n function removeItem(item, list = []) {\n const { id } = item;\n\n return list.filter(existing => existing.id !== id);\n }\n\n function insertItem(item, order, list = []) {\n const insertIdx = list.findIndex(existing => existing.order > order);\n\n if (insertIdx === -1) {\n return [ ...list, item ];\n }\n\n return [\n ...list.slice(0, insertIdx),\n item,\n ...list.slice(insertIdx)\n ];\n\n }\n\n function moveCard(card, from, to) {\n\n // temporarily update card with new column and ordering\n card.column = to.column;\n card.order = to.order;\n\n const updatedItems = moveItem(items, card, from, to);\n\n items = {\n ...items,\n ...updatedItems\n };\n\n const targetColumn = updatedItems[to.column];\n\n const cardIndex = targetColumn.findIndex(el => el.id === card.id);\n\n return {\n after: targetColumn[cardIndex - 1],\n before: targetColumn[cardIndex + 1]\n };\n }\n\n function moveItem(items, item, from, to) {\n\n const oldColumn = from && from.column;\n\n const newColumn = to && to.column;\n const newOrder = to && to.order;\n\n // remove from old column\n if (oldColumn) {\n const updatedColumn = removeItem(item, items[oldColumn]);\n\n items = {\n ...items,\n [oldColumn]: updatedColumn\n };\n }\n\n // add to new column\n if (newColumn) {\n const updatedColumn = insertItem(item, newOrder, items[newColumn]);\n\n items = {\n ...items,\n [newColumn]: updatedColumn\n };\n }\n\n return items;\n }\n\n function toggleCollapse(column) {\n\n localCollapsed = {\n ...localCollapsed,\n [column.name]: !collapsed[column.name]\n };\n }\n\n function isClosingPull(item) {\n return isPull(item) && isOpenOrMerged(item) && item.links.some(link => {\n return isClosingLink(link) && itemsById[link.target.id];\n });\n }\n\n function checkRender(columnName) {\n\n return throttle(function(event) {\n\n const node = event.target;\n\n const {\n scrollHeight,\n scrollTop,\n offsetHeight\n } = node;\n\n if (scrollTop + offsetHeight > scrollHeight * .95) {\n\n const columnItems = shownItems[columnName] || [];\n\n const columnRenderedCount = renderCountByColumn[columnName] || DEFAULT_PER_COLUMN_RENDER_COUNT;\n\n if (columnRenderedCount < columnItems.length) {\n\n renderCountByColumn = {\n ...renderCountByColumn,\n [columnName]: columnRenderedCount + DEFAULT_PER_COLUMN_RENDER_COUNT / 5\n };\n }\n }\n }, 5);\n }\n\n function openCreateIssue() {\n showCreate = true;\n }\n\n function closeCreateIssue() {\n showCreate = false;\n }\n\n function createIssue(owner, repo) {\n closeCreateIssue();\n\n window.open(\n `https://github.com/${owner}/${repo}/issues/new/choose`,\n '_blank'\n );\n }\n\n function handleGlobalKey(event) {\n\n if (isNewIssueShortcut(event)) {\n openCreateIssue();\n\n event.preventDefault();\n }\n\n if (isLoginShortcut(event)) {\n window.location.href = user ? '/wuffle/logout' : '/wuffle/login';\n\n event.preventDefault();\n }\n }\n</script>\n\n<svelte:window onkeydown={ handleGlobalKey } />\n\n<div class=\"taskboard\">\n\n <Loader shown={ loading }>\n <img src={ loaderImage } width=\"64\" alt=\"Loading\" />\n </Loader>\n\n <CreateIssue\n repositories={ filterOptions['repo'] }\n onCreate={ createIssue }\n open={ showCreate }\n onClose={ closeCreateIssue }\n />\n\n {#if error}\n <div class=\"taskboard-error\">\n\n <img src={ errorImage } width=\"128\" alt=\"An error occured\" />\n\n <p>We could not load the board.</p>\n\n <button class=\"btn btn-primary\" onclick={ () => loadBoard() }>\n Retry\n </button>\n </div>\n {/if}\n\n <Notifications>\n {#if !error}\n {#each warnings as warning}\n <Notification type=\"warning\" message=\"{ warning.action } failed\">\n Could not reach the board back-end. <a href>Reload board.</a>\n </Notification>\n {/each}\n {/if}\n\n {#if accessNotification}\n <Notification type=\"error\" message=\"Failed to move card\">\n {#if accessNotification === 'forbidden'}\n It seems like you do not have write access to the underlying GitHub repository.\n {:else}\n Please <a href=\"/wuffle/login\" title=\"Login via GitHub (l)\">login via GitHub</a> to interact with cards.\n {/if}\n </Notification>\n {/if}\n </Notifications>\n\n <PoweredBy />\n\n <nav class=\"navbar navbar-expand navbar-light taskboard-header\">\n\n <a class=\"navbar-brand m-0 mr-3 my-2\" href=\"/\" title=\"{ name } - Wuffle board\">\n <img src=\"./logo.svg\" height=\"30px\" alt=\"\" class=\"logo\" />\n </a>\n <button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\"#{navId}\" aria-controls={navId} aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n\n <div class=\"collapse navbar-collapse\" id={navId}>\n\n <form class=\"form-inline board-filter-parent my-2 my-lg-0\" onsubmit={ (e) => e.preventDefault() }>\n <BoardFilter\n value={ filter }\n completionOptions={ filterOptions }\n onChange={ filterChanged }\n placeholder={ 'Filter board...' }\n />\n </form>\n\n <form class=\"form-inline mx-3 my-2 my-sm-0\" onsubmit={ (e) => e.preventDefault() || openCreateIssue() }>\n <button class=\"btn btn-outline-primary\" type=\"submit\" title=\"Create new issue (n)\" aria-label=\"Create new issue (n)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" height=\"16\" fill=\"currentColor\"><path fill-rule=\"evenodd\" d=\"M7.75 2a.75.75 0 01.75.75V7h4.25a.75.75 0 110 1.5H8.5v4.25a.75.75 0 11-1.5 0V8.5H2.75a.75.75 0 010-1.5H7V2.75A.75.75 0 017.75 2z\"></path></svg>\n </button>\n </form>\n </div>\n\n <div class=\"taskboard-header-login ml-2\">\n {#if user}\n <a href=\"/wuffle/logout\" title={ `Logged in as ${user.login}. Logout (l)` }>\n <Avatar rounded>\n <img src=\"{ user.avatar_url }&s=40\" style=\"max-width: 100%\" alt=\"Logged in user avatar\" />\n </Avatar>\n </a>\n {:else}\n <a href=\"/wuffle/login\" title=\"Login with GitHub (l)\">\n <Avatar rounded>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" height=\"1.3em\" fill=\"currentColor\"><path d=\"M4.243 4.757a3.757 3.757 0 115.851 3.119 6.006 6.006 0 013.9 5.339.75.75 0 01-.715.784H2.721a.75.75 0 01-.714-.784 6.006 6.006 0 013.9-5.34 3.753 3.753 0 01-1.664-3.118z\"></path></svg>\n </Avatar>\n </a>\n {/if}\n </div>\n </nav>\n\n <main class=\"taskboard-board scroll-container-h\">\n\n {#if !error}\n {#each columns as column }\n <div class=\"taskboard-column\" class:collapsed={ collapsed[column.name] }>\n <div class=\"taskboard-column-header\">\n <button\n class=\"taskboard-column-collapse btn btn-link\"\n title=\"{ collapsed[column.name] ? 'Expand' : 'Collapse' } column\"\n onclick={ (e) => e.preventDefault() || toggleCollapse(column) }\n >\n {#if collapsed[column.name] }\n <svg viewBox=\"64 64 896 896\" height=\"1em\" aria-hidden=\"true\" fill=\"currentColor\"><path d=\"M602 548c0 4 4 8 8 8h186v74c0 6 7 9 11 6l150-120c3-3 3-8 0-11L807 386c-4-4-11-1-11 5v75H609c-4 0-7 3-7 7zM68 514l149 122c4 3 11 0 11-6v-76h186c4 0 8-2 8-6v-77c0-4-4-7-8-7H228v-75c0-6-7-9-11-5L68 503c-4 3-4 8 0 11z\"/></svg>\n {:else}\n <svg viewBox=\"64 64 896 896\" height=\"1em\" aria-hidden=\"true\" fill=\"currentColor\"><path d=\"M605 515l149 122c5 3 12 0 12-6v-76h186c4 0 7-2 7-6v-77c0-4-3-7-7-7H766v-75c0-6-7-9-12-5L605 504c-4 3-4 8 0 11zM65 547c0 4 3 8 7 8h186v74c0 6 7 9 12 6l149-120c4-3 4-8 0-11L270 385c-5-4-12-1-12 5v75H72c-4 0-7 3-7 7z\"/></svg>\n {/if}\n </button>\n <span class=\"taskboard-column-name\">\n { column.name }\n </span>\n <span class=\"taskboard-column-issue-count\">\n { (shownItems[column.name] || []).length }\n </span>\n </div>\n\n {#if !collapsed[column.name] }\n <div class=\"taskboard-column-items scroll-container-v\"\n data-column-id={ column.name }\n onscroll={ checkRender(column.name) }>\n\n {#each (renderedItems[column.name] || []) as item, index (item.id) }\n <div\n class=\"card-container\"\n data-card-id={ item.id }\n data-card-order={ item.order }\n >\n <Card\n item={item}\n onSelect={ applyFilter }\n />\n </div>\n {/each}\n\n </div>\n {/if}\n </div>\n {/each}\n {/if}\n </main>\n</div>\n\n<style lang=\"scss\">\n @import \"variables\";\n\n @import \"./Taskboard\";\n\n .muted {\n color: $gray-600;\n }\n\n .taskboard {\n position: relative;\n }\n</style>","import { mount } from 'svelte';\n\nimport Taskboard from './Taskboard.svelte';\n\nconsole.timeEnd('Wuffle#load');\n\nconsole.time('Taskboard#create');\n\nconst taskboard = mount(Taskboard, {\n target: document.body\n});\n\nconsole.timeEnd('Taskboard#create');\n\nexport default taskboard;","export function isClosingLink(link) {\n const {\n type\n } = link;\n\n return type === 'CLOSES';\n}\n\nexport function isClosedByLink(link) {\n const {\n type\n } = link;\n\n return type === 'CLOSED_BY';\n}","<script>\n let {\n className = '',\n shown = true,\n children\n } = $props();\n</script>\n\n<div class=\"loader { className }\" class:shown={ shown }>\n <div class=\"content\">\n {@render children?.() }\n </div>\n</div>\n\n<style lang=\"scss\">\n .loader {\n\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n text-align: center;\n z-index: 200;\n pointer-events: none;\n\n > .content {\n opacity: 0.3;\n transition: opacity 0.5s;\n }\n\n &.shown > .content {\n opacity: 1;\n\n animation: pulsate 1s infinite;\n animation-timing-function: ease-in-out;\n }\n\n &:not(.shown) > .content {\n opacity: 0;\n }\n }\n\n @keyframes pulsate {\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n\n 50% {\n transform: scale(0.9);\n opacity: 0.8;\n }\n\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n }\n</style>","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2080%2080%22%3E%3Cpath%20d%3D%22M12%200h56c7%200%2012%205%2012%2012v56c0%207-5%2012-12%2012H12C5%2080%200%2075%200%2068V12C0%205%205%200%2012%200z%22%20fill%3D%22%23d35f5f%22%2F%3E%3Cpath%20d%3D%22M30%2038l19%207c3%201%204%204%203%206l-2%206c-1%202-4%203-6%203l-20-8c-2-1-3-3-2-6l2-6c1-2%203-3%206-2z%22%20fill%3D%22%23fff%22%2F%3E%3Cpath%20d%3D%22M12%2066l18-10c2-1%205-1%206%202l3%205c1%202%201%205-1%206L19%2080c-2%201-5%200-6-2l-3-6c-1-2%200-4%202-6z%22%20fill%3D%22%23fff%22%2F%3E%3Cpath%20d%3D%22M46%2060l20%205c2%201%204%203%203%206l-1%206c-1%202-3%204-6%203l-20-6c-3%200-4-3-3-5l1-6c1-2%203-4%206-3z%22%20fill%3D%22%23fff%22%2F%3E%3C%2Fsvg%3E\""],"names":["is_array","Array","isArray","array_from","from","define_property","Object","defineProperty","get_descriptor","getOwnPropertyDescriptor","get_descriptors","getOwnPropertyDescriptors","object_prototype","prototype","array_prototype","get_prototype_of","getPrototypeOf","noop","DERIVED","EFFECT","RENDER_EFFECT","BLOCK_EFFECT","BRANCH_EFFECT","ROOT_EFFECT","BOUNDARY_EFFECT","UNOWNED","DISCONNECTED","CLEAN","DIRTY","MAYBE_DIRTY","INERT","DESTROYED","EFFECT_RAN","EFFECT_TRANSPARENT","LEGACY_DERIVED_PROP","HEAD_EFFECT","EFFECT_HAS_DERIVED","STATE_SYMBOL","Symbol","LEGACY_PROPS","LOADING_ATTR_SYMBOL","equals","value","this","v","safe_not_equal","a","b","safe_equals","legacy_mode_flag","EACH_ITEM_REACTIVE","EACH_INDEX_REACTIVE","EACH_IS_CONTROLLED","EACH_IS_ANIMATED","EACH_ITEM_IMMUTABLE","PROPS_IS_IMMUTABLE","PROPS_IS_RUNES","PROPS_IS_UPDATED","PROPS_IS_BINDABLE","PROPS_IS_LAZY_INITIAL","TRANSITION_GLOBAL","UNINITIALIZED","source","stack","f","reactions","version","state","active_reaction","derived_sources","push","push_derived_source","mutable_source","initial_value","immutable","s","component_context","l","set","is_runes","includes","Error","e.state_unsafe_mutation","internal_set","increment_version","mark_reactions","active_effect","new_deps","set_signal_status","schedule_effect","untracked_writes","set_untracked_writes","signal","status","runes","length","i","reaction","flags","hydrating","proxy","parent","prev","metadata","sources","Map","is_proxied_array","Proxy","_","prop","descriptor","configurable","enumerable","writable","e.state_descriptors_fixed","get","undefined","deleteProperty","target","ls","n","Number","isInteger","update_version","receiver","exists","Reflect","has","other_s","call","ownKeys","own_keys","filter","key","setPrototypeOf","e.state_prototype_fixed","d","$window","first_child_getter","next_sibling_getter","create_text","document","createTextNode","get_first_child","node","get_next_sibling","child","is_text","first_child","fragment","first","Comment","data","sibling","count","next_sibling","derived","fn","parent_derived","children","ctx","deps","derived_safe_equal","destroy_derived_children","destroy_derived","destroy_effect","execute_derived","prev_active_effect","set_active_effect","get_derived_parent_effect","update_reaction","update_derived","skip_reaction","remove_reactions","validate_effect","rune","e.effect_orphan","e.effect_in_unowned_derived","is_destroying_effect","e.effect_in_teardown","create_effect","type","sync","is_root","parent_effect","effect","deriveds","nodes_start","nodes_end","last","next","teardown","transitions","previously_flushing_effect","is_flushing_effect","set_is_flushing_effect","update_effect","e","parent_last","push_effect","user_effect","m","context","render_effect","template_effect","block","branch","execute_effect_teardown","previously_destroying_effect","previous_reaction","set_is_destroying_effect","set_active_reaction","destroy_effect_deriveds","destroy_effect_children","remove_dom","removed","end","remove","transition","stop","unlink_effect","pause_effect","callback","pause_children","run_out_transitions","remaining","check","out","local","is_global","resume_effect","resume_children","check_dirtiness","in","is_micro_task_queued","current_queued_micro_tasks","process_micro_tasks","tasks","slice","arr","run_all","queue_micro_task","queueMicrotask","is_throwing_error","last_scheduled_effect","queued_root_effects","flush_count","skipped_deps","current_version","dependencies","is_unowned","dependency","handle_error","error","previous_effect","should_rethrow_error","current","propagate_error","previous_deps","previous_skipped_deps","previous_untracked_writes","previous_skip_reaction","prev_derived_sources","previous_component_context","result","remove_reaction","index","indexOf","new_length","pop","start_index","destroy_block_effect_children","infinite_loop_guard","e.effect_update_depth_exceeded","flush_queued_effects","effects","process_deferred","previous_queued_root_effects","root_effects","collected_effects","process_effects","flush_queued_root_effects","current_effect","main_loop","is_branch","is_skippable_branch","parent_sibling","is_derived","e.state_unsafe_local_read","untrack","STATUS_MASK","update","props","p","c","x","u","r1","r2","component","context_stack_item","component_effects","component_effect","deep_read","visited","Set","EventTarget","add","Date","getTime","proto","descriptors","PASSIVE_EVENTS","is_passive_event","name","listening_to_form_reset","without_reactive_context","listen_to_event_and_reset_event","element","event","handler","on_reset","addEventListener","__on_r","evt","Promise","resolve","then","defaultPrevented","elements","capture","all_registered_events","root_event_handles","event_name","dom","passive","options","target_handler","handle_event_propagation","cancelBubble","startsWith","create_event","body","window","removeEventListener","delegate","events","handler_element","owner_document","ownerDocument","path","composedPath","current_target","path_idx","handled_at","__root","at_idx","handler_idx","throw_error","other_errors","parent_element","assignedSlot","parentNode","host","delegated","apply","currentTarget","create_fragment_from_html","html","elem","createElement","innerHTML","content","assign_nodes","start","template","is_fragment","use_import_node","has_start","clone","importNode","cloneNode","ns_template","ns","wrapped","root","createDocumentFragment","appendChild","comment","frag","createComment","anchor","append","before","should_intro","set_text","text","str","__t","nodeValue","document_listeners","mounted_components","WeakMap","if_block","elseif","consequent_effect","alternate_effect","condition","has_branch","set_branch","flag","update_branch","new_condition","each","get_collection","get_key","render_fn","fallback_fn","items","fallback","was_empty","collection","array","is_inert","seen","to_animate","item","is_animated","should_update","matched","stashed","measure","update_item","unfix","delete","j","move","link","k","create_item","to_destroy","destroy_length","controlled_anchor","fix","items_map","is_controlled","parent_node","textContent","clear","pause_effects","reconcile","dest","next_node","snippet","get_snippet","args","snippet_effect","action","get_value","payload","inited","deep_read_state","destroy","r","t","o","clsx","arguments","_clsx","set_attribute","attribute","skip_warning","attributes","__attributes","__styles","removeAttribute","setters","setters_cache","nodeName","element_proto","Element","get_setters","setAttribute","set_svg_class","hash","prev_class_name","__className","next_class_name","to_class","set_class","className","toggle_class","class_name","classList","contains","raf","tick","now","performance","run_tasks","forEach","task","size","dispatch_event","dispatchEvent","CustomEvent","css_property_to_camelcase","style","parts","split","map","word","toUpperCase","join","css_to_keyframe","css","keyframe","part","property","trim","linear","animate","counterpart","t2","on_finish","is_intro","aborted","direction","abort","deactivate","reset","duration","delay","easing","keyframes","styles","get_t","animation","onfinish","t1","delta","Math","abs","ceil","time","fulfill","loop","playState","fill","cancel","bind_value","input","is_reset","defaultValue","is_numberlike_input","to_number","selectionStart","selectionEnd","min","is_bound_this","bound_value","element_or_component","bind_this","get_parts","old_parts","is_store_binding","with_parent_branch","prop_value","bindable","lazy","is_store_sub","previous_is_store_binding","capture_store_binding","getter","is_entry_props","setter","fallback_value","fallback_dirty","fallback_used","get_fallback","e.props_invalid_value","derived_getter","legacy_parent","$$legacy","mutation","from_child","inner_current_value","current_value","parent_value","child_value","new_value","onMount","lifecycle_outside_component","cleanup","__svelte","R","globalThis","global","self","Ee","__esModule","hasOwnProperty","default","ze","setImmediate","setTimeout","le","Ke","Ue","on","once","_once","off","w","S","splice","emit","emitterSnapshot","shift","throws","y","async","Ve","we","qe","detail","foo","We","createEvent","initCustomEvent","bubbles","cancelable","createEventObject","ye","q","Je","test","Ze","et","$","Ce","Se","attachEvent","Oe","srcElement","preventDefault","returnValue","stopPropagation","which","keyCode","ut","wrapper","ct","detachEvent","tt","fabricate","initEvent","fireEvent","ft","N","ve","lt","vt","Te","lastIndex","RegExp","F","replace","I","C","documentElement","pt","A","Y","H","P","M","moves","pe","accepts","invalid","containers","isContainer","dt","copy","copySortSource","revertOnSpill","removeOnSpill","ignoreInputTextSelection","mirrorContainer","G","te","ne","ae","oe","Q","K","canMove","dragging","L","Xe","z","Ye","Z","ee","clientX","clientY","se","metaKey","ctrlKey","be","focus","slideFactorX","slideFactorY","elementFromPoint","g","getBoundingClientRect","left","de","top","st","width","ge","height","he","W","De","h","D","Re","ie","re","ue","me","removeChild","V","U","insertBefore","clearTimeout","B","ce","fe","O","T","E","X","Fe","navigator","pointerEnabled","mouseup","mousedown","mousemove","msPointerEnabled","touches","buttons","button","clientHeight","right","bottom","tagName","_e","contentEditable","nextElementSibling","nextSibling","nodeType","targetTouches","changedTouches","mt","pageX","pageY","uid","Id","LocalStore","serializedValue","localStorage","getItem","JSON","parse","console","warn","setItem","stringify","FakeLocalStore","History","url","history","pushState","onPop","FakeHistory","periodic","interval","canceled","timeout","run","success","err","isOpenOrMerged","issue","isOpen","merged","isMerged","isPull","pull_request","on_mousedown","handleMousedown","hint","$.get","$.each","ul","$$props","hints","$.index","$$anchor","$.toggle_class","span","$.set_text","selectedHint","lastSelectedHint","hook","scrollIntoView","hasModifier","shiftKey","altKey","isGlobal","isApplyFilterClick","isAddFilterClick","handleInput","position","triggerChanged","$.proxy","$.prop","completionOptions","userPresets","temporalPresets","staticValues","is","created","updated","assignee","author","reviewer","commented","involves","dynamicValues","entries","reduce","values","entry","sort","separator","qualifierCategories","focussed","keyboardSelectedHint","mouseSelectedHint","$.derived","categoryValues","keys","concat","expanded","$$d","searchEnd","beforeCursor","substring","searchStart","lastIndexOf","toLowerCase","match","exec","timeEnd","allHints","negator","qualifier","sep","qualifierText","qualifierTextEscaped","search","categories","matchedCategories","category","matchedValues","categoryOption","idx","currentValue","val","computeMatch","$.user_effect","$.set","find","searchId","applyHint","nextHint","currentHint","nextIndex","findIndex","timer","lastArgs","lastThis","lastNow","fire","force","scheduledDiff","schedule","flush","debounce","isFindShortcut","isInputTarget","blur","$.bind_this","input_1","$$value","$$render","consequent","onBlur","$.template_effect","consequent_2","consequent_1","alternate","$.set_class","div","$.event","rounded","cubic_out","split_css_unit","parseFloat","fly","opacity","getComputedStyle","target_opacity","transform","od","x_value","x_unit","y_value","y_unit","get_fn","get_params","current_options","intro","outro","inert","get_options","title","clazz","href","inverted","color","sqrt","isLight","closed","draft","alternate_1","alternate_2","state_reason","svg_2","consequent_3","consequent_4","alternate_3","consequent_5","$.set_svg_class","svg_6","consequent_6","check_runs","statuses","check_run_result_map","failure","in_progress","queued","action_required","node_1","check_run","$.set_attribute","conclusion","html_url","a_1","description","target_url","text_1","number","repository","repositoryName","owner","login","repoUrl","assignees","comments","user","requested_reviewers","reviews","review","byUser","existingReview","stateToVerb","changes_requested","approved","dismissed","handleSelection","onSelect","event_handler","img","avatar_url","event_handler_1","id","event_handler_2","a_2","img_2","hovered","cardUrl","linkTitle","CHILD_OF","DEPENDS_ON","PARENT_OF","CLOSED_BY","REQUIRED_BY","CLOSES","LINKED_TO","LINKED_BY","alternate_4","alternate_5","alternate_6","on_click","showChildren","linkOrder","milestone","labels","column_label","links","sortedLinks","embeddedLinks","isClosingPull","shownLinks","childLinks","completedChildLinks","prLinks","keyFn","found","noDuplicates","ref","milestoneUrl","text_3","div_6","onclick","$$item","div_9","div_10","div_1","inputId","matchedHints","repositories","repo","$.bind_value","Api","moveIssue","column","after","fetchJSON","appURL","method","listCards","buildQueryString","getBoard","getLoggedInUser","listUpdates","cursor","location","fetch","credentials","response","ok","encodeURIComponent","loadBoard","on_click_1","toggleCollapse","taskboard","api","localStore","navId","columns","$.state","itemsById","loading","updating","warnings","accessNotification","showCreate","renderCountByColumn","filterOptions","defaultCollapsed","collapsed","parseSearchFilter","localCollapsed","parseCollapsedColumns","URL","searchParams","searchParam","collapsedParam","toString","buildBoardLink","updateBoardLocation","shownItems","columnItems","some","isClosingLink","renderedItems","renderCount","discardWarning","catch","verbose","warning","handleWarning","handleError","_error","discardError","all","fetchBoard","loginCheck","fetchCards","finally","applyFilter","criteria","newFilter","criteriaIndex","filterChanged","newUser","reload","boardEl","querySelector","updateCards","_items","_cursor","_itemsById","_filterOptions","label","opts","pollUpdates","currentFilter","updates","to","moveItem","removedItem","remainingItems","applyUpdates","poll","setupHooks","drake","Dragula","el","matches","getCardOrder","dataset","cardOrder","getColumnId","columnId","checkCancel","moveCard","card","order","updatedItems","targetColumn","cardIndex","oldColumn","newColumn","newOrder","updatedColumn","list","existing","removeItem","insertIdx","insertItem","checkRender","columnName","throttling","throttle","scrollHeight","scrollTop","offsetHeight","columnRenderedCount","DEFAULT_PER_COLUMN_RENDER_COUNT","openCreateIssue","closeCreateIssue","nextEl","cardId","getCardId","previousEl","previousElementSibling","nextOrder","previousOrder","handleCardDrop","isNewIssueShortcut","isLoginShortcut","shown","open","div_7","button_2","text_2","consequent_7","form_1","Component","element_prototype","node_prototype","Node","__click","__e","Text","init_operations","registered_events","event_handle","unmount","fulfil","component_root","anchor_node","$$events","_mount"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,49,51]}