{"version":3,"file":"js/708-e000d289b68f49678b3b.js","mappings":"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","sources":["webpack://app/./node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js","webpack://app/./node_modules/share-api-polyfill/dist/share-min.js"],"sourcesContent":["/*!\nTurbo 8.0.3\nCopyright © 2024 37signals LLC\n */\n/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Javan Makhmali\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function (prototype) {\n if (typeof prototype.requestSubmit == \"function\") return\n\n prototype.requestSubmit = function (submitter) {\n if (submitter) {\n validateSubmitter(submitter, this);\n submitter.click();\n } else {\n submitter = document.createElement(\"input\");\n submitter.type = \"submit\";\n submitter.hidden = true;\n this.appendChild(submitter);\n submitter.click();\n this.removeChild(submitter);\n }\n };\n\n function validateSubmitter(submitter, form) {\n submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n submitter.form == form ||\n raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n }\n\n function raise(errorConstructor, message, name) {\n throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n const candidate = element ? element.closest(\"input, button\") : null;\n return candidate?.type == \"submit\" ? candidate : null\n}\n\nfunction clickCaptured(event) {\n const submitter = findSubmitterFromClickTarget(event.target);\n\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter);\n }\n}\n\n(function () {\n if (\"submitter\" in Event.prototype) return\n\n let prototype = window.Event.prototype;\n // Certain versions of Safari 15 have a bug where they won't\n // populate the submitter. This hurts TurboDrive's enable/disable detection.\n // See https://bugs.webkit.org/show_bug.cgi?id=229660\n if (\"SubmitEvent\" in window) {\n const prototypeOfSubmitEvent = window.SubmitEvent.prototype;\n\n if (/Apple Computer/.test(navigator.vendor) && !(\"submitter\" in prototypeOfSubmitEvent)) {\n prototype = prototypeOfSubmitEvent;\n } else {\n return // polyfill not needed\n }\n }\n\n addEventListener(\"click\", clickCaptured, true);\n\n Object.defineProperty(prototype, \"submitter\", {\n get() {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target)\n }\n }\n });\n})();\n\nconst FrameLoadingStyle = {\n eager: \"eager\",\n lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n * \n * \n * Show all expanded messages in this frame.\n * \n *\n * \n * \n */\nclass FrameElement extends HTMLElement {\n static delegateConstructor = undefined\n\n loaded = Promise.resolve()\n\n static get observedAttributes() {\n return [\"disabled\", \"complete\", \"loading\", \"src\"]\n }\n\n constructor() {\n super();\n this.delegate = new FrameElement.delegateConstructor(this);\n }\n\n connectedCallback() {\n this.delegate.connect();\n }\n\n disconnectedCallback() {\n this.delegate.disconnect();\n }\n\n reload() {\n return this.delegate.sourceURLReloaded()\n }\n\n attributeChangedCallback(name) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged();\n } else if (name == \"complete\") {\n this.delegate.completeChanged();\n } else if (name == \"src\") {\n this.delegate.sourceURLChanged();\n } else {\n this.delegate.disabledChanged();\n }\n }\n\n /**\n * Gets the URL to lazily load source HTML from\n */\n get src() {\n return this.getAttribute(\"src\")\n }\n\n /**\n * Sets the URL to lazily load source HTML from\n */\n set src(value) {\n if (value) {\n this.setAttribute(\"src\", value);\n } else {\n this.removeAttribute(\"src\");\n }\n }\n\n /**\n * Gets the refresh mode for the frame.\n */\n get refresh() {\n return this.getAttribute(\"refresh\")\n }\n\n /**\n * Sets the refresh mode for the frame.\n */\n set refresh(value) {\n if (value) {\n this.setAttribute(\"refresh\", value);\n } else {\n this.removeAttribute(\"refresh\");\n }\n }\n\n /**\n * Determines if the element is loading\n */\n get loading() {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n }\n\n /**\n * Sets the value of if the element is loading\n */\n set loading(value) {\n if (value) {\n this.setAttribute(\"loading\", value);\n } else {\n this.removeAttribute(\"loading\");\n }\n }\n\n /**\n * Gets the disabled state of the frame.\n *\n * If disabled, no requests will be intercepted by the frame.\n */\n get disabled() {\n return this.hasAttribute(\"disabled\")\n }\n\n /**\n * Sets the disabled state of the frame.\n *\n * If disabled, no requests will be intercepted by the frame.\n */\n set disabled(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n }\n\n /**\n * Gets the autoscroll state of the frame.\n *\n * If true, the frame will be scrolled into view automatically on update.\n */\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\")\n }\n\n /**\n * Sets the autoscroll state of the frame.\n *\n * If true, the frame will be scrolled into view automatically on update.\n */\n set autoscroll(value) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\");\n } else {\n this.removeAttribute(\"autoscroll\");\n }\n }\n\n /**\n * Determines if the element has finished loading\n */\n get complete() {\n return !this.delegate.isLoading\n }\n\n /**\n * Gets the active state of the frame.\n *\n * If inactive, source changes will not be observed.\n */\n get isActive() {\n return this.ownerDocument === document && !this.isPreview\n }\n\n /**\n * Sets the active state of the frame.\n *\n * If inactive, source changes will not be observed.\n */\n get isPreview() {\n return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n }\n}\n\nfunction frameLoadingStyleFromString(style) {\n switch (style.toLowerCase()) {\n case \"lazy\":\n return FrameLoadingStyle.lazy\n default:\n return FrameLoadingStyle.eager\n }\n}\n\nfunction expandURL(locatable) {\n return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n let anchorMatch;\n if (url.hash) {\n return url.hash.slice(1)\n // eslint-disable-next-line no-cond-assign\n } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n return anchorMatch[1]\n }\n}\n\nfunction getAction$1(form, submitter) {\n const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n return expandURL(action)\n}\n\nfunction getExtension(url) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isHTML(url) {\n return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/)\n}\n\nfunction isPrefixedBy(baseURL, url) {\n const prefix = getPrefix(url);\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n return isPrefixedBy(location, rootLocation) && isHTML(location)\n}\n\nfunction getRequestURL(url) {\n const anchor = getAnchor(url);\n return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n return getPathComponents(url).slice(-1)[0]\n}\n\nfunction getPrefix(url) {\n return addTrailingSlash(url.origin + url.pathname)\n}\n\nfunction addTrailingSlash(value) {\n return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n constructor(response) {\n this.response = response;\n }\n\n get succeeded() {\n return this.response.ok\n }\n\n get failed() {\n return !this.succeeded\n }\n\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499\n }\n\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599\n }\n\n get redirected() {\n return this.response.redirected\n }\n\n get location() {\n return expandURL(this.response.url)\n }\n\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n }\n\n get statusCode() {\n return this.response.status\n }\n\n get contentType() {\n return this.header(\"Content-Type\")\n }\n\n get responseText() {\n return this.response.clone().text()\n }\n\n get responseHTML() {\n if (this.isHTML) {\n return this.response.clone().text()\n } else {\n return Promise.resolve(undefined)\n }\n }\n\n header(name) {\n return this.response.headers.get(name)\n }\n}\n\nfunction activateScriptElement(element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element\n } else {\n const createdScriptElement = document.createElement(\"script\");\n const cspNonce = getMetaContent(\"csp-nonce\");\n if (cspNonce) {\n createdScriptElement.nonce = cspNonce;\n }\n createdScriptElement.textContent = element.textContent;\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n return createdScriptElement\n }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n for (const { name, value } of sourceElement.attributes) {\n destinationElement.setAttribute(name, value);\n }\n}\n\nfunction createDocumentFragment(html) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n return template.content\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n const event = new CustomEvent(eventName, {\n cancelable,\n bubbles: true,\n composed: true,\n detail\n });\n\n if (target && target.isConnected) {\n target.dispatchEvent(event);\n } else {\n document.documentElement.dispatchEvent(event);\n }\n\n return event\n}\n\nfunction nextRepaint() {\n if (document.visibilityState === \"hidden\") {\n return nextEventLoopTick()\n } else {\n return nextAnimationFrame()\n }\n}\n\nfunction nextAnimationFrame() {\n return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction nextMicrotask() {\n return Promise.resolve()\n}\n\nfunction parseHTMLDocument(html = \"\") {\n return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nfunction unindent(strings, ...values) {\n const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n const match = lines[0].match(/^\\s+/);\n const indent = match ? match[0].length : 0;\n return lines.map((line) => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings, values) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i];\n return result + string + value\n }, \"\")\n}\n\nfunction uuid() {\n return Array.from({ length: 36 })\n .map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\"\n } else if (i == 14) {\n return \"4\"\n } else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16)\n } else {\n return Math.floor(Math.random() * 15).toString(16)\n }\n })\n .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n if (typeof value == \"string\") return value\n }\n\n return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n return elements.some((element) => element && element.hasAttribute(attributeName))\n}\n\nfunction markAsBusy(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.setAttribute(\"busy\", \"\");\n }\n element.setAttribute(\"aria-busy\", \"true\");\n }\n}\n\nfunction clearBusyState(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.removeAttribute(\"busy\");\n }\n\n element.removeAttribute(\"aria-busy\");\n }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n return new Promise((resolve) => {\n const onComplete = () => {\n element.removeEventListener(\"error\", onComplete);\n element.removeEventListener(\"load\", onComplete);\n resolve();\n };\n\n element.addEventListener(\"load\", onComplete, { once: true });\n element.addEventListener(\"error\", onComplete, { once: true });\n setTimeout(resolve, timeoutInMilliseconds);\n })\n}\n\nfunction getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState\n case \"advance\":\n case \"restore\":\n return history.pushState\n }\n}\n\nfunction isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n const action = getAttribute(\"data-turbo-action\", ...elements);\n\n return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n const element = getMetaElement(name);\n return element && element.content\n}\n\nfunction setMetaContent(name, content) {\n let element = getMetaElement(name);\n\n if (!element) {\n element = document.createElement(\"meta\");\n element.setAttribute(\"name\", name);\n\n document.head.appendChild(element);\n }\n\n element.setAttribute(\"content\", content);\n\n return element\n}\n\nfunction findClosestRecursively(element, selector) {\n if (element instanceof Element) {\n return (\n element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n )\n }\n}\n\nfunction elementIsFocusable(element) {\n const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n const before = reader();\n\n callback();\n\n await nextAnimationFrame();\n\n const after = reader();\n\n return [before, after]\n}\n\nfunction doesNotTargetIFrame(anchor) {\n if (anchor.hasAttribute(\"target\")) {\n for (const element of document.getElementsByName(anchor.target)) {\n if (element instanceof HTMLIFrameElement) return false\n }\n }\n\n return true\n}\n\nfunction findLinkFromClickTarget(target) {\n return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\")\n}\n\nfunction getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction debounce(fn, delay) {\n let timeoutId = null;\n\n return (...args) => {\n const callback = () => fn.apply(this, args);\n clearTimeout(timeoutId);\n timeoutId = setTimeout(callback, delay);\n }\n}\n\nclass LimitedSet extends Set {\n constructor(maxSize) {\n super();\n this.maxSize = maxSize;\n }\n\n add(value) {\n if (this.size >= this.maxSize) {\n const iterator = this.values();\n const oldestValue = iterator.next().value;\n this.delete(oldestValue);\n }\n super.add(value);\n }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nconst nativeFetch = window.fetch;\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n const modifiedHeaders = new Headers(options.headers || {});\n const requestUID = uuid();\n recentRequests.add(requestUID);\n modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n return nativeFetch(url, {\n ...options,\n headers: modifiedHeaders\n })\n}\n\nfunction fetchMethodFromString(method) {\n switch (method.toLowerCase()) {\n case \"get\":\n return FetchMethod.get\n case \"post\":\n return FetchMethod.post\n case \"put\":\n return FetchMethod.put\n case \"patch\":\n return FetchMethod.patch\n case \"delete\":\n return FetchMethod.delete\n }\n}\n\nconst FetchMethod = {\n get: \"get\",\n post: \"post\",\n put: \"put\",\n patch: \"patch\",\n delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n switch (encoding.toLowerCase()) {\n case FetchEnctype.multipart:\n return FetchEnctype.multipart\n case FetchEnctype.plain:\n return FetchEnctype.plain\n default:\n return FetchEnctype.urlEncoded\n }\n}\n\nconst FetchEnctype = {\n urlEncoded: \"application/x-www-form-urlencoded\",\n multipart: \"multipart/form-data\",\n plain: \"text/plain\"\n};\n\nclass FetchRequest {\n abortController = new AbortController()\n #resolveRequestPromise = (_value) => {}\n\n constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n this.delegate = delegate;\n this.url = url;\n this.target = target;\n this.fetchOptions = {\n credentials: \"same-origin\",\n redirect: \"follow\",\n method: method,\n headers: { ...this.defaultHeaders },\n body: body,\n signal: this.abortSignal,\n referrer: this.delegate.referrer?.href\n };\n this.enctype = enctype;\n }\n\n get method() {\n return this.fetchOptions.method\n }\n\n set method(value) {\n const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n this.url.search = \"\";\n\n const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n this.url = url;\n this.fetchOptions.body = body;\n this.fetchOptions.method = fetchMethod;\n }\n\n get headers() {\n return this.fetchOptions.headers\n }\n\n set headers(value) {\n this.fetchOptions.headers = value;\n }\n\n get body() {\n if (this.isSafe) {\n return this.url.searchParams\n } else {\n return this.fetchOptions.body\n }\n }\n\n set body(value) {\n this.fetchOptions.body = value;\n }\n\n get location() {\n return this.url\n }\n\n get params() {\n return this.url.searchParams\n }\n\n get entries() {\n return this.body ? Array.from(this.body.entries()) : []\n }\n\n cancel() {\n this.abortController.abort();\n }\n\n async perform() {\n const { fetchOptions } = this;\n this.delegate.prepareRequest(this);\n const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n try {\n this.delegate.requestStarted(this);\n\n if (event.detail.fetchRequest) {\n this.response = event.detail.fetchRequest.response;\n } else {\n this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n }\n\n const response = await this.response;\n return await this.receive(response)\n } catch (error) {\n if (error.name !== \"AbortError\") {\n if (this.#willDelegateErrorHandling(error)) {\n this.delegate.requestErrored(this, error);\n }\n throw error\n }\n } finally {\n this.delegate.requestFinished(this);\n }\n }\n\n async receive(response) {\n const fetchResponse = new FetchResponse(response);\n const event = dispatch(\"turbo:before-fetch-response\", {\n cancelable: true,\n detail: { fetchResponse },\n target: this.target\n });\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n } else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse);\n } else {\n this.delegate.requestFailedWithResponse(this, fetchResponse);\n }\n return fetchResponse\n }\n\n get defaultHeaders() {\n return {\n Accept: \"text/html, application/xhtml+xml\"\n }\n }\n\n get isSafe() {\n return isSafe(this.method)\n }\n\n get abortSignal() {\n return this.abortController.signal\n }\n\n acceptResponseType(mimeType) {\n this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n }\n\n async #allowRequestToBeIntercepted(fetchOptions) {\n const requestInterception = new Promise((resolve) => (this.#resolveRequestPromise = resolve));\n const event = dispatch(\"turbo:before-fetch-request\", {\n cancelable: true,\n detail: {\n fetchOptions,\n url: this.url,\n resume: this.#resolveRequestPromise\n },\n target: this.target\n });\n this.url = event.detail.url;\n if (event.defaultPrevented) await requestInterception;\n\n return event\n }\n\n #willDelegateErrorHandling(error) {\n const event = dispatch(\"turbo:fetch-request-error\", {\n target: this.target,\n cancelable: true,\n detail: { request: this, error: error }\n });\n\n return !event.defaultPrevented\n }\n}\n\nfunction isSafe(fetchMethod) {\n return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n const searchParams =\n Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n if (isSafe(method)) {\n return [mergeIntoURLSearchParams(resource, searchParams), null]\n } else if (enctype == FetchEnctype.urlEncoded) {\n return [resource, searchParams]\n } else {\n return [resource, requestBody]\n }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n const entries = [];\n\n for (const [name, value] of requestBody) {\n if (value instanceof File) continue\n else entries.push([name, value]);\n }\n\n return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n url.search = searchParams.toString();\n\n return url\n}\n\nclass AppearanceObserver {\n started = false\n\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n this.intersectionObserver = new IntersectionObserver(this.intersect);\n }\n\n start() {\n if (!this.started) {\n this.started = true;\n this.intersectionObserver.observe(this.element);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n this.intersectionObserver.unobserve(this.element);\n }\n }\n\n intersect = (entries) => {\n const lastEntry = entries.slice(-1)[0];\n if (lastEntry?.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element);\n }\n }\n}\n\nclass StreamMessage {\n static contentType = \"text/vnd.turbo-stream.html\"\n\n static wrap(message) {\n if (typeof message == \"string\") {\n return new this(createDocumentFragment(message))\n } else {\n return message\n }\n }\n\n constructor(fragment) {\n this.fragment = importStreamElements(fragment);\n }\n}\n\nfunction importStreamElements(fragment) {\n for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n const streamElement = document.importNode(element, true);\n\n for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n }\n\n element.replaceWith(streamElement);\n }\n\n return fragment\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache {\n #prefetchTimeout = null\n #prefetched = null\n\n get(url) {\n if (this.#prefetched && this.#prefetched.url === url && this.#prefetched.expire > Date.now()) {\n return this.#prefetched.request\n }\n }\n\n setLater(url, request, ttl) {\n this.clear();\n\n this.#prefetchTimeout = setTimeout(() => {\n request.perform();\n this.set(url, request, ttl);\n this.#prefetchTimeout = null;\n }, PREFETCH_DELAY);\n }\n\n set(url, request, ttl) {\n this.#prefetched = { url, request, expire: new Date(new Date().getTime() + ttl) };\n }\n\n clear() {\n if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n this.#prefetched = null;\n }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n initialized: \"initialized\",\n requesting: \"requesting\",\n waiting: \"waiting\",\n receiving: \"receiving\",\n stopping: \"stopping\",\n stopped: \"stopped\"\n};\n\nclass FormSubmission {\n state = FormSubmissionState.initialized\n\n static confirmMethod(message, _element, _submitter) {\n return Promise.resolve(confirm(message))\n }\n\n constructor(delegate, formElement, submitter, mustRedirect = false) {\n const method = getMethod(formElement, submitter);\n const action = getAction(getFormAction(formElement, submitter), method);\n const body = buildFormData(formElement, submitter);\n const enctype = getEnctype(formElement, submitter);\n\n this.delegate = delegate;\n this.formElement = formElement;\n this.submitter = submitter;\n this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n this.mustRedirect = mustRedirect;\n }\n\n get method() {\n return this.fetchRequest.method\n }\n\n set method(value) {\n this.fetchRequest.method = value;\n }\n\n get action() {\n return this.fetchRequest.url.toString()\n }\n\n set action(value) {\n this.fetchRequest.url = expandURL(value);\n }\n\n get body() {\n return this.fetchRequest.body\n }\n\n get enctype() {\n return this.fetchRequest.enctype\n }\n\n get isSafe() {\n return this.fetchRequest.isSafe\n }\n\n get location() {\n return this.fetchRequest.url\n }\n\n // The submission process\n\n async start() {\n const { initialized, requesting } = FormSubmissionState;\n const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n if (typeof confirmationMessage === \"string\") {\n const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\n if (!answer) {\n return\n }\n }\n\n if (this.state == initialized) {\n this.state = requesting;\n return this.fetchRequest.perform()\n }\n }\n\n stop() {\n const { stopping, stopped } = FormSubmissionState;\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping;\n this.fetchRequest.cancel();\n return true\n }\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n if (!request.isSafe) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n if (token) {\n request.headers[\"X-CSRF-Token\"] = token;\n }\n }\n\n if (this.requestAcceptsTurboStreamResponse(request)) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted(_request) {\n this.state = FormSubmissionState.waiting;\n this.submitter?.setAttribute(\"disabled\", \"\");\n this.setSubmitsWith();\n markAsBusy(this.formElement);\n dispatch(\"turbo:submit-start\", {\n target: this.formElement,\n detail: { formSubmission: this }\n });\n this.delegate.formSubmissionStarted(this);\n }\n\n requestPreventedHandlingResponse(request, response) {\n prefetchCache.clear();\n\n this.result = { success: response.succeeded, fetchResponse: response };\n }\n\n requestSucceededWithResponse(request, response) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response);\n return\n }\n\n prefetchCache.clear();\n\n if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n const error = new Error(\"Form responses must redirect to another location\");\n this.delegate.formSubmissionErrored(this, error);\n } else {\n this.state = FormSubmissionState.receiving;\n this.result = { success: true, fetchResponse: response };\n this.delegate.formSubmissionSucceededWithResponse(this, response);\n }\n }\n\n requestFailedWithResponse(request, response) {\n this.result = { success: false, fetchResponse: response };\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n\n requestErrored(request, error) {\n this.result = { success: false, error };\n this.delegate.formSubmissionErrored(this, error);\n }\n\n requestFinished(_request) {\n this.state = FormSubmissionState.stopped;\n this.submitter?.removeAttribute(\"disabled\");\n this.resetSubmitterText();\n clearBusyState(this.formElement);\n dispatch(\"turbo:submit-end\", {\n target: this.formElement,\n detail: { formSubmission: this, ...this.result }\n });\n this.delegate.formSubmissionFinished(this);\n }\n\n // Private\n\n setSubmitsWith() {\n if (!this.submitter || !this.submitsWith) return\n\n if (this.submitter.matches(\"button\")) {\n this.originalSubmitText = this.submitter.innerHTML;\n this.submitter.innerHTML = this.submitsWith;\n } else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n this.originalSubmitText = input.value;\n input.value = this.submitsWith;\n }\n }\n\n resetSubmitterText() {\n if (!this.submitter || !this.originalSubmitText) return\n\n if (this.submitter.matches(\"button\")) {\n this.submitter.innerHTML = this.originalSubmitText;\n } else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n input.value = this.originalSubmitText;\n }\n }\n\n requestMustRedirect(request) {\n return !request.isSafe && this.mustRedirect\n }\n\n requestAcceptsTurboStreamResponse(request) {\n return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n }\n\n get submitsWith() {\n return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n }\n}\n\nfunction buildFormData(formElement, submitter) {\n const formData = new FormData(formElement);\n const name = submitter?.getAttribute(\"name\");\n const value = submitter?.getAttribute(\"value\");\n\n if (name) {\n formData.append(name, value || \"\");\n }\n\n return formData\n}\n\nfunction getCookieValue(cookieName) {\n if (cookieName != null) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\");\n return value ? decodeURIComponent(value) : undefined\n }\n }\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n if (submitter?.hasAttribute(\"formaction\")) {\n return submitter.getAttribute(\"formaction\") || \"\"\n } else {\n return formElement.getAttribute(\"action\") || formElementAction || \"\"\n }\n}\n\nfunction getAction(formAction, fetchMethod) {\n const action = expandURL(formAction);\n\n if (isSafe(fetchMethod)) {\n action.search = \"\";\n }\n\n return action\n}\n\nfunction getMethod(formElement, submitter) {\n const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n constructor(element) {\n this.element = element;\n }\n\n get activeElement() {\n return this.element.ownerDocument.activeElement\n }\n\n get children() {\n return [...this.element.children]\n }\n\n hasAnchor(anchor) {\n return this.getElementForAnchor(anchor) != null\n }\n\n getElementForAnchor(anchor) {\n return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n }\n\n get isConnected() {\n return this.element.isConnected\n }\n\n get firstAutofocusableElement() {\n return queryAutofocusableElement(this.element)\n }\n\n get permanentElements() {\n return queryPermanentElementsAll(this.element)\n }\n\n getPermanentElementById(id) {\n return getPermanentElementById(this.element, id)\n }\n\n getPermanentElementMapForSnapshot(snapshot) {\n const permanentElementMap = {};\n\n for (const currentPermanentElement of this.permanentElements) {\n const { id } = currentPermanentElement;\n const newPermanentElement = snapshot.getPermanentElementById(id);\n if (newPermanentElement) {\n permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n }\n }\n\n return permanentElementMap\n }\n}\n\nfunction getPermanentElementById(node, id) {\n return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n started = false\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n this.started = false;\n }\n }\n\n submitCaptured = () => {\n this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n }\n\n submitBubbled = (event) => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n const submitter = event.submitter || undefined;\n\n if (\n form &&\n submissionDoesNotDismissDialog(form, submitter) &&\n submissionDoesNotTargetIFrame(form, submitter) &&\n this.delegate.willSubmitForm(form, submitter)\n ) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.delegate.formSubmitted(form, submitter);\n }\n }\n }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n if (submitter?.hasAttribute(\"formtarget\") || form.hasAttribute(\"target\")) {\n const target = submitter?.getAttribute(\"formtarget\") || form.target;\n\n for (const element of document.getElementsByName(target)) {\n if (element instanceof HTMLIFrameElement) return false\n }\n\n return true\n } else {\n return true\n }\n}\n\nclass View {\n #resolveRenderPromise = (_value) => {}\n #resolveInterceptionPromise = (_value) => {}\n\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n }\n\n // Scrolling\n\n scrollToAnchor(anchor) {\n const element = this.snapshot.getElementForAnchor(anchor);\n if (element) {\n this.scrollToElement(element);\n this.focusElement(element);\n } else {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n }\n\n scrollToAnchorFromLocation(location) {\n this.scrollToAnchor(getAnchor(location));\n }\n\n scrollToElement(element) {\n element.scrollIntoView();\n }\n\n focusElement(element) {\n if (element instanceof HTMLElement) {\n if (element.hasAttribute(\"tabindex\")) {\n element.focus();\n } else {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n element.removeAttribute(\"tabindex\");\n }\n }\n }\n\n scrollToPosition({ x, y }) {\n this.scrollRoot.scrollTo(x, y);\n }\n\n scrollToTop() {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n\n get scrollRoot() {\n return window\n }\n\n // Rendering\n\n async render(renderer) {\n const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n // A workaround to ignore tracked element mismatch reloads when performing\n // a promoted Visit from a frame navigation\n const shouldInvalidate = willRender;\n\n if (shouldRender) {\n try {\n this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n this.renderer = renderer;\n await this.prepareToRenderSnapshot(renderer);\n\n const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n if (!immediateRender) await renderInterception;\n\n await this.renderSnapshot(renderer);\n this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n this.delegate.preloadOnLoadLinksForView(this.element);\n this.finishRenderingSnapshot(renderer);\n } finally {\n delete this.renderer;\n this.#resolveRenderPromise(undefined);\n delete this.renderPromise;\n }\n } else if (shouldInvalidate) {\n this.invalidate(renderer.reloadReason);\n }\n }\n\n invalidate(reason) {\n this.delegate.viewInvalidated(reason);\n }\n\n async prepareToRenderSnapshot(renderer) {\n this.markAsPreview(renderer.isPreview);\n await renderer.prepareToRender();\n }\n\n markAsPreview(isPreview) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\");\n } else {\n this.element.removeAttribute(\"data-turbo-preview\");\n }\n }\n\n markVisitDirection(direction) {\n this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n }\n\n unmarkVisitDirection() {\n this.element.removeAttribute(\"data-turbo-visit-direction\");\n }\n\n async renderSnapshot(renderer) {\n await renderer.render();\n }\n\n finishRenderingSnapshot(renderer) {\n renderer.finishRendering();\n }\n}\n\nclass FrameView extends View {\n missing() {\n this.element.innerHTML = `Content missing`;\n }\n\n get snapshot() {\n return new Snapshot(this.element)\n }\n}\n\nclass LinkInterceptor {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n }\n\n start() {\n this.element.addEventListener(\"click\", this.clickBubbled);\n document.addEventListener(\"turbo:click\", this.linkClicked);\n document.addEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled);\n document.removeEventListener(\"turbo:click\", this.linkClicked);\n document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n clickBubbled = (event) => {\n if (this.respondsToEventTarget(event.target)) {\n this.clickEvent = event;\n } else {\n delete this.clickEvent;\n }\n }\n\n linkClicked = (event) => {\n if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n this.clickEvent.preventDefault();\n event.preventDefault();\n this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n }\n }\n delete this.clickEvent;\n }\n\n willVisit = (_event) => {\n delete this.clickEvent;\n }\n\n respondsToEventTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n return element && element.closest(\"turbo-frame, html\") == this.element\n }\n}\n\nclass LinkClickObserver {\n started = false\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n\n clickCaptured = () => {\n this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n }\n\n clickBubbled = (event) => {\n if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n const target = (event.composedPath && event.composedPath()[0]) || event.target;\n const link = findLinkFromClickTarget(target);\n if (link && doesNotTargetIFrame(link)) {\n const location = getLocationForLink(link);\n if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n event.preventDefault();\n this.delegate.followedLinkToLocation(link, location);\n }\n }\n }\n }\n\n clickEventIsSignificant(event) {\n return !(\n (event.target && event.target.isContentEditable) ||\n event.defaultPrevented ||\n event.which > 1 ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey\n )\n }\n}\n\nclass FormLinkClickObserver {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.linkInterceptor = new LinkClickObserver(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n }\n\n // Link hover observer delegate\n\n canPrefetchRequestToLocation(link, location) {\n return false\n }\n\n prefetchAndCacheRequestToLocation(link, location) {\n return\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link, location, originalEvent) {\n return (\n this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n )\n }\n\n followedLinkToLocation(link, location) {\n const form = document.createElement(\"form\");\n\n const type = \"hidden\";\n for (const [name, value] of location.searchParams) {\n form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n }\n\n const action = Object.assign(location, { search: \"\" });\n form.setAttribute(\"data-turbo\", \"true\");\n form.setAttribute(\"action\", action.href);\n form.setAttribute(\"hidden\", \"\");\n\n const method = link.getAttribute(\"data-turbo-method\");\n if (method) form.setAttribute(\"method\", method);\n\n const turboFrame = link.getAttribute(\"data-turbo-frame\");\n if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n const turboAction = getVisitAction(link);\n if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n const turboStream = link.hasAttribute(\"data-turbo-stream\");\n if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n this.delegate.submittedFormLinkToLocation(link, location, form);\n\n document.body.appendChild(form);\n form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n requestAnimationFrame(() => form.requestSubmit());\n }\n}\n\nclass Bardo {\n static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n const bardo = new this(delegate, permanentElementMap);\n bardo.enter();\n await callback();\n bardo.leave();\n }\n\n constructor(delegate, permanentElementMap) {\n this.delegate = delegate;\n this.permanentElementMap = permanentElementMap;\n }\n\n enter() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n }\n }\n\n leave() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement] = this.permanentElementMap[id];\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n this.delegate.leavingBardo(currentPermanentElement);\n }\n }\n\n replaceNewPermanentElementWithPlaceholder(permanentElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement);\n permanentElement.replaceWith(placeholder);\n }\n\n replaceCurrentPermanentElementWithClone(permanentElement) {\n const clone = permanentElement.cloneNode(true);\n permanentElement.replaceWith(clone);\n }\n\n replacePlaceholderWithPermanentElement(permanentElement) {\n const placeholder = this.getPlaceholderById(permanentElement.id);\n placeholder?.replaceWith(permanentElement);\n }\n\n getPlaceholderById(id) {\n return this.placeholders.find((element) => element.content == id)\n }\n\n get placeholders() {\n return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n const element = document.createElement(\"meta\");\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n element.setAttribute(\"content\", permanentElement.id);\n return element\n}\n\nclass Renderer {\n #activeElement = null\n\n constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n this.currentSnapshot = currentSnapshot;\n this.newSnapshot = newSnapshot;\n this.isPreview = isPreview;\n this.willRender = willRender;\n this.renderElement = renderElement;\n this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n }\n\n get shouldRender() {\n return true\n }\n\n get reloadReason() {\n return\n }\n\n prepareToRender() {\n return\n }\n\n render() {\n // Abstract method\n }\n\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve();\n delete this.resolvingFunctions;\n }\n }\n\n async preservingPermanentElements(callback) {\n await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n }\n\n focusFirstAutofocusableElement() {\n const element = this.connectedSnapshot.firstAutofocusableElement;\n if (element) {\n element.focus();\n }\n }\n\n // Bardo delegate\n\n enteringBardo(currentPermanentElement) {\n if (this.#activeElement) return\n\n if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n this.#activeElement = this.currentSnapshot.activeElement;\n }\n }\n\n leavingBardo(currentPermanentElement) {\n if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n this.#activeElement.focus();\n\n this.#activeElement = null;\n }\n }\n\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n }\n\n get currentElement() {\n return this.currentSnapshot.element\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n }\n\n get renderMethod() {\n return \"replace\"\n }\n}\n\nclass FrameRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const destinationRange = document.createRange();\n destinationRange.selectNodeContents(currentElement);\n destinationRange.deleteContents();\n\n const frameElement = newElement;\n const sourceRange = frameElement.ownerDocument?.createRange();\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement);\n currentElement.appendChild(sourceRange.extractContents());\n }\n }\n\n constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n this.delegate = delegate;\n }\n\n get shouldRender() {\n return true\n }\n\n async render() {\n await nextRepaint();\n this.preservingPermanentElements(() => {\n this.loadFrameElement();\n });\n this.scrollFrameIntoView();\n await nextRepaint();\n this.focusFirstAutofocusableElement();\n await nextRepaint();\n this.activateScriptElements();\n }\n\n loadFrameElement() {\n this.delegate.willRenderFrame(this.currentElement, this.newElement);\n this.renderElement(this.currentElement, this.newElement);\n }\n\n scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n const element = this.currentElement.firstElementChild;\n const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n if (element) {\n element.scrollIntoView({ block, behavior });\n return true\n }\n }\n return false\n }\n\n activateScriptElements() {\n for (const inertScriptElement of this.newScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n get newScriptElements() {\n return this.currentElement.querySelectorAll(\"script\")\n }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value\n } else {\n return defaultValue\n }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n if (value == \"auto\" || value == \"smooth\") {\n return value\n } else {\n return defaultValue\n }\n}\n\nclass ProgressBar {\n static animationDuration = 300 /*ms*/\n\n static get defaultCSS() {\n return unindent`\n .turbo-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 2147483647;\n transition:\n width ${ProgressBar.animationDuration}ms ease-out,\n opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n transform: translate3d(0, 0, 0);\n }\n `\n }\n\n hiding = false\n value = 0\n visible = false\n\n constructor() {\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n this.installStylesheetElement();\n this.setValue(0);\n }\n\n show() {\n if (!this.visible) {\n this.visible = true;\n this.installProgressElement();\n this.startTrickling();\n }\n }\n\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true;\n this.fadeProgressElement(() => {\n this.uninstallProgressElement();\n this.stopTrickling();\n this.visible = false;\n this.hiding = false;\n });\n }\n }\n\n setValue(value) {\n this.value = value;\n this.refresh();\n }\n\n // Private\n\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }\n\n installProgressElement() {\n this.progressElement.style.width = \"0\";\n this.progressElement.style.opacity = \"1\";\n document.documentElement.insertBefore(this.progressElement, document.body);\n this.refresh();\n }\n\n fadeProgressElement(callback) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n }\n }\n\n stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n\n trickle = () => {\n this.setValue(this.value + Math.random() / 100);\n }\n\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + this.value * 90}%`;\n });\n }\n\n createStylesheetElement() {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n element.textContent = ProgressBar.defaultCSS;\n if (this.cspNonce) {\n element.nonce = this.cspNonce;\n }\n return element\n }\n\n createProgressElement() {\n const element = document.createElement(\"div\");\n element.className = \"turbo-progress-bar\";\n return element\n }\n\n get cspNonce() {\n return getMetaContent(\"csp-nonce\")\n }\n}\n\nclass HeadSnapshot extends Snapshot {\n detailsByOuterHTML = this.children\n .filter((element) => !elementIsNoscript(element))\n .map((element) => elementWithoutNonce(element))\n .reduce((result, element) => {\n const { outerHTML } = element;\n const details =\n outerHTML in result\n ? result[outerHTML]\n : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: []\n };\n return {\n ...result,\n [outerHTML]: {\n ...details,\n elements: [...details.elements, element]\n }\n }\n }, {})\n\n get trackedElementSignature() {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\")\n }\n\n getScriptElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n }\n\n getStylesheetElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n }\n\n getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n .filter(({ type }) => type == matchedType)\n .map(({ elements: [element] }) => element)\n }\n\n get provisionalElements() {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n if (type == null && !tracked) {\n return [...result, ...elements]\n } else if (elements.length > 1) {\n return [...result, ...elements.slice(1)]\n } else {\n return result\n }\n }, [])\n }\n\n getMetaValue(name) {\n const element = this.findMetaElementByName(name);\n return element ? element.getAttribute(\"content\") : null\n }\n\n findMetaElementByName(name) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const {\n elements: [element]\n } = this.detailsByOuterHTML[outerHTML];\n return elementIsMetaElementWithName(element, name) ? element : result\n }, undefined | undefined)\n }\n}\n\nfunction elementType(element) {\n if (elementIsScript(element)) {\n return \"script\"\n } else if (elementIsStylesheet(element)) {\n return \"stylesheet\"\n }\n}\n\nfunction elementIsTracked(element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n const tagName = element.localName;\n return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n const tagName = element.localName;\n return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n const tagName = element.localName;\n return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n const tagName = element.localName;\n return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n if (element.hasAttribute(\"nonce\")) {\n element.setAttribute(\"nonce\", \"\");\n }\n\n return element\n}\n\nclass PageSnapshot extends Snapshot {\n static fromHTMLString(html = \"\") {\n return this.fromDocument(parseHTMLDocument(html))\n }\n\n static fromElement(element) {\n return this.fromDocument(element.ownerDocument)\n }\n\n static fromDocument({ documentElement, body, head }) {\n return new this(documentElement, body, new HeadSnapshot(head))\n }\n\n constructor(documentElement, body, headSnapshot) {\n super(body);\n this.documentElement = documentElement;\n this.headSnapshot = headSnapshot;\n }\n\n clone() {\n const clonedElement = this.element.cloneNode(true);\n\n const selectElements = this.element.querySelectorAll(\"select\");\n const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n for (const [index, source] of selectElements.entries()) {\n const clone = clonedSelectElements[index];\n for (const option of clone.selectedOptions) option.selected = false;\n for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n }\n\n for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n clonedPasswordInput.value = \"\";\n }\n\n return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n }\n\n get lang() {\n return this.documentElement.getAttribute(\"lang\")\n }\n\n get headElement() {\n return this.headSnapshot.element\n }\n\n get rootLocation() {\n const root = this.getSetting(\"root\") ?? \"/\";\n return expandURL(root)\n }\n\n get cacheControlValue() {\n return this.getSetting(\"cache-control\")\n }\n\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\"\n }\n\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\"\n }\n\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\"\n }\n\n get prefersViewTransitions() {\n return this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\"\n }\n\n get shouldMorphPage() {\n return this.getSetting(\"refresh-method\") === \"morph\"\n }\n\n get shouldPreserveScrollPosition() {\n return this.getSetting(\"refresh-scroll\") === \"preserve\"\n }\n\n // Private\n\n getSetting(name) {\n return this.headSnapshot.getMetaValue(`turbo-${name}`)\n }\n}\n\nclass ViewTransitioner {\n #viewTransitionStarted = false\n #lastOperation = Promise.resolve()\n\n renderChange(useViewTransition, render) {\n if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n this.#viewTransitionStarted = true;\n this.#lastOperation = this.#lastOperation.then(async () => {\n await document.startViewTransition(render).finished;\n });\n } else {\n this.#lastOperation = this.#lastOperation.then(render);\n }\n\n return this.#lastOperation\n }\n\n get viewTransitionsAvailable() {\n return document.startViewTransition\n }\n}\n\nconst defaultOptions = {\n action: \"advance\",\n historyChanged: false,\n visitCachedSnapshot: () => {},\n willRender: true,\n updateHistory: true,\n shouldCacheSnapshot: true,\n acceptsStreamResponse: false\n};\n\nconst TimingMetric = {\n visitStart: \"visitStart\",\n requestStart: \"requestStart\",\n requestEnd: \"requestEnd\",\n visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n initialized: \"initialized\",\n started: \"started\",\n canceled: \"canceled\",\n failed: \"failed\",\n completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n networkFailure: 0,\n timeoutFailure: -1,\n contentTypeMismatch: -2\n};\n\nconst Direction = {\n advance: \"forward\",\n restore: \"back\",\n replace: \"none\"\n};\n\nclass Visit {\n identifier = uuid() // Required by turbo-ios\n timingMetrics = {}\n\n followedRedirect = false\n historyChanged = false\n scrolled = false\n shouldCacheSnapshot = true\n acceptsStreamResponse = false\n snapshotCached = false\n state = VisitState.initialized\n viewTransitioner = new ViewTransitioner()\n\n constructor(delegate, location, restorationIdentifier, options = {}) {\n this.delegate = delegate;\n this.location = location;\n this.restorationIdentifier = restorationIdentifier || uuid();\n\n const {\n action,\n historyChanged,\n referrer,\n snapshot,\n snapshotHTML,\n response,\n visitCachedSnapshot,\n willRender,\n updateHistory,\n shouldCacheSnapshot,\n acceptsStreamResponse,\n direction\n } = {\n ...defaultOptions,\n ...options\n };\n this.action = action;\n this.historyChanged = historyChanged;\n this.referrer = referrer;\n this.snapshot = snapshot;\n this.snapshotHTML = snapshotHTML;\n this.response = response;\n this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n this.isPageRefresh = this.view.isPageRefresh(this);\n this.visitCachedSnapshot = visitCachedSnapshot;\n this.willRender = willRender;\n this.updateHistory = updateHistory;\n this.scrolled = !willRender;\n this.shouldCacheSnapshot = shouldCacheSnapshot;\n this.acceptsStreamResponse = acceptsStreamResponse;\n this.direction = direction || Direction[action];\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get history() {\n return this.delegate.history\n }\n\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n }\n\n get silent() {\n return this.isSamePage\n }\n\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart);\n this.state = VisitState.started;\n this.adapter.visitStarted(this);\n this.delegate.visitStarted(this);\n }\n }\n\n cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel();\n }\n this.cancelRender();\n this.state = VisitState.canceled;\n }\n }\n\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.adapter.visitCompleted(this);\n this.state = VisitState.completed;\n this.followRedirect();\n\n if (!this.followedRedirect) {\n this.delegate.visitCompleted(this);\n }\n }\n }\n\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n this.delegate.visitCompleted(this);\n }\n }\n\n changeHistory() {\n if (!this.historyChanged && this.updateHistory) {\n const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n const method = getHistoryMethodForAction(actionForHistory);\n this.history.update(method, this.location, this.restorationIdentifier);\n this.historyChanged = true;\n }\n }\n\n issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest();\n } else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location);\n this.request.perform();\n }\n }\n\n simulateRequest() {\n if (this.response) {\n this.startRequest();\n this.recordResponse();\n this.finishRequest();\n }\n }\n\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\n }\n\n recordResponse(response = this.response) {\n this.response = response;\n if (response) {\n const { statusCode } = response;\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this);\n } else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n }\n }\n\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n\n loadResponse() {\n if (this.response) {\n const { statusCode, responseHTML } = this.response;\n this.render(async () => {\n if (this.shouldCacheSnapshot) this.cacheSnapshot();\n if (this.view.renderPromise) await this.view.renderPromise;\n\n if (isSuccessful(statusCode) && responseHTML != null) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n await this.renderPageSnapshot(snapshot, false);\n\n this.adapter.visitRendered(this);\n this.complete();\n } else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n this.adapter.visitRendered(this);\n this.fail();\n }\n });\n }\n }\n\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot\n }\n }\n }\n\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML)\n }\n }\n\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null\n }\n\n loadCachedSnapshot() {\n const snapshot = this.getCachedSnapshot();\n if (snapshot) {\n const isPreview = this.shouldIssueRequest();\n this.render(async () => {\n this.cacheSnapshot();\n if (this.isSamePage || this.isPageRefresh) {\n this.adapter.visitRendered(this);\n } else {\n if (this.view.renderPromise) await this.view.renderPromise;\n\n await this.renderPageSnapshot(snapshot, isPreview);\n\n this.adapter.visitRendered(this);\n if (!isPreview) {\n this.complete();\n }\n }\n });\n }\n }\n\n followRedirect() {\n if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n action: \"replace\",\n response: this.response,\n shouldCacheSnapshot: false,\n willRender: false\n });\n this.followedRedirect = true;\n }\n }\n\n goToSamePageAnchor() {\n if (this.isSamePage) {\n this.render(async () => {\n this.cacheSnapshot();\n this.performScroll();\n this.changeHistory();\n this.adapter.visitRendered(this);\n });\n }\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n if (this.acceptsStreamResponse) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted() {\n this.startRequest();\n }\n\n requestPreventedHandlingResponse(_request, _response) {}\n\n async requestSucceededWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.redirectedToLocation = response.redirected ? response.location : undefined;\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n\n async requestFailedWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n\n requestErrored(_request, _error) {\n this.recordResponse({\n statusCode: SystemStatusCode.networkFailure,\n redirected: false\n });\n }\n\n requestFinished() {\n this.finishRequest();\n }\n\n // Scrolling\n\n performScroll() {\n if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n } else {\n this.scrollToAnchor() || this.view.scrollToTop();\n }\n if (this.isSamePage) {\n this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n }\n\n this.scrolled = true;\n }\n }\n\n scrollToRestoredPosition() {\n const { scrollPosition } = this.restorationData;\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition);\n return true\n }\n }\n\n scrollToAnchor() {\n const anchor = getAnchor(this.location);\n if (anchor != null) {\n this.view.scrollToAnchor(anchor);\n return true\n }\n }\n\n // Instrumentation\n\n recordTimingMetric(metric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n\n getTimingMetrics() {\n return { ...this.timingMetrics }\n }\n\n // Private\n\n getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState\n case \"advance\":\n case \"restore\":\n return history.pushState\n }\n }\n\n hasPreloadedResponse() {\n return typeof this.response == \"object\"\n }\n\n shouldIssueRequest() {\n if (this.isSamePage) {\n return false\n } else if (this.action == \"restore\") {\n return !this.hasCachedSnapshot()\n } else {\n return this.willRender\n }\n }\n\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n this.snapshotCached = true;\n }\n }\n\n async render(callback) {\n this.cancelRender();\n this.frame = await nextRepaint();\n await callback();\n delete this.frame;\n }\n\n async renderPageSnapshot(snapshot, isPreview) {\n await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n this.performScroll();\n });\n }\n\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n}\n\nfunction isSuccessful(statusCode) {\n return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n progressBar = new ProgressBar()\n\n constructor(session) {\n this.session = session;\n }\n\n visitProposedToLocation(location, options) {\n if (locationIsVisitable(location, this.navigator.rootLocation)) {\n this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n } else {\n window.location.href = location.toString();\n }\n }\n\n visitStarted(visit) {\n this.location = visit.location;\n visit.loadCachedSnapshot();\n visit.issueRequest();\n visit.goToSamePageAnchor();\n }\n\n visitRequestStarted(visit) {\n this.progressBar.setValue(0);\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showVisitProgressBarAfterDelay();\n } else {\n this.showProgressBar();\n }\n }\n\n visitRequestCompleted(visit) {\n visit.loadResponse();\n }\n\n visitRequestFailedWithStatusCode(visit, statusCode) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload({\n reason: \"request_failed\",\n context: {\n statusCode\n }\n })\n default:\n return visit.loadResponse()\n }\n }\n\n visitRequestFinished(_visit) {}\n\n visitCompleted(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n pageInvalidated(reason) {\n this.reload(reason);\n }\n\n visitFailed(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n visitRendered(_visit) {}\n\n // Form Submission Delegate\n\n formSubmissionStarted(_formSubmission) {\n this.progressBar.setValue(0);\n this.showFormProgressBarAfterDelay();\n }\n\n formSubmissionFinished(_formSubmission) {\n this.progressBar.setValue(1);\n this.hideFormProgressBar();\n }\n\n // Private\n\n showVisitProgressBarAfterDelay() {\n this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n\n hideVisitProgressBar() {\n this.progressBar.hide();\n if (this.visitProgressBarTimeout != null) {\n window.clearTimeout(this.visitProgressBarTimeout);\n delete this.visitProgressBarTimeout;\n }\n }\n\n showFormProgressBarAfterDelay() {\n if (this.formProgressBarTimeout == null) {\n this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n }\n\n hideFormProgressBar() {\n this.progressBar.hide();\n if (this.formProgressBarTimeout != null) {\n window.clearTimeout(this.formProgressBarTimeout);\n delete this.formProgressBarTimeout;\n }\n }\n\n showProgressBar = () => {\n this.progressBar.show();\n }\n\n reload(reason) {\n dispatch(\"turbo:reload\", { detail: reason });\n\n window.location.href = this.location?.toString() || window.location.href;\n }\n\n get navigator() {\n return this.session.navigator\n }\n}\n\nclass CacheObserver {\n selector = \"[data-turbo-temporary]\"\n deprecatedSelector = \"[data-turbo-cache=false]\"\n\n started = false\n\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n\n removeTemporaryElements = (_event) => {\n for (const element of this.temporaryElements) {\n element.remove();\n }\n }\n\n get temporaryElements() {\n return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation]\n }\n\n get temporaryElementsWithDeprecation() {\n const elements = document.querySelectorAll(this.deprecatedSelector);\n\n if (elements.length) {\n console.warn(\n `The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`\n );\n }\n\n return [...elements]\n }\n}\n\nclass FrameRedirector {\n constructor(session, element) {\n this.session = session;\n this.element = element;\n this.linkInterceptor = new LinkInterceptor(this, element);\n this.formSubmitObserver = new FormSubmitObserver(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element, _location, _event) {\n return this.#shouldRedirect(element)\n }\n\n linkClickIntercepted(element, url, event) {\n const frame = this.#findFrameElement(element);\n if (frame) {\n frame.delegate.linkClickIntercepted(element, url, event);\n }\n }\n\n // Form submit observer delegate\n\n willSubmitForm(element, submitter) {\n return (\n element.closest(\"turbo-frame\") == null &&\n this.#shouldSubmit(element, submitter) &&\n this.#shouldRedirect(element, submitter)\n )\n }\n\n formSubmitted(element, submitter) {\n const frame = this.#findFrameElement(element, submitter);\n if (frame) {\n frame.delegate.formSubmitted(element, submitter);\n }\n }\n\n #shouldSubmit(form, submitter) {\n const action = getAction$1(form, submitter);\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const rootLocation = expandURL(meta?.content ?? \"/\");\n\n return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n }\n\n #shouldRedirect(element, submitter) {\n const isNavigatable =\n element instanceof HTMLFormElement\n ? this.session.submissionIsNavigatable(element, submitter)\n : this.session.elementIsNavigatable(element);\n\n if (isNavigatable) {\n const frame = this.#findFrameElement(element, submitter);\n return frame ? frame != element.closest(\"turbo-frame\") : false\n } else {\n return false\n }\n }\n\n #findFrameElement(element, submitter) {\n const id = submitter?.getAttribute(\"data-turbo-frame\") || element.getAttribute(\"data-turbo-frame\");\n if (id && id != \"_top\") {\n const frame = this.element.querySelector(`#${id}:not([disabled])`);\n if (frame instanceof FrameElement) {\n return frame\n }\n }\n }\n}\n\nclass History {\n location\n restorationIdentifier = uuid()\n restorationData = {}\n started = false\n pageLoaded = false\n currentIndex = 0\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false);\n addEventListener(\"load\", this.onPageLoad, false);\n this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n this.started = true;\n this.replace(new URL(window.location.href));\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false);\n removeEventListener(\"load\", this.onPageLoad, false);\n this.started = false;\n }\n }\n\n push(location, restorationIdentifier) {\n this.update(history.pushState, location, restorationIdentifier);\n }\n\n replace(location, restorationIdentifier) {\n this.update(history.replaceState, location, restorationIdentifier);\n }\n\n update(method, location, restorationIdentifier = uuid()) {\n if (method === history.pushState) ++this.currentIndex;\n\n const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n method.call(history, state, \"\", location.href);\n this.location = location;\n this.restorationIdentifier = restorationIdentifier;\n }\n\n // Restoration data\n\n getRestorationDataForIdentifier(restorationIdentifier) {\n return this.restorationData[restorationIdentifier] || {}\n }\n\n updateRestorationData(additionalData) {\n const { restorationIdentifier } = this;\n const restorationData = this.restorationData[restorationIdentifier];\n this.restorationData[restorationIdentifier] = {\n ...restorationData,\n ...additionalData\n };\n }\n\n // Scroll restoration\n\n assumeControlOfScrollRestoration() {\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n history.scrollRestoration = \"manual\";\n }\n }\n\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration;\n delete this.previousScrollRestoration;\n }\n }\n\n // Event handlers\n\n onPopState = (event) => {\n if (this.shouldHandlePopState()) {\n const { turbo } = event.state || {};\n if (turbo) {\n this.location = new URL(window.location.href);\n const { restorationIdentifier, restorationIndex } = turbo;\n this.restorationIdentifier = restorationIdentifier;\n const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n this.currentIndex = restorationIndex;\n }\n }\n }\n\n onPageLoad = async (_event) => {\n await nextMicrotask();\n this.pageLoaded = true;\n }\n\n // Private\n\n shouldHandlePopState() {\n // Safari dispatches a popstate event after window's load event, ignore it\n return this.pageIsLoaded()\n }\n\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\"\n }\n}\n\nclass LinkPrefetchObserver {\n started = false\n #prefetchedLink = null\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (this.started) return\n\n if (this.eventTarget.readyState === \"loading\") {\n this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n } else {\n this.#enable();\n }\n }\n\n stop() {\n if (!this.started) return\n\n this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n capture: true,\n passive: true\n });\n this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n capture: true,\n passive: true\n });\n\n this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n this.started = false;\n }\n\n #enable = () => {\n this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n capture: true,\n passive: true\n });\n this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n capture: true,\n passive: true\n });\n\n this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n this.started = true;\n }\n\n #tryToPrefetchRequest = (event) => {\n if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n const target = event.target;\n const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n if (isLink && this.#isPrefetchable(target)) {\n const link = target;\n const location = getLocationForLink(link);\n\n if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n this.#prefetchedLink = link;\n\n const fetchRequest = new FetchRequest(\n this,\n FetchMethod.get,\n location,\n new URLSearchParams(),\n target\n );\n\n prefetchCache.setLater(location.toString(), fetchRequest, this.#cacheTtl);\n }\n }\n }\n\n #cancelRequestIfObsolete = (event) => {\n if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n }\n\n #cancelPrefetchRequest = () => {\n prefetchCache.clear();\n this.#prefetchedLink = null;\n }\n\n #tryToUsePrefetchedRequest = (event) => {\n if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"get\") {\n const cached = prefetchCache.get(event.detail.url.toString());\n\n if (cached) {\n // User clicked link, use cache response\n event.detail.fetchRequest = cached;\n }\n\n prefetchCache.clear();\n }\n }\n\n prepareRequest(request) {\n const link = request.target;\n\n request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n const turboFrame = link.closest(\"turbo-frame\");\n const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n }\n }\n\n // Fetch request interface\n\n requestSucceededWithResponse() {}\n\n requestStarted(fetchRequest) {}\n\n requestErrored(fetchRequest) {}\n\n requestFinished(fetchRequest) {}\n\n requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n get #cacheTtl() {\n return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n }\n\n #isPrefetchable(link) {\n const href = link.getAttribute(\"href\");\n\n if (!href) return false\n\n if (unfetchableLink(link)) return false\n if (linkToTheSamePage(link)) return false\n if (linkOptsOut(link)) return false\n if (nonSafeLink(link)) return false\n if (eventPrevented(link)) return false\n\n return true\n }\n}\n\nconst unfetchableLink = (link) => {\n return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n return false\n};\n\nconst nonSafeLink = (link) => {\n const turboMethod = link.getAttribute(\"data-turbo-method\");\n if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n if (isUJS(link)) return true\n if (link.hasAttribute(\"data-turbo-confirm\")) return true\n if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n return false\n};\n\nconst isUJS = (link) => {\n return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n return event.defaultPrevented\n};\n\nclass Navigator {\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n proposeVisit(location, options = {}) {\n if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n this.delegate.visitProposedToLocation(location, options);\n }\n }\n\n startVisit(locatable, restorationIdentifier, options = {}) {\n this.stop();\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n referrer: this.location,\n ...options\n });\n this.currentVisit.start();\n }\n\n submitForm(form, submitter) {\n this.stop();\n this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n this.formSubmission.start();\n }\n\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop();\n delete this.formSubmission;\n }\n\n if (this.currentVisit) {\n this.currentVisit.cancel();\n delete this.currentVisit;\n }\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get rootLocation() {\n return this.view.snapshot.rootLocation\n }\n\n get history() {\n return this.delegate.history\n }\n\n // Form submission delegate\n\n formSubmissionStarted(formSubmission) {\n // Not all adapters implement formSubmissionStarted\n if (typeof this.adapter.formSubmissionStarted === \"function\") {\n this.adapter.formSubmissionStarted(formSubmission);\n }\n }\n\n async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n if (formSubmission == this.formSubmission) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const shouldCacheSnapshot = formSubmission.isSafe;\n if (!shouldCacheSnapshot) {\n this.view.clearSnapshotCache();\n }\n\n const { statusCode, redirected } = fetchResponse;\n const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n const visitOptions = {\n action,\n shouldCacheSnapshot,\n response: { statusCode, responseHTML, redirected }\n };\n this.proposeVisit(fetchResponse.location, visitOptions);\n }\n }\n }\n\n async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n const responseHTML = await fetchResponse.responseHTML;\n\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n if (fetchResponse.serverError) {\n await this.view.renderError(snapshot, this.currentVisit);\n } else {\n await this.view.renderPage(snapshot, false, true, this.currentVisit);\n }\n if(!snapshot.shouldPreserveScrollPosition) {\n this.view.scrollToTop();\n }\n this.view.clearSnapshotCache();\n }\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished(formSubmission) {\n // Not all adapters implement formSubmissionFinished\n if (typeof this.adapter.formSubmissionFinished === \"function\") {\n this.adapter.formSubmissionFinished(formSubmission);\n }\n }\n\n // Visit delegate\n\n visitStarted(visit) {\n this.delegate.visitStarted(visit);\n }\n\n visitCompleted(visit) {\n this.delegate.visitCompleted(visit);\n }\n\n locationWithActionIsSamePage(location, action) {\n const anchor = getAnchor(location);\n const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n\n return (\n action !== \"replace\" &&\n getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n (isRestorationToTop || (anchor != null && anchor !== currentAnchor))\n )\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n }\n\n // Visits\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n #getActionForFormSubmission(formSubmission, fetchResponse) {\n const { submitter, formElement } = formSubmission;\n return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n }\n\n #getDefaultAction(fetchResponse) {\n const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n return sameLocationRedirect ? \"replace\" : \"advance\"\n }\n}\n\nconst PageStage = {\n initial: 0,\n loading: 1,\n interactive: 2,\n complete: 3\n};\n\nclass PageObserver {\n stage = PageStage.initial\n started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading;\n }\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n addEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n removeEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = false;\n }\n }\n\n interpretReadyState = () => {\n const { readyState } = this;\n if (readyState == \"interactive\") {\n this.pageIsInteractive();\n } else if (readyState == \"complete\") {\n this.pageIsComplete();\n }\n }\n\n pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive;\n this.delegate.pageBecameInteractive();\n }\n }\n\n pageIsComplete() {\n this.pageIsInteractive();\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete;\n this.delegate.pageLoaded();\n }\n }\n\n pageWillUnload = () => {\n this.delegate.pageWillUnload();\n }\n\n get readyState() {\n return document.readyState\n }\n}\n\nclass ScrollObserver {\n started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false);\n this.onScroll();\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false);\n this.started = false;\n }\n }\n\n onScroll = () => {\n this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n }\n\n // Private\n\n updatePosition(position) {\n this.delegate.scrollPositionChanged(position);\n }\n}\n\nclass StreamMessageRenderer {\n render({ fragment }) {\n Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n withAutofocusFromFragment(fragment, () => {\n withPreservedFocus(() => {\n document.documentElement.appendChild(fragment);\n });\n });\n });\n }\n\n // Bardo delegate\n\n enteringBardo(currentPermanentElement, newPermanentElement) {\n newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n }\n\n leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n const permanentElementMap = {};\n for (const permanentElementInDocument of permanentElementsInDocument) {\n const { id } = permanentElementInDocument;\n\n for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n if (elementInStream) {\n permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n }\n }\n }\n\n return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n const generatedID = `turbo-stream-autofocus-${uuid()}`;\n const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n let willAutofocusId = null;\n\n if (elementWithAutofocus) {\n if (elementWithAutofocus.id) {\n willAutofocusId = elementWithAutofocus.id;\n } else {\n willAutofocusId = generatedID;\n }\n\n elementWithAutofocus.id = willAutofocusId;\n }\n\n callback();\n await nextRepaint();\n\n const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n if (hasNoActiveElement && willAutofocusId) {\n const elementToAutofocus = document.getElementById(willAutofocusId);\n\n if (elementIsFocusable(elementToAutofocus)) {\n elementToAutofocus.focus();\n }\n if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n elementToAutofocus.removeAttribute(\"id\");\n }\n }\n}\n\nasync function withPreservedFocus(callback) {\n const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n if (restoreFocusTo) {\n const elementToFocus = document.getElementById(restoreFocusTo);\n\n if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n elementToFocus.focus();\n }\n }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n for (const streamElement of nodeListOfStreamElements) {\n const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n if (elementWithAutofocus) return elementWithAutofocus\n }\n\n return null\n}\n\nclass StreamObserver {\n sources = new Set()\n #started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.#started) {\n this.#started = true;\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n stop() {\n if (this.#started) {\n this.#started = false;\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n connectStreamSource(source) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source);\n source.addEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n disconnectStreamSource(source) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source);\n source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n streamSourceIsConnected(source) {\n return this.sources.has(source)\n }\n\n inspectFetchResponse = (event) => {\n const response = fetchResponseFromEvent(event);\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault();\n this.receiveMessageResponse(response);\n }\n }\n\n receiveMessageEvent = (event) => {\n if (this.#started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data);\n }\n }\n\n async receiveMessageResponse(response) {\n const html = await response.responseHTML;\n if (html) {\n this.receiveMessageHTML(html);\n }\n }\n\n receiveMessageHTML(html) {\n this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n }\n}\n\nfunction fetchResponseFromEvent(event) {\n const fetchResponse = event.detail?.fetchResponse;\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse\n }\n}\n\nfunction fetchResponseIsStream(response) {\n const contentType = response.contentType ?? \"\";\n return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const { documentElement, body } = document;\n\n documentElement.replaceChild(newElement, body);\n }\n\n async render() {\n this.replaceHeadAndBody();\n this.activateScriptElements();\n }\n\n replaceHeadAndBody() {\n const { documentElement, head } = document;\n documentElement.replaceChild(this.newHead, head);\n this.renderElement(this.currentElement, this.newElement);\n }\n\n activateScriptElements() {\n for (const replaceableElement of this.scriptElements) {\n const parentNode = replaceableElement.parentNode;\n if (parentNode) {\n const element = activateScriptElement(replaceableElement);\n parentNode.replaceChild(element, replaceableElement);\n }\n }\n }\n\n get newHead() {\n return this.newSnapshot.headSnapshot.element\n }\n\n get scriptElements() {\n return document.documentElement.querySelectorAll(\"script\")\n }\n}\n\n// base IIFE to define idiomorph\nvar Idiomorph = (function () {\n\n //=============================================================================\n // AND NOW IT BEGINS...\n //=============================================================================\n let EMPTY_SET = new Set();\n\n // default configuration values, updatable by users now\n let defaults = {\n morphStyle: \"outerHTML\",\n callbacks : {\n beforeNodeAdded: noOp,\n afterNodeAdded: noOp,\n beforeNodeMorphed: noOp,\n afterNodeMorphed: noOp,\n beforeNodeRemoved: noOp,\n afterNodeRemoved: noOp,\n beforeAttributeUpdated: noOp,\n\n },\n head: {\n style: 'merge',\n shouldPreserve: function (elt) {\n return elt.getAttribute(\"im-preserve\") === \"true\";\n },\n shouldReAppend: function (elt) {\n return elt.getAttribute(\"im-re-append\") === \"true\";\n },\n shouldRemove: noOp,\n afterHeadMorphed: noOp,\n }\n };\n\n //=============================================================================\n // Core Morphing Algorithm - morph, morphNormalizedContent, morphOldNodeTo, morphChildren\n //=============================================================================\n function morph(oldNode, newContent, config = {}) {\n\n if (oldNode instanceof Document) {\n oldNode = oldNode.documentElement;\n }\n\n if (typeof newContent === 'string') {\n newContent = parseContent(newContent);\n }\n\n let normalizedContent = normalizeContent(newContent);\n\n let ctx = createMorphContext(oldNode, normalizedContent, config);\n\n return morphNormalizedContent(oldNode, normalizedContent, ctx);\n }\n\n function morphNormalizedContent(oldNode, normalizedNewContent, ctx) {\n if (ctx.head.block) {\n let oldHead = oldNode.querySelector('head');\n let newHead = normalizedNewContent.querySelector('head');\n if (oldHead && newHead) {\n let promises = handleHeadElement(newHead, oldHead, ctx);\n // when head promises resolve, call morph again, ignoring the head tag\n Promise.all(promises).then(function () {\n morphNormalizedContent(oldNode, normalizedNewContent, Object.assign(ctx, {\n head: {\n block: false,\n ignore: true\n }\n }));\n });\n return;\n }\n }\n\n if (ctx.morphStyle === \"innerHTML\") {\n\n // innerHTML, so we are only updating the children\n morphChildren(normalizedNewContent, oldNode, ctx);\n return oldNode.children;\n\n } else if (ctx.morphStyle === \"outerHTML\" || ctx.morphStyle == null) {\n // otherwise find the best element match in the new content, morph that, and merge its siblings\n // into either side of the best match\n let bestMatch = findBestNodeMatch(normalizedNewContent, oldNode, ctx);\n\n // stash the siblings that will need to be inserted on either side of the best match\n let previousSibling = bestMatch?.previousSibling;\n let nextSibling = bestMatch?.nextSibling;\n\n // morph it\n let morphedNode = morphOldNodeTo(oldNode, bestMatch, ctx);\n\n if (bestMatch) {\n // if there was a best match, merge the siblings in too and return the\n // whole bunch\n return insertSiblings(previousSibling, morphedNode, nextSibling);\n } else {\n // otherwise nothing was added to the DOM\n return []\n }\n } else {\n throw \"Do not understand how to morph style \" + ctx.morphStyle;\n }\n }\n\n\n /**\n * @param possibleActiveElement\n * @param ctx\n * @returns {boolean}\n */\n function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n return ctx.ignoreActiveValue && possibleActiveElement === document.activeElement && possibleActiveElement !== document.body;\n }\n\n /**\n * @param oldNode root node to merge content into\n * @param newContent new content to merge\n * @param ctx the merge context\n * @returns {Element} the element that ended up in the DOM\n */\n function morphOldNodeTo(oldNode, newContent, ctx) {\n if (ctx.ignoreActive && oldNode === document.activeElement) ; else if (newContent == null) {\n if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n\n oldNode.remove();\n ctx.callbacks.afterNodeRemoved(oldNode);\n return null;\n } else if (!isSoftMatch(oldNode, newContent)) {\n if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n if (ctx.callbacks.beforeNodeAdded(newContent) === false) return oldNode;\n\n oldNode.parentElement.replaceChild(newContent, oldNode);\n ctx.callbacks.afterNodeAdded(newContent);\n ctx.callbacks.afterNodeRemoved(oldNode);\n return newContent;\n } else {\n if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) return oldNode;\n\n if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (oldNode instanceof HTMLHeadElement && ctx.head.style !== \"morph\") {\n handleHeadElement(newContent, oldNode, ctx);\n } else {\n syncNodeFrom(newContent, oldNode, ctx);\n if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n morphChildren(newContent, oldNode, ctx);\n }\n }\n ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n return oldNode;\n }\n }\n\n /**\n * This is the core algorithm for matching up children. The idea is to use id sets to try to match up\n * nodes as faithfully as possible. We greedily match, which allows us to keep the algorithm fast, but\n * by using id sets, we are able to better match up with content deeper in the DOM.\n *\n * Basic algorithm is, for each node in the new content:\n *\n * - if we have reached the end of the old parent, append the new content\n * - if the new content has an id set match with the current insertion point, morph\n * - search for an id set match\n * - if id set match found, morph\n * - otherwise search for a \"soft\" match\n * - if a soft match is found, morph\n * - otherwise, prepend the new node before the current insertion point\n *\n * The two search algorithms terminate if competing node matches appear to outweigh what can be achieved\n * with the current node. See findIdSetMatch() and findSoftMatch() for details.\n *\n * @param {Element} newParent the parent element of the new content\n * @param {Element } oldParent the old content that we are merging the new content into\n * @param ctx the merge context\n */\n function morphChildren(newParent, oldParent, ctx) {\n\n let nextNewChild = newParent.firstChild;\n let insertionPoint = oldParent.firstChild;\n let newChild;\n\n // run through all the new content\n while (nextNewChild) {\n\n newChild = nextNewChild;\n nextNewChild = newChild.nextSibling;\n\n // if we are at the end of the exiting parent's children, just append\n if (insertionPoint == null) {\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n oldParent.appendChild(newChild);\n ctx.callbacks.afterNodeAdded(newChild);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // if the current node has an id set match then morph\n if (isIdSetMatch(newChild, insertionPoint, ctx)) {\n morphOldNodeTo(insertionPoint, newChild, ctx);\n insertionPoint = insertionPoint.nextSibling;\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // otherwise search forward in the existing old children for an id set match\n let idSetMatch = findIdSetMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n // if we found a potential match, remove the nodes until that point and morph\n if (idSetMatch) {\n insertionPoint = removeNodesBetween(insertionPoint, idSetMatch, ctx);\n morphOldNodeTo(idSetMatch, newChild, ctx);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // no id set match found, so scan forward for a soft match for the current node\n let softMatch = findSoftMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n // if we found a soft match for the current node, morph\n if (softMatch) {\n insertionPoint = removeNodesBetween(insertionPoint, softMatch, ctx);\n morphOldNodeTo(softMatch, newChild, ctx);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // abandon all hope of morphing, just insert the new child before the insertion point\n // and move on\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n oldParent.insertBefore(newChild, insertionPoint);\n ctx.callbacks.afterNodeAdded(newChild);\n removeIdsFromConsideration(ctx, newChild);\n }\n\n // remove any remaining old nodes that didn't match up with new content\n while (insertionPoint !== null) {\n\n let tempNode = insertionPoint;\n insertionPoint = insertionPoint.nextSibling;\n removeNode(tempNode, ctx);\n }\n }\n\n //=============================================================================\n // Attribute Syncing Code\n //=============================================================================\n\n /**\n * @param attr {String} the attribute to be mutated\n * @param to {Element} the element that is going to be updated\n * @param updateType {(\"update\"|\"remove\")}\n * @param ctx the merge context\n * @returns {boolean} true if the attribute should be ignored, false otherwise\n */\n function ignoreAttribute(attr, to, updateType, ctx) {\n if(attr === 'value' && ctx.ignoreActiveValue && to === document.activeElement){\n return true;\n }\n return ctx.callbacks.beforeAttributeUpdated(attr, to, updateType) === false;\n }\n\n /**\n * syncs a given node with another node, copying over all attributes and\n * inner element state from the 'from' node to the 'to' node\n *\n * @param {Element} from the element to copy attributes & state from\n * @param {Element} to the element to copy attributes & state to\n * @param ctx the merge context\n */\n function syncNodeFrom(from, to, ctx) {\n let type = from.nodeType;\n\n // if is an element type, sync the attributes from the\n // new node into the new node\n if (type === 1 /* element type */) {\n const fromAttributes = from.attributes;\n const toAttributes = to.attributes;\n for (const fromAttribute of fromAttributes) {\n if (ignoreAttribute(fromAttribute.name, to, 'update', ctx)) {\n continue;\n }\n if (to.getAttribute(fromAttribute.name) !== fromAttribute.value) {\n to.setAttribute(fromAttribute.name, fromAttribute.value);\n }\n }\n // iterate backwards to avoid skipping over items when a delete occurs\n for (let i = toAttributes.length - 1; 0 <= i; i--) {\n const toAttribute = toAttributes[i];\n if (ignoreAttribute(toAttribute.name, to, 'remove', ctx)) {\n continue;\n }\n if (!from.hasAttribute(toAttribute.name)) {\n to.removeAttribute(toAttribute.name);\n }\n }\n }\n\n // sync text nodes\n if (type === 8 /* comment */ || type === 3 /* text */) {\n if (to.nodeValue !== from.nodeValue) {\n to.nodeValue = from.nodeValue;\n }\n }\n\n if (!ignoreValueOfActiveElement(to, ctx)) {\n // sync input values\n syncInputValue(from, to, ctx);\n }\n }\n\n /**\n * @param from {Element} element to sync the value from\n * @param to {Element} element to sync the value to\n * @param attributeName {String} the attribute name\n * @param ctx the merge context\n */\n function syncBooleanAttribute(from, to, attributeName, ctx) {\n if (from[attributeName] !== to[attributeName]) {\n let ignoreUpdate = ignoreAttribute(attributeName, to, 'update', ctx);\n if (!ignoreUpdate) {\n to[attributeName] = from[attributeName];\n }\n if (from[attributeName]) {\n if (!ignoreUpdate) {\n to.setAttribute(attributeName, from[attributeName]);\n }\n } else {\n if (!ignoreAttribute(attributeName, to, 'remove', ctx)) {\n to.removeAttribute(attributeName);\n }\n }\n }\n }\n\n /**\n * NB: many bothans died to bring us information:\n *\n * https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n * https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n *\n * @param from {Element} the element to sync the input value from\n * @param to {Element} the element to sync the input value to\n * @param ctx the merge context\n */\n function syncInputValue(from, to, ctx) {\n if (from instanceof HTMLInputElement &&\n to instanceof HTMLInputElement &&\n from.type !== 'file') {\n\n let fromValue = from.value;\n let toValue = to.value;\n\n // sync boolean attributes\n syncBooleanAttribute(from, to, 'checked', ctx);\n syncBooleanAttribute(from, to, 'disabled', ctx);\n\n if (!from.hasAttribute('value')) {\n if (!ignoreAttribute('value', to, 'remove', ctx)) {\n to.value = '';\n to.removeAttribute('value');\n }\n } else if (fromValue !== toValue) {\n if (!ignoreAttribute('value', to, 'update', ctx)) {\n to.setAttribute('value', fromValue);\n to.value = fromValue;\n }\n }\n } else if (from instanceof HTMLOptionElement) {\n syncBooleanAttribute(from, to, 'selected', ctx);\n } else if (from instanceof HTMLTextAreaElement && to instanceof HTMLTextAreaElement) {\n let fromValue = from.value;\n let toValue = to.value;\n if (ignoreAttribute('value', to, 'update', ctx)) {\n return;\n }\n if (fromValue !== toValue) {\n to.value = fromValue;\n }\n if (to.firstChild && to.firstChild.nodeValue !== fromValue) {\n to.firstChild.nodeValue = fromValue;\n }\n }\n }\n\n //=============================================================================\n // the HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n //=============================================================================\n function handleHeadElement(newHeadTag, currentHead, ctx) {\n\n let added = [];\n let removed = [];\n let preserved = [];\n let nodesToAppend = [];\n\n let headMergeStyle = ctx.head.style;\n\n // put all new head elements into a Map, by their outerHTML\n let srcToNewHeadNodes = new Map();\n for (const newHeadChild of newHeadTag.children) {\n srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n }\n\n // for each elt in the current head\n for (const currentHeadElt of currentHead.children) {\n\n // If the current head element is in the map\n let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n if (inNewContent || isPreserved) {\n if (isReAppended) {\n // remove the current version and let the new version replace it and re-execute\n removed.push(currentHeadElt);\n } else {\n // this element already exists and should not be re-appended, so remove it from\n // the new content map, preserving it in the DOM\n srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n preserved.push(currentHeadElt);\n }\n } else {\n if (headMergeStyle === \"append\") {\n // we are appending and this existing element is not new content\n // so if and only if it is marked for re-append do we do anything\n if (isReAppended) {\n removed.push(currentHeadElt);\n nodesToAppend.push(currentHeadElt);\n }\n } else {\n // if this is a merge, we remove this content since it is not in the new head\n if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n removed.push(currentHeadElt);\n }\n }\n }\n }\n\n // Push the remaining new head elements in the Map into the\n // nodes to append to the head tag\n nodesToAppend.push(...srcToNewHeadNodes.values());\n\n let promises = [];\n for (const newNode of nodesToAppend) {\n let newElt = document.createRange().createContextualFragment(newNode.outerHTML).firstChild;\n if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n if (newElt.href || newElt.src) {\n let resolve = null;\n let promise = new Promise(function (_resolve) {\n resolve = _resolve;\n });\n newElt.addEventListener('load', function () {\n resolve();\n });\n promises.push(promise);\n }\n currentHead.appendChild(newElt);\n ctx.callbacks.afterNodeAdded(newElt);\n added.push(newElt);\n }\n }\n\n // remove all removed elements, after we have appended the new elements to avoid\n // additional network requests for things like style sheets\n for (const removedElement of removed) {\n if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n currentHead.removeChild(removedElement);\n ctx.callbacks.afterNodeRemoved(removedElement);\n }\n }\n\n ctx.head.afterHeadMorphed(currentHead, {added: added, kept: preserved, removed: removed});\n return promises;\n }\n\n function noOp() {\n }\n\n /*\n Deep merges the config object and the Idiomoroph.defaults object to\n produce a final configuration object\n */\n function mergeDefaults(config) {\n let finalConfig = {};\n // copy top level stuff into final config\n Object.assign(finalConfig, defaults);\n Object.assign(finalConfig, config);\n\n // copy callbacks into final config (do this to deep merge the callbacks)\n finalConfig.callbacks = {};\n Object.assign(finalConfig.callbacks, defaults.callbacks);\n Object.assign(finalConfig.callbacks, config.callbacks);\n\n // copy head config into final config (do this to deep merge the head)\n finalConfig.head = {};\n Object.assign(finalConfig.head, defaults.head);\n Object.assign(finalConfig.head, config.head);\n return finalConfig;\n }\n\n function createMorphContext(oldNode, newContent, config) {\n config = mergeDefaults(config);\n return {\n target: oldNode,\n newContent: newContent,\n config: config,\n morphStyle: config.morphStyle,\n ignoreActive: config.ignoreActive,\n ignoreActiveValue: config.ignoreActiveValue,\n idMap: createIdMap(oldNode, newContent),\n deadIds: new Set(),\n callbacks: config.callbacks,\n head: config.head\n }\n }\n\n function isIdSetMatch(node1, node2, ctx) {\n if (node1 == null || node2 == null) {\n return false;\n }\n if (node1.nodeType === node2.nodeType && node1.tagName === node2.tagName) {\n if (node1.id !== \"\" && node1.id === node2.id) {\n return true;\n } else {\n return getIdIntersectionCount(ctx, node1, node2) > 0;\n }\n }\n return false;\n }\n\n function isSoftMatch(node1, node2) {\n if (node1 == null || node2 == null) {\n return false;\n }\n return node1.nodeType === node2.nodeType && node1.tagName === node2.tagName\n }\n\n function removeNodesBetween(startInclusive, endExclusive, ctx) {\n while (startInclusive !== endExclusive) {\n let tempNode = startInclusive;\n startInclusive = startInclusive.nextSibling;\n removeNode(tempNode, ctx);\n }\n removeIdsFromConsideration(ctx, endExclusive);\n return endExclusive.nextSibling;\n }\n\n //=============================================================================\n // Scans forward from the insertionPoint in the old parent looking for a potential id match\n // for the newChild. We stop if we find a potential id match for the new child OR\n // if the number of potential id matches we are discarding is greater than the\n // potential id matches for the new child\n //=============================================================================\n function findIdSetMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n // max id matches we are willing to discard in our search\n let newChildPotentialIdCount = getIdIntersectionCount(ctx, newChild, oldParent);\n\n let potentialMatch = null;\n\n // only search forward if there is a possibility of an id match\n if (newChildPotentialIdCount > 0) {\n let potentialMatch = insertionPoint;\n // if there is a possibility of an id match, scan forward\n // keep track of the potential id match count we are discarding (the\n // newChildPotentialIdCount must be greater than this to make it likely\n // worth it)\n let otherMatchCount = 0;\n while (potentialMatch != null) {\n\n // If we have an id match, return the current potential match\n if (isIdSetMatch(newChild, potentialMatch, ctx)) {\n return potentialMatch;\n }\n\n // computer the other potential matches of this new content\n otherMatchCount += getIdIntersectionCount(ctx, potentialMatch, newContent);\n if (otherMatchCount > newChildPotentialIdCount) {\n // if we have more potential id matches in _other_ content, we\n // do not have a good candidate for an id match, so return null\n return null;\n }\n\n // advanced to the next old content child\n potentialMatch = potentialMatch.nextSibling;\n }\n }\n return potentialMatch;\n }\n\n //=============================================================================\n // Scans forward from the insertionPoint in the old parent looking for a potential soft match\n // for the newChild. We stop if we find a potential soft match for the new child OR\n // if we find a potential id match in the old parents children OR if we find two\n // potential soft matches for the next two pieces of new content\n //=============================================================================\n function findSoftMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n let potentialSoftMatch = insertionPoint;\n let nextSibling = newChild.nextSibling;\n let siblingSoftMatchCount = 0;\n\n while (potentialSoftMatch != null) {\n\n if (getIdIntersectionCount(ctx, potentialSoftMatch, newContent) > 0) {\n // the current potential soft match has a potential id set match with the remaining new\n // content so bail out of looking\n return null;\n }\n\n // if we have a soft match with the current node, return it\n if (isSoftMatch(newChild, potentialSoftMatch)) {\n return potentialSoftMatch;\n }\n\n if (isSoftMatch(nextSibling, potentialSoftMatch)) {\n // the next new node has a soft match with this node, so\n // increment the count of future soft matches\n siblingSoftMatchCount++;\n nextSibling = nextSibling.nextSibling;\n\n // If there are two future soft matches, bail to allow the siblings to soft match\n // so that we don't consume future soft matches for the sake of the current node\n if (siblingSoftMatchCount >= 2) {\n return null;\n }\n }\n\n // advanced to the next old content child\n potentialSoftMatch = potentialSoftMatch.nextSibling;\n }\n\n return potentialSoftMatch;\n }\n\n function parseContent(newContent) {\n let parser = new DOMParser();\n\n // remove svgs to avoid false-positive matches on head, etc.\n let contentWithSvgsRemoved = newContent.replace(/