{"version":3,"file":"turbo.js","mappings":"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","sources":["webpack://rolemodel_website/webpack/runtime/load script","webpack://rolemodel_website/webpack/bootstrap","webpack://rolemodel_website/webpack/runtime/define property getters","webpack://rolemodel_website/webpack/runtime/ensure chunk","webpack://rolemodel_website/webpack/runtime/get javascript chunk filename","webpack://rolemodel_website/webpack/runtime/get mini-css chunk filename","webpack://rolemodel_website/webpack/runtime/global","webpack://rolemodel_website/webpack/runtime/hasOwnProperty shorthand","webpack://rolemodel_website/webpack/runtime/publicPath","webpack://rolemodel_website/webpack/runtime/jsonp chunk loading","webpack://rolemodel_website/./node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js","webpack://rolemodel_website/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js","webpack://rolemodel_website/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js","webpack://rolemodel_website/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js","webpack://rolemodel_website/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js","webpack://rolemodel_website/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"rolemodel_website:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + \"actioncable\" + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && !scriptUrl) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t467: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkrolemodel_website\"] = self[\"webpackChunkrolemodel_website\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","/*\nTurbo 7.3.0\nCopyright © 2023 37signals LLC\n */\n(function () {\n if (window.Reflect === undefined ||\n window.customElements === undefined ||\n window.customElements.polyfillWrapFlushCallback) {\n return;\n }\n const BuiltInHTMLElement = HTMLElement;\n const wrapperForTheName = {\n HTMLElement: function HTMLElement() {\n return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n },\n };\n window.HTMLElement = wrapperForTheName[\"HTMLElement\"];\n HTMLElement.prototype = BuiltInHTMLElement.prototype;\n HTMLElement.prototype.constructor = HTMLElement;\n Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\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 || 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();\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 === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\nfunction clickCaptured(event) {\n const submitter = findSubmitterFromClickTarget(event.target);\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter);\n }\n}\n(function () {\n if (\"submitter\" in Event.prototype)\n return;\n let prototype = window.Event.prototype;\n if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n prototype = window.SubmitEvent.prototype;\n }\n else if (\"SubmitEvent\" in window) {\n return;\n }\n addEventListener(\"click\", clickCaptured, true);\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\nvar FrameLoadingStyle;\n(function (FrameLoadingStyle) {\n FrameLoadingStyle[\"eager\"] = \"eager\";\n FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\nclass FrameElement extends HTMLElement {\n static get observedAttributes() {\n return [\"disabled\", \"complete\", \"loading\", \"src\"];\n }\n constructor() {\n super();\n this.loaded = Promise.resolve();\n this.delegate = new FrameElement.delegateConstructor(this);\n }\n connectedCallback() {\n this.delegate.connect();\n }\n disconnectedCallback() {\n this.delegate.disconnect();\n }\n reload() {\n return this.delegate.sourceURLReloaded();\n }\n attributeChangedCallback(name) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged();\n }\n else if (name == \"complete\") {\n this.delegate.completeChanged();\n }\n else if (name == \"src\") {\n this.delegate.sourceURLChanged();\n }\n else {\n this.delegate.disabledChanged();\n }\n }\n get src() {\n return this.getAttribute(\"src\");\n }\n set src(value) {\n if (value) {\n this.setAttribute(\"src\", value);\n }\n else {\n this.removeAttribute(\"src\");\n }\n }\n get loading() {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n }\n set loading(value) {\n if (value) {\n this.setAttribute(\"loading\", value);\n }\n else {\n this.removeAttribute(\"loading\");\n }\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n }\n else {\n this.removeAttribute(\"disabled\");\n }\n }\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\");\n }\n set autoscroll(value) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\");\n }\n else {\n this.removeAttribute(\"autoscroll\");\n }\n }\n get complete() {\n return !this.delegate.isLoading;\n }\n get isActive() {\n return this.ownerDocument === document && !this.isPreview;\n }\n get isPreview() {\n var _a, _b;\n return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\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}\nfunction getAnchor(url) {\n let anchorMatch;\n if (url.hash) {\n return url.hash.slice(1);\n }\n else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n return anchorMatch[1];\n }\n}\nfunction getAction(form, submitter) {\n const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formaction\")) || form.getAttribute(\"action\") || form.action;\n return expandURL(action);\n}\nfunction getExtension(url) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\nfunction isHTML(url) {\n return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/);\n}\nfunction isPrefixedBy(baseURL, url) {\n const prefix = getPrefix(url);\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\nfunction locationIsVisitable(location, rootLocation) {\n return isPrefixedBy(location, rootLocation) && isHTML(location);\n}\nfunction getRequestURL(url) {\n const anchor = getAnchor(url);\n return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href;\n}\nfunction toCacheKey(url) {\n return getRequestURL(url);\n}\nfunction urlsAreEqual(left, right) {\n return expandURL(left).href == expandURL(right).href;\n}\nfunction getPathComponents(url) {\n return url.pathname.split(\"/\").slice(1);\n}\nfunction getLastPathComponent(url) {\n return getPathComponents(url).slice(-1)[0];\n}\nfunction getPrefix(url) {\n return addTrailingSlash(url.origin + url.pathname);\n}\nfunction addTrailingSlash(value) {\n return value.endsWith(\"/\") ? value : value + \"/\";\n}\n\nclass FetchResponse {\n constructor(response) {\n this.response = response;\n }\n get succeeded() {\n return this.response.ok;\n }\n get failed() {\n return !this.succeeded;\n }\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499;\n }\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599;\n }\n get redirected() {\n return this.response.redirected;\n }\n get location() {\n return expandURL(this.response.url);\n }\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n }\n get statusCode() {\n return this.response.status;\n }\n get contentType() {\n return this.header(\"Content-Type\");\n }\n get responseText() {\n return this.response.clone().text();\n }\n get responseHTML() {\n if (this.isHTML) {\n return this.response.clone().text();\n }\n else {\n return Promise.resolve(undefined);\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 }\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}\nfunction copyElementAttributes(destinationElement, sourceElement) {\n for (const { name, value } of sourceElement.attributes) {\n destinationElement.setAttribute(name, value);\n }\n}\nfunction createDocumentFragment(html) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n return template.content;\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 if (target && target.isConnected) {\n target.dispatchEvent(event);\n }\n else {\n document.documentElement.dispatchEvent(event);\n }\n return event;\n}\nfunction nextAnimationFrame() {\n return new Promise((resolve) => requestAnimationFrame(() => resolve()));\n}\nfunction nextEventLoopTick() {\n return new Promise((resolve) => setTimeout(() => resolve(), 0));\n}\nfunction nextMicrotask() {\n return Promise.resolve();\n}\nfunction parseHTMLDocument(html = \"\") {\n return new DOMParser().parseFromString(html, \"text/html\");\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}\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}\nfunction uuid() {\n return Array.from({ length: 36 })\n .map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\";\n }\n else if (i == 14) {\n return \"4\";\n }\n else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16);\n }\n else {\n return Math.floor(Math.random() * 15).toString(16);\n }\n })\n .join(\"\");\n}\nfunction getAttribute(attributeName, ...elements) {\n for (const value of elements.map((element) => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {\n if (typeof value == \"string\")\n return value;\n }\n return null;\n}\nfunction hasAttribute(attributeName, ...elements) {\n return elements.some((element) => element && element.hasAttribute(attributeName));\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}\nfunction clearBusyState(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.removeAttribute(\"busy\");\n }\n element.removeAttribute(\"aria-busy\");\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 element.addEventListener(\"load\", onComplete, { once: true });\n element.addEventListener(\"error\", onComplete, { once: true });\n setTimeout(resolve, timeoutInMilliseconds);\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}\nfunction isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\nfunction getVisitAction(...elements) {\n const action = getAttribute(\"data-turbo-action\", ...elements);\n return isAction(action) ? action : null;\n}\nfunction getMetaElement(name) {\n return document.querySelector(`meta[name=\"${name}\"]`);\n}\nfunction getMetaContent(name) {\n const element = getMetaElement(name);\n return element && element.content;\n}\nfunction setMetaContent(name, content) {\n let element = getMetaElement(name);\n if (!element) {\n element = document.createElement(\"meta\");\n element.setAttribute(\"name\", name);\n document.head.appendChild(element);\n }\n element.setAttribute(\"content\", content);\n return element;\n}\nfunction findClosestRecursively(element, selector) {\n var _a;\n if (element instanceof Element) {\n return (element.closest(selector) ||\n findClosestRecursively(element.assignedSlot || ((_a = element.getRootNode()) === null || _a === void 0 ? void 0 : _a.host), selector));\n }\n}\n\nvar FetchMethod;\n(function (FetchMethod) {\n FetchMethod[FetchMethod[\"get\"] = 0] = \"get\";\n FetchMethod[FetchMethod[\"post\"] = 1] = \"post\";\n FetchMethod[FetchMethod[\"put\"] = 2] = \"put\";\n FetchMethod[FetchMethod[\"patch\"] = 3] = \"patch\";\n FetchMethod[FetchMethod[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\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}\nclass FetchRequest {\n constructor(delegate, method, location, body = new URLSearchParams(), target = null) {\n this.abortController = new AbortController();\n this.resolveRequestPromise = (_value) => { };\n this.delegate = delegate;\n this.method = method;\n this.headers = this.defaultHeaders;\n this.body = body;\n this.url = location;\n this.target = target;\n }\n get location() {\n return this.url;\n }\n get params() {\n return this.url.searchParams;\n }\n get entries() {\n return this.body ? Array.from(this.body.entries()) : [];\n }\n cancel() {\n this.abortController.abort();\n }\n async perform() {\n const { fetchOptions } = this;\n this.delegate.prepareRequest(this);\n await this.allowRequestToBeIntercepted(fetchOptions);\n try {\n this.delegate.requestStarted(this);\n const response = await fetch(this.url.href, fetchOptions);\n return await this.receive(response);\n }\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 }\n finally {\n this.delegate.requestFinished(this);\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 }\n else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse);\n }\n else {\n this.delegate.requestFailedWithResponse(this, fetchResponse);\n }\n return fetchResponse;\n }\n get fetchOptions() {\n var _a;\n return {\n method: FetchMethod[this.method].toUpperCase(),\n credentials: \"same-origin\",\n headers: this.headers,\n redirect: \"follow\",\n body: this.isSafe ? null : this.body,\n signal: this.abortSignal,\n referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href,\n };\n }\n get defaultHeaders() {\n return {\n Accept: \"text/html, application/xhtml+xml\",\n };\n }\n get isSafe() {\n return this.method === FetchMethod.get;\n }\n get abortSignal() {\n return this.abortController.signal;\n }\n acceptResponseType(mimeType) {\n this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\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 if (event.defaultPrevented)\n await requestInterception;\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 return !event.defaultPrevented;\n }\n}\n\nclass AppearanceObserver {\n constructor(delegate, element) {\n this.started = false;\n this.intersect = (entries) => {\n const lastEntry = entries.slice(-1)[0];\n if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element);\n }\n };\n this.delegate = delegate;\n this.element = element;\n this.intersectionObserver = new IntersectionObserver(this.intersect);\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.intersectionObserver.observe(this.element);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.intersectionObserver.unobserve(this.element);\n }\n }\n}\n\nclass StreamMessage {\n static wrap(message) {\n if (typeof message == \"string\") {\n return new this(createDocumentFragment(message));\n }\n else {\n return message;\n }\n }\n constructor(fragment) {\n this.fragment = importStreamElements(fragment);\n }\n}\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\nfunction importStreamElements(fragment) {\n for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n const streamElement = document.importNode(element, true);\n for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n }\n element.replaceWith(streamElement);\n }\n return fragment;\n}\n\nvar FormSubmissionState;\n(function (FormSubmissionState) {\n FormSubmissionState[FormSubmissionState[\"initialized\"] = 0] = \"initialized\";\n FormSubmissionState[FormSubmissionState[\"requesting\"] = 1] = \"requesting\";\n FormSubmissionState[FormSubmissionState[\"waiting\"] = 2] = \"waiting\";\n FormSubmissionState[FormSubmissionState[\"receiving\"] = 3] = \"receiving\";\n FormSubmissionState[FormSubmissionState[\"stopping\"] = 4] = \"stopping\";\n FormSubmissionState[FormSubmissionState[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\nvar FormEnctype;\n(function (FormEnctype) {\n FormEnctype[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n FormEnctype[\"multipart\"] = \"multipart/form-data\";\n FormEnctype[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\nfunction formEnctypeFromString(encoding) {\n switch (encoding.toLowerCase()) {\n case FormEnctype.multipart:\n return FormEnctype.multipart;\n case FormEnctype.plain:\n return FormEnctype.plain;\n default:\n return FormEnctype.urlEncoded;\n }\n}\nclass FormSubmission {\n static confirmMethod(message, _element, _submitter) {\n return Promise.resolve(confirm(message));\n }\n constructor(delegate, formElement, submitter, mustRedirect = false) {\n this.state = FormSubmissionState.initialized;\n this.delegate = delegate;\n this.formElement = formElement;\n this.submitter = submitter;\n this.formData = buildFormData(formElement, submitter);\n this.location = expandURL(this.action);\n if (this.method == FetchMethod.get) {\n mergeFormDataEntries(this.location, [...this.body.entries()]);\n }\n this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n this.mustRedirect = mustRedirect;\n }\n get method() {\n var _a;\n const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n }\n get action() {\n var _a;\n const formElementAction = typeof this.formElement.action === \"string\" ? this.formElement.action : null;\n if ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"formaction\")) {\n return this.submitter.getAttribute(\"formaction\") || \"\";\n }\n else {\n return this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n }\n }\n get body() {\n if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n return new URLSearchParams(this.stringFormData);\n }\n else {\n return this.formData;\n }\n }\n get enctype() {\n var _a;\n return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n }\n get isSafe() {\n return this.fetchRequest.isSafe;\n }\n get stringFormData() {\n return [...this.formData].reduce((entries, [name, value]) => {\n return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n }, []);\n }\n async start() {\n const { initialized, requesting } = FormSubmissionState;\n const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n if (typeof confirmationMessage === \"string\") {\n const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\n if (!answer) {\n return;\n }\n }\n if (this.state == initialized) {\n this.state = requesting;\n return this.fetchRequest.perform();\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 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 if (this.requestAcceptsTurboStreamResponse(request)) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n requestStarted(_request) {\n var _a;\n this.state = FormSubmissionState.waiting;\n (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute(\"disabled\", \"\");\n this.setSubmitsWith();\n dispatch(\"turbo:submit-start\", {\n target: this.formElement,\n detail: { formSubmission: this },\n });\n this.delegate.formSubmissionStarted(this);\n }\n requestPreventedHandlingResponse(request, response) {\n this.result = { success: response.succeeded, fetchResponse: response };\n }\n requestSucceededWithResponse(request, response) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n else 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 }\n else {\n this.state = FormSubmissionState.receiving;\n this.result = { success: true, fetchResponse: response };\n this.delegate.formSubmissionSucceededWithResponse(this, response);\n }\n }\n requestFailedWithResponse(request, response) {\n this.result = { success: false, fetchResponse: response };\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n requestErrored(request, error) {\n this.result = { success: false, error };\n this.delegate.formSubmissionErrored(this, error);\n }\n requestFinished(_request) {\n var _a;\n this.state = FormSubmissionState.stopped;\n (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute(\"disabled\");\n this.resetSubmitterText();\n dispatch(\"turbo:submit-end\", {\n target: this.formElement,\n detail: Object.assign({ formSubmission: this }, this.result),\n });\n this.delegate.formSubmissionFinished(this);\n }\n setSubmitsWith() {\n if (!this.submitter || !this.submitsWith)\n return;\n if (this.submitter.matches(\"button\")) {\n this.originalSubmitText = this.submitter.innerHTML;\n this.submitter.innerHTML = this.submitsWith;\n }\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 resetSubmitterText() {\n if (!this.submitter || !this.originalSubmitText)\n return;\n if (this.submitter.matches(\"button\")) {\n this.submitter.innerHTML = this.originalSubmitText;\n }\n else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n input.value = this.originalSubmitText;\n }\n }\n requestMustRedirect(request) {\n return !request.isSafe && this.mustRedirect;\n }\n requestAcceptsTurboStreamResponse(request) {\n return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement);\n }\n get submitsWith() {\n var _a;\n return (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"data-turbo-submits-with\");\n }\n}\nfunction buildFormData(formElement, submitter) {\n const formData = new FormData(formElement);\n const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"value\");\n if (name) {\n formData.append(name, value || \"\");\n }\n return formData;\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}\nfunction responseSucceededWithoutRedirect(response) {\n return response.statusCode == 200 && !response.redirected;\n}\nfunction mergeFormDataEntries(url, entries) {\n const searchParams = new URLSearchParams();\n for (const [name, value] of entries) {\n if (value instanceof File)\n continue;\n searchParams.append(name, value);\n }\n url.search = searchParams.toString();\n return url;\n}\n\nclass Snapshot {\n constructor(element) {\n this.element = element;\n }\n get activeElement() {\n return this.element.ownerDocument.activeElement;\n }\n get children() {\n return [...this.element.children];\n }\n hasAnchor(anchor) {\n return this.getElementForAnchor(anchor) != null;\n }\n getElementForAnchor(anchor) {\n return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null;\n }\n get isConnected() {\n return this.element.isConnected;\n }\n get firstAutofocusableElement() {\n const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n for (const element of this.element.querySelectorAll(\"[autofocus]\")) {\n if (element.closest(inertDisabledOrHidden) == null)\n return element;\n else\n continue;\n }\n return null;\n }\n get permanentElements() {\n return queryPermanentElementsAll(this.element);\n }\n getPermanentElementById(id) {\n return getPermanentElementById(this.element, id);\n }\n getPermanentElementMapForSnapshot(snapshot) {\n const permanentElementMap = {};\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 return permanentElementMap;\n }\n}\nfunction getPermanentElementById(node, id) {\n return node.querySelector(`#${id}[data-turbo-permanent]`);\n}\nfunction queryPermanentElementsAll(node) {\n return node.querySelectorAll(\"[id][data-turbo-permanent]\");\n}\n\nclass FormSubmitObserver {\n constructor(delegate, eventTarget) {\n this.started = false;\n this.submitCaptured = () => {\n this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n };\n this.submitBubbled = ((event) => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n const submitter = event.submitter || undefined;\n if (form &&\n submissionDoesNotDismissDialog(form, submitter) &&\n submissionDoesNotTargetIFrame(form, submitter) &&\n this.delegate.willSubmitForm(form, submitter)) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.delegate.formSubmitted(form, submitter);\n }\n }\n });\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n this.started = false;\n }\n }\n}\nfunction submissionDoesNotDismissDialog(form, submitter) {\n const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n return method != \"dialog\";\n}\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n if ((submitter === null || submitter === void 0 ? void 0 : submitter.hasAttribute(\"formtarget\")) || form.hasAttribute(\"target\")) {\n const target = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formtarget\")) || form.target;\n for (const element of document.getElementsByName(target)) {\n if (element instanceof HTMLIFrameElement)\n return false;\n }\n return true;\n }\n else {\n return true;\n }\n}\n\nclass View {\n constructor(delegate, element) {\n this.resolveRenderPromise = (_value) => { };\n this.resolveInterceptionPromise = (_value) => { };\n this.delegate = delegate;\n this.element = element;\n }\n scrollToAnchor(anchor) {\n const element = this.snapshot.getElementForAnchor(anchor);\n if (element) {\n this.scrollToElement(element);\n this.focusElement(element);\n }\n else {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n }\n scrollToAnchorFromLocation(location) {\n this.scrollToAnchor(getAnchor(location));\n }\n scrollToElement(element) {\n element.scrollIntoView();\n }\n focusElement(element) {\n if (element instanceof HTMLElement) {\n if (element.hasAttribute(\"tabindex\")) {\n element.focus();\n }\n else {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n element.removeAttribute(\"tabindex\");\n }\n }\n }\n scrollToPosition({ x, y }) {\n this.scrollRoot.scrollTo(x, y);\n }\n scrollToTop() {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n get scrollRoot() {\n return window;\n }\n async render(renderer) {\n const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;\n if (shouldRender) {\n try {\n this.renderPromise = new Promise((resolve) => (this.resolveRenderPromise = resolve));\n this.renderer = renderer;\n await this.prepareToRenderSnapshot(renderer);\n const renderInterception = new Promise((resolve) => (this.resolveInterceptionPromise = resolve));\n const options = { resume: this.resolveInterceptionPromise, render: this.renderer.renderElement };\n const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n if (!immediateRender)\n await renderInterception;\n await this.renderSnapshot(renderer);\n this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n this.delegate.preloadOnLoadLinksForView(this.element);\n this.finishRenderingSnapshot(renderer);\n }\n finally {\n delete this.renderer;\n this.resolveRenderPromise(undefined);\n delete this.renderPromise;\n }\n }\n else {\n this.invalidate(renderer.reloadReason);\n }\n }\n invalidate(reason) {\n this.delegate.viewInvalidated(reason);\n }\n async prepareToRenderSnapshot(renderer) {\n this.markAsPreview(renderer.isPreview);\n await renderer.prepareToRender();\n }\n markAsPreview(isPreview) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\");\n }\n else {\n this.element.removeAttribute(\"data-turbo-preview\");\n }\n }\n async renderSnapshot(renderer) {\n await renderer.render();\n }\n finishRenderingSnapshot(renderer) {\n renderer.finishRendering();\n }\n}\n\nclass FrameView extends View {\n missing() {\n this.element.innerHTML = `Content missing`;\n }\n get snapshot() {\n return new Snapshot(this.element);\n }\n}\n\nclass LinkInterceptor {\n constructor(delegate, element) {\n this.clickBubbled = (event) => {\n if (this.respondsToEventTarget(event.target)) {\n this.clickEvent = event;\n }\n else {\n delete this.clickEvent;\n }\n };\n this.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 this.willVisit = ((_event) => {\n delete this.clickEvent;\n });\n this.delegate = delegate;\n this.element = element;\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 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 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 constructor(delegate, eventTarget) {\n this.started = false;\n this.clickCaptured = () => {\n this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n };\n this.clickBubbled = (event) => {\n if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n const target = (event.composedPath && event.composedPath()[0]) || event.target;\n const link = this.findLinkFromClickTarget(target);\n if (link && doesNotTargetIFrame(link)) {\n const location = this.getLocationForLink(link);\n if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n event.preventDefault();\n this.delegate.followedLinkToLocation(link, location);\n }\n }\n }\n };\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n clickEventIsSignificant(event) {\n return !((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 findLinkFromClickTarget(target) {\n return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\");\n }\n getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\");\n }\n}\nfunction doesNotTargetIFrame(anchor) {\n if (anchor.hasAttribute(\"target\")) {\n for (const element of document.getElementsByName(anchor.target)) {\n if (element instanceof HTMLIFrameElement)\n return false;\n }\n return true;\n }\n else {\n return true;\n }\n}\n\nclass FormLinkClickObserver {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.linkInterceptor = new LinkClickObserver(this, element);\n }\n start() {\n this.linkInterceptor.start();\n }\n stop() {\n this.linkInterceptor.stop();\n }\n willFollowLinkToLocation(link, location, originalEvent) {\n return (this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n link.hasAttribute(\"data-turbo-method\"));\n }\n followedLinkToLocation(link, location) {\n const form = document.createElement(\"form\");\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 const action = Object.assign(location, { search: \"\" });\n form.setAttribute(\"data-turbo\", \"true\");\n form.setAttribute(\"action\", action.href);\n form.setAttribute(\"hidden\", \"\");\n const method = link.getAttribute(\"data-turbo-method\");\n if (method)\n form.setAttribute(\"method\", method);\n const turboFrame = link.getAttribute(\"data-turbo-frame\");\n if (turboFrame)\n form.setAttribute(\"data-turbo-frame\", turboFrame);\n const turboAction = getVisitAction(link);\n if (turboAction)\n form.setAttribute(\"data-turbo-action\", turboAction);\n const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n if (turboConfirm)\n form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n const turboStream = link.hasAttribute(\"data-turbo-stream\");\n if (turboStream)\n form.setAttribute(\"data-turbo-stream\", \"\");\n this.delegate.submittedFormLinkToLocation(link, location, form);\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 constructor(delegate, permanentElementMap) {\n this.delegate = delegate;\n this.permanentElementMap = permanentElementMap;\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 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 replaceNewPermanentElementWithPlaceholder(permanentElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement);\n permanentElement.replaceWith(placeholder);\n }\n replaceCurrentPermanentElementWithClone(permanentElement) {\n const clone = permanentElement.cloneNode(true);\n permanentElement.replaceWith(clone);\n }\n replacePlaceholderWithPermanentElement(permanentElement) {\n const placeholder = this.getPlaceholderById(permanentElement.id);\n placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n }\n getPlaceholderById(id) {\n return this.placeholders.find((element) => element.content == id);\n }\n get placeholders() {\n return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")];\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 constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n this.activeElement = null;\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 get shouldRender() {\n return true;\n }\n get reloadReason() {\n return;\n }\n prepareToRender() {\n return;\n }\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve();\n delete this.resolvingFunctions;\n }\n }\n async preservingPermanentElements(callback) {\n await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n }\n focusFirstAutofocusableElement() {\n const element = this.connectedSnapshot.firstAutofocusableElement;\n if (elementIsFocusable(element)) {\n element.focus();\n }\n }\n enteringBardo(currentPermanentElement) {\n if (this.activeElement)\n return;\n if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n this.activeElement = this.currentSnapshot.activeElement;\n }\n }\n leavingBardo(currentPermanentElement) {\n if (currentPermanentElement.contains(this.activeElement) && this.activeElement instanceof HTMLElement) {\n this.activeElement.focus();\n this.activeElement = null;\n }\n }\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n }\n get currentElement() {\n return this.currentSnapshot.element;\n }\n get newElement() {\n return this.newSnapshot.element;\n }\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n }\n}\nfunction elementIsFocusable(element) {\n return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n var _a;\n const destinationRange = document.createRange();\n destinationRange.selectNodeContents(currentElement);\n destinationRange.deleteContents();\n const frameElement = newElement;\n const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement);\n currentElement.appendChild(sourceRange.extractContents());\n }\n }\n constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n this.delegate = delegate;\n }\n get shouldRender() {\n return true;\n }\n async render() {\n await nextAnimationFrame();\n this.preservingPermanentElements(() => {\n this.loadFrameElement();\n });\n this.scrollFrameIntoView();\n await nextAnimationFrame();\n this.focusFirstAutofocusableElement();\n await nextAnimationFrame();\n this.activateScriptElements();\n }\n loadFrameElement() {\n this.delegate.willRenderFrame(this.currentElement, this.newElement);\n this.renderElement(this.currentElement, this.newElement);\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 if (element) {\n element.scrollIntoView({ block, behavior });\n return true;\n }\n }\n return false;\n }\n activateScriptElements() {\n for (const inertScriptElement of this.newScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n get newScriptElements() {\n return this.currentElement.querySelectorAll(\"script\");\n }\n}\nfunction readScrollLogicalPosition(value, defaultValue) {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value;\n }\n else {\n return defaultValue;\n }\n}\nfunction readScrollBehavior(value, defaultValue) {\n if (value == \"auto\" || value == \"smooth\") {\n return value;\n }\n else {\n return defaultValue;\n }\n}\n\nclass ProgressBar {\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 constructor() {\n this.hiding = false;\n this.value = 0;\n this.visible = false;\n this.trickle = () => {\n this.setValue(this.value + Math.random() / 100);\n };\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n this.installStylesheetElement();\n this.setValue(0);\n }\n show() {\n if (!this.visible) {\n this.visible = true;\n this.installProgressElement();\n this.startTrickling();\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 setValue(value) {\n this.value = value;\n this.refresh();\n }\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\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 fadeProgressElement(callback) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n }\n }\n stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + this.value * 90}%`;\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 createProgressElement() {\n const element = document.createElement(\"div\");\n element.className = \"turbo-progress-bar\";\n return element;\n }\n get cspNonce() {\n return getMetaContent(\"csp-nonce\");\n }\n}\nProgressBar.animationDuration = 300;\n\nclass HeadSnapshot extends Snapshot {\n constructor() {\n super(...arguments);\n this.detailsByOuterHTML = this.children\n .filter((element) => !elementIsNoscript(element))\n .map((element) => elementWithoutNonce(element))\n .reduce((result, element) => {\n const { outerHTML } = element;\n const details = outerHTML in result\n ? result[outerHTML]\n : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: [],\n };\n return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });\n }, {});\n }\n get trackedElementSignature() {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\");\n }\n getScriptElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n }\n getStylesheetElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\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 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 }\n else if (elements.length > 1) {\n return [...result, ...elements.slice(1)];\n }\n else {\n return result;\n }\n }, []);\n }\n getMetaValue(name) {\n const element = this.findMetaElementByName(name);\n return element ? element.getAttribute(\"content\") : null;\n }\n findMetaElementByName(name) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { elements: [element], } = this.detailsByOuterHTML[outerHTML];\n return elementIsMetaElementWithName(element, name) ? element : result;\n }, undefined);\n }\n}\nfunction elementType(element) {\n if (elementIsScript(element)) {\n return \"script\";\n }\n else if (elementIsStylesheet(element)) {\n return \"stylesheet\";\n }\n}\nfunction elementIsTracked(element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\nfunction elementIsScript(element) {\n const tagName = element.localName;\n return tagName == \"script\";\n}\nfunction elementIsNoscript(element) {\n const tagName = element.localName;\n return tagName == \"noscript\";\n}\nfunction elementIsStylesheet(element) {\n const tagName = element.localName;\n return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\");\n}\nfunction elementIsMetaElementWithName(element, name) {\n const tagName = element.localName;\n return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\nfunction elementWithoutNonce(element) {\n if (element.hasAttribute(\"nonce\")) {\n element.setAttribute(\"nonce\", \"\");\n }\n return element;\n}\n\nclass PageSnapshot extends Snapshot {\n static fromHTMLString(html = \"\") {\n return this.fromDocument(parseHTMLDocument(html));\n }\n static fromElement(element) {\n return this.fromDocument(element.ownerDocument);\n }\n static fromDocument({ head, body }) {\n return new this(body, new HeadSnapshot(head));\n }\n constructor(element, headSnapshot) {\n super(element);\n this.headSnapshot = headSnapshot;\n }\n clone() {\n const clonedElement = this.element.cloneNode(true);\n const selectElements = this.element.querySelectorAll(\"select\");\n const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n for (const [index, source] of selectElements.entries()) {\n const clone = clonedSelectElements[index];\n for (const option of clone.selectedOptions)\n option.selected = false;\n for (const option of source.selectedOptions)\n clone.options[option.index].selected = true;\n }\n for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n clonedPasswordInput.value = \"\";\n }\n return new PageSnapshot(clonedElement, this.headSnapshot);\n }\n get headElement() {\n return this.headSnapshot.element;\n }\n get rootLocation() {\n var _a;\n const root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n return expandURL(root);\n }\n get cacheControlValue() {\n return this.getSetting(\"cache-control\");\n }\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\";\n }\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\";\n }\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\";\n }\n getSetting(name) {\n return this.headSnapshot.getMetaValue(`turbo-${name}`);\n }\n}\n\nvar TimingMetric;\n(function (TimingMetric) {\n TimingMetric[\"visitStart\"] = \"visitStart\";\n TimingMetric[\"requestStart\"] = \"requestStart\";\n TimingMetric[\"requestEnd\"] = \"requestEnd\";\n TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\nvar VisitState;\n(function (VisitState) {\n VisitState[\"initialized\"] = \"initialized\";\n VisitState[\"started\"] = \"started\";\n VisitState[\"canceled\"] = \"canceled\";\n VisitState[\"failed\"] = \"failed\";\n VisitState[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\nconst defaultOptions = {\n action: \"advance\",\n historyChanged: false,\n visitCachedSnapshot: () => { },\n willRender: true,\n updateHistory: true,\n shouldCacheSnapshot: true,\n acceptsStreamResponse: false,\n};\nvar SystemStatusCode;\n(function (SystemStatusCode) {\n SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\nclass Visit {\n constructor(delegate, location, restorationIdentifier, options = {}) {\n this.identifier = uuid();\n this.timingMetrics = {};\n this.followedRedirect = false;\n this.historyChanged = false;\n this.scrolled = false;\n this.shouldCacheSnapshot = true;\n this.acceptsStreamResponse = false;\n this.snapshotCached = false;\n this.state = VisitState.initialized;\n this.delegate = delegate;\n this.location = location;\n this.restorationIdentifier = restorationIdentifier || uuid();\n const { action, historyChanged, referrer, snapshot, snapshotHTML, response, visitCachedSnapshot, willRender, updateHistory, shouldCacheSnapshot, acceptsStreamResponse, } = Object.assign(Object.assign({}, defaultOptions), options);\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.visitCachedSnapshot = visitCachedSnapshot;\n this.willRender = willRender;\n this.updateHistory = updateHistory;\n this.scrolled = !willRender;\n this.shouldCacheSnapshot = shouldCacheSnapshot;\n this.acceptsStreamResponse = acceptsStreamResponse;\n }\n get adapter() {\n return this.delegate.adapter;\n }\n get view() {\n return this.delegate.view;\n }\n get history() {\n return this.delegate.history;\n }\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n }\n get silent() {\n return this.isSamePage;\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 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 complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.state = VisitState.completed;\n this.followRedirect();\n if (!this.followedRedirect) {\n this.adapter.visitCompleted(this);\n this.delegate.visitCompleted(this);\n }\n }\n }\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n }\n }\n changeHistory() {\n var _a;\n if (!this.historyChanged && this.updateHistory) {\n const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.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 issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest();\n }\n else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location);\n this.request.perform();\n }\n }\n simulateRequest() {\n if (this.response) {\n this.startRequest();\n this.recordResponse();\n this.finishRequest();\n }\n }\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\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 }\n else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n }\n }\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n loadResponse() {\n if (this.response) {\n const { statusCode, responseHTML } = this.response;\n this.render(async () => {\n if (this.shouldCacheSnapshot)\n this.cacheSnapshot();\n if (this.view.renderPromise)\n await this.view.renderPromise;\n if (isSuccessful(statusCode) && responseHTML != null) {\n await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender, this);\n this.performScroll();\n this.adapter.visitRendered(this);\n this.complete();\n }\n else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n this.adapter.visitRendered(this);\n this.fail();\n }\n });\n }\n }\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\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 getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML);\n }\n }\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null;\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) {\n this.adapter.visitRendered(this);\n }\n else {\n if (this.view.renderPromise)\n await this.view.renderPromise;\n await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n this.performScroll();\n this.adapter.visitRendered(this);\n if (!isPreview) {\n this.complete();\n }\n }\n });\n }\n }\n followRedirect() {\n var _a;\n if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.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 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 prepareRequest(request) {\n if (this.acceptsStreamResponse) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n requestStarted() {\n this.startRequest();\n }\n requestPreventedHandlingResponse(_request, _response) { }\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 }\n else {\n this.redirectedToLocation = response.redirected ? response.location : undefined;\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\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 }\n else {\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n requestErrored(_request, _error) {\n this.recordResponse({\n statusCode: SystemStatusCode.networkFailure,\n redirected: false,\n });\n }\n requestFinished() {\n this.finishRequest();\n }\n performScroll() {\n if (!this.scrolled && !this.view.forceReloaded) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n }\n else {\n this.scrollToAnchor() || this.view.scrollToTop();\n }\n if (this.isSamePage) {\n this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n }\n this.scrolled = true;\n }\n }\n scrollToRestoredPosition() {\n const { scrollPosition } = this.restorationData;\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition);\n return true;\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 recordTimingMetric(metric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n getTimingMetrics() {\n return Object.assign({}, this.timingMetrics);\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 hasPreloadedResponse() {\n return typeof this.response == \"object\";\n }\n shouldIssueRequest() {\n if (this.isSamePage) {\n return false;\n }\n else if (this.action == \"restore\") {\n return !this.hasCachedSnapshot();\n }\n else {\n return this.willRender;\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 async render(callback) {\n this.cancelRender();\n await new Promise((resolve) => {\n this.frame = requestAnimationFrame(() => resolve());\n });\n await callback();\n delete this.frame;\n }\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n}\nfunction isSuccessful(statusCode) {\n return statusCode >= 200 && statusCode < 300;\n}\n\nclass BrowserAdapter {\n constructor(session) {\n this.progressBar = new ProgressBar();\n this.showProgressBar = () => {\n this.progressBar.show();\n };\n this.session = session;\n }\n visitProposedToLocation(location, options) {\n this.navigator.startVisit(location, (options === null || options === void 0 ? void 0 : options.restorationIdentifier) || uuid(), options);\n }\n visitStarted(visit) {\n this.location = visit.location;\n visit.loadCachedSnapshot();\n visit.issueRequest();\n visit.goToSamePageAnchor();\n }\n visitRequestStarted(visit) {\n this.progressBar.setValue(0);\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showVisitProgressBarAfterDelay();\n }\n else {\n this.showProgressBar();\n }\n }\n visitRequestCompleted(visit) {\n visit.loadResponse();\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 visitRequestFinished(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n visitCompleted(_visit) { }\n pageInvalidated(reason) {\n this.reload(reason);\n }\n visitFailed(_visit) { }\n visitRendered(_visit) { }\n formSubmissionStarted(_formSubmission) {\n this.progressBar.setValue(0);\n this.showFormProgressBarAfterDelay();\n }\n formSubmissionFinished(_formSubmission) {\n this.progressBar.setValue(1);\n this.hideFormProgressBar();\n }\n showVisitProgressBarAfterDelay() {\n this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n hideVisitProgressBar() {\n this.progressBar.hide();\n if (this.visitProgressBarTimeout != null) {\n window.clearTimeout(this.visitProgressBarTimeout);\n delete this.visitProgressBarTimeout;\n }\n }\n showFormProgressBarAfterDelay() {\n if (this.formProgressBarTimeout == null) {\n this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\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 reload(reason) {\n var _a;\n dispatch(\"turbo:reload\", { detail: reason });\n window.location.href = ((_a = this.location) === null || _a === void 0 ? void 0 : _a.toString()) || window.location.href;\n }\n get navigator() {\n return this.session.navigator;\n }\n}\n\nclass CacheObserver {\n constructor() {\n this.selector = \"[data-turbo-temporary]\";\n this.deprecatedSelector = \"[data-turbo-cache=false]\";\n this.started = false;\n this.removeTemporaryElements = ((_event) => {\n for (const element of this.temporaryElements) {\n element.remove();\n }\n });\n }\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n get temporaryElements() {\n return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation];\n }\n get temporaryElementsWithDeprecation() {\n const elements = document.querySelectorAll(this.deprecatedSelector);\n if (elements.length) {\n console.warn(`The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`);\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 start() {\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n stop() {\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n shouldInterceptLinkClick(element, _location, _event) {\n return this.shouldRedirect(element);\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 willSubmitForm(element, submitter) {\n return (element.closest(\"turbo-frame\") == null &&\n this.shouldSubmit(element, submitter) &&\n this.shouldRedirect(element, submitter));\n }\n formSubmitted(element, submitter) {\n const frame = this.findFrameElement(element, submitter);\n if (frame) {\n frame.delegate.formSubmitted(element, submitter);\n }\n }\n shouldSubmit(form, submitter) {\n var _a;\n const action = getAction(form, submitter);\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\");\n return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);\n }\n shouldRedirect(element, submitter) {\n const isNavigatable = element instanceof HTMLFormElement\n ? this.session.submissionIsNavigatable(element, submitter)\n : this.session.elementIsNavigatable(element);\n if (isNavigatable) {\n const frame = this.findFrameElement(element, submitter);\n return frame ? frame != element.closest(\"turbo-frame\") : false;\n }\n else {\n return false;\n }\n }\n findFrameElement(element, submitter) {\n const id = (submitter === null || submitter === void 0 ? void 0 : 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 constructor(delegate) {\n this.restorationIdentifier = uuid();\n this.restorationData = {};\n this.started = false;\n this.pageLoaded = false;\n this.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 } = turbo;\n this.restorationIdentifier = restorationIdentifier;\n this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);\n }\n }\n };\n this.onPageLoad = async (_event) => {\n await nextMicrotask();\n this.pageLoaded = true;\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false);\n addEventListener(\"load\", this.onPageLoad, false);\n this.started = true;\n this.replace(new URL(window.location.href));\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 push(location, restorationIdentifier) {\n this.update(history.pushState, location, restorationIdentifier);\n }\n replace(location, restorationIdentifier) {\n this.update(history.replaceState, location, restorationIdentifier);\n }\n update(method, location, restorationIdentifier = uuid()) {\n const state = { turbo: { restorationIdentifier } };\n method.call(history, state, \"\", location.href);\n this.location = location;\n this.restorationIdentifier = restorationIdentifier;\n }\n getRestorationDataForIdentifier(restorationIdentifier) {\n return this.restorationData[restorationIdentifier] || {};\n }\n updateRestorationData(additionalData) {\n const { restorationIdentifier } = this;\n const restorationData = this.restorationData[restorationIdentifier];\n this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n }\n assumeControlOfScrollRestoration() {\n var _a;\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n history.scrollRestoration = \"manual\";\n }\n }\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration;\n delete this.previousScrollRestoration;\n }\n }\n shouldHandlePopState() {\n return this.pageIsLoaded();\n }\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\";\n }\n}\n\nclass Navigator {\n constructor(delegate) {\n this.delegate = delegate;\n }\n proposeVisit(location, options = {}) {\n if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n if (locationIsVisitable(location, this.view.snapshot.rootLocation)) {\n this.delegate.visitProposedToLocation(location, options);\n }\n else {\n window.location.href = location.toString();\n }\n }\n }\n startVisit(locatable, restorationIdentifier, options = {}) {\n this.stop();\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({ referrer: this.location }, options));\n this.currentVisit.start();\n }\n submitForm(form, submitter) {\n this.stop();\n this.formSubmission = new FormSubmission(this, form, submitter, true);\n this.formSubmission.start();\n }\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop();\n delete this.formSubmission;\n }\n if (this.currentVisit) {\n this.currentVisit.cancel();\n delete this.currentVisit;\n }\n }\n get adapter() {\n return this.delegate.adapter;\n }\n get view() {\n return this.delegate.view;\n }\n get history() {\n return this.delegate.history;\n }\n formSubmissionStarted(formSubmission) {\n if (typeof this.adapter.formSubmissionStarted === \"function\") {\n this.adapter.formSubmissionStarted(formSubmission);\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 const { statusCode, redirected } = fetchResponse;\n const action = this.getActionForFormSubmission(formSubmission);\n const visitOptions = {\n action,\n shouldCacheSnapshot,\n response: { statusCode, responseHTML, redirected },\n };\n this.proposeVisit(fetchResponse.location, visitOptions);\n }\n }\n }\n async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n if (fetchResponse.serverError) {\n await this.view.renderError(snapshot, this.currentVisit);\n }\n else {\n await this.view.renderPage(snapshot, false, true, this.currentVisit);\n }\n this.view.scrollToTop();\n this.view.clearSnapshotCache();\n }\n }\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n formSubmissionFinished(formSubmission) {\n if (typeof this.adapter.formSubmissionFinished === \"function\") {\n this.adapter.formSubmissionFinished(formSubmission);\n }\n }\n visitStarted(visit) {\n this.delegate.visitStarted(visit);\n }\n visitCompleted(visit) {\n this.delegate.visitCompleted(visit);\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 return (action !== \"replace\" &&\n getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n (isRestorationToTop || (anchor != null && anchor !== currentAnchor)));\n }\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n }\n get location() {\n return this.history.location;\n }\n get restorationIdentifier() {\n return this.history.restorationIdentifier;\n }\n getActionForFormSubmission({ submitter, formElement }) {\n return getVisitAction(submitter, formElement) || \"advance\";\n }\n}\n\nvar PageStage;\n(function (PageStage) {\n PageStage[PageStage[\"initial\"] = 0] = \"initial\";\n PageStage[PageStage[\"loading\"] = 1] = \"loading\";\n PageStage[PageStage[\"interactive\"] = 2] = \"interactive\";\n PageStage[PageStage[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\nclass PageObserver {\n constructor(delegate) {\n this.stage = PageStage.initial;\n this.started = false;\n this.interpretReadyState = () => {\n const { readyState } = this;\n if (readyState == \"interactive\") {\n this.pageIsInteractive();\n }\n else if (readyState == \"complete\") {\n this.pageIsComplete();\n }\n };\n this.pageWillUnload = () => {\n this.delegate.pageWillUnload();\n };\n this.delegate = delegate;\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 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 pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive;\n this.delegate.pageBecameInteractive();\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 get readyState() {\n return document.readyState;\n }\n}\n\nclass ScrollObserver {\n constructor(delegate) {\n this.started = false;\n this.onScroll = () => {\n this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false);\n this.onScroll();\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false);\n this.started = false;\n }\n }\n updatePosition(position) {\n this.delegate.scrollPositionChanged(position);\n }\n}\n\nclass StreamMessageRenderer {\n render({ fragment }) {\n Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => document.documentElement.appendChild(fragment));\n }\n enteringBardo(currentPermanentElement, newPermanentElement) {\n newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n }\n leavingBardo() { }\n}\nfunction getPermanentElementMapForFragment(fragment) {\n const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n const permanentElementMap = {};\n for (const permanentElementInDocument of permanentElementsInDocument) {\n const { id } = permanentElementInDocument;\n for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n if (elementInStream) {\n permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n }\n }\n }\n return permanentElementMap;\n}\n\nclass StreamObserver {\n constructor(delegate) {\n this.sources = new Set();\n this.started = false;\n this.inspectFetchResponse = ((event) => {\n const response = fetchResponseFromEvent(event);\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault();\n this.receiveMessageResponse(response);\n }\n });\n this.receiveMessageEvent = (event) => {\n if (this.started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data);\n }\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\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 disconnectStreamSource(source) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source);\n source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n streamSourceIsConnected(source) {\n return this.sources.has(source);\n }\n async receiveMessageResponse(response) {\n const html = await response.responseHTML;\n if (html) {\n this.receiveMessageHTML(html);\n }\n }\n receiveMessageHTML(html) {\n this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n }\n}\nfunction fetchResponseFromEvent(event) {\n var _a;\n const fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse;\n }\n}\nfunction fetchResponseIsStream(response) {\n var _a;\n const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n return contentType.startsWith(StreamMessage.contentType);\n}\n\nclass ErrorRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const { documentElement, body } = document;\n documentElement.replaceChild(newElement, body);\n }\n async render() {\n this.replaceHeadAndBody();\n this.activateScriptElements();\n }\n replaceHeadAndBody() {\n const { documentElement, head } = document;\n documentElement.replaceChild(this.newHead, head);\n this.renderElement(this.currentElement, this.newElement);\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 get newHead() {\n return this.newSnapshot.headSnapshot.element;\n }\n get scriptElements() {\n return document.documentElement.querySelectorAll(\"script\");\n }\n}\n\nclass PageRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n if (document.body && newElement instanceof HTMLBodyElement) {\n document.body.replaceWith(newElement);\n }\n else {\n document.documentElement.appendChild(newElement);\n }\n }\n get shouldRender() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n }\n get reloadReason() {\n if (!this.newSnapshot.isVisitable) {\n return {\n reason: \"turbo_visit_control_is_reload\",\n };\n }\n if (!this.trackedElementsAreIdentical) {\n return {\n reason: \"tracked_element_mismatch\",\n };\n }\n }\n async prepareToRender() {\n await this.mergeHead();\n }\n async render() {\n if (this.willRender) {\n await this.replaceBody();\n }\n }\n finishRendering() {\n super.finishRendering();\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement();\n }\n }\n get currentHeadSnapshot() {\n return this.currentSnapshot.headSnapshot;\n }\n get newHeadSnapshot() {\n return this.newSnapshot.headSnapshot;\n }\n get newElement() {\n return this.newSnapshot.element;\n }\n async mergeHead() {\n const mergedHeadElements = this.mergeProvisionalElements();\n const newStylesheetElements = this.copyNewHeadStylesheetElements();\n this.copyNewHeadScriptElements();\n await mergedHeadElements;\n await newStylesheetElements;\n }\n async replaceBody() {\n await this.preservingPermanentElements(async () => {\n this.activateNewBody();\n await this.assignNewBody();\n });\n }\n get trackedElementsAreIdentical() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n }\n async copyNewHeadStylesheetElements() {\n const loadingElements = [];\n for (const element of this.newHeadStylesheetElements) {\n loadingElements.push(waitForLoad(element));\n document.head.appendChild(element);\n }\n await Promise.all(loadingElements);\n }\n copyNewHeadScriptElements() {\n for (const element of this.newHeadScriptElements) {\n document.head.appendChild(activateScriptElement(element));\n }\n }\n async mergeProvisionalElements() {\n const newHeadElements = [...this.newHeadProvisionalElements];\n for (const element of this.currentHeadProvisionalElements) {\n if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n document.head.removeChild(element);\n }\n }\n for (const element of newHeadElements) {\n document.head.appendChild(element);\n }\n }\n isCurrentElementInElementList(element, elementList) {\n for (const [index, newElement] of elementList.entries()) {\n if (element.tagName == \"TITLE\") {\n if (newElement.tagName != \"TITLE\") {\n continue;\n }\n if (element.innerHTML == newElement.innerHTML) {\n elementList.splice(index, 1);\n return true;\n }\n }\n if (newElement.isEqualNode(element)) {\n elementList.splice(index, 1);\n return true;\n }\n }\n return false;\n }\n removeCurrentHeadProvisionalElements() {\n for (const element of this.currentHeadProvisionalElements) {\n document.head.removeChild(element);\n }\n }\n copyNewHeadProvisionalElements() {\n for (const element of this.newHeadProvisionalElements) {\n document.head.appendChild(element);\n }\n }\n activateNewBody() {\n document.adoptNode(this.newElement);\n this.activateNewBodyScriptElements();\n }\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.newBodyScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n async assignNewBody() {\n await this.renderElement(this.currentElement, this.newElement);\n }\n get newHeadStylesheetElements() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n }\n get newHeadScriptElements() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n }\n get currentHeadProvisionalElements() {\n return this.currentHeadSnapshot.provisionalElements;\n }\n get newHeadProvisionalElements() {\n return this.newHeadSnapshot.provisionalElements;\n }\n get newBodyScriptElements() {\n return this.newElement.querySelectorAll(\"script\");\n }\n}\n\nclass SnapshotCache {\n constructor(size) {\n this.keys = [];\n this.snapshots = {};\n this.size = size;\n }\n has(location) {\n return toCacheKey(location) in this.snapshots;\n }\n get(location) {\n if (this.has(location)) {\n const snapshot = this.read(location);\n this.touch(location);\n return snapshot;\n }\n }\n put(location, snapshot) {\n this.write(location, snapshot);\n this.touch(location);\n return snapshot;\n }\n clear() {\n this.snapshots = {};\n }\n read(location) {\n return this.snapshots[toCacheKey(location)];\n }\n write(location, snapshot) {\n this.snapshots[toCacheKey(location)] = snapshot;\n }\n touch(location) {\n const key = toCacheKey(location);\n const index = this.keys.indexOf(key);\n if (index > -1)\n this.keys.splice(index, 1);\n this.keys.unshift(key);\n this.trim();\n }\n trim() {\n for (const key of this.keys.splice(this.size)) {\n delete this.snapshots[key];\n }\n }\n}\n\nclass PageView extends View {\n constructor() {\n super(...arguments);\n this.snapshotCache = new SnapshotCache(10);\n this.lastRenderedLocation = new URL(location.href);\n this.forceReloaded = false;\n }\n renderPage(snapshot, isPreview = false, willRender = true, visit) {\n const renderer = new PageRenderer(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n if (!renderer.shouldRender) {\n this.forceReloaded = true;\n }\n else {\n visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n }\n return this.render(renderer);\n }\n renderError(snapshot, visit) {\n visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n return this.render(renderer);\n }\n clearSnapshotCache() {\n this.snapshotCache.clear();\n }\n async cacheSnapshot(snapshot = this.snapshot) {\n if (snapshot.isCacheable) {\n this.delegate.viewWillCacheSnapshot();\n const { lastRenderedLocation: location } = this;\n await nextEventLoopTick();\n const cachedSnapshot = snapshot.clone();\n this.snapshotCache.put(location, cachedSnapshot);\n return cachedSnapshot;\n }\n }\n getCachedSnapshotForLocation(location) {\n return this.snapshotCache.get(location);\n }\n get snapshot() {\n return PageSnapshot.fromElement(this.element);\n }\n}\n\nclass Preloader {\n constructor(delegate) {\n this.selector = \"a[data-turbo-preload]\";\n this.delegate = delegate;\n }\n get snapshotCache() {\n return this.delegate.navigator.view.snapshotCache;\n }\n start() {\n if (document.readyState === \"loading\") {\n return document.addEventListener(\"DOMContentLoaded\", () => {\n this.preloadOnLoadLinksForView(document.body);\n });\n }\n else {\n this.preloadOnLoadLinksForView(document.body);\n }\n }\n preloadOnLoadLinksForView(element) {\n for (const link of element.querySelectorAll(this.selector)) {\n this.preloadURL(link);\n }\n }\n async preloadURL(link) {\n const location = new URL(link.href);\n if (this.snapshotCache.has(location)) {\n return;\n }\n try {\n const response = await fetch(location.toString(), { headers: { \"VND.PREFETCH\": \"true\", Accept: \"text/html\" } });\n const responseText = await response.text();\n const snapshot = PageSnapshot.fromHTMLString(responseText);\n this.snapshotCache.put(location, snapshot);\n }\n catch (_) {\n }\n }\n}\n\nclass Session {\n constructor() {\n this.navigator = new Navigator(this);\n this.history = new History(this);\n this.preloader = new Preloader(this);\n this.view = new PageView(this, document.documentElement);\n this.adapter = new BrowserAdapter(this);\n this.pageObserver = new PageObserver(this);\n this.cacheObserver = new CacheObserver();\n this.linkClickObserver = new LinkClickObserver(this, window);\n this.formSubmitObserver = new FormSubmitObserver(this, document);\n this.scrollObserver = new ScrollObserver(this);\n this.streamObserver = new StreamObserver(this);\n this.formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement);\n this.frameRedirector = new FrameRedirector(this, document.documentElement);\n this.streamMessageRenderer = new StreamMessageRenderer();\n this.drive = true;\n this.enabled = true;\n this.progressBarDelay = 500;\n this.started = false;\n this.formMode = \"on\";\n }\n start() {\n if (!this.started) {\n this.pageObserver.start();\n this.cacheObserver.start();\n this.formLinkClickObserver.start();\n this.linkClickObserver.start();\n this.formSubmitObserver.start();\n this.scrollObserver.start();\n this.streamObserver.start();\n this.frameRedirector.start();\n this.history.start();\n this.preloader.start();\n this.started = true;\n this.enabled = true;\n }\n }\n disable() {\n this.enabled = false;\n }\n stop() {\n if (this.started) {\n this.pageObserver.stop();\n this.cacheObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkClickObserver.stop();\n this.formSubmitObserver.stop();\n this.scrollObserver.stop();\n this.streamObserver.stop();\n this.frameRedirector.stop();\n this.history.stop();\n this.started = false;\n }\n }\n registerAdapter(adapter) {\n this.adapter = adapter;\n }\n visit(location, options = {}) {\n const frameElement = options.frame ? document.getElementById(options.frame) : null;\n if (frameElement instanceof FrameElement) {\n frameElement.src = location.toString();\n frameElement.loaded;\n }\n else {\n this.navigator.proposeVisit(expandURL(location), options);\n }\n }\n connectStreamSource(source) {\n this.streamObserver.connectStreamSource(source);\n }\n disconnectStreamSource(source) {\n this.streamObserver.disconnectStreamSource(source);\n }\n renderStreamMessage(message) {\n this.streamMessageRenderer.render(StreamMessage.wrap(message));\n }\n clearCache() {\n this.view.clearSnapshotCache();\n }\n setProgressBarDelay(delay) {\n this.progressBarDelay = delay;\n }\n setFormMode(mode) {\n this.formMode = mode;\n }\n get location() {\n return this.history.location;\n }\n get restorationIdentifier() {\n return this.history.restorationIdentifier;\n }\n historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {\n if (this.enabled) {\n this.navigator.startVisit(location, restorationIdentifier, {\n action: \"restore\",\n historyChanged: true,\n });\n }\n else {\n this.adapter.pageInvalidated({\n reason: \"turbo_disabled\",\n });\n }\n }\n scrollPositionChanged(position) {\n this.history.updateRestorationData({ scrollPosition: position });\n }\n willSubmitFormLinkToLocation(link, location) {\n return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation);\n }\n submittedFormLinkToLocation() { }\n willFollowLinkToLocation(link, location, event) {\n return (this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation) &&\n this.applicationAllowsFollowingLinkToLocation(link, location, event));\n }\n followedLinkToLocation(link, location) {\n const action = this.getActionForLink(link);\n const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n this.visit(location.href, { action, acceptsStreamResponse });\n }\n allowsVisitingLocationWithAction(location, action) {\n return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location);\n }\n visitProposedToLocation(location, options) {\n extendURLWithDeprecatedProperties(location);\n this.adapter.visitProposedToLocation(location, options);\n }\n visitStarted(visit) {\n if (!visit.acceptsStreamResponse) {\n markAsBusy(document.documentElement);\n }\n extendURLWithDeprecatedProperties(visit.location);\n if (!visit.silent) {\n this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n }\n }\n visitCompleted(visit) {\n clearBusyState(document.documentElement);\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n }\n locationWithActionIsSamePage(location, action) {\n return this.navigator.locationWithActionIsSamePage(location, action);\n }\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n }\n willSubmitForm(form, submitter) {\n const action = getAction(form, submitter);\n return (this.submissionIsNavigatable(form, submitter) &&\n locationIsVisitable(expandURL(action), this.snapshot.rootLocation));\n }\n formSubmitted(form, submitter) {\n this.navigator.submitForm(form, submitter);\n }\n pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location;\n this.notifyApplicationAfterPageLoad();\n }\n pageLoaded() {\n this.history.assumeControlOfScrollRestoration();\n }\n pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration();\n }\n receivedMessageFromStream(message) {\n this.renderStreamMessage(message);\n }\n viewWillCacheSnapshot() {\n var _a;\n if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n this.notifyApplicationBeforeCachingSnapshot();\n }\n }\n allowsImmediateRender({ element }, options) {\n const event = this.notifyApplicationBeforeRender(element, options);\n const { defaultPrevented, detail: { render }, } = event;\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n return !defaultPrevented;\n }\n viewRenderedSnapshot(_snapshot, _isPreview) {\n this.view.lastRenderedLocation = this.history.location;\n this.notifyApplicationAfterRender();\n }\n preloadOnLoadLinksForView(element) {\n this.preloader.preloadOnLoadLinksForView(element);\n }\n viewInvalidated(reason) {\n this.adapter.pageInvalidated(reason);\n }\n frameLoaded(frame) {\n this.notifyApplicationAfterFrameLoad(frame);\n }\n frameRendered(fetchResponse, frame) {\n this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n }\n applicationAllowsFollowingLinkToLocation(link, location, ev) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n return !event.defaultPrevented;\n }\n applicationAllowsVisitingLocation(location) {\n const event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented;\n }\n notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n return dispatch(\"turbo:click\", {\n target: link,\n detail: { url: location.href, originalEvent: event },\n cancelable: true,\n });\n }\n notifyApplicationBeforeVisitingLocation(location) {\n return dispatch(\"turbo:before-visit\", {\n detail: { url: location.href },\n cancelable: true,\n });\n }\n notifyApplicationAfterVisitingLocation(location, action) {\n return dispatch(\"turbo:visit\", { detail: { url: location.href, action } });\n }\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\");\n }\n notifyApplicationBeforeRender(newBody, options) {\n return dispatch(\"turbo:before-render\", {\n detail: Object.assign({ newBody }, options),\n cancelable: true,\n });\n }\n notifyApplicationAfterRender() {\n return dispatch(\"turbo:render\");\n }\n notifyApplicationAfterPageLoad(timing = {}) {\n return dispatch(\"turbo:load\", {\n detail: { url: this.location.href, timing },\n });\n }\n notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n dispatchEvent(new HashChangeEvent(\"hashchange\", {\n oldURL: oldURL.toString(),\n newURL: newURL.toString(),\n }));\n }\n notifyApplicationAfterFrameLoad(frame) {\n return dispatch(\"turbo:frame-load\", { target: frame });\n }\n notifyApplicationAfterFrameRender(fetchResponse, frame) {\n return dispatch(\"turbo:frame-render\", {\n detail: { fetchResponse },\n target: frame,\n cancelable: true,\n });\n }\n submissionIsNavigatable(form, submitter) {\n if (this.formMode == \"off\") {\n return false;\n }\n else {\n const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n if (this.formMode == \"optin\") {\n return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null;\n }\n else {\n return submitterIsNavigatable && this.elementIsNavigatable(form);\n }\n }\n }\n elementIsNavigatable(element) {\n const container = findClosestRecursively(element, \"[data-turbo]\");\n const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n if (this.drive || withinFrame) {\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\";\n }\n else {\n return true;\n }\n }\n else {\n if (container) {\n return container.getAttribute(\"data-turbo\") == \"true\";\n }\n else {\n return false;\n }\n }\n }\n getActionForLink(link) {\n return getVisitAction(link) || \"advance\";\n }\n get snapshot() {\n return this.view.snapshot;\n }\n}\nfunction extendURLWithDeprecatedProperties(url) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\nconst deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get() {\n return this.toString();\n },\n },\n};\n\nclass Cache {\n constructor(session) {\n this.session = session;\n }\n clear() {\n this.session.clearCache();\n }\n resetCacheControl() {\n this.setCacheControl(\"\");\n }\n exemptPageFromCache() {\n this.setCacheControl(\"no-cache\");\n }\n exemptPageFromPreview() {\n this.setCacheControl(\"no-preview\");\n }\n setCacheControl(value) {\n setMetaContent(\"turbo-cache-control\", value);\n }\n}\n\nconst StreamActions = {\n after() {\n this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e.nextSibling); });\n },\n append() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.append(this.templateContent));\n },\n before() {\n this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e); });\n },\n prepend() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.prepend(this.templateContent));\n },\n remove() {\n this.targetElements.forEach((e) => e.remove());\n },\n replace() {\n this.targetElements.forEach((e) => e.replaceWith(this.templateContent));\n },\n update() {\n this.targetElements.forEach((targetElement) => {\n targetElement.innerHTML = \"\";\n targetElement.append(this.templateContent);\n });\n },\n};\n\nconst session = new Session();\nconst cache = new Cache(session);\nconst { navigator: navigator$1 } = session;\nfunction start() {\n session.start();\n}\nfunction registerAdapter(adapter) {\n session.registerAdapter(adapter);\n}\nfunction visit(location, options) {\n session.visit(location, options);\n}\nfunction connectStreamSource(source) {\n session.connectStreamSource(source);\n}\nfunction disconnectStreamSource(source) {\n session.disconnectStreamSource(source);\n}\nfunction renderStreamMessage(message) {\n session.renderStreamMessage(message);\n}\nfunction clearCache() {\n console.warn(\"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\");\n session.clearCache();\n}\nfunction setProgressBarDelay(delay) {\n session.setProgressBarDelay(delay);\n}\nfunction setConfirmMethod(confirmMethod) {\n FormSubmission.confirmMethod = confirmMethod;\n}\nfunction setFormMode(mode) {\n session.setFormMode(mode);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n __proto__: null,\n navigator: navigator$1,\n session: session,\n cache: cache,\n PageRenderer: PageRenderer,\n PageSnapshot: PageSnapshot,\n FrameRenderer: FrameRenderer,\n start: start,\n registerAdapter: registerAdapter,\n visit: visit,\n connectStreamSource: connectStreamSource,\n disconnectStreamSource: disconnectStreamSource,\n renderStreamMessage: renderStreamMessage,\n clearCache: clearCache,\n setProgressBarDelay: setProgressBarDelay,\n setConfirmMethod: setConfirmMethod,\n setFormMode: setFormMode,\n StreamActions: StreamActions\n});\n\nclass TurboFrameMissingError extends Error {\n}\n\nclass FrameController {\n constructor(element) {\n this.fetchResponseLoaded = (_fetchResponse) => { };\n this.currentFetchRequest = null;\n this.resolveVisitPromise = () => { };\n this.connected = false;\n this.hasBeenLoaded = false;\n this.ignoredAttributes = new Set();\n this.action = null;\n this.visitCachedSnapshot = ({ element }) => {\n const frame = element.querySelector(\"#\" + this.element.id);\n if (frame && this.previousFrameElement) {\n frame.replaceChildren(...this.previousFrameElement.children);\n }\n delete this.previousFrameElement;\n };\n this.element = element;\n this.view = new FrameView(this, this.element);\n this.appearanceObserver = new AppearanceObserver(this, this.element);\n this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n this.linkInterceptor = new LinkInterceptor(this, this.element);\n this.restorationIdentifier = uuid();\n this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n }\n connect() {\n if (!this.connected) {\n this.connected = true;\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n }\n else {\n this.loadSourceURL();\n }\n this.formLinkClickObserver.start();\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n }\n disconnect() {\n if (this.connected) {\n this.connected = false;\n this.appearanceObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n }\n disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.loadSourceURL();\n }\n }\n sourceURLChanged() {\n if (this.isIgnoringChangesTo(\"src\"))\n return;\n if (this.element.isConnected) {\n this.complete = false;\n }\n if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n this.loadSourceURL();\n }\n }\n sourceURLReloaded() {\n const { src } = this.element;\n this.ignoringChangesToAttribute(\"complete\", () => {\n this.element.removeAttribute(\"complete\");\n });\n this.element.src = null;\n this.element.src = src;\n return this.element.loaded;\n }\n completeChanged() {\n if (this.isIgnoringChangesTo(\"complete\"))\n return;\n this.loadSourceURL();\n }\n loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n }\n else {\n this.appearanceObserver.stop();\n this.loadSourceURL();\n }\n }\n async loadSourceURL() {\n if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n this.element.loaded = this.visit(expandURL(this.sourceURL));\n this.appearanceObserver.stop();\n await this.element.loaded;\n this.hasBeenLoaded = true;\n }\n }\n async loadResponse(fetchResponse) {\n if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n this.sourceURL = fetchResponse.response.url;\n }\n try {\n const html = await fetchResponse.responseHTML;\n if (html) {\n const document = parseHTMLDocument(html);\n const pageSnapshot = PageSnapshot.fromDocument(document);\n if (pageSnapshot.isVisitable) {\n await this.loadFrameResponse(fetchResponse, document);\n }\n else {\n await this.handleUnvisitableFrameResponse(fetchResponse);\n }\n }\n }\n finally {\n this.fetchResponseLoaded = () => { };\n }\n }\n elementAppearedInViewport(element) {\n this.proposeVisitIfNavigatedWithAction(element, element);\n this.loadSourceURL();\n }\n willSubmitFormLinkToLocation(link) {\n return this.shouldInterceptNavigation(link);\n }\n submittedFormLinkToLocation(link, _location, form) {\n const frame = this.findFrameElement(link);\n if (frame)\n form.setAttribute(\"data-turbo-frame\", frame.id);\n }\n shouldInterceptLinkClick(element, _location, _event) {\n return this.shouldInterceptNavigation(element);\n }\n linkClickIntercepted(element, location) {\n this.navigateFrame(element, location);\n }\n willSubmitForm(element, submitter) {\n return element.closest(\"turbo-frame\") == this.element && this.shouldInterceptNavigation(element, submitter);\n }\n formSubmitted(element, submitter) {\n if (this.formSubmission) {\n this.formSubmission.stop();\n }\n this.formSubmission = new FormSubmission(this, element, submitter);\n const { fetchRequest } = this.formSubmission;\n this.prepareRequest(fetchRequest);\n this.formSubmission.start();\n }\n prepareRequest(request) {\n var _a;\n request.headers[\"Turbo-Frame\"] = this.id;\n if ((_a = this.currentNavigationElement) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"data-turbo-stream\")) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n requestStarted(_request) {\n markAsBusy(this.element);\n }\n requestPreventedHandlingResponse(_request, _response) {\n this.resolveVisitPromise();\n }\n async requestSucceededWithResponse(request, response) {\n await this.loadResponse(response);\n this.resolveVisitPromise();\n }\n async requestFailedWithResponse(request, response) {\n await this.loadResponse(response);\n this.resolveVisitPromise();\n }\n requestErrored(request, error) {\n console.error(error);\n this.resolveVisitPromise();\n }\n requestFinished(_request) {\n clearBusyState(this.element);\n }\n formSubmissionStarted({ formElement }) {\n markAsBusy(formElement, this.findFrameElement(formElement));\n }\n formSubmissionSucceededWithResponse(formSubmission, response) {\n const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n frame.delegate.loadResponse(response);\n if (!formSubmission.isSafe) {\n session.clearCache();\n }\n }\n formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n this.element.delegate.loadResponse(fetchResponse);\n session.clearCache();\n }\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n formSubmissionFinished({ formElement }) {\n clearBusyState(formElement, this.findFrameElement(formElement));\n }\n allowsImmediateRender({ element: newFrame }, options) {\n const event = dispatch(\"turbo:before-frame-render\", {\n target: this.element,\n detail: Object.assign({ newFrame }, options),\n cancelable: true,\n });\n const { defaultPrevented, detail: { render }, } = event;\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n return !defaultPrevented;\n }\n viewRenderedSnapshot(_snapshot, _isPreview) { }\n preloadOnLoadLinksForView(element) {\n session.preloadOnLoadLinksForView(element);\n }\n viewInvalidated() { }\n willRenderFrame(currentElement, _newElement) {\n this.previousFrameElement = currentElement.cloneNode(true);\n }\n async loadFrameResponse(fetchResponse, document) {\n const newFrameElement = await this.extractForeignFrameElement(document.body);\n if (newFrameElement) {\n const snapshot = new Snapshot(newFrameElement);\n const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n if (this.view.renderPromise)\n await this.view.renderPromise;\n this.changeHistory();\n await this.view.render(renderer);\n this.complete = true;\n session.frameRendered(fetchResponse, this.element);\n session.frameLoaded(this.element);\n this.fetchResponseLoaded(fetchResponse);\n }\n else if (this.willHandleFrameMissingFromResponse(fetchResponse)) {\n this.handleFrameMissingFromResponse(fetchResponse);\n }\n }\n async visit(url) {\n var _a;\n const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();\n this.currentFetchRequest = request;\n return new Promise((resolve) => {\n this.resolveVisitPromise = () => {\n this.resolveVisitPromise = () => { };\n this.currentFetchRequest = null;\n resolve();\n };\n request.perform();\n });\n }\n navigateFrame(element, url, submitter) {\n const frame = this.findFrameElement(element, submitter);\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n this.withCurrentNavigationElement(element, () => {\n frame.src = url;\n });\n }\n proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n this.action = getVisitAction(submitter, element, frame);\n if (this.action) {\n const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n const { visitCachedSnapshot } = frame.delegate;\n frame.delegate.fetchResponseLoaded = (fetchResponse) => {\n if (frame.src) {\n const { statusCode, redirected } = fetchResponse;\n const responseHTML = frame.ownerDocument.documentElement.outerHTML;\n const response = { statusCode, redirected, responseHTML };\n const options = {\n response,\n visitCachedSnapshot,\n willRender: false,\n updateHistory: false,\n restorationIdentifier: this.restorationIdentifier,\n snapshot: pageSnapshot,\n };\n if (this.action)\n options.action = this.action;\n session.visit(frame.src, options);\n }\n };\n }\n }\n changeHistory() {\n if (this.action) {\n const method = getHistoryMethodForAction(this.action);\n session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n }\n }\n async handleUnvisitableFrameResponse(fetchResponse) {\n console.warn(`The response (${fetchResponse.statusCode}) from is performing a full page visit due to turbo-visit-control.`);\n await this.visitResponse(fetchResponse.response);\n }\n willHandleFrameMissingFromResponse(fetchResponse) {\n this.element.setAttribute(\"complete\", \"\");\n const response = fetchResponse.response;\n const visit = async (url, options = {}) => {\n if (url instanceof Response) {\n this.visitResponse(url);\n }\n else {\n session.visit(url, options);\n }\n };\n const event = dispatch(\"turbo:frame-missing\", {\n target: this.element,\n detail: { response, visit },\n cancelable: true,\n });\n return !event.defaultPrevented;\n }\n handleFrameMissingFromResponse(fetchResponse) {\n this.view.missing();\n this.throwFrameMissingError(fetchResponse);\n }\n throwFrameMissingError(fetchResponse) {\n const message = `The response (${fetchResponse.statusCode}) did not contain the expected and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n throw new TurboFrameMissingError(message);\n }\n async visitResponse(response) {\n const wrapped = new FetchResponse(response);\n const responseHTML = await wrapped.responseHTML;\n const { location, redirected, statusCode } = wrapped;\n return session.visit(location, { response: { redirected, statusCode, responseHTML } });\n }\n findFrameElement(element, submitter) {\n var _a;\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n }\n async extractForeignFrameElement(container) {\n let element;\n const id = CSS.escape(this.id);\n try {\n element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n if (element) {\n return element;\n }\n element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n if (element) {\n await element.loaded;\n return await this.extractForeignFrameElement(element);\n }\n }\n catch (error) {\n console.error(error);\n return new FrameElement();\n }\n return null;\n }\n formActionIsVisitable(form, submitter) {\n const action = getAction(form, submitter);\n return locationIsVisitable(expandURL(action), this.rootLocation);\n }\n shouldInterceptNavigation(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {\n return false;\n }\n if (!this.enabled || id == \"_top\") {\n return false;\n }\n if (id) {\n const frameElement = getFrameElementById(id);\n if (frameElement) {\n return !frameElement.disabled;\n }\n }\n if (!session.elementIsNavigatable(element)) {\n return false;\n }\n if (submitter && !session.elementIsNavigatable(submitter)) {\n return false;\n }\n return true;\n }\n get id() {\n return this.element.id;\n }\n get enabled() {\n return !this.element.disabled;\n }\n get sourceURL() {\n if (this.element.src) {\n return this.element.src;\n }\n }\n set sourceURL(sourceURL) {\n this.ignoringChangesToAttribute(\"src\", () => {\n this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n });\n }\n get loadingStyle() {\n return this.element.loading;\n }\n get isLoading() {\n return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n }\n get complete() {\n return this.element.hasAttribute(\"complete\");\n }\n set complete(value) {\n this.ignoringChangesToAttribute(\"complete\", () => {\n if (value) {\n this.element.setAttribute(\"complete\", \"\");\n }\n else {\n this.element.removeAttribute(\"complete\");\n }\n });\n }\n get isActive() {\n return this.element.isActive && this.connected;\n }\n get rootLocation() {\n var _a;\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\";\n return expandURL(root);\n }\n isIgnoringChangesTo(attributeName) {\n return this.ignoredAttributes.has(attributeName);\n }\n ignoringChangesToAttribute(attributeName, callback) {\n this.ignoredAttributes.add(attributeName);\n callback();\n this.ignoredAttributes.delete(attributeName);\n }\n withCurrentNavigationElement(element, callback) {\n this.currentNavigationElement = element;\n callback();\n delete this.currentNavigationElement;\n }\n}\nfunction getFrameElementById(id) {\n if (id != null) {\n const element = document.getElementById(id);\n if (element instanceof FrameElement) {\n return element;\n }\n }\n}\nfunction activateElement(element, currentURL) {\n if (element) {\n const src = element.getAttribute(\"src\");\n if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n throw new Error(`Matching element has a source URL which references itself`);\n }\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true);\n }\n if (element instanceof FrameElement) {\n element.connectedCallback();\n element.disconnectedCallback();\n return element;\n }\n }\n}\n\nclass StreamElement extends HTMLElement {\n static async renderElement(newElement) {\n await newElement.performAction();\n }\n async connectedCallback() {\n try {\n await this.render();\n }\n catch (error) {\n console.error(error);\n }\n finally {\n this.disconnect();\n }\n }\n async render() {\n var _a;\n return ((_a = this.renderPromise) !== null && _a !== void 0 ? _a : (this.renderPromise = (async () => {\n const event = this.beforeRenderEvent;\n if (this.dispatchEvent(event)) {\n await nextAnimationFrame();\n await event.detail.render(this);\n }\n })()));\n }\n disconnect() {\n try {\n this.remove();\n }\n catch (_a) { }\n }\n removeDuplicateTargetChildren() {\n this.duplicateChildren.forEach((c) => c.remove());\n }\n get duplicateChildren() {\n var _a;\n const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n const newChildrenIds = [...(((_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children) || [])].filter((c) => !!c.id).map((c) => c.id);\n return existingChildren.filter((c) => newChildrenIds.includes(c.id));\n }\n get performAction() {\n if (this.action) {\n const actionFunction = StreamActions[this.action];\n if (actionFunction) {\n return actionFunction;\n }\n this.raise(\"unknown action\");\n }\n this.raise(\"action attribute is missing\");\n }\n get targetElements() {\n if (this.target) {\n return this.targetElementsById;\n }\n else if (this.targets) {\n return this.targetElementsByQuery;\n }\n else {\n this.raise(\"target or targets attribute is missing\");\n }\n }\n get templateContent() {\n return this.templateElement.content.cloneNode(true);\n }\n get templateElement() {\n if (this.firstElementChild === null) {\n const template = this.ownerDocument.createElement(\"template\");\n this.appendChild(template);\n return template;\n }\n else if (this.firstElementChild instanceof HTMLTemplateElement) {\n return this.firstElementChild;\n }\n this.raise(\"first child element must be a element\");\n }\n get action() {\n return this.getAttribute(\"action\");\n }\n get target() {\n return this.getAttribute(\"target\");\n }\n get targets() {\n return this.getAttribute(\"targets\");\n }\n raise(message) {\n throw new Error(`${this.description}: ${message}`);\n }\n get description() {\n var _a, _b;\n return (_b = ((_a = this.outerHTML.match(/<[^>]+>/)) !== null && _a !== void 0 ? _a : [])[0]) !== null && _b !== void 0 ? _b : \"\";\n }\n get beforeRenderEvent() {\n return new CustomEvent(\"turbo:before-stream-render\", {\n bubbles: true,\n cancelable: true,\n detail: { newStream: this, render: StreamElement.renderElement },\n });\n }\n get targetElementsById() {\n var _a;\n const element = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.getElementById(this.target);\n if (element !== null) {\n return [element];\n }\n else {\n return [];\n }\n }\n get targetElementsByQuery() {\n var _a;\n const elements = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.targets);\n if (elements.length !== 0) {\n return Array.prototype.slice.call(elements);\n }\n else {\n return [];\n }\n }\n}\n\nclass StreamSourceElement extends HTMLElement {\n constructor() {\n super(...arguments);\n this.streamSource = null;\n }\n connectedCallback() {\n this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n connectStreamSource(this.streamSource);\n }\n disconnectedCallback() {\n if (this.streamSource) {\n disconnectStreamSource(this.streamSource);\n }\n }\n get src() {\n return this.getAttribute(\"src\") || \"\";\n }\n}\n\nFrameElement.delegateConstructor = FrameController;\nif (customElements.get(\"turbo-frame\") === undefined) {\n customElements.define(\"turbo-frame\", FrameElement);\n}\nif (customElements.get(\"turbo-stream\") === undefined) {\n customElements.define(\"turbo-stream\", StreamElement);\n}\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n let element = document.currentScript;\n if (!element)\n return;\n if (element.hasAttribute(\"data-turbo-suppress-warning\"))\n return;\n element = element.parentElement;\n while (element) {\n if (element == document.body) {\n return console.warn(unindent `\n You are loading Turbo from a