1 line
No EOL
51 KiB
Text
1 line
No EOL
51 KiB
Text
{"version":3,"file":"lifecycle-D_bIUHQK.js","sources":["../../node_modules/svelte/src/runtime/internal/dom.js","../../node_modules/svelte/src/runtime/internal/lifecycle.js"],"sourcesContent":["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'\"': '"',\n\t'&': '&',\n\t'<': '<'\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 { 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"],"names":["is_hydrating","start_hydrating","end_hydrating","upper_bound","low","high","key","value","mid","init_hydrate","target","children","my_children","i","node","m","p","longest","current","seq_len","idx","new_len","lis","to_move","last","cur","a","b","j","anchor","append","get_root_for_style","root","append_empty_stylesheet","style_element","element","append_stylesheet","style","append_hydration","insert","insert_hydration","detach","destroy_each","iterations","detaching","name","svg_element","text","data","space","empty","listen","event","handler","options","attr","attribute","always_set_through_set_attribute","set_attributes","attributes","descriptors","set_svg_attributes","get_svelte_dataset","init_binding_group","group","_inputs","inputs","input","to_number","init_claim_info","nodes","claim_node","predicate","process_node","create_node","dont_update_last_index","result_node","replacement","claim_element_base","create_element","remove","v","claim_element","claim_svg_element","claim_text","data_str","claim_space","get_comment_idx","start","claim_html_tag","is_svg","start_index","end_index","HtmlTagHydration","html_tag_nodes","claimed_nodes","n","set_data","set_input_value","set_style","important","select_option","select","mounting","option","select_options","select_value","selected_option","select_multiple_value","toggle_class","toggle","custom_event","type","detail","bubbles","cancelable","head_selector","nodeId","head","result","started","comment","HtmlTag","__publicField","html","construct_svelte_component","component","props","current_component","set_current_component","get_current_component","onMount","fn","afterUpdate","onDestroy","createEventDispatcher","callbacks","setContext","context","getContext","bubble"],"mappings":"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","x_google_ignoreList":[0,1]} |