{"version":3,"file":"turbo.js","mappings":"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","sources":["webpack://rolemodel_website/./node_modules/@rails/actioncable/src/adapters.js","webpack://rolemodel_website/./node_modules/@rails/actioncable/src/logger.js","webpack://rolemodel_website/./node_modules/@rails/actioncable/src/connection_monitor.js","webpack://rolemodel_website/./node_modules/@rails/actioncable/src/internal.js","webpack://rolemodel_website/./node_modules/@rails/actioncable/src/connection.js","webpack://rolemodel_website/./node_modules/@rails/actioncable/src/subscription.js","webpack://rolemodel_website/./node_modules/@rails/actioncable/src/subscription_guarantor.js","webpack://rolemodel_website/./node_modules/@rails/actioncable/src/subscriptions.js","webpack://rolemodel_website/./node_modules/@rails/actioncable/src/consumer.js","webpack://rolemodel_website/./node_modules/@rails/actioncable/src/index.js","webpack://rolemodel_website/webpack/bootstrap","webpack://rolemodel_website/webpack/runtime/define property getters","webpack://rolemodel_website/webpack/runtime/hasOwnProperty shorthand","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":["export default {\n logger: self.console,\n WebSocket: self.WebSocket\n}\n","import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n// ActionCable.logger.enabled = true\n//\n// Example:\n//\n// import * as ActionCable from '@rails/actioncable'\n//\n// ActionCable.logger.enabled = true\n// ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n log(...messages) {\n if (this.enabled) {\n messages.push(Date.now())\n adapters.logger.log(\"[ActionCable]\", ...messages)\n }\n },\n}\n","import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n constructor(connection) {\n this.visibilityDidChange = this.visibilityDidChange.bind(this)\n this.connection = connection\n this.reconnectAttempts = 0\n }\n\n start() {\n if (!this.isRunning()) {\n this.startedAt = now()\n delete this.stoppedAt\n this.startPolling()\n addEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n }\n }\n\n stop() {\n if (this.isRunning()) {\n this.stoppedAt = now()\n this.stopPolling()\n removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(\"ConnectionMonitor stopped\")\n }\n }\n\n isRunning() {\n return this.startedAt && !this.stoppedAt\n }\n\n recordPing() {\n this.pingedAt = now()\n }\n\n recordConnect() {\n this.reconnectAttempts = 0\n this.recordPing()\n delete this.disconnectedAt\n logger.log(\"ConnectionMonitor recorded connect\")\n }\n\n recordDisconnect() {\n this.disconnectedAt = now()\n logger.log(\"ConnectionMonitor recorded disconnect\")\n }\n\n // Private\n\n startPolling() {\n this.stopPolling()\n this.poll()\n }\n\n stopPolling() {\n clearTimeout(this.pollTimeout)\n }\n\n poll() {\n this.pollTimeout = setTimeout(() => {\n this.reconnectIfStale()\n this.poll()\n }\n , this.getPollInterval())\n }\n\n getPollInterval() {\n const { staleThreshold, reconnectionBackoffRate } = this.constructor\n const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n const jitter = jitterMax * Math.random()\n return staleThreshold * 1000 * backoff * (1 + jitter)\n }\n\n reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n this.reconnectAttempts++\n if (this.disconnectedRecently()) {\n logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n } else {\n logger.log(\"ConnectionMonitor reopening\")\n this.connection.reopen()\n }\n }\n }\n\n get refreshedAt() {\n return this.pingedAt ? this.pingedAt : this.startedAt\n }\n\n connectionIsStale() {\n return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n }\n\n disconnectedRecently() {\n return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n }\n\n visibilityDidChange() {\n if (document.visibilityState === \"visible\") {\n setTimeout(() => {\n if (this.connectionIsStale() || !this.connection.isOpen()) {\n logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n this.connection.reopen()\n }\n }\n , 200)\n }\n }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n","export default {\n \"message_types\": {\n \"welcome\": \"welcome\",\n \"disconnect\": \"disconnect\",\n \"ping\": \"ping\",\n \"confirmation\": \"confirm_subscription\",\n \"rejection\": \"reject_subscription\"\n },\n \"disconnect_reasons\": {\n \"unauthorized\": \"unauthorized\",\n \"invalid_request\": \"invalid_request\",\n \"server_restart\": \"server_restart\"\n },\n \"default_mount_path\": \"/cable\",\n \"protocols\": [\n \"actioncable-v1-json\",\n \"actioncable-unsupported\"\n ]\n}\n","import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n constructor(consumer) {\n this.open = this.open.bind(this)\n this.consumer = consumer\n this.subscriptions = this.consumer.subscriptions\n this.monitor = new ConnectionMonitor(this)\n this.disconnected = true\n }\n\n send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data))\n return true\n } else {\n return false\n }\n }\n\n open() {\n if (this.isActive()) {\n logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n return false\n } else {\n logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`)\n if (this.webSocket) { this.uninstallEventHandlers() }\n this.webSocket = new adapters.WebSocket(this.consumer.url, protocols)\n this.installEventHandlers()\n this.monitor.start()\n return true\n }\n }\n\n close({allowReconnect} = {allowReconnect: true}) {\n if (!allowReconnect) { this.monitor.stop() }\n // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n if (this.isOpen()) {\n return this.webSocket.close()\n }\n }\n\n reopen() {\n logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n if (this.isActive()) {\n try {\n return this.close()\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error)\n }\n finally {\n logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n setTimeout(this.open, this.constructor.reopenDelay)\n }\n } else {\n return this.open()\n }\n }\n\n getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol\n }\n }\n\n isOpen() {\n return this.isState(\"open\")\n }\n\n isActive() {\n return this.isState(\"open\", \"connecting\")\n }\n\n // Private\n\n isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n }\n\n isState(...states) {\n return indexOf.call(states, this.getState()) >= 0\n }\n\n getState() {\n if (this.webSocket) {\n for (let state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase()\n }\n }\n }\n return null\n }\n\n installEventHandlers() {\n for (let eventName in this.events) {\n const handler = this.events[eventName].bind(this)\n this.webSocket[`on${eventName}`] = handler\n }\n }\n\n uninstallEventHandlers() {\n for (let eventName in this.events) {\n this.webSocket[`on${eventName}`] = function() {}\n }\n }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n message(event) {\n if (!this.isProtocolSupported()) { return }\n const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n switch (type) {\n case message_types.welcome:\n this.monitor.recordConnect()\n return this.subscriptions.reload()\n case message_types.disconnect:\n logger.log(`Disconnecting. Reason: ${reason}`)\n return this.close({allowReconnect: reconnect})\n case message_types.ping:\n return this.monitor.recordPing()\n case message_types.confirmation:\n this.subscriptions.confirmSubscription(identifier)\n return this.subscriptions.notify(identifier, \"connected\")\n case message_types.rejection:\n return this.subscriptions.reject(identifier)\n default:\n return this.subscriptions.notify(identifier, \"received\", message)\n }\n },\n\n open() {\n logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n this.disconnected = false\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n return this.close({allowReconnect: false})\n }\n },\n\n close(event) {\n logger.log(\"WebSocket onclose event\")\n if (this.disconnected) { return }\n this.disconnected = true\n this.monitor.recordDisconnect()\n return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n },\n\n error() {\n logger.log(\"WebSocket onerror event\")\n }\n}\n\nexport default Connection\n","// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n// connected() {\n// // Called once the subscription has been successfully completed\n// },\n//\n// disconnected({ willAttemptReconnect: boolean }) {\n// // Called when the client has disconnected with the server.\n// // The object will have an `willAttemptReconnect` property which\n// // says whether the client has the intention of attempting\n// // to reconnect.\n// },\n//\n// appear() {\n// this.perform('appear', {appearing_on: this.appearingOn()})\n// },\n//\n// away() {\n// this.perform('away')\n// },\n//\n// appearingOn() {\n// $('main').data('appearing-on')\n// }\n// })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n// class AppearanceChannel < ApplicationActionCable::Channel\n// def subscribed\n// current_user.appear\n// end\n//\n// def unsubscribed\n// current_user.disappear\n// end\n//\n// def appear(data)\n// current_user.appear on: data['appearing_on']\n// end\n//\n// def away\n// current_user.away\n// end\n// end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n if (properties != null) {\n for (let key in properties) {\n const value = properties[key]\n object[key] = value\n }\n }\n return object\n}\n\nexport default class Subscription {\n constructor(consumer, params = {}, mixin) {\n this.consumer = consumer\n this.identifier = JSON.stringify(params)\n extend(this, mixin)\n }\n\n // Perform a channel action with the optional data passed as an attribute\n perform(action, data = {}) {\n data.action = action\n return this.send(data)\n }\n\n send(data) {\n return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n }\n\n unsubscribe() {\n return this.consumer.subscriptions.remove(this)\n }\n}\n","import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n constructor(subscriptions) {\n this.subscriptions = subscriptions\n this.pendingSubscriptions = []\n }\n\n guarantee(subscription) {\n if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n this.pendingSubscriptions.push(subscription) \n }\n else {\n logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n }\n this.startGuaranteeing()\n }\n\n forget(subscription) {\n logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n }\n\n startGuaranteeing() {\n this.stopGuaranteeing()\n this.retrySubscribing()\n }\n \n stopGuaranteeing() {\n clearTimeout(this.retryTimeout)\n }\n\n retrySubscribing() {\n this.retryTimeout = setTimeout(() => {\n if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n this.pendingSubscriptions.map((subscription) => {\n logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n this.subscriptions.subscribe(subscription)\n })\n }\n }\n , 500)\n }\n}\n\nexport default SubscriptionGuarantor","import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n constructor(consumer) {\n this.consumer = consumer\n this.guarantor = new SubscriptionGuarantor(this)\n this.subscriptions = []\n }\n\n create(channelName, mixin) {\n const channel = channelName\n const params = typeof channel === \"object\" ? channel : {channel}\n const subscription = new Subscription(this.consumer, params, mixin)\n return this.add(subscription)\n }\n\n // Private\n\n add(subscription) {\n this.subscriptions.push(subscription)\n this.consumer.ensureActiveConnection()\n this.notify(subscription, \"initialized\")\n this.subscribe(subscription)\n return subscription\n }\n\n remove(subscription) {\n this.forget(subscription)\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\")\n }\n return subscription\n }\n\n reject(identifier) {\n return this.findAll(identifier).map((subscription) => {\n this.forget(subscription)\n this.notify(subscription, \"rejected\")\n return subscription\n })\n }\n\n forget(subscription) {\n this.guarantor.forget(subscription)\n this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n return subscription\n }\n\n findAll(identifier) {\n return this.subscriptions.filter((s) => s.identifier === identifier)\n }\n\n reload() {\n return this.subscriptions.map((subscription) =>\n this.subscribe(subscription))\n }\n\n notifyAll(callbackName, ...args) {\n return this.subscriptions.map((subscription) =>\n this.notify(subscription, callbackName, ...args))\n }\n\n notify(subscription, callbackName, ...args) {\n let subscriptions\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription)\n } else {\n subscriptions = [subscription]\n }\n\n return subscriptions.map((subscription) =>\n (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n }\n\n subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription)\n }\n }\n\n confirmSubscription(identifier) {\n logger.log(`Subscription confirmed ${identifier}`)\n this.findAll(identifier).map((subscription) =>\n this.guarantor.forget(subscription))\n }\n\n sendCommand(subscription, command) {\n const {identifier} = subscription\n return this.consumer.send({command, identifier})\n }\n}\n","import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n// App.cable.disconnect()\n//\n// and to restart the connection:\n//\n// App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n constructor(url) {\n this._url = url\n this.subscriptions = new Subscriptions(this)\n this.connection = new Connection(this)\n }\n\n get url() {\n return createWebSocketURL(this._url)\n }\n\n send(data) {\n return this.connection.send(data)\n }\n\n connect() {\n return this.connection.open()\n }\n\n disconnect() {\n return this.connection.close({allowReconnect: false})\n }\n\n ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open()\n }\n }\n}\n\nexport function createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url()\n }\n\n if (url && !/^wss?:/i.test(url)) {\n const a = document.createElement(\"a\")\n a.href = url\n // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n a.href = a.href\n a.protocol = a.protocol.replace(\"http\", \"ws\")\n return a.href\n } else {\n return url\n }\n}\n","import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n Connection,\n ConnectionMonitor,\n Consumer,\n INTERNAL,\n Subscription,\n Subscriptions,\n SubscriptionGuarantor,\n adapters,\n createWebSocketURL,\n logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n return new Consumer(url)\n}\n\nexport function getConfig(name) {\n const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n if (element) {\n return element.getAttribute(\"content\")\n }\n}\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","// 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__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","/*\nTurbo 7.2.4\nCopyright © 2022 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;\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 else {\n prototype = window.Event.prototype;\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 constructor() {\n super();\n this.loaded = Promise.resolve();\n this.delegate = new FrameElement.delegateConstructor(this);\n }\n static get observedAttributes() {\n return [\"disabled\", \"complete\", \"loading\", \"src\"];\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 isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\";\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 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 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}\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 var _a, _b;\n const { fetchOptions } = this;\n (_b = (_a = this.delegate).prepareHeadersForRequest) === null || _b === void 0 ? void 0 : _b.call(_a, this.headers, 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.isIdempotent ? 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 isIdempotent() {\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 constructor(fragment) {\n this.fragment = importStreamElements(fragment);\n }\n static wrap(message) {\n if (typeof message == \"string\") {\n return new this(createDocumentFragment(message));\n }\n else {\n return message;\n }\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 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 static confirmMethod(message, _element, _submitter) {\n return Promise.resolve(confirm(message));\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 isIdempotent() {\n return this.fetchRequest.isIdempotent;\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 prepareHeadersForRequest(headers, request) {\n if (!request.isIdempotent) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n if (token) {\n 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 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 dispatch(\"turbo:submit-end\", {\n target: this.formElement,\n detail: Object.assign({ formSubmission: this }, this.result),\n });\n this.delegate.formSubmissionFinished(this);\n }\n requestMustRedirect(request) {\n return !request.isIdempotent && this.mustRedirect;\n }\n requestAcceptsTurboStreamResponse(request) {\n return !request.isIdempotent || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement);\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 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\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 invalidate() {\n this.element.innerHTML = \"\";\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 if (target instanceof Element) {\n return target.closest(\"a[href]:not([target^=_]):not([download])\");\n }\n }\n getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\");\n }\n}\nfunction doesNotTargetIFrame(anchor) {\n for (const element of document.getElementsByName(anchor.target)) {\n if (element instanceof HTMLIFrameElement)\n return false;\n }\n return true;\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 action = location.href;\n const form = document.createElement(\"form\");\n form.setAttribute(\"data-turbo\", \"true\");\n form.setAttribute(\"action\", action);\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 = link.getAttribute(\"data-turbo-action\");\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 constructor(delegate, permanentElementMap) {\n this.delegate = delegate;\n this.permanentElementMap = permanentElementMap;\n }\n static preservingPermanentElements(delegate, permanentElementMap, callback) {\n const bardo = new this(delegate, permanentElementMap);\n bardo.enter();\n callback();\n bardo.leave();\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 preservingPermanentElements(callback) {\n 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 constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n this.delegate = delegate;\n }\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 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 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 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 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 constructor(element, headSnapshot) {\n super(element);\n this.headSnapshot = headSnapshot;\n }\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 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 });\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 prepareHeadersForRequest(headers, 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.started = false;\n this.removeStaleElements = ((_event) => {\n const staleElements = [...document.querySelectorAll('[data-turbo-cache=\"false\"]')];\n for (const element of staleElements) {\n element.remove();\n }\n });\n }\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n }\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.method == FetchMethod.get;\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(formSubmission) {\n const { formElement, submitter } = formSubmission;\n const action = getAttribute(\"data-turbo-action\", submitter, formElement);\n return isAction(action) ? action : \"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 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 newStylesheetElements = this.copyNewHeadStylesheetElements();\n this.copyNewHeadScriptElements();\n this.removeCurrentHeadProvisionalElements();\n this.copyNewHeadProvisionalElements();\n await newStylesheetElements;\n }\n replaceBody() {\n this.preservingPermanentElements(() => {\n this.activateNewBody();\n 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 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 assignNewBody() {\n 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 = element.closest(\"[data-turbo]\");\n const withinFrame = element.closest(\"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 const action = link.getAttribute(\"data-turbo-action\");\n return isAction(action) ? action : \"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((e) => e.replaceChildren(this.templateContent));\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 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 { body } = parseHTMLDocument(html);\n const newFrameElement = await this.extractForeignFrameElement(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 console.warn(`A matching frame for #${this.element.id} was missing from the response, transforming into full-page Visit.`);\n this.visitResponse(fetchResponse.response);\n }\n }\n }\n catch (error) {\n console.error(error);\n this.view.invalidate();\n }\n finally {\n this.fetchResponseLoaded = () => { };\n }\n }\n elementAppearedInViewport(_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.prepareHeadersForRequest(fetchRequest.headers, fetchRequest);\n this.formSubmission.start();\n }\n prepareHeadersForRequest(headers, request) {\n var _a;\n 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 console.error(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 }\n formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n this.element.delegate.loadResponse(fetchResponse);\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 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 this.pageSnapshot = PageSnapshot.fromElement(frame).clone();\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 (isAction(this.action)) {\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: this.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 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 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