{ "version": 3, "sources": ["../../../node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@rails/actioncable/src/index.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/analysis_controller.js", "../../javascript/controllers/annual_contribution_controller.js", "../../../node_modules/autosize/dist/autosize.esm.js", "../../javascript/controllers/autosize_controller.js", "../../javascript/controllers/body_scroll_position_controller.js", "../../javascript/controllers/bond_controller.js", "../../javascript/controllers/chart_controller.js", "../../javascript/controllers/checkbox_controls_controller.js", "../../javascript/controllers/checkout_controller.js", "../../javascript/controllers/column_controller.js", "../../../node_modules/@rails/request.js/src/fetch_response.js", "../../../node_modules/@rails/request.js/src/request_interceptor.js", "../../../node_modules/@rails/request.js/src/lib/utils.js", "../../../node_modules/@rails/request.js/src/fetch_request.js", "../../../node_modules/@rails/request.js/src/verbs.js", "../../../node_modules/@rails/request.js/src/index.js", "../../javascript/controllers/column_list_controller.js", "../../javascript/controllers/column_search_controller.js", "../../javascript/controllers/columns_controller.js", "../../javascript/controllers/connection_controller.js", "../../javascript/controllers/connection_progress_controller.js", "../../javascript/controllers/connector_controller.js", "../../javascript/controllers/date_inquiry_controller.js", "../../javascript/controllers/dividend_growth_slider_controller.js", "../../javascript/controllers/dividend_safety/comparer_controller.js", "../../javascript/controllers/dividend_safety/review_controller.js", "../../javascript/controllers/dividend_yield_slider_controller.js", "../../javascript/controllers/entry_controller.js", "../../javascript/controllers/event_controller.js", "../../javascript/controllers/fair_value_history_controller.js", "../../javascript/controllers/file_chooser_controller.js", "../../javascript/controllers/financials_controller.js", "../../javascript/controllers/form_controller.js", "../../javascript/controllers/holdings_grid_controller.js", "../../javascript/controllers/ignore_enter_controller.js", "../../javascript/controllers/industry_list_controller.js", "../../javascript/controllers/infinite_page_controller.js", "../../javascript/controllers/load_in_chunks_controller.js", "../../javascript/controllers/maintain_jump_controller.js", "../../../node_modules/el-transition/index.js", "../../javascript/controllers/modal_controller.js", "../../javascript/controllers/newsletter_signup_controller.js", "../../javascript/controllers/notes_loader_controller.js", "../../javascript/controllers/number_input_controller.js", "../../javascript/controllers/payout_form_controller.js", "../../javascript/controllers/quantity_validator_controller.js", "../../javascript/controllers/remove_in_lite_controller.js", "../../javascript/controllers/scroll_hinter_controller.js", "../../javascript/controllers/scroll_position_controller.js", "../../javascript/controllers/scroll_to_element_controller.js", "../../javascript/controllers/sorter_controller.js", "../../javascript/controllers/spreadsheet_import_preview_controller.js", "../../javascript/controllers/sticky_element_controller.js", "../../javascript/controllers/today_or_otherwise_controller.js", "../../javascript/controllers/totals_controller.js", "../../javascript/controllers/widowless_controller.js", "../../javascript/controllers/yodlee_controller.js", "../../../node_modules/smoothscroll-polyfill/dist/smoothscroll.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../javascript/controllers/index.js", "../../javascript/application.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 if (this.isActive()) {\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", "/*\nStimulus 3.2.1\nCopyright \u00A9 2022 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[1];\n let keyFilter = matches[2];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[3]),\n eventName,\n eventOptions: matches[6] ? parseEventOptions(matches[6]) : {},\n identifier: matches[4],\n methodName: matches[5],\n keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nclass Action {\n constructor(element, index, descriptor, schema) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n isFilterTarget(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filteres = this.keyFilter.split(\"+\");\n const modifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\n const [meta, ctrl, alt, shift] = modifiers.map((modifier) => filteres.includes(modifier));\n if (event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift) {\n return true;\n }\n const standardFilter = filteres.filter((key) => !modifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(event)) {\n this.invokeWithEvent(event);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n const { params } = this.action;\n const actionEvent = Object.assign(event, { params });\n this.method.call(this.controller, actionEvent);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.isFilterTarget(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(node, attributeName) {\n const element = node;\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details = {}) {\n this.selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const matches = element.matches(this.selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n elementMatched(element) {\n this.selectorMatched(element);\n }\n elementUnmatched(element) {\n this.selectorUnmatched(element);\n }\n elementAttributeChanged(element, _attributeName) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(this.selector, element);\n if (!matches && matchedBefore) {\n this.selectorUnmatched(element);\n }\n }\n selectorMatched(element) {\n if (this.delegate.selectorMatched) {\n this.delegate.selectorMatched(element, this.selector, this.details);\n this.matchesByElement.add(this.selector, element);\n }\n }\n selectorUnmatched(element) {\n this.delegate.selectorUnmatched(element, this.selector, this.details);\n this.matchesByElement.delete(this.selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n }\n start() {\n if (this.selectorObserverMap.size === 0) {\n this.outletDefinitions.forEach((outletName) => {\n const selector = this.selector(outletName);\n const details = { outletName };\n if (selector) {\n this.selectorObserverMap.set(outletName, new SelectorObserver(document.body, selector, this, details));\n }\n });\n this.selectorObserverMap.forEach((observer) => observer.start());\n }\n this.dependentContexts.forEach((context) => context.refresh());\n }\n stop() {\n if (this.selectorObserverMap.size > 0) {\n this.disconnectAllOutlets();\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n return (this.hasOutlet(element, outletName) &&\n element.matches(`[${this.context.application.schema.controllerAttribute}~=${outletName}]`));\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad(definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outlet = this.outlets.find(name);\n if (outlet) {\n const outletController = this.application.getControllerForElementAndIdentifier(outlet, name);\n if (outletController) {\n return outletController;\n }\n else {\n throw new Error(`Missing \"data-controller=${name}\" attribute on outlet element for \"${this.identifier}\" controller`);\n }\n }\n throw new Error(`Missing outlet element \"${name}\" for \"${this.identifier}\" controller`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outlet) => {\n const controller = this.application.getControllerForElementAndIdentifier(outlet, name);\n if (controller) {\n return controller;\n }\n else {\n console.warn(`The provided outlet element is missing the outlet controller \"${name}\" for \"${this.identifier}\"`, outlet);\n }\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outlet = this.outlets.find(name);\n if (outlet) {\n return outlet;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const typeFromObject = parseValueTypeConstant(payload.typeObject.type);\n if (!typeFromObject)\n return;\n const defaultValueType = parseValueTypeDefault(payload.typeObject.default);\n if (typeFromObject !== defaultValueType) {\n const propertyPath = payload.controller ? `${payload.controller}.${payload.token}` : payload.token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${payload.typeObject.default}\" is of type \"${defaultValueType}\".`);\n }\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const typeFromObject = parseValueTypeObject({\n controller: payload.controller,\n token: payload.token,\n typeObject: payload.typeDefinition,\n });\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeDefinition);\n const typeFromConstant = parseValueTypeConstant(payload.typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = payload.controller ? `${payload.controller}.${payload.typeDefinition}` : payload.token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${payload.token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const defaultValue = typeDefinition.default;\n if (defaultValue !== undefined)\n return defaultValue;\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const key = `${dasherize(payload.token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(payload.typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(payload.typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value);\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON,\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"position\", \"title\" ]\n\n connect() {\n this.watchForTitleLeavingView()\n }\n\n watchForTitleLeavingView() {\n new IntersectionObserver(\n ([ entry ]) => this.element.classList.toggle(\"title-out-of-view\", !entry.isIntersecting),\n {\n threshold: 0,\n rootMargin: \"-66px 0px 0px 0px\" // Account for height of global nav\n }\n ).observe(this.titleTarget)\n }\n\n checkPositionPresence() {\n this.element.classList.toggle(\"with-position\", this.hasPositionTarget)\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"input\" ]\n\n connect() {\n this.toggleReset()\n }\n\n toggleReset() {\n this.element.dataset.reset = this.inputTarget.value == \"0\"\n }\n\n reset(event) {\n this.inputTarget.value = \"0\"\n this.toggleReset()\n event.preventDefault()\n }\n}", "var e,t,n=\"function\"==typeof Map?new Map:(e=[],t=[],{has:function(t){return e.indexOf(t)>-1},get:function(n){return t[e.indexOf(n)]},set:function(n,o){-1===e.indexOf(n)&&(e.push(n),t.push(o))},delete:function(n){var o=e.indexOf(n);o>-1&&(e.splice(o,1),t.splice(o,1))}}),o=function(e){return new Event(e,{bubbles:!0})};try{new Event(\"test\")}catch(e){o=function(e){var t=document.createEvent(\"Event\");return t.initEvent(e,!0,!1),t}}function r(e){var t=n.get(e);t&&t.destroy()}function i(e){var t=n.get(e);t&&t.update()}var l=null;\"undefined\"==typeof window||\"function\"!=typeof window.getComputedStyle?((l=function(e){return e}).destroy=function(e){return e},l.update=function(e){return e}):((l=function(e,t){return e&&Array.prototype.forEach.call(e.length?e:[e],function(e){return function(e){if(e&&e.nodeName&&\"TEXTAREA\"===e.nodeName&&!n.has(e)){var t,r=null,i=null,l=null,d=function(){e.clientWidth!==i&&c()},a=function(t){window.removeEventListener(\"resize\",d,!1),e.removeEventListener(\"input\",c,!1),e.removeEventListener(\"keyup\",c,!1),e.removeEventListener(\"autosize:destroy\",a,!1),e.removeEventListener(\"autosize:update\",c,!1),Object.keys(t).forEach(function(n){e.style[n]=t[n]}),n.delete(e)}.bind(e,{height:e.style.height,resize:e.style.resize,overflowY:e.style.overflowY,overflowX:e.style.overflowX,wordWrap:e.style.wordWrap});e.addEventListener(\"autosize:destroy\",a,!1),\"onpropertychange\"in e&&\"oninput\"in e&&e.addEventListener(\"keyup\",c,!1),window.addEventListener(\"resize\",d,!1),e.addEventListener(\"input\",c,!1),e.addEventListener(\"autosize:update\",c,!1),e.style.overflowX=\"hidden\",e.style.wordWrap=\"break-word\",n.set(e,{destroy:a,update:c}),\"vertical\"===(t=window.getComputedStyle(e,null)).resize?e.style.resize=\"none\":\"both\"===t.resize&&(e.style.resize=\"horizontal\"),r=\"content-box\"===t.boxSizing?-(parseFloat(t.paddingTop)+parseFloat(t.paddingBottom)):parseFloat(t.borderTopWidth)+parseFloat(t.borderBottomWidth),isNaN(r)&&(r=0),c()}function u(t){var n=e.style.width;e.style.width=\"0px\",e.style.width=n,e.style.overflowY=t}function s(){if(0!==e.scrollHeight){var t=function(e){for(var t=[];e&&e.parentNode&&e.parentNode instanceof Element;)e.parentNode.scrollTop&&t.push({node:e.parentNode,scrollTop:e.parentNode.scrollTop}),e=e.parentNode;return t}(e),n=document.documentElement&&document.documentElement.scrollTop;e.style.height=\"\",e.style.height=e.scrollHeight+r+\"px\",i=e.clientWidth,t.forEach(function(e){e.node.scrollTop=e.scrollTop}),n&&(document.documentElement.scrollTop=n)}}function c(){s();var t=Math.round(parseFloat(e.style.height)),n=window.getComputedStyle(e,null),r=\"content-box\"===n.boxSizing?Math.round(parseFloat(n.height)):e.offsetHeight;if(r<t?\"hidden\"===n.overflowY&&(u(\"scroll\"),s(),r=\"content-box\"===n.boxSizing?Math.round(parseFloat(window.getComputedStyle(e,null).height)):e.offsetHeight):\"hidden\"!==n.overflowY&&(u(\"hidden\"),s(),r=\"content-box\"===n.boxSizing?Math.round(parseFloat(window.getComputedStyle(e,null).height)):e.offsetHeight),l!==r){l=r;var i=o(\"autosize:resized\");try{e.dispatchEvent(i)}catch(e){}}}}(e)}),e}).destroy=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],r),e},l.update=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],i),e});var d=l;export default d;\n", "import autosize from \"autosize\"\nimport { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n connect() {\n autosize(this.element)\n }\n\n update() {\n autosize.update(this.element)\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static classes = [ \"toRight\", \"down\" ]\n\n initialize() {\n this.check = SSD.throttle(this.check.bind(this), 100)\n }\n\n check() {\n this.element.classList.toggle(this.toRightClass, this.isToRight)\n this.element.classList.toggle(this.downClass, this.isDown)\n }\n\n lock() {\n this.element.style.overflow = \"hidden\"\n }\n\n unlock() {\n this.element.style.overflow = null\n }\n\n get isToRight() {\n return document.documentElement.scrollLeft > 0 || document.scrollLeft > 0\n }\n\n get isDown() {\n return document.documentElement.scrollTop > 0 || document.scrollTop > 0\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"maturityDateInput\" ]\n\n resetMaturityDate() {\n this.maturityDateInputTargets.forEach(input => input.selectedIndex = 0)\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = { type: String }\n\n connect() {\n this.render()\n }\n\n disconnect() {\n if ($(this.element).highcharts()) {\n $(this.element).highcharts().destroy()\n }\n }\n\n render() {\n const $chart = $(this.element)\n const options = SSD.charts[this.typeValue]($chart)\n\n // Don't block page load while charts render\n setTimeout(() => $chart.highcharts(options), 1)\n }\n\n get isRendered() {\n return this.element.querySelector(\"svg\")\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"checkbox\" ]\n\n selectAll(event) {\n this.checkboxTargets.forEach((checkbox) => {\n checkbox.checked = true\n this.triggerInputEventOn(checkbox)\n })\n event.preventDefault()\n }\n\n selectNone(event) {\n this.checkboxTargets.forEach((checkbox) => {\n checkbox.checked = false\n this.triggerInputEventOn(checkbox)\n })\n event.preventDefault()\n }\n\n triggerInputEventOn(checkbox) {\n const event = new Event('input', { bubbles: false, cancelable: true })\n checkbox.dispatchEvent(event)\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"form\", \"token\" ]\n\n connect() {\n this.modal = StripeCheckout.configure({\n locale: \"auto\",\n token: (token) => {\n this.tokenTarget.value = token.id\n this.formTarget.requestSubmit()\n }\n })\n }\n\n open({ target }) {\n this.modal.open(target.dataset)\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = { key: String }\n static outlets = [ \"columns\" ]\n\n toggle() {\n this.columnsOutlet.toggleColumn(this.keyValue)\n }\n}", "export class FetchResponse {\n constructor (response) {\n this.response = response\n }\n\n get statusCode () {\n return this.response.status\n }\n\n get redirected () {\n return this.response.redirected\n }\n\n get ok () {\n return this.response.ok\n }\n\n get unauthenticated () {\n return this.statusCode === 401\n }\n\n get unprocessableEntity () {\n return this.statusCode === 422\n }\n\n get authenticationURL () {\n return this.response.headers.get('WWW-Authenticate')\n }\n\n get contentType () {\n const contentType = this.response.headers.get('Content-Type') || ''\n\n return contentType.replace(/;.*$/, '')\n }\n\n get headers () {\n return this.response.headers\n }\n\n get html () {\n if (this.contentType.match(/^(application|text)\\/(html|xhtml\\+xml)$/)) {\n return this.text\n }\n\n return Promise.reject(new Error(`Expected an HTML response but got \"${this.contentType}\" instead`))\n }\n\n get json () {\n if (this.contentType.match(/^application\\/.*json$/)) {\n return this.responseJson || (this.responseJson = this.response.json())\n }\n\n return Promise.reject(new Error(`Expected a JSON response but got \"${this.contentType}\" instead`))\n }\n\n get text () {\n return this.responseText || (this.responseText = this.response.text())\n }\n\n get isTurboStream () {\n return this.contentType.match(/^text\\/vnd\\.turbo-stream\\.html/)\n }\n\n get isScript () {\n return this.contentType.match(/\\b(?:java|ecma)script\\b/)\n }\n\n async renderTurboStream () {\n if (this.isTurboStream) {\n if (window.Turbo) {\n await window.Turbo.renderStreamMessage(await this.text)\n } else {\n console.warn('You must set `window.Turbo = Turbo` to automatically process Turbo Stream events with request.js')\n }\n } else {\n return Promise.reject(new Error(`Expected a Turbo Stream response but got \"${this.contentType}\" instead`))\n }\n }\n\n async activeScript () {\n if (this.isScript) {\n const script = document.createElement('script')\n const metaTag = document.querySelector('meta[name=csp-nonce]')\n const nonce = metaTag && metaTag.content\n if (nonce) { script.setAttribute('nonce', nonce) }\n script.innerHTML = await this.text\n document.body.appendChild(script)\n } else {\n return Promise.reject(new Error(`Expected a Script response but got \"${this.contentType}\" instead`))\n }\n }\n}\n", "export class RequestInterceptor {\n static register (interceptor) {\n this.interceptor = interceptor\n }\n\n static get () {\n return this.interceptor\n }\n\n static reset () {\n this.interceptor = undefined\n }\n}\n", "export function getCookie (name) {\n const cookies = document.cookie ? document.cookie.split('; ') : []\n const prefix = `${encodeURIComponent(name)}=`\n const cookie = cookies.find(cookie => cookie.startsWith(prefix))\n\n if (cookie) {\n const value = cookie.split('=').slice(1).join('=')\n\n if (value) {\n return decodeURIComponent(value)\n }\n }\n}\n\nexport function compact (object) {\n const result = {}\n\n for (const key in object) {\n const value = object[key]\n if (value !== undefined) {\n result[key] = value\n }\n }\n\n return result\n}\n\nexport function metaContent (name) {\n const element = document.head.querySelector(`meta[name=\"${name}\"]`)\n return element && element.content\n}\n\nexport function stringEntriesFromFormData (formData) {\n return [...formData].reduce((entries, [name, value]) => {\n return entries.concat(typeof value === 'string' ? [[name, value]] : [])\n }, [])\n}\n\nexport function mergeEntries (searchParams, entries) {\n for (const [name, value] of entries) {\n if (value instanceof window.File) continue\n\n if (searchParams.has(name) && !name.includes('[]')) {\n searchParams.delete(name)\n searchParams.set(name, value)\n } else {\n searchParams.append(name, value)\n }\n }\n}\n", "import { FetchResponse } from './fetch_response'\nimport { RequestInterceptor } from './request_interceptor'\nimport { getCookie, compact, metaContent, stringEntriesFromFormData, mergeEntries } from './lib/utils'\n\nexport class FetchRequest {\n constructor (method, url, options = {}) {\n this.method = method\n this.options = options\n this.originalUrl = url.toString()\n }\n\n async perform () {\n try {\n const requestInterceptor = RequestInterceptor.get()\n if (requestInterceptor) {\n await requestInterceptor(this)\n }\n } catch (error) {\n console.error(error)\n }\n\n const fetch = (this.responseKind === 'turbo-stream' && window.Turbo)\n ? window.Turbo.fetch\n : window.fetch\n\n const response = new FetchResponse(await fetch(this.url, this.fetchOptions))\n\n if (response.unauthenticated && response.authenticationURL) {\n return Promise.reject(window.location.href = response.authenticationURL)\n }\n\n if (response.isScript) {\n await response.activeScript()\n }\n\n const responseStatusIsTurboStreamable = response.ok || response.unprocessableEntity\n\n if (responseStatusIsTurboStreamable && response.isTurboStream) {\n await response.renderTurboStream()\n }\n\n return response\n }\n\n addHeader (key, value) {\n const headers = this.additionalHeaders\n headers[key] = value\n this.options.headers = headers\n }\n\n sameHostname () {\n if (!this.originalUrl.startsWith('http:')) {\n return true\n }\n\n try {\n return new URL(this.originalUrl).hostname === window.location.hostname\n } catch (_) {\n return true\n }\n }\n\n get fetchOptions () {\n return {\n method: this.method.toUpperCase(),\n headers: this.headers,\n body: this.formattedBody,\n signal: this.signal,\n credentials: this.credentials,\n redirect: this.redirect\n }\n }\n\n get headers () {\n const baseHeaders = {\n 'X-Requested-With': 'XMLHttpRequest',\n 'Content-Type': this.contentType,\n Accept: this.accept\n }\n\n if (this.sameHostname()) {\n baseHeaders['X-CSRF-Token'] = this.csrfToken\n }\n\n return compact(\n Object.assign(baseHeaders, this.additionalHeaders)\n )\n }\n\n get csrfToken () {\n return getCookie(metaContent('csrf-param')) || metaContent('csrf-token')\n }\n\n get contentType () {\n if (this.options.contentType) {\n return this.options.contentType\n } else if (this.body == null || this.body instanceof window.FormData) {\n return undefined\n } else if (this.body instanceof window.File) {\n return this.body.type\n }\n\n return 'application/json'\n }\n\n get accept () {\n switch (this.responseKind) {\n case 'html':\n return 'text/html, application/xhtml+xml'\n case 'turbo-stream':\n return 'text/vnd.turbo-stream.html, text/html, application/xhtml+xml'\n case 'json':\n return 'application/json, application/vnd.api+json'\n case 'script':\n return 'text/javascript, application/javascript'\n default:\n return '*/*'\n }\n }\n\n get body () {\n return this.options.body\n }\n\n get query () {\n const originalQuery = (this.originalUrl.split('?')[1] || '').split('#')[0]\n const params = new URLSearchParams(originalQuery)\n\n let requestQuery = this.options.query\n if (requestQuery instanceof window.FormData) {\n requestQuery = stringEntriesFromFormData(requestQuery)\n } else if (requestQuery instanceof window.URLSearchParams) {\n requestQuery = requestQuery.entries()\n } else {\n requestQuery = Object.entries(requestQuery || {})\n }\n\n mergeEntries(params, requestQuery)\n\n const query = params.toString()\n return (query.length > 0 ? `?${query}` : '')\n }\n\n get url () {\n return (this.originalUrl.split('?')[0]).split('#')[0] + this.query\n }\n\n get responseKind () {\n return this.options.responseKind || 'html'\n }\n\n get signal () {\n return this.options.signal\n }\n\n get redirect () {\n return this.options.redirect || 'follow'\n }\n\n get credentials () {\n return this.options.credentials || 'same-origin'\n }\n\n get additionalHeaders () {\n return this.options.headers || {}\n }\n\n get formattedBody () {\n const bodyIsAString = Object.prototype.toString.call(this.body) === '[object String]'\n const contentTypeIsJson = this.headers['Content-Type'] === 'application/json'\n\n if (contentTypeIsJson && !bodyIsAString) {\n return JSON.stringify(this.body)\n }\n\n return this.body\n }\n}\n", "import { FetchRequest } from './fetch_request'\n\nasync function get (url, options) {\n const request = new FetchRequest('get', url, options)\n return request.perform()\n}\n\nasync function post (url, options) {\n const request = new FetchRequest('post', url, options)\n return request.perform()\n}\n\nasync function put (url, options) {\n const request = new FetchRequest('put', url, options)\n return request.perform()\n}\n\nasync function patch (url, options) {\n const request = new FetchRequest('patch', url, options)\n return request.perform()\n}\n\nasync function destroy (url, options) {\n const request = new FetchRequest('delete', url, options)\n return request.perform()\n}\n\nexport { get, post, put, patch, destroy }\n", "import { FetchRequest } from './fetch_request'\nimport { FetchResponse } from './fetch_response'\nimport { RequestInterceptor } from './request_interceptor'\nimport { get, post, put, patch, destroy } from './verbs'\n\nexport { FetchRequest, FetchResponse, RequestInterceptor, get, post, put, patch, destroy }\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { patch } from \"@rails/request.js\"\n\nexport default class extends Controller {\n static outlets = [ \"columns\" ]\n static targets = [ \"column\" ]\n\n connect() {\n $(this.element).sortable({\n handle: '[data-role~=sort_handle]',\n axis: \"y\",\n start: this.sortStarted,\n update: this.sortEnded,\n delay: this.isOnTouchScreen ? 300 : 0\n })\n }\n\n sortStarted = (event, ui) => this.dispatch(\"sortstart\")\n\n sortEnded = (event, ui) => {\n const column = ui.item[0].dataset.column\n const url = ui.item[0].action\n const position = ui.item.index()\n\n patch(url, { body: { column: { position: position } } })\n\n this.columnsOutlet.updateOrderAndMoveColumn(this.order, column)\n }\n\n get order() {\n return this.columnTargets.map(element => element.dataset.column)\n }\n\n get isOnTouchScreen() {\n return ('ontouchstart' in window || navigator.maxTouchPoints)\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"input\", \"column\" ]\n static classes = [ \"filtering\", \"noResults\" ]\n\n filter() {\n this.columnTargets.forEach(column => column.hidden = ! this.matches.includes(column))\n this.element.classList.toggle(this.noResultsClass, this.matches.length == 0)\n this.element.classList.toggle(this.filteringClass, this.query != \"\")\n }\n\n clear() {\n this.inputTarget.value = \"\"\n this.filter()\n this.inputTarget.focus()\n }\n\n get matches() {\n return this.columnTargets.filter(column => column.dataset.name.toLowerCase().includes(this.query))\n }\n\n get query() {\n return this.inputTarget.value.toLowerCase()\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"row\" ]\n static values = { visibleColumns: Array, order: Array }\n\n toggleColumn(column) {\n if (this.visibleColumnsValue.includes(column)) {\n this.hideColumn(column)\n } else {\n this.showColumn(column)\n }\n }\n\n hideColumn(column) {\n const columns = this.visibleColumnsValue\n columns.splice(columns.indexOf(column), 1)\n this.visibleColumnsValue = columns\n }\n\n showColumn(column) {\n const columns = this.visibleColumnsValue\n columns.push(column)\n this.visibleColumnsValue = columns\n }\n\n rowTargetConnected(row) {\n if (this.isRowUnarranged(row)) this.arrangeRow(row)\n }\n\n isRowUnarranged(row) {\n return !Array\n .from(row.querySelectorAll(\"td, th\"))\n .map(cell => cell.dataset.column)\n .every((val, index) => val == this.orderValue[index]) \n }\n\n arrangeRow(row) {\n this.orderValue.forEach((column) => {\n let cell = row.querySelector(`[data-column=\"${column}\"]`)\n row.insertAdjacentElement('beforeend', cell)\n })\n }\n\n updateOrderAndMoveColumn(order, column) {\n this.orderValue = order\n this.moveColumn(column)\n }\n\n moveColumn(column) {\n this.rowTargets.forEach(row => this.moveColumnInRow(column, row))\n }\n\n moveColumnInRow(column, row) {\n let previousColumn = this.orderValue[this.orderValue.indexOf(column) - 1]\n let moveAfter = row.querySelector(`[data-column=\"${previousColumn}\"]`)\n let cell = row.querySelector(`[data-column=\"${column}\"]`)\n moveAfter.insertAdjacentElement('afterend', cell)\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nconst BASE_CLASS = \"connection\"\nconst UNSUPPORTED_INSTITUTION_CHOSEN_CLASS = BASE_CLASS + \"--unsupported-institution-chosen\"\n\nexport default class extends Controller {\n static targets = [ \"form\", \"publicToken\" ]\n static values = { supportedInstitutions: Array, invalidUpdatedUsernameUrl: String }\n\n authenticated() {\n if (this.isInstitutionSupported) {\n this.create()\n } else {\n this.showInstitutionError()\n }\n }\n\n create() {\n this.publicTokenTarget.value = this.publicToken\n this.formTarget.requestSubmit()\n }\n\n fixed() {\n this.formTarget.requestSubmit()\n }\n\n showInstitutionError() {\n this.element.classList.add(UNSUPPORTED_INSTITUTION_CHOSEN_CLASS)\n }\n\n hideInstitutionError() {\n this.element.classList.remove(UNSUPPORTED_INSTITUTION_CHOSEN_CLASS)\n }\n\n errorEncounteredInUpdateMode(event) {\n if (event.detail.error == \"INVALID_UPDATED_USERNAME\") {\n Turbo.visit(this.invalidUpdatedUsernameUrlValue)\n }\n }\n\n get isInstitutionSupported() {\n return this.supportedInstitutionsValue.includes(this.institutionId)\n }\n\n get publicToken() {\n return this.connectorController.publicToken\n }\n\n get institutionId() {\n return this.connectorController.institutionId\n }\n\n get connectorController() {\n return this.application.getControllerForElementAndIdentifier(this.element, \"connector\")\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nconst REFRESH_DELAY_IN_MILLISECONDS = 2000\n\nexport default class extends Controller {\n connect() {\n this.setTimer()\n }\n\n disconnect() {\n this.clearTimer()\n }\n\n setTimer() {\n this.timer = setTimeout(() => window.location.reload(), REFRESH_DELAY_IN_MILLISECONDS)\n }\n\n clearTimer() {\n clearTimeout(this.timer)\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nconst PLAID_JS_URL = \"https://cdn.plaid.com/link/v2/stable/link-initialize.js\"\nconst BASE_CLASS = \"connector\"\nconst ACTIVATED_CLASS = BASE_CLASS + \"--activated\"\n\nexport default class extends Controller {\n static values = { token: String, receivedRedirectUri: String }\n\n connect() {\n this.isScriptLoaded ? this.createPlaidInstance() : this.loadScript()\n }\n\n loadScript() {\n var script = document.createElement('script')\n script.src = PLAID_JS_URL\n script.onload = () => this.createPlaidInstance()\n document.head.appendChild(script)\n }\n\n createPlaidInstance() {\n this.plaid = Plaid.create(this.config)\n }\n\n activate() {\n if (this.isPersonCompletingOAuth) this.open()\n this.element.classList.add(ACTIVATED_CLASS)\n }\n\n open() {\n this.plaid.open()\n }\n\n handleOnSuccess(publicToken, metadata) {\n this.publicToken = publicToken\n this.institutionId = metadata.institution.institution_id\n this.dispatch(\"authenticate\")\n }\n\n handleOnExit(error, metadata) {\n if (error) this.dispatch(\"error\", { detail: { error: error.error_code } })\n }\n\n get isScriptLoaded() {\n return !!window.Plaid\n }\n\n get isPersonCompletingOAuth() {\n return this.receivedRedirectUriValue != \"\"\n }\n\n get config() {\n return {\n token: this.tokenValue,\n onSuccess: (publicToken, metadata) => this.handleOnSuccess(publicToken, metadata),\n onExit: (error, metadata) => this.handleOnExit(error, metadata),\n onLoad: () => this.activate(),\n receivedRedirectUri: this.isPersonCompletingOAuth ? this.receivedRedirectUriValue : null\n }\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = { date: String }\n\n connect() {\n if (!this.hasDateValue) return\n this.element.dataset.future = this.dateValue > SSD.currentDate ? true : false\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nconst BUCKETS = [ \"negative\", \"very_slow\", \"slow\", \"average\", \"fast\", \"very_fast\" ]\n\nexport default class extends Controller {\n static targets = [ \"bar\", \"checkbox\" ]\n\n connect() {\n $(this.barTarget).slider({\n range: true,\n min: 0,\n max: BUCKETS.length,\n step: 1,\n values: [ this.min, this.max ],\n slide: this.slide\n })\n }\n\n slide = (event, ui) => {\n if (ui.values[0] == ui.values[1]) return false\n\n this.checkboxTargets.forEach((target, index) => {\n target.checked = index >= ui.values[0] && index < ui.values[1]\n })\n }\n\n get min() {\n return BUCKETS.indexOf(this.checkboxTargets.filter(target => target.checked)[0].value)\n }\n\n get max() {\n return BUCKETS.indexOf(this.checkboxTargets.filter(target => target.checked).pop().value) + 1\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"helper\", \"date1\", \"chart\" ]\n static values = { date1: String, date2: String, urlTemplate: String }\n\n connect() {\n $(this.chartTarget).on('point:click', this.choose)\n this.reset()\n }\n\n reset(event) {\n this.date1Value = \"\"\n this.date2Value = \"\"\n this.hideHelper()\n if (event) event.preventDefault()\n }\n\n choose = (event, point) => {\n const timestamp = this.getTimestampFromEventData(event, point)\n const date = new Date(timestamp)\n\n if (this.date1Value) {\n this.date2Value = date\n this.run()\n } else {\n this.date1Value = date\n this.showHelper()\n }\n }\n\n getTimestampFromEventData(event, point) {\n return (point ? point.x : parseInt(event.currentTarget.dataset.timestamp))\n }\n\n date1ValueChanged() {\n this.date1Target.textContent = Highcharts.dateFormat('%b %e, %Y', Date.parse(this.date1Value))\n }\n\n run() {\n const date1 = Highcharts.dateFormat('%Y-%m-%d', this.date1)\n const date2 = Highcharts.dateFormat('%Y-%m-%d', this.date2)\n const url = this.urlTemplateValue.replace(':date1', this.date1Value).replace(':date2', this.date2Value)\n\n Turbo.visit(url)\n }\n\n showHelper() {\n this.helperTarget.style.visibility = 'visible'\n }\n\n hideHelper() {\n this.helperTarget.style.visibility = 'hidden'\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nconst BASE_CSS_CLASS = 'dividend-safety-review-form'\n\nexport default class extends Controller {\n static targets = [ \"action\", \"newScore\" ]\n\n actionChosen() {\n this.newScoreTarget.value = \"\"\n this.element.classList.toggle(`${BASE_CSS_CLASS}--reaffirming`, this.actionTarget.value == 'reaffirm')\n this.element.classList.toggle(`${BASE_CSS_CLASS}--upgrading`, this.actionTarget.value == 'upgrade')\n this.element.classList.toggle(`${BASE_CSS_CLASS}--downgrading`, this.actionTarget.value == 'downgrade')\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"bar\", \"minField\", \"maxField\", \"text\" ]\n static values = { upperLimit: Number }\n\n connect() {\n $(this.barTarget).slider({\n range: true,\n min: 0,\n max: this.upperLimitValue,\n step: 0.5,\n values: [ this.min, (this.max || this.upperLimitValue) ],\n slide: this.slide\n })\n\n this.updateText()\n }\n\n slide = (event, ui) => {\n const min = ui.values[0]\n const max = ui.values[1]\n\n if (min == max) return false\n\n this.minFieldTarget.value = min\n this.maxFieldTarget.value = max == this.upperLimitValue || max == \"\" ? null : max\n\n this.updateText()\n }\n\n updateText() {\n if (this.min == 0 && this.max == null) {\n this.textTarget.innerHTML = `yielding...`\n } else if (this.min == 0 && this.max) {\n this.textTarget.innerHTML = `yielding below <strong>${this.max.toFixed(1)}%</strong>`\n } else if (this.min > 0 && this.max) {\n this.textTarget.innerHTML = `yielding between <strong>${this.min.toFixed(1)}%</strong> and <strong>${this.max.toFixed(1)}%</strong>`\n } else if (this.min > 0 && this.max == null) {\n this.textTarget.innerHTML = `yielding above <strong>${this.min.toFixed(1)}%</strong>`\n }\n }\n\n get min() {\n return parseFloat(this.minFieldTarget.value)\n }\n\n get max() {\n return parseFloat(this.maxFieldTarget.value) || null\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = { balance: Number, income: Number }\n static targets = [ \"weight\", \"incomeWeight\" ]\n\n connect() {\n if (this.weightTarget.dataset.value === undefined ) this.update()\n }\n\n update() {\n this.updateWeight()\n if (this.hasIncomeWeightTarget) this.updateIncomeWeight()\n }\n\n updateWeight() {\n const value = this.balanceValue / this.totalsController.balanceValue * 100\n this.weightTarget.textContent = value > 0 ? `${value.toFixed(1)}%` : \"\"\n this.weightTarget.dataset.value = value > 0 ? value : \"\"\n }\n\n updateIncomeWeight() {\n const value = this.incomeValue / this.totalsController.incomeValue * 100\n this.incomeWeightTarget.textContent = value > 0 ? `${value.toFixed(1)}%` : \"\"\n this.incomeWeightTarget.dataset.value = value > 0 ? value : \"\"\n }\n\n get totalsController() {\n return this.application.getControllerForElementAndIdentifier(document.querySelector(\"[data-controller~=totals]\"), \"totals\")\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static classes = [ \"beforeCurrentYear\" ]\n static values = { year: Number }\n\n connect() {\n this.element.classList.toggle(this.beforeCurrentYearClass, this.happenedBeforeCurrentYear)\n }\n\n get happenedBeforeCurrentYear() {\n return this.yearValue < this.currentYear\n }\n\n get currentYear() {\n return new Date(SSD.currentDate).getFullYear()\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"chart\" ]\n static values = { minStartTime: Number }\n\n update({ params: { startTime } }) {\n $(this.chartTarget).highcharts().update({\n xAxis: { min: Math.max(startTime, this.minStartTimeValue) }\n });\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"input\" ]\n\n chooseFile(event) {\n this.inputTarget.click()\n event.preventDefault()\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"tab\", \"section\" ]\n\n toggle(event) {\n $(this.tabTargets).toggleClass('tab__link--active')\n $(this.sectionTargets).toggle()\n event.preventDefault()\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n disconnect() {\n this.element.toggleAttribute(\"data-submitting\", false)\n }\n\n submit() {\n this.element.requestSubmit()\n }\n\n submitStart() {\n this.element.toggleAttribute(\"data-submitting\", true)\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"row\", \"rowTemplate\" ]\n\n connect() {\n if (this.rowTargets.length == 0) {\n this.addRow()\n this.addRow()\n this.addRow()\n } \n }\n \n insertNewRowWhenLastRowIsFocused(event) {\n if (this.rowTargets[this.rowTargets.length - 1].contains(event.target)) {\n this.addRow()\n }\n }\n\n addRow() {\n this.element.appendChild(this.rowTemplateTarget.content.cloneNode(true))\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nconst ENTER_KEY_CODE = 13\n\nexport default class extends Controller {\n ignore(event) {\n if (event.keyCode == ENTER_KEY_CODE) {\n event.preventDefault()\n }\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"industry\", \"sector\", \"numIndustriesChecked\", \"numIndustries\" ]\n\n connect() {\n this.update()\n }\n\n update() {\n switch (this.numIndustriesChecked) {\n case 0:\n this.element.dataset.checked = \"none\"\n break\n case this.numIndustries:\n this.element.dataset.checked = \"all\"\n break\n default:\n this.element.dataset.checked = \"some\"\n }\n\n this.numIndustriesCheckedTarget.textContent = this.numIndustriesChecked\n this.numIndustriesTarget.textContent = this.numIndustries\n }\n\n syncWithSector() {\n this.industryTargets.forEach(target => target.checked = this.sectorTarget.checked)\n this.update()\n }\n\n syncSector() {\n this.sectorTarget.checked = this.numIndustriesChecked > 0\n this.update()\n }\n\n get numIndustriesChecked() {\n return this.industryTargets.filter(target => target.checked).length\n }\n\n get numIndustries() {\n return this.industryTargets.length\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static loadingClass = \"infinite-page--loading\";\n static targets = [ \"container\" ]\n static values = { url: String, page: Number, reachedLastPage: Boolean}\n\n connect() {\n window.addEventListener(\"scroll\", this.didScroll)\n this.didScroll()\n }\n\n disconnect() {\n window.removeEventListener(\"scroll\", this.didScroll)\n }\n\n didScroll = () => {\n if (this.nearBottom && !this.loading && !this.reachedLastPageValue) {\n this.loadPage()\n }\n }\n\n loadPage() {\n this.loading = true\n $.get(this.pageUrl, this.didLoadPage, \"html\")\n }\n\n didLoadPage = (html) => {\n if (html.trim() == \"\") {\n this.reachedLastPageValue = true\n } else {\n this.insertPage(html)\n }\n\n this.loading = false\n }\n\n insertPage(html) {\n this.pageValue++\n this.container.insertAdjacentHTML(\"beforeend\", html)\n }\n\n get nearBottom() {\n return this.distanceToBottom < 400\n }\n\n get distanceToBottom() {\n return document.documentElement.scrollHeight - window.pageYOffset - window.innerHeight\n }\n\n get loading() {\n return this.element.classList.contains(this.constructor.loadingClass)\n }\n\n set loading(value) {\n this.element.classList.toggle(this.constructor.loadingClass, value)\n }\n\n get pageUrl() {\n let url = new URL(this.urlValue, window.location)\n url.searchParams.append(\"page\", this.pageValue + 1)\n return `${url.origin}${url.pathname}.js${url.search}`\n }\n\n get container() {\n return this.hasContainerTarget ? this.containerTarget : this.element\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { get } from \"@rails/request.js\"\n\nexport default class extends Controller {\n static values = { url: String, page: Number, finished: Boolean }\n static targets = [ \"body\" ]\n static classes = [ \"loading\" ]\n\n connect() {\n if (!this.finishedValue) {\n this.element.classList.add(this.loadingClass)\n this.loadNextPage()\n }\n }\n\n loadNextPage() {\n get(`${this.urlValue}?page=${this.pageValue}`, { responseKind: \"html\" })\n .then(response => response.html)\n .then(html => this.pageLoaded(html))\n }\n\n pageLoaded(html) {\n if (html.trim() == \"\") {\n this.finishedValue = true\n this.element.classList.remove(this.loadingClass)\n } else {\n this.bodyTarget.insertAdjacentHTML(\"beforeend\", html)\n this.pageValue++\n this.loadNextPage()\n }\n }\n} ", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n connect () {\n if (window.location.hash) {\n document.getElementById(window.location.hash.slice(1)).scrollIntoView()\n }\n }\n}", "export async function enter(element, transitionName = null) {\n element.classList.remove('hidden')\n await transition('enter', element, transitionName)\n}\n\nexport async function leave(element, transitionName = null) {\n await transition('leave', element, transitionName)\n element.classList.add('hidden')\n}\n\nexport async function toggle(element, transitionName = null) {\n if (element.classList.contains('hidden')) {\n await enter(element, transitionName)\n } else {\n await leave(element, transitionName)\n }\n}\n\nasync function transition(direction, element, animation) {\n const dataset = element.dataset\n const animationClass = animation ? `${animation}-${direction}` : direction\n let transition = `transition${direction.charAt(0).toUpperCase() + direction.slice(1)}`\n const genesis = dataset[transition] ? dataset[transition].split(\" \") : [animationClass]\n const start = dataset[`${transition}Start`] ? dataset[`${transition}Start`].split(\" \") : [`${animationClass}-start`]\n const end = dataset[`${transition}End`] ? dataset[`${transition}End`].split(\" \") : [`${animationClass}-end`]\n\n addClasses(element, genesis)\n addClasses(element, start)\n await nextFrame()\n removeClasses(element, start)\n addClasses(element, end);\n await afterTransition(element)\n removeClasses(element, end)\n removeClasses(element, genesis)\n}\n\nfunction addClasses(element, classes) {\n element.classList.add(...classes)\n}\n\nfunction removeClasses(element, classes) {\n element.classList.remove(...classes)\n}\n\nfunction nextFrame() {\n return new Promise(resolve => {\n requestAnimationFrame(() => {\n requestAnimationFrame(resolve)\n });\n });\n}\n\nfunction afterTransition(element) {\n return new Promise(resolve => {\n // safari return string with comma separate values\n const computedDuration = getComputedStyle(element).transitionDuration.split(\",\")[0]\n const duration = Number(computedDuration.replace('s', '')) * 1000;\n setTimeout(() => {\n resolve()\n }, duration)\n });\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { enter, leave } from \"el-transition\"\n\nexport default class extends Controller {\n static targets = [ \"backdrop\", \"panel\", \"focus\", \"closeOnEscape\", \"closeOnClickOutside\" ]\n\n open() {\n if (!this.isOpen) {\n enter(this.backdropTarget)\n enter(this.panelTarget)\n }\n \n this.element.classList.remove(\"hidden\")\n if (this.hasFocusTarget) this.focusTarget.focus()\n this.dispatch(\"open\")\n }\n\n close() {\n Promise.all([\n leave(this.backdropTarget),\n leave(this.panelTarget)\n ]).then(() => this.closeWithoutTransition())\n }\n\n closeWithoutTransition() {\n this.element.classList.add(\"hidden\")\n this.element.innerHTML = \"\"\n this.dispatch(\"close\")\n }\n\n // Save click origin to prevent modal from closing on clicks that start\n // inside the modal but end outside (e.g. when highlighting text inputs)\n trackClickStartTarget(event) {\n this.clickStartTarget = event.target\n }\n\n closeOnClickOutsideIfPermitted() {\n if (this.didClickStartOutside && this.isCloseOnClickOutsidePermitted) {\n this.close()\n }\n }\n\n closeIfPermittedOnEscape() {\n if (this.isOpen && this.isCloseOnEscapePermitted) {\n this.close()\n }\n }\n\n get isOpen() {\n return !this.element.classList.contains(\"hidden\")\n }\n\n get isCloseOnClickOutsidePermitted() {\n return this.hasCloseOnClickOutsideTarget\n }\n\n get isCloseOnEscapePermitted() {\n return this.hasCloseOnEscapeTarget\n }\n\n get didClickStartOutside() {\n return this.clickStartTarget.contains(this.panelTarget) && this.clickStartTarget != this.panelTarget\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nconst THRESHOLD_IN_PIXELS = 800\n\nexport default class extends Controller {\n static classes = [ \"shown\", \"hidden\" ]\n\n initialize() {\n this.showIfScrolledPastThreshold = SSD.throttle(this.showIfScrolledPastThreshold.bind(this), 1000)\n }\n\n showIfScrolledPastThreshold() {\n if (document.documentElement.scrollTop > THRESHOLD_IN_PIXELS) {\n this.element.classList.add(...this.shownClasses)\n }\n }\n\n hide() {\n this.element.classList.add(this.hiddenClass)\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { get } from \"@rails/request.js\"\n\nconst BATCH_SIZE = 100\n\nexport default class extends Controller {\n static targets = [ \"placeholder\" ]\n\n initialize() {\n this.throttledLoad = SSD.throttle(this.load.bind(this), 100)\n }\n\n load() {\n this.placeholderTargetBatches.forEach((targets) => {\n const tradingItemIds = targets.map(element => element.dataset.tradingItemId)\n const url = `/notes?trading_item_ids=${tradingItemIds.join(',')}`\n get(url, { responseKind: \"turbo-stream\" })\n targets.forEach(element => element.removeAttribute(`data-${this.identifier}-target`))\n })\n }\n\n placeholderTargetConnected() {\n this.throttledLoad()\n }\n\n get placeholderTargetBatches() {\n const targets = [...this.placeholderTargets]\n const batches = []\n\n while (targets.length > 0) {\n batches.push(targets.splice(0, BATCH_SIZE))\n }\n\n return batches\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nconst ALLOWED_KEYS = \"-0123456789.,\".split(\"\").concat([\"Backspace\", \"Delete\", \"Enter\", \"Tab\", \"ArrowLeft\", \"ArrowRight\"])\nconst DISALLOWED_PASTED_CHARACTERS_REGEX = /[^0-9.,-]/g\n\nexport default class extends Controller {\n static values = {\n precision: { type: Number, default: 2 },\n stripInsignificantZeros: { type: Boolean, default: false }\n }\n\n connect() {\n this.format()\n }\n\n format() {\n const number = parseFloat(this.element.value.replace(/,/g, \"\"))\n if (isNaN(number)) return\n this.element.value = number.toLocaleString(\"en-US\", {\n minimumFractionDigits: this.stripInsignificantZerosValue ? null : this.precisionValue,\n maximumFractionDigits: this.precisionValue\n })\n }\n\n rejectInvalidCharacters(event) {\n if (ALLOWED_KEYS.includes(event.key) || event.metaKey || event.ctrlKey) {\n return\n } else {\n event.preventDefault()\n }\n }\n\n sanitizePastedText(event) {\n const paste = (event.clipboardData || window.clipboardData).getData(\"text\")\n this.element.value = paste.replace(DISALLOWED_PASTED_CHARACTERS_REGEX, \"\")\n event.preventDefault()\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"amount\", \"change\", \"subject\", \"predicate\" ]\n static values = { previousAmount: Number }\n static classes = [ \"increase\", \"decrease\" ]\n\n connect() {\n this.updateChange()\n this.predicateTarget.style.textIndent = `${this.subjectTarget.offsetWidth}px`\n }\n\n updateChange() {\n if (isNaN(this.change)) {\n this.changeTarget.textContent = \"\"\n } else {\n this.changeTarget.textContent = (this.change > 0 ? \"+\" : \"\") + `${parseFloat(this.change.toFixed(5)).toPrecision(2)}% change`\n this.changeTarget.classList.toggle(this.increaseClass, this.change > 0)\n this.changeTarget.classList.toggle(this.decreaseClass, this.change < 0)\n }\n }\n\n get change() {\n return (parseFloat(this.amountTarget.value) - this.previousAmountValue) / this.previousAmountValue * 100\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"ticker\", \"quantity\" ]\n\n validate() {\n this.quantityTarget.toggleAttribute(\"required\", this.tickerTarget.value.trim() != \"\")\n }\n\n removeValidation() {\n this.quantityTarget.toggleAttribute(\"required\", false)\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n connect() {\n if (document.body.dataset.product == \"lite\") {\n this.element.remove()\n }\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nconst SCROLL_INCREMENT = 200\n\nexport default class extends Controller {\n static targets = [ \"scrollableArea\" ]\n\n scrollRight() {\n this.scrollableAreaTarget.scrollLeft += SCROLL_INCREMENT\n }\n\n scrollLeft() {\n this.scrollableAreaTarget.scrollLeft -= SCROLL_INCREMENT\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nconst ADJUSTMENT_IN_PIXELS_TO_ENSURE_END_IS_DETECTED = -5\n\nexport default class extends Controller {\n static targets = [ \"scrollableArea\" ]\n static classes = [ \"aboveBottom\", \"atTop\", \"atBottom\", \"atRightEnd\", \"toRight\" ]\n\n connect() {\n this.observeMutations(this.check, this.element, { childList: true, subtree: true, attributes: true })\n }\n\n reset() {\n this.scrollableElement.scrollTop = 0\n }\n\n remember() {\n this.savedScrollTop = this.scrollableElement.scrollTop\n }\n\n restore() {\n this.scrollableElement.scrollTop = this.savedScrollTop\n }\n\n check() {\n if (this.hasAboveBottomClass) this.element.classList.toggle(this.aboveBottomClass, !this.isAtBottom)\n if (this.hasAtBottomClass) this.element.classList.toggle(this.atBottomClass, this.isAtBottom)\n if (this.hasAtTopClass) this.element.classList.toggle(this.atTopClass, this.isAtTop)\n if (this.hasAtRightEndClass) this.element.classList.toggle(this.atRightEndClass, this.isAtRightEnd)\n if (this.hasToRightClass) this.element.classList.toggle(this.toRightClass, this.isToRight)\n }\n\n get isAtBottom() {\n return this.scrollableElement.offsetHeight + this.scrollableElement.scrollTop >= this.scrollableElement.scrollHeight + ADJUSTMENT_IN_PIXELS_TO_ENSURE_END_IS_DETECTED\n }\n\n get isAtTop() {\n return this.scrollableElement.scrollTop <= 0\n }\n\n get isAtRightEnd() {\n return this.scrollableElement.offsetWidth + this.scrollableElement.scrollLeft >= this.scrollableElement.scrollWidth + ADJUSTMENT_IN_PIXELS_TO_ENSURE_END_IS_DETECTED\n }\n\n get isToRight() {\n return this.scrollableElement.scrollLeft > 0\n }\n\n get scrollableElement() {\n return this.hasScrollableAreaTarget ? this.scrollableAreaTarget : this.element\n }\n\n observeMutations(callback, target = this.element, options = { childList: true, subtree: true }) {\n const observer = new MutationObserver(mutations => {\n observer.disconnect()\n Promise.resolve().then(start)\n callback.call(this, mutations)\n })\n function start() {\n if (target.isConnected) observer.observe(target, options)\n }\n start()\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"element\" ]\n\n scroll() {\n this.element.scrollIntoView({ behavior: \"instant\" })\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nconst OFFSET_TO_ACCOUNT_FOR_GLOBAL_NAV_WHEN_SCROLLING_HEAD_INTO_VIEW = 66\n\nexport default class extends Controller {\n connect() {\n this.header = this.headers[this.position]\n this.updatePositionWhenColumnsMove()\n }\n\n updatePositionWhenColumnsMove() {\n const updatePosition = () => this.position = this.headers.indexOf(this.header)\n this.observeMutations(updatePosition, this.element.querySelector(\"thead\"))\n }\n\n sort({ target }) {\n const position = this.headers.indexOf(target)\n const order = this.header == target && this.order == \"desc\" ? \"asc\" : \"desc\"\n const sortType = target.dataset.sortType || \"numeric\"\n\n new Sort(this.element, position, order, sortType).perform()\n\n this.header = target\n this.position = position\n this.order = order\n this.scrollToTopOfTable()\n }\n\n scrollToTopOfTable() {\n const scrollPosition = this.element.querySelector(\"thead\").getBoundingClientRect().top + window.pageYOffset - OFFSET_TO_ACCOUNT_FOR_GLOBAL_NAV_WHEN_SCROLLING_HEAD_INTO_VIEW\n window.scrollTo({ behavior: \"smooth\", top: scrollPosition })\n }\n\n get position() {\n return parseInt(this.element.dataset.sortPosition)\n }\n\n set position(value) {\n this.element.dataset.sortPosition = value\n }\n\n get order() {\n return this.element.dataset.sortOrder\n }\n\n set order(value) {\n this.element.dataset.sortOrder = value\n }\n\n get headers() {\n return Array.from(this.element.querySelectorAll(\"thead th\"))\n }\n\n observeMutations(callback, target = this.element, options = { childList: true, subtree: true }) {\n const observer = new MutationObserver(mutations => {\n observer.disconnect()\n Promise.resolve().then(start)\n callback.call(this, mutations)\n })\n function start() {\n if (target.isConnected) observer.observe(target, options)\n }\n start()\n }\n}\n\nclass Sort {\n constructor(table, position, order, type) {\n this.table = table\n this.position = position\n this.order = order\n this.type = type\n }\n\n perform() {\n this.bodies.forEach(body => this.sortRowsInBody(body))\n }\n\n get bodies() {\n return Array.from(this.table.querySelectorAll(\"tbody\"))\n }\n\n sortRowsInBody(body) {\n Array.from(body.children).sort(this.compareRows).forEach(row => body.appendChild(row))\n }\n\n compareRows = (rowA, rowB) => {\n const valA = rowA.querySelector(`td:nth-child(${this.position + 1})`).dataset.value\n const valB = rowB.querySelector(`td:nth-child(${this.position + 1})`).dataset.value\n return this.compareValues(valA, valB)\n }\n\n compareValues(a, b) {\n return this.type == \"numeric\" ? this.compareNumbers(a, b) : this.compareStrings(a, b)\n }\n\n compareNumbers(a, b) {\n a = parseFloat(a)\n b = parseFloat(b)\n\n if (isNaN(a)) return 1\n else if (isNaN(b)) return -1\n else if (this.order == \"asc\") return a < b ? -1 : 1\n else return a < b ? 1 : -1\n }\n\n compareStrings(a, b) {\n if (a == \"\") return 1\n else if (b == \"\") return -1\n else if (this.order == \"asc\") return a < b ? -1 : 1\n else return a < b ? 1 : -1\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nconst EXPANDABLE_CSS_CLASS = \"spreadsheet-import-preview--expandable\"\nconst EXPANDED_CSS_CLASS = \"spreadsheet-import-preview--expanded\"\n\nexport default class extends Controller {\n static targets = [ \"holdings\" ]\n\n connect() {\n this.element.classList.toggle(EXPANDABLE_CSS_CLASS, this.shouldBeExpandable())\n }\n\n expand(event) {\n this.element.classList.add(EXPANDED_CSS_CLASS)\n event.preventDefault()\n }\n\n shouldBeExpandable() {\n return this.holdingsTarget.scrollHeight > this.holdingsTarget.clientHeight\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static classes = [ \"stuck\" ]\n\n // Bottom margin of 1000px prevents stuckClass from getting added when element\n // intersects with bottom of viewport. We only want stuckClass to be added\n // when element intersects with top of viewport.\n connect() {\n new IntersectionObserver(\n ([ entry ]) => this.element.classList.toggle(this.stuckClass, !entry.isIntersecting),\n {\n threshold: 1,\n rootMargin: `-${this.topOffset + 1}px 0px 1000px 0px`\n }\n ).observe(this.element)\n }\n\n get topOffset() {\n return parseInt(window.getComputedStyle(this.element).getPropertyValue(\"top\"))\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = { today: String, otherwise: String }\n\n connect() {\n this.element.innerHTML = this.element.dateTime == SSD.currentDate ? this.todayValue : this.otherwiseValue\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = { balance: Number, income: Number }\n\n connect() {\n this.dispatch(\"update\")\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = { checked: Boolean }\n\n connect() {\n !this.checkedValue && this.removeWidows()\n }\n\n removeWidows() {\n this.element.innerHTML = this.element.innerHTML.trim().replace(/ ([^ ]*)$/, ' $1')\n this.checkedValue = true\n }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nFASTLINK_JS_URL = \"https://cdn.yodlee.com/fastlink/v4/initialize.js\"\n\nexport default class extends Controller {\n static targets = [ \"container\", \"form\", \"providerAccount\" ]\n static values = { config: Object, containerId: String }\n static outlets = [ \"modal\" ]\n\n connect() {\n if (this.isScriptLoaded) {\n this.open()\n } else {\n this.loadScript()\n }\n }\n\n loadScript() {\n var script = document.createElement('script')\n script.src = FASTLINK_JS_URL\n script.onload = () => this.open()\n document.head.appendChild(script)\n }\n\n open() {\n let options = this.configValue\n\n options.onSuccess = (data) => this._handleOnSuccess(data)\n options.onClose = (data) => this._handleOnClose(data)\n\n window.fastlink.open(options, this.containerIdValue)\n }\n\n close() {\n window.fastlink.close()\n }\n\n _handleOnSuccess(data) {\n this.providerAccountTarget.value = data[\"providerAccountId\"]\n this.formTarget.requestSubmit()\n this.modalOutlet.close()\n }\n\n _handleOnClose(data) {\n this.modalOutlet.close()\n }\n\n get isScriptLoaded() {\n return !!window.fastlink\n }\n}", "/* smoothscroll v0.4.4 - 2019 - Dustan Kasten, Jeremias Menichelli - MIT License */\n(function () {\n 'use strict';\n\n // polyfill\n function polyfill() {\n // aliases\n var w = window;\n var d = document;\n\n // return if scroll behavior is supported and polyfill is not forced\n if (\n 'scrollBehavior' in d.documentElement.style &&\n w.__forceSmoothScrollPolyfill__ !== true\n ) {\n return;\n }\n\n // globals\n var Element = w.HTMLElement || w.Element;\n var SCROLL_TIME = 468;\n\n // object gathering original scroll methods\n var original = {\n scroll: w.scroll || w.scrollTo,\n scrollBy: w.scrollBy,\n elementScroll: Element.prototype.scroll || scrollElement,\n scrollIntoView: Element.prototype.scrollIntoView\n };\n\n // define timing method\n var now =\n w.performance && w.performance.now\n ? w.performance.now.bind(w.performance)\n : Date.now;\n\n /**\n * indicates if a the current browser is made by Microsoft\n * @method isMicrosoftBrowser\n * @param {String} userAgent\n * @returns {Boolean}\n */\n function isMicrosoftBrowser(userAgent) {\n var userAgentPatterns = ['MSIE ', 'Trident/', 'Edge/'];\n\n return new RegExp(userAgentPatterns.join('|')).test(userAgent);\n }\n\n /*\n * IE has rounding bug rounding down clientHeight and clientWidth and\n * rounding up scrollHeight and scrollWidth causing false positives\n * on hasScrollableSpace\n */\n var ROUNDING_TOLERANCE = isMicrosoftBrowser(w.navigator.userAgent) ? 1 : 0;\n\n /**\n * changes scroll position inside an element\n * @method scrollElement\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function scrollElement(x, y) {\n this.scrollLeft = x;\n this.scrollTop = y;\n }\n\n /**\n * returns result of applying ease math function to a number\n * @method ease\n * @param {Number} k\n * @returns {Number}\n */\n function ease(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n\n /**\n * indicates if a smooth behavior should be applied\n * @method shouldBailOut\n * @param {Number|Object} firstArg\n * @returns {Boolean}\n */\n function shouldBailOut(firstArg) {\n if (\n firstArg === null ||\n typeof firstArg !== 'object' ||\n firstArg.behavior === undefined ||\n firstArg.behavior === 'auto' ||\n firstArg.behavior === 'instant'\n ) {\n // first argument is not an object/null\n // or behavior is auto, instant or undefined\n return true;\n }\n\n if (typeof firstArg === 'object' && firstArg.behavior === 'smooth') {\n // first argument is an object and behavior is smooth\n return false;\n }\n\n // throw error when behavior is not supported\n throw new TypeError(\n 'behavior member of ScrollOptions ' +\n firstArg.behavior +\n ' is not a valid value for enumeration ScrollBehavior.'\n );\n }\n\n /**\n * indicates if an element has scrollable space in the provided axis\n * @method hasScrollableSpace\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function hasScrollableSpace(el, axis) {\n if (axis === 'Y') {\n return el.clientHeight + ROUNDING_TOLERANCE < el.scrollHeight;\n }\n\n if (axis === 'X') {\n return el.clientWidth + ROUNDING_TOLERANCE < el.scrollWidth;\n }\n }\n\n /**\n * indicates if an element has a scrollable overflow property in the axis\n * @method canOverflow\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function canOverflow(el, axis) {\n var overflowValue = w.getComputedStyle(el, null)['overflow' + axis];\n\n return overflowValue === 'auto' || overflowValue === 'scroll';\n }\n\n /**\n * indicates if an element can be scrolled in either axis\n * @method isScrollable\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function isScrollable(el) {\n var isScrollableY = hasScrollableSpace(el, 'Y') && canOverflow(el, 'Y');\n var isScrollableX = hasScrollableSpace(el, 'X') && canOverflow(el, 'X');\n\n return isScrollableY || isScrollableX;\n }\n\n /**\n * finds scrollable parent of an element\n * @method findScrollableParent\n * @param {Node} el\n * @returns {Node} el\n */\n function findScrollableParent(el) {\n while (el !== d.body && isScrollable(el) === false) {\n el = el.parentNode || el.host;\n }\n\n return el;\n }\n\n /**\n * self invoked function that, given a context, steps through scrolling\n * @method step\n * @param {Object} context\n * @returns {undefined}\n */\n function step(context) {\n var time = now();\n var value;\n var currentX;\n var currentY;\n var elapsed = (time - context.startTime) / SCROLL_TIME;\n\n // avoid elapsed times higher than one\n elapsed = elapsed > 1 ? 1 : elapsed;\n\n // apply easing to elapsed time\n value = ease(elapsed);\n\n currentX = context.startX + (context.x - context.startX) * value;\n currentY = context.startY + (context.y - context.startY) * value;\n\n context.method.call(context.scrollable, currentX, currentY);\n\n // scroll more if we have not reached our destination\n if (currentX !== context.x || currentY !== context.y) {\n w.requestAnimationFrame(step.bind(w, context));\n }\n }\n\n /**\n * scrolls window or element with a smooth behavior\n * @method smoothScroll\n * @param {Object|Node} el\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function smoothScroll(el, x, y) {\n var scrollable;\n var startX;\n var startY;\n var method;\n var startTime = now();\n\n // define scroll context\n if (el === d.body) {\n scrollable = w;\n startX = w.scrollX || w.pageXOffset;\n startY = w.scrollY || w.pageYOffset;\n method = original.scroll;\n } else {\n scrollable = el;\n startX = el.scrollLeft;\n startY = el.scrollTop;\n method = scrollElement;\n }\n\n // scroll looping over a frame\n step({\n scrollable: scrollable,\n method: method,\n startTime: startTime,\n startX: startX,\n startY: startY,\n x: x,\n y: y\n });\n }\n\n // ORIGINAL METHODS OVERRIDES\n // w.scroll and w.scrollTo\n w.scroll = w.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scroll.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object'\n ? arguments[0]\n : w.scrollX || w.pageXOffset,\n // use top prop, second argument if present or fallback to scrollY\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined\n ? arguments[1]\n : w.scrollY || w.pageYOffset\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : w.scrollX || w.pageXOffset,\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : w.scrollY || w.pageYOffset\n );\n };\n\n // w.scrollBy\n w.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0])) {\n original.scrollBy.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object' ? arguments[0] : 0,\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined ? arguments[1] : 0\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n ~~arguments[0].left + (w.scrollX || w.pageXOffset),\n ~~arguments[0].top + (w.scrollY || w.pageYOffset)\n );\n };\n\n // Element.prototype.scroll and Element.prototype.scrollTo\n Element.prototype.scroll = Element.prototype.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n // if one number is passed, throw error to match Firefox implementation\n if (typeof arguments[0] === 'number' && arguments[1] === undefined) {\n throw new SyntaxError('Value could not be converted');\n }\n\n original.elementScroll.call(\n this,\n // use left prop, first number argument or fallback to scrollLeft\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : typeof arguments[0] !== 'object' ? ~~arguments[0] : this.scrollLeft,\n // use top prop, second argument or fallback to scrollTop\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : arguments[1] !== undefined ? ~~arguments[1] : this.scrollTop\n );\n\n return;\n }\n\n var left = arguments[0].left;\n var top = arguments[0].top;\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n this,\n this,\n typeof left === 'undefined' ? this.scrollLeft : ~~left,\n typeof top === 'undefined' ? this.scrollTop : ~~top\n );\n };\n\n // Element.prototype.scrollBy\n Element.prototype.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.elementScroll.call(\n this,\n arguments[0].left !== undefined\n ? ~~arguments[0].left + this.scrollLeft\n : ~~arguments[0] + this.scrollLeft,\n arguments[0].top !== undefined\n ? ~~arguments[0].top + this.scrollTop\n : ~~arguments[1] + this.scrollTop\n );\n\n return;\n }\n\n this.scroll({\n left: ~~arguments[0].left + this.scrollLeft,\n top: ~~arguments[0].top + this.scrollTop,\n behavior: arguments[0].behavior\n });\n };\n\n // Element.prototype.scrollIntoView\n Element.prototype.scrollIntoView = function() {\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scrollIntoView.call(\n this,\n arguments[0] === undefined ? true : arguments[0]\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n var scrollableParent = findScrollableParent(this);\n var parentRects = scrollableParent.getBoundingClientRect();\n var clientRects = this.getBoundingClientRect();\n\n if (scrollableParent !== d.body) {\n // reveal element inside parent\n smoothScroll.call(\n this,\n scrollableParent,\n scrollableParent.scrollLeft + clientRects.left - parentRects.left,\n scrollableParent.scrollTop + clientRects.top - parentRects.top\n );\n\n // reveal parent in viewport unless is fixed\n if (w.getComputedStyle(scrollableParent).position !== 'fixed') {\n w.scrollBy({\n left: parentRects.left,\n top: parentRects.top,\n behavior: 'smooth'\n });\n }\n } else {\n // reveal element in viewport\n w.scrollBy({\n left: clientRects.left,\n top: clientRects.top,\n behavior: 'smooth'\n });\n }\n };\n }\n\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n // commonjs\n module.exports = { polyfill: polyfill };\n } else {\n // global\n polyfill();\n }\n\n}());\n", "/*!\nTurbo 8.0.4\nCopyright \u00A9 2024 37signals LLC\n */\n/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Javan Makhmali\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function (prototype) {\n if (typeof prototype.requestSubmit == \"function\") return\n\n prototype.requestSubmit = function (submitter) {\n if (submitter) {\n validateSubmitter(submitter, this);\n submitter.click();\n } else {\n submitter = document.createElement(\"input\");\n submitter.type = \"submit\";\n submitter.hidden = true;\n this.appendChild(submitter);\n submitter.click();\n this.removeChild(submitter);\n }\n };\n\n function validateSubmitter(submitter, form) {\n submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n submitter.form == form ||\n raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n }\n\n function raise(errorConstructor, message, name) {\n throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n const candidate = element ? element.closest(\"input, button\") : null;\n return candidate?.type == \"submit\" ? candidate : null\n}\n\nfunction clickCaptured(event) {\n const submitter = findSubmitterFromClickTarget(event.target);\n\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter);\n }\n}\n\n(function () {\n if (\"submitter\" in Event.prototype) return\n\n let prototype = window.Event.prototype;\n // Certain versions of Safari 15 have a bug where they won't\n // populate the submitter. This hurts TurboDrive's enable/disable detection.\n // See https://bugs.webkit.org/show_bug.cgi?id=229660\n if (\"SubmitEvent\" in window) {\n const prototypeOfSubmitEvent = window.SubmitEvent.prototype;\n\n if (/Apple Computer/.test(navigator.vendor) && !(\"submitter\" in prototypeOfSubmitEvent)) {\n prototype = prototypeOfSubmitEvent;\n } else {\n return // polyfill not needed\n }\n }\n\n addEventListener(\"click\", clickCaptured, true);\n\n Object.defineProperty(prototype, \"submitter\", {\n get() {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target)\n }\n }\n });\n})();\n\nconst FrameLoadingStyle = {\n eager: \"eager\",\n lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n * <turbo-frame id=\"messages\">\n * <a href=\"/messages/expanded\">\n * Show all expanded messages in this frame.\n * </a>\n *\n * <form action=\"/messages\">\n * Show response from this form within this frame.\n * </form>\n * </turbo-frame>\n */\nclass FrameElement extends HTMLElement {\n static delegateConstructor = undefined\n\n loaded = Promise.resolve()\n\n static get observedAttributes() {\n return [\"disabled\", \"loading\", \"src\"]\n }\n\n constructor() {\n super();\n this.delegate = new FrameElement.delegateConstructor(this);\n }\n\n connectedCallback() {\n this.delegate.connect();\n }\n\n disconnectedCallback() {\n this.delegate.disconnect();\n }\n\n reload() {\n return this.delegate.sourceURLReloaded()\n }\n\n attributeChangedCallback(name) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged();\n } else if (name == \"src\") {\n this.delegate.sourceURLChanged();\n } else if (name == \"disabled\") {\n this.delegate.disabledChanged();\n }\n }\n\n /**\n * Gets the URL to lazily load source HTML from\n */\n get src() {\n return this.getAttribute(\"src\")\n }\n\n /**\n * Sets the URL to lazily load source HTML from\n */\n set src(value) {\n if (value) {\n this.setAttribute(\"src\", value);\n } else {\n this.removeAttribute(\"src\");\n }\n }\n\n /**\n * Gets the refresh mode for the frame.\n */\n get refresh() {\n return this.getAttribute(\"refresh\")\n }\n\n /**\n * Sets the refresh mode for the frame.\n */\n set refresh(value) {\n if (value) {\n this.setAttribute(\"refresh\", value);\n } else {\n this.removeAttribute(\"refresh\");\n }\n }\n\n /**\n * Determines if the element is loading\n */\n get loading() {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n }\n\n /**\n * Sets the value of if the element is loading\n */\n set loading(value) {\n if (value) {\n this.setAttribute(\"loading\", value);\n } else {\n this.removeAttribute(\"loading\");\n }\n }\n\n /**\n * Gets the disabled state of the frame.\n *\n * If disabled, no requests will be intercepted by the frame.\n */\n get disabled() {\n return this.hasAttribute(\"disabled\")\n }\n\n /**\n * Sets the disabled state of the frame.\n *\n * If disabled, no requests will be intercepted by the frame.\n */\n set disabled(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n }\n\n /**\n * Gets the autoscroll state of the frame.\n *\n * If true, the frame will be scrolled into view automatically on update.\n */\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\")\n }\n\n /**\n * Sets the autoscroll state of the frame.\n *\n * If true, the frame will be scrolled into view automatically on update.\n */\n set autoscroll(value) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\");\n } else {\n this.removeAttribute(\"autoscroll\");\n }\n }\n\n /**\n * Determines if the element has finished loading\n */\n get complete() {\n return !this.delegate.isLoading\n }\n\n /**\n * Gets the active state of the frame.\n *\n * If inactive, source changes will not be observed.\n */\n get isActive() {\n return this.ownerDocument === document && !this.isPreview\n }\n\n /**\n * Sets the active state of the frame.\n *\n * If inactive, source changes will not be observed.\n */\n get isPreview() {\n return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n }\n}\n\nfunction frameLoadingStyleFromString(style) {\n switch (style.toLowerCase()) {\n case \"lazy\":\n return FrameLoadingStyle.lazy\n default:\n return FrameLoadingStyle.eager\n }\n}\n\nfunction expandURL(locatable) {\n return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n let anchorMatch;\n if (url.hash) {\n return url.hash.slice(1)\n // eslint-disable-next-line no-cond-assign\n } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n return anchorMatch[1]\n }\n}\n\nfunction getAction$1(form, submitter) {\n const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n return expandURL(action)\n}\n\nfunction getExtension(url) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isHTML(url) {\n return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/)\n}\n\nfunction isPrefixedBy(baseURL, url) {\n const prefix = getPrefix(url);\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n return isPrefixedBy(location, rootLocation) && isHTML(location)\n}\n\nfunction getRequestURL(url) {\n const anchor = getAnchor(url);\n return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n return getPathComponents(url).slice(-1)[0]\n}\n\nfunction getPrefix(url) {\n return addTrailingSlash(url.origin + url.pathname)\n}\n\nfunction addTrailingSlash(value) {\n return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n constructor(response) {\n this.response = response;\n }\n\n get succeeded() {\n return this.response.ok\n }\n\n get failed() {\n return !this.succeeded\n }\n\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499\n }\n\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599\n }\n\n get redirected() {\n return this.response.redirected\n }\n\n get location() {\n return expandURL(this.response.url)\n }\n\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n }\n\n get statusCode() {\n return this.response.status\n }\n\n get contentType() {\n return this.header(\"Content-Type\")\n }\n\n get responseText() {\n return this.response.clone().text()\n }\n\n get responseHTML() {\n if (this.isHTML) {\n return this.response.clone().text()\n } else {\n return Promise.resolve(undefined)\n }\n }\n\n header(name) {\n return this.response.headers.get(name)\n }\n}\n\nfunction activateScriptElement(element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element\n } else {\n const createdScriptElement = document.createElement(\"script\");\n const cspNonce = getMetaContent(\"csp-nonce\");\n if (cspNonce) {\n createdScriptElement.nonce = cspNonce;\n }\n createdScriptElement.textContent = element.textContent;\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n return createdScriptElement\n }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n for (const { name, value } of sourceElement.attributes) {\n destinationElement.setAttribute(name, value);\n }\n}\n\nfunction createDocumentFragment(html) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n return template.content\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n const event = new CustomEvent(eventName, {\n cancelable,\n bubbles: true,\n composed: true,\n detail\n });\n\n if (target && target.isConnected) {\n target.dispatchEvent(event);\n } else {\n document.documentElement.dispatchEvent(event);\n }\n\n return event\n}\n\nfunction nextRepaint() {\n if (document.visibilityState === \"hidden\") {\n return nextEventLoopTick()\n } else {\n return nextAnimationFrame()\n }\n}\n\nfunction nextAnimationFrame() {\n return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction nextMicrotask() {\n return Promise.resolve()\n}\n\nfunction parseHTMLDocument(html = \"\") {\n return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nfunction unindent(strings, ...values) {\n const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n const match = lines[0].match(/^\\s+/);\n const indent = match ? match[0].length : 0;\n return lines.map((line) => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings, values) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i];\n return result + string + value\n }, \"\")\n}\n\nfunction uuid() {\n return Array.from({ length: 36 })\n .map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\"\n } else if (i == 14) {\n return \"4\"\n } else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16)\n } else {\n return Math.floor(Math.random() * 15).toString(16)\n }\n })\n .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n if (typeof value == \"string\") return value\n }\n\n return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n return elements.some((element) => element && element.hasAttribute(attributeName))\n}\n\nfunction markAsBusy(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.setAttribute(\"busy\", \"\");\n }\n element.setAttribute(\"aria-busy\", \"true\");\n }\n}\n\nfunction clearBusyState(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.removeAttribute(\"busy\");\n }\n\n element.removeAttribute(\"aria-busy\");\n }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n return new Promise((resolve) => {\n const onComplete = () => {\n element.removeEventListener(\"error\", onComplete);\n element.removeEventListener(\"load\", onComplete);\n resolve();\n };\n\n element.addEventListener(\"load\", onComplete, { once: true });\n element.addEventListener(\"error\", onComplete, { once: true });\n setTimeout(resolve, timeoutInMilliseconds);\n })\n}\n\nfunction getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState\n case \"advance\":\n case \"restore\":\n return history.pushState\n }\n}\n\nfunction isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n const action = getAttribute(\"data-turbo-action\", ...elements);\n\n return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n const element = getMetaElement(name);\n return element && element.content\n}\n\nfunction setMetaContent(name, content) {\n let element = getMetaElement(name);\n\n if (!element) {\n element = document.createElement(\"meta\");\n element.setAttribute(\"name\", name);\n\n document.head.appendChild(element);\n }\n\n element.setAttribute(\"content\", content);\n\n return element\n}\n\nfunction findClosestRecursively(element, selector) {\n if (element instanceof Element) {\n return (\n element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n )\n }\n}\n\nfunction elementIsFocusable(element) {\n const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n const before = reader();\n\n callback();\n\n await nextAnimationFrame();\n\n const after = reader();\n\n return [before, after]\n}\n\nfunction doesNotTargetIFrame(anchor) {\n if (anchor.hasAttribute(\"target\")) {\n for (const element of document.getElementsByName(anchor.target)) {\n if (element instanceof HTMLIFrameElement) return false\n }\n }\n\n return true\n}\n\nfunction findLinkFromClickTarget(target) {\n return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\")\n}\n\nfunction getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction debounce(fn, delay) {\n let timeoutId = null;\n\n return (...args) => {\n const callback = () => fn.apply(this, args);\n clearTimeout(timeoutId);\n timeoutId = setTimeout(callback, delay);\n }\n}\n\nclass LimitedSet extends Set {\n constructor(maxSize) {\n super();\n this.maxSize = maxSize;\n }\n\n add(value) {\n if (this.size >= this.maxSize) {\n const iterator = this.values();\n const oldestValue = iterator.next().value;\n this.delete(oldestValue);\n }\n super.add(value);\n }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nconst nativeFetch = window.fetch;\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n const modifiedHeaders = new Headers(options.headers || {});\n const requestUID = uuid();\n recentRequests.add(requestUID);\n modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n return nativeFetch(url, {\n ...options,\n headers: modifiedHeaders\n })\n}\n\nfunction fetchMethodFromString(method) {\n switch (method.toLowerCase()) {\n case \"get\":\n return FetchMethod.get\n case \"post\":\n return FetchMethod.post\n case \"put\":\n return FetchMethod.put\n case \"patch\":\n return FetchMethod.patch\n case \"delete\":\n return FetchMethod.delete\n }\n}\n\nconst FetchMethod = {\n get: \"get\",\n post: \"post\",\n put: \"put\",\n patch: \"patch\",\n delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n switch (encoding.toLowerCase()) {\n case FetchEnctype.multipart:\n return FetchEnctype.multipart\n case FetchEnctype.plain:\n return FetchEnctype.plain\n default:\n return FetchEnctype.urlEncoded\n }\n}\n\nconst FetchEnctype = {\n urlEncoded: \"application/x-www-form-urlencoded\",\n multipart: \"multipart/form-data\",\n plain: \"text/plain\"\n};\n\nclass FetchRequest {\n abortController = new AbortController()\n #resolveRequestPromise = (_value) => {}\n\n constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n this.delegate = delegate;\n this.url = url;\n this.target = target;\n this.fetchOptions = {\n credentials: \"same-origin\",\n redirect: \"follow\",\n method: method,\n headers: { ...this.defaultHeaders },\n body: body,\n signal: this.abortSignal,\n referrer: this.delegate.referrer?.href\n };\n this.enctype = enctype;\n }\n\n get method() {\n return this.fetchOptions.method\n }\n\n set method(value) {\n const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n this.url.search = \"\";\n\n const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n this.url = url;\n this.fetchOptions.body = body;\n this.fetchOptions.method = fetchMethod;\n }\n\n get headers() {\n return this.fetchOptions.headers\n }\n\n set headers(value) {\n this.fetchOptions.headers = value;\n }\n\n get body() {\n if (this.isSafe) {\n return this.url.searchParams\n } else {\n return this.fetchOptions.body\n }\n }\n\n set body(value) {\n this.fetchOptions.body = value;\n }\n\n get location() {\n return this.url\n }\n\n get params() {\n return this.url.searchParams\n }\n\n get entries() {\n return this.body ? Array.from(this.body.entries()) : []\n }\n\n cancel() {\n this.abortController.abort();\n }\n\n async perform() {\n const { fetchOptions } = this;\n this.delegate.prepareRequest(this);\n const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n try {\n this.delegate.requestStarted(this);\n\n if (event.detail.fetchRequest) {\n this.response = event.detail.fetchRequest.response;\n } else {\n this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n }\n\n const response = await this.response;\n return await this.receive(response)\n } catch (error) {\n if (error.name !== \"AbortError\") {\n if (this.#willDelegateErrorHandling(error)) {\n this.delegate.requestErrored(this, error);\n }\n throw error\n }\n } finally {\n this.delegate.requestFinished(this);\n }\n }\n\n async receive(response) {\n const fetchResponse = new FetchResponse(response);\n const event = dispatch(\"turbo:before-fetch-response\", {\n cancelable: true,\n detail: { fetchResponse },\n target: this.target\n });\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n } else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse);\n } else {\n this.delegate.requestFailedWithResponse(this, fetchResponse);\n }\n return fetchResponse\n }\n\n get defaultHeaders() {\n return {\n Accept: \"text/html, application/xhtml+xml\"\n }\n }\n\n get isSafe() {\n return isSafe(this.method)\n }\n\n get abortSignal() {\n return this.abortController.signal\n }\n\n acceptResponseType(mimeType) {\n this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n }\n\n async #allowRequestToBeIntercepted(fetchOptions) {\n const requestInterception = new Promise((resolve) => (this.#resolveRequestPromise = resolve));\n const event = dispatch(\"turbo:before-fetch-request\", {\n cancelable: true,\n detail: {\n fetchOptions,\n url: this.url,\n resume: this.#resolveRequestPromise\n },\n target: this.target\n });\n this.url = event.detail.url;\n if (event.defaultPrevented) await requestInterception;\n\n return event\n }\n\n #willDelegateErrorHandling(error) {\n const event = dispatch(\"turbo:fetch-request-error\", {\n target: this.target,\n cancelable: true,\n detail: { request: this, error: error }\n });\n\n return !event.defaultPrevented\n }\n}\n\nfunction isSafe(fetchMethod) {\n return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n const searchParams =\n Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n if (isSafe(method)) {\n return [mergeIntoURLSearchParams(resource, searchParams), null]\n } else if (enctype == FetchEnctype.urlEncoded) {\n return [resource, searchParams]\n } else {\n return [resource, requestBody]\n }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n const entries = [];\n\n for (const [name, value] of requestBody) {\n if (value instanceof File) continue\n else entries.push([name, value]);\n }\n\n return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n url.search = searchParams.toString();\n\n return url\n}\n\nclass AppearanceObserver {\n started = false\n\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n this.intersectionObserver = new IntersectionObserver(this.intersect);\n }\n\n start() {\n if (!this.started) {\n this.started = true;\n this.intersectionObserver.observe(this.element);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n this.intersectionObserver.unobserve(this.element);\n }\n }\n\n intersect = (entries) => {\n const lastEntry = entries.slice(-1)[0];\n if (lastEntry?.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element);\n }\n }\n}\n\nclass StreamMessage {\n static contentType = \"text/vnd.turbo-stream.html\"\n\n static wrap(message) {\n if (typeof message == \"string\") {\n return new this(createDocumentFragment(message))\n } else {\n return message\n }\n }\n\n constructor(fragment) {\n this.fragment = importStreamElements(fragment);\n }\n}\n\nfunction importStreamElements(fragment) {\n for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n const streamElement = document.importNode(element, true);\n\n for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n }\n\n element.replaceWith(streamElement);\n }\n\n return fragment\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache {\n #prefetchTimeout = null\n #prefetched = null\n\n get(url) {\n if (this.#prefetched && this.#prefetched.url === url && this.#prefetched.expire > Date.now()) {\n return this.#prefetched.request\n }\n }\n\n setLater(url, request, ttl) {\n this.clear();\n\n this.#prefetchTimeout = setTimeout(() => {\n request.perform();\n this.set(url, request, ttl);\n this.#prefetchTimeout = null;\n }, PREFETCH_DELAY);\n }\n\n set(url, request, ttl) {\n this.#prefetched = { url, request, expire: new Date(new Date().getTime() + ttl) };\n }\n\n clear() {\n if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n this.#prefetched = null;\n }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n initialized: \"initialized\",\n requesting: \"requesting\",\n waiting: \"waiting\",\n receiving: \"receiving\",\n stopping: \"stopping\",\n stopped: \"stopped\"\n};\n\nclass FormSubmission {\n state = FormSubmissionState.initialized\n\n static confirmMethod(message, _element, _submitter) {\n return Promise.resolve(confirm(message))\n }\n\n constructor(delegate, formElement, submitter, mustRedirect = false) {\n const method = getMethod(formElement, submitter);\n const action = getAction(getFormAction(formElement, submitter), method);\n const body = buildFormData(formElement, submitter);\n const enctype = getEnctype(formElement, submitter);\n\n this.delegate = delegate;\n this.formElement = formElement;\n this.submitter = submitter;\n this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n this.mustRedirect = mustRedirect;\n }\n\n get method() {\n return this.fetchRequest.method\n }\n\n set method(value) {\n this.fetchRequest.method = value;\n }\n\n get action() {\n return this.fetchRequest.url.toString()\n }\n\n set action(value) {\n this.fetchRequest.url = expandURL(value);\n }\n\n get body() {\n return this.fetchRequest.body\n }\n\n get enctype() {\n return this.fetchRequest.enctype\n }\n\n get isSafe() {\n return this.fetchRequest.isSafe\n }\n\n get location() {\n return this.fetchRequest.url\n }\n\n // The submission process\n\n async start() {\n const { initialized, requesting } = FormSubmissionState;\n const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n if (typeof confirmationMessage === \"string\") {\n const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\n if (!answer) {\n return\n }\n }\n\n if (this.state == initialized) {\n this.state = requesting;\n return this.fetchRequest.perform()\n }\n }\n\n stop() {\n const { stopping, stopped } = FormSubmissionState;\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping;\n this.fetchRequest.cancel();\n return true\n }\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n if (!request.isSafe) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n if (token) {\n request.headers[\"X-CSRF-Token\"] = token;\n }\n }\n\n if (this.requestAcceptsTurboStreamResponse(request)) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted(_request) {\n this.state = FormSubmissionState.waiting;\n this.submitter?.setAttribute(\"disabled\", \"\");\n this.setSubmitsWith();\n markAsBusy(this.formElement);\n dispatch(\"turbo:submit-start\", {\n target: this.formElement,\n detail: { formSubmission: this }\n });\n this.delegate.formSubmissionStarted(this);\n }\n\n requestPreventedHandlingResponse(request, response) {\n prefetchCache.clear();\n\n this.result = { success: response.succeeded, fetchResponse: response };\n }\n\n requestSucceededWithResponse(request, response) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response);\n return\n }\n\n prefetchCache.clear();\n\n if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n const error = new Error(\"Form responses must redirect to another location\");\n this.delegate.formSubmissionErrored(this, error);\n } else {\n this.state = FormSubmissionState.receiving;\n this.result = { success: true, fetchResponse: response };\n this.delegate.formSubmissionSucceededWithResponse(this, response);\n }\n }\n\n requestFailedWithResponse(request, response) {\n this.result = { success: false, fetchResponse: response };\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n\n requestErrored(request, error) {\n this.result = { success: false, error };\n this.delegate.formSubmissionErrored(this, error);\n }\n\n requestFinished(_request) {\n this.state = FormSubmissionState.stopped;\n this.submitter?.removeAttribute(\"disabled\");\n this.resetSubmitterText();\n clearBusyState(this.formElement);\n dispatch(\"turbo:submit-end\", {\n target: this.formElement,\n detail: { formSubmission: this, ...this.result }\n });\n this.delegate.formSubmissionFinished(this);\n }\n\n // Private\n\n setSubmitsWith() {\n if (!this.submitter || !this.submitsWith) return\n\n if (this.submitter.matches(\"button\")) {\n this.originalSubmitText = this.submitter.innerHTML;\n this.submitter.innerHTML = this.submitsWith;\n } else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n this.originalSubmitText = input.value;\n input.value = this.submitsWith;\n }\n }\n\n resetSubmitterText() {\n if (!this.submitter || !this.originalSubmitText) return\n\n if (this.submitter.matches(\"button\")) {\n this.submitter.innerHTML = this.originalSubmitText;\n } else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n input.value = this.originalSubmitText;\n }\n }\n\n requestMustRedirect(request) {\n return !request.isSafe && this.mustRedirect\n }\n\n requestAcceptsTurboStreamResponse(request) {\n return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n }\n\n get submitsWith() {\n return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n }\n}\n\nfunction buildFormData(formElement, submitter) {\n const formData = new FormData(formElement);\n const name = submitter?.getAttribute(\"name\");\n const value = submitter?.getAttribute(\"value\");\n\n if (name) {\n formData.append(name, value || \"\");\n }\n\n return formData\n}\n\nfunction getCookieValue(cookieName) {\n if (cookieName != null) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\");\n return value ? decodeURIComponent(value) : undefined\n }\n }\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n if (submitter?.hasAttribute(\"formaction\")) {\n return submitter.getAttribute(\"formaction\") || \"\"\n } else {\n return formElement.getAttribute(\"action\") || formElementAction || \"\"\n }\n}\n\nfunction getAction(formAction, fetchMethod) {\n const action = expandURL(formAction);\n\n if (isSafe(fetchMethod)) {\n action.search = \"\";\n }\n\n return action\n}\n\nfunction getMethod(formElement, submitter) {\n const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n constructor(element) {\n this.element = element;\n }\n\n get activeElement() {\n return this.element.ownerDocument.activeElement\n }\n\n get children() {\n return [...this.element.children]\n }\n\n hasAnchor(anchor) {\n return this.getElementForAnchor(anchor) != null\n }\n\n getElementForAnchor(anchor) {\n return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n }\n\n get isConnected() {\n return this.element.isConnected\n }\n\n get firstAutofocusableElement() {\n return queryAutofocusableElement(this.element)\n }\n\n get permanentElements() {\n return queryPermanentElementsAll(this.element)\n }\n\n getPermanentElementById(id) {\n return getPermanentElementById(this.element, id)\n }\n\n getPermanentElementMapForSnapshot(snapshot) {\n const permanentElementMap = {};\n\n for (const currentPermanentElement of this.permanentElements) {\n const { id } = currentPermanentElement;\n const newPermanentElement = snapshot.getPermanentElementById(id);\n if (newPermanentElement) {\n permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n }\n }\n\n return permanentElementMap\n }\n}\n\nfunction getPermanentElementById(node, id) {\n return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n started = false\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n this.started = false;\n }\n }\n\n submitCaptured = () => {\n this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n }\n\n submitBubbled = (event) => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n const submitter = event.submitter || undefined;\n\n if (\n form &&\n submissionDoesNotDismissDialog(form, submitter) &&\n submissionDoesNotTargetIFrame(form, submitter) &&\n this.delegate.willSubmitForm(form, submitter)\n ) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.delegate.formSubmitted(form, submitter);\n }\n }\n }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n if (submitter?.hasAttribute(\"formtarget\") || form.hasAttribute(\"target\")) {\n const target = submitter?.getAttribute(\"formtarget\") || form.target;\n\n for (const element of document.getElementsByName(target)) {\n if (element instanceof HTMLIFrameElement) return false\n }\n\n return true\n } else {\n return true\n }\n}\n\nclass View {\n #resolveRenderPromise = (_value) => {}\n #resolveInterceptionPromise = (_value) => {}\n\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n }\n\n // Scrolling\n\n scrollToAnchor(anchor) {\n const element = this.snapshot.getElementForAnchor(anchor);\n if (element) {\n this.scrollToElement(element);\n this.focusElement(element);\n } else {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n }\n\n scrollToAnchorFromLocation(location) {\n this.scrollToAnchor(getAnchor(location));\n }\n\n scrollToElement(element) {\n element.scrollIntoView();\n }\n\n focusElement(element) {\n if (element instanceof HTMLElement) {\n if (element.hasAttribute(\"tabindex\")) {\n element.focus();\n } else {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n element.removeAttribute(\"tabindex\");\n }\n }\n }\n\n scrollToPosition({ x, y }) {\n this.scrollRoot.scrollTo(x, y);\n }\n\n scrollToTop() {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n\n get scrollRoot() {\n return window\n }\n\n // Rendering\n\n async render(renderer) {\n const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n // A workaround to ignore tracked element mismatch reloads when performing\n // a promoted Visit from a frame navigation\n const shouldInvalidate = willRender;\n\n if (shouldRender) {\n try {\n this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n this.renderer = renderer;\n await this.prepareToRenderSnapshot(renderer);\n\n const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n if (!immediateRender) await renderInterception;\n\n await this.renderSnapshot(renderer);\n this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n this.delegate.preloadOnLoadLinksForView(this.element);\n this.finishRenderingSnapshot(renderer);\n } finally {\n delete this.renderer;\n this.#resolveRenderPromise(undefined);\n delete this.renderPromise;\n }\n } else if (shouldInvalidate) {\n this.invalidate(renderer.reloadReason);\n }\n }\n\n invalidate(reason) {\n this.delegate.viewInvalidated(reason);\n }\n\n async prepareToRenderSnapshot(renderer) {\n this.markAsPreview(renderer.isPreview);\n await renderer.prepareToRender();\n }\n\n markAsPreview(isPreview) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\");\n } else {\n this.element.removeAttribute(\"data-turbo-preview\");\n }\n }\n\n markVisitDirection(direction) {\n this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n }\n\n unmarkVisitDirection() {\n this.element.removeAttribute(\"data-turbo-visit-direction\");\n }\n\n async renderSnapshot(renderer) {\n await renderer.render();\n }\n\n finishRenderingSnapshot(renderer) {\n renderer.finishRendering();\n }\n}\n\nclass FrameView extends View {\n missing() {\n this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n }\n\n get snapshot() {\n return new Snapshot(this.element)\n }\n}\n\nclass LinkInterceptor {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n }\n\n start() {\n this.element.addEventListener(\"click\", this.clickBubbled);\n document.addEventListener(\"turbo:click\", this.linkClicked);\n document.addEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled);\n document.removeEventListener(\"turbo:click\", this.linkClicked);\n document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n clickBubbled = (event) => {\n if (this.respondsToEventTarget(event.target)) {\n this.clickEvent = event;\n } else {\n delete this.clickEvent;\n }\n }\n\n linkClicked = (event) => {\n if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n this.clickEvent.preventDefault();\n event.preventDefault();\n this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n }\n }\n delete this.clickEvent;\n }\n\n willVisit = (_event) => {\n delete this.clickEvent;\n }\n\n respondsToEventTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n return element && element.closest(\"turbo-frame, html\") == this.element\n }\n}\n\nclass LinkClickObserver {\n started = false\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n\n clickCaptured = () => {\n this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n }\n\n clickBubbled = (event) => {\n if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n const target = (event.composedPath && event.composedPath()[0]) || event.target;\n const link = findLinkFromClickTarget(target);\n if (link && doesNotTargetIFrame(link)) {\n const location = getLocationForLink(link);\n if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n event.preventDefault();\n this.delegate.followedLinkToLocation(link, location);\n }\n }\n }\n }\n\n clickEventIsSignificant(event) {\n return !(\n (event.target && event.target.isContentEditable) ||\n event.defaultPrevented ||\n event.which > 1 ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey\n )\n }\n}\n\nclass FormLinkClickObserver {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.linkInterceptor = new LinkClickObserver(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n }\n\n // Link hover observer delegate\n\n canPrefetchRequestToLocation(link, location) {\n return false\n }\n\n prefetchAndCacheRequestToLocation(link, location) {\n return\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link, location, originalEvent) {\n return (\n this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n )\n }\n\n followedLinkToLocation(link, location) {\n const form = document.createElement(\"form\");\n\n const type = \"hidden\";\n for (const [name, value] of location.searchParams) {\n form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n }\n\n const action = Object.assign(location, { search: \"\" });\n form.setAttribute(\"data-turbo\", \"true\");\n form.setAttribute(\"action\", action.href);\n form.setAttribute(\"hidden\", \"\");\n\n const method = link.getAttribute(\"data-turbo-method\");\n if (method) form.setAttribute(\"method\", method);\n\n const turboFrame = link.getAttribute(\"data-turbo-frame\");\n if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n const turboAction = getVisitAction(link);\n if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n const turboStream = link.hasAttribute(\"data-turbo-stream\");\n if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n this.delegate.submittedFormLinkToLocation(link, location, form);\n\n document.body.appendChild(form);\n form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n requestAnimationFrame(() => form.requestSubmit());\n }\n}\n\nclass Bardo {\n static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n const bardo = new this(delegate, permanentElementMap);\n bardo.enter();\n await callback();\n bardo.leave();\n }\n\n constructor(delegate, permanentElementMap) {\n this.delegate = delegate;\n this.permanentElementMap = permanentElementMap;\n }\n\n enter() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n }\n }\n\n leave() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement] = this.permanentElementMap[id];\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n this.delegate.leavingBardo(currentPermanentElement);\n }\n }\n\n replaceNewPermanentElementWithPlaceholder(permanentElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement);\n permanentElement.replaceWith(placeholder);\n }\n\n replaceCurrentPermanentElementWithClone(permanentElement) {\n const clone = permanentElement.cloneNode(true);\n permanentElement.replaceWith(clone);\n }\n\n replacePlaceholderWithPermanentElement(permanentElement) {\n const placeholder = this.getPlaceholderById(permanentElement.id);\n placeholder?.replaceWith(permanentElement);\n }\n\n getPlaceholderById(id) {\n return this.placeholders.find((element) => element.content == id)\n }\n\n get placeholders() {\n return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n const element = document.createElement(\"meta\");\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n element.setAttribute(\"content\", permanentElement.id);\n return element\n}\n\nclass Renderer {\n #activeElement = null\n\n constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n this.currentSnapshot = currentSnapshot;\n this.newSnapshot = newSnapshot;\n this.isPreview = isPreview;\n this.willRender = willRender;\n this.renderElement = renderElement;\n this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n }\n\n get shouldRender() {\n return true\n }\n\n get reloadReason() {\n return\n }\n\n prepareToRender() {\n return\n }\n\n render() {\n // Abstract method\n }\n\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve();\n delete this.resolvingFunctions;\n }\n }\n\n async preservingPermanentElements(callback) {\n await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n }\n\n focusFirstAutofocusableElement() {\n const element = this.connectedSnapshot.firstAutofocusableElement;\n if (element) {\n element.focus();\n }\n }\n\n // Bardo delegate\n\n enteringBardo(currentPermanentElement) {\n if (this.#activeElement) return\n\n if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n this.#activeElement = this.currentSnapshot.activeElement;\n }\n }\n\n leavingBardo(currentPermanentElement) {\n if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n this.#activeElement.focus();\n\n this.#activeElement = null;\n }\n }\n\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n }\n\n get currentElement() {\n return this.currentSnapshot.element\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n }\n\n get renderMethod() {\n return \"replace\"\n }\n}\n\nclass FrameRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const destinationRange = document.createRange();\n destinationRange.selectNodeContents(currentElement);\n destinationRange.deleteContents();\n\n const frameElement = newElement;\n const sourceRange = frameElement.ownerDocument?.createRange();\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement);\n currentElement.appendChild(sourceRange.extractContents());\n }\n }\n\n constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n this.delegate = delegate;\n }\n\n get shouldRender() {\n return true\n }\n\n async render() {\n await nextRepaint();\n this.preservingPermanentElements(() => {\n this.loadFrameElement();\n });\n this.scrollFrameIntoView();\n await nextRepaint();\n this.focusFirstAutofocusableElement();\n await nextRepaint();\n this.activateScriptElements();\n }\n\n loadFrameElement() {\n this.delegate.willRenderFrame(this.currentElement, this.newElement);\n this.renderElement(this.currentElement, this.newElement);\n }\n\n scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n const element = this.currentElement.firstElementChild;\n const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n if (element) {\n element.scrollIntoView({ block, behavior });\n return true\n }\n }\n return false\n }\n\n activateScriptElements() {\n for (const inertScriptElement of this.newScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n get newScriptElements() {\n return this.currentElement.querySelectorAll(\"script\")\n }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value\n } else {\n return defaultValue\n }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n if (value == \"auto\" || value == \"smooth\") {\n return value\n } else {\n return defaultValue\n }\n}\n\nclass ProgressBar {\n static animationDuration = 300 /*ms*/\n\n static get defaultCSS() {\n return unindent`\n .turbo-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 2147483647;\n transition:\n width ${ProgressBar.animationDuration}ms ease-out,\n opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n transform: translate3d(0, 0, 0);\n }\n `\n }\n\n hiding = false\n value = 0\n visible = false\n\n constructor() {\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n this.installStylesheetElement();\n this.setValue(0);\n }\n\n show() {\n if (!this.visible) {\n this.visible = true;\n this.installProgressElement();\n this.startTrickling();\n }\n }\n\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true;\n this.fadeProgressElement(() => {\n this.uninstallProgressElement();\n this.stopTrickling();\n this.visible = false;\n this.hiding = false;\n });\n }\n }\n\n setValue(value) {\n this.value = value;\n this.refresh();\n }\n\n // Private\n\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }\n\n installProgressElement() {\n this.progressElement.style.width = \"0\";\n this.progressElement.style.opacity = \"1\";\n document.documentElement.insertBefore(this.progressElement, document.body);\n this.refresh();\n }\n\n fadeProgressElement(callback) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n }\n }\n\n stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n\n trickle = () => {\n this.setValue(this.value + Math.random() / 100);\n }\n\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + this.value * 90}%`;\n });\n }\n\n createStylesheetElement() {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n element.textContent = ProgressBar.defaultCSS;\n if (this.cspNonce) {\n element.nonce = this.cspNonce;\n }\n return element\n }\n\n createProgressElement() {\n const element = document.createElement(\"div\");\n element.className = \"turbo-progress-bar\";\n return element\n }\n\n get cspNonce() {\n return getMetaContent(\"csp-nonce\")\n }\n}\n\nclass HeadSnapshot extends Snapshot {\n detailsByOuterHTML = this.children\n .filter((element) => !elementIsNoscript(element))\n .map((element) => elementWithoutNonce(element))\n .reduce((result, element) => {\n const { outerHTML } = element;\n const details =\n outerHTML in result\n ? result[outerHTML]\n : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: []\n };\n return {\n ...result,\n [outerHTML]: {\n ...details,\n elements: [...details.elements, element]\n }\n }\n }, {})\n\n get trackedElementSignature() {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\")\n }\n\n getScriptElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n }\n\n getStylesheetElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n }\n\n getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n .filter(({ type }) => type == matchedType)\n .map(({ elements: [element] }) => element)\n }\n\n get provisionalElements() {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n if (type == null && !tracked) {\n return [...result, ...elements]\n } else if (elements.length > 1) {\n return [...result, ...elements.slice(1)]\n } else {\n return result\n }\n }, [])\n }\n\n getMetaValue(name) {\n const element = this.findMetaElementByName(name);\n return element ? element.getAttribute(\"content\") : null\n }\n\n findMetaElementByName(name) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const {\n elements: [element]\n } = this.detailsByOuterHTML[outerHTML];\n return elementIsMetaElementWithName(element, name) ? element : result\n }, undefined | undefined)\n }\n}\n\nfunction elementType(element) {\n if (elementIsScript(element)) {\n return \"script\"\n } else if (elementIsStylesheet(element)) {\n return \"stylesheet\"\n }\n}\n\nfunction elementIsTracked(element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n const tagName = element.localName;\n return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n const tagName = element.localName;\n return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n const tagName = element.localName;\n return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n const tagName = element.localName;\n return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n if (element.hasAttribute(\"nonce\")) {\n element.setAttribute(\"nonce\", \"\");\n }\n\n return element\n}\n\nclass PageSnapshot extends Snapshot {\n static fromHTMLString(html = \"\") {\n return this.fromDocument(parseHTMLDocument(html))\n }\n\n static fromElement(element) {\n return this.fromDocument(element.ownerDocument)\n }\n\n static fromDocument({ documentElement, body, head }) {\n return new this(documentElement, body, new HeadSnapshot(head))\n }\n\n constructor(documentElement, body, headSnapshot) {\n super(body);\n this.documentElement = documentElement;\n this.headSnapshot = headSnapshot;\n }\n\n clone() {\n const clonedElement = this.element.cloneNode(true);\n\n const selectElements = this.element.querySelectorAll(\"select\");\n const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n for (const [index, source] of selectElements.entries()) {\n const clone = clonedSelectElements[index];\n for (const option of clone.selectedOptions) option.selected = false;\n for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n }\n\n for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n clonedPasswordInput.value = \"\";\n }\n\n return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n }\n\n get lang() {\n return this.documentElement.getAttribute(\"lang\")\n }\n\n get headElement() {\n return this.headSnapshot.element\n }\n\n get rootLocation() {\n const root = this.getSetting(\"root\") ?? \"/\";\n return expandURL(root)\n }\n\n get cacheControlValue() {\n return this.getSetting(\"cache-control\")\n }\n\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\"\n }\n\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\"\n }\n\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\"\n }\n\n get prefersViewTransitions() {\n return this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\"\n }\n\n get shouldMorphPage() {\n return this.getSetting(\"refresh-method\") === \"morph\"\n }\n\n get shouldPreserveScrollPosition() {\n return this.getSetting(\"refresh-scroll\") === \"preserve\"\n }\n\n // Private\n\n getSetting(name) {\n return this.headSnapshot.getMetaValue(`turbo-${name}`)\n }\n}\n\nclass ViewTransitioner {\n #viewTransitionStarted = false\n #lastOperation = Promise.resolve()\n\n renderChange(useViewTransition, render) {\n if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n this.#viewTransitionStarted = true;\n this.#lastOperation = this.#lastOperation.then(async () => {\n await document.startViewTransition(render).finished;\n });\n } else {\n this.#lastOperation = this.#lastOperation.then(render);\n }\n\n return this.#lastOperation\n }\n\n get viewTransitionsAvailable() {\n return document.startViewTransition\n }\n}\n\nconst defaultOptions = {\n action: \"advance\",\n historyChanged: false,\n visitCachedSnapshot: () => {},\n willRender: true,\n updateHistory: true,\n shouldCacheSnapshot: true,\n acceptsStreamResponse: false\n};\n\nconst TimingMetric = {\n visitStart: \"visitStart\",\n requestStart: \"requestStart\",\n requestEnd: \"requestEnd\",\n visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n initialized: \"initialized\",\n started: \"started\",\n canceled: \"canceled\",\n failed: \"failed\",\n completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n networkFailure: 0,\n timeoutFailure: -1,\n contentTypeMismatch: -2\n};\n\nconst Direction = {\n advance: \"forward\",\n restore: \"back\",\n replace: \"none\"\n};\n\nclass Visit {\n identifier = uuid() // Required by turbo-ios\n timingMetrics = {}\n\n followedRedirect = false\n historyChanged = false\n scrolled = false\n shouldCacheSnapshot = true\n acceptsStreamResponse = false\n snapshotCached = false\n state = VisitState.initialized\n viewTransitioner = new ViewTransitioner()\n\n constructor(delegate, location, restorationIdentifier, options = {}) {\n this.delegate = delegate;\n this.location = location;\n this.restorationIdentifier = restorationIdentifier || uuid();\n\n const {\n action,\n historyChanged,\n referrer,\n snapshot,\n snapshotHTML,\n response,\n visitCachedSnapshot,\n willRender,\n updateHistory,\n shouldCacheSnapshot,\n acceptsStreamResponse,\n direction\n } = {\n ...defaultOptions,\n ...options\n };\n this.action = action;\n this.historyChanged = historyChanged;\n this.referrer = referrer;\n this.snapshot = snapshot;\n this.snapshotHTML = snapshotHTML;\n this.response = response;\n this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n this.isPageRefresh = this.view.isPageRefresh(this);\n this.visitCachedSnapshot = visitCachedSnapshot;\n this.willRender = willRender;\n this.updateHistory = updateHistory;\n this.scrolled = !willRender;\n this.shouldCacheSnapshot = shouldCacheSnapshot;\n this.acceptsStreamResponse = acceptsStreamResponse;\n this.direction = direction || Direction[action];\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get history() {\n return this.delegate.history\n }\n\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n }\n\n get silent() {\n return this.isSamePage\n }\n\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart);\n this.state = VisitState.started;\n this.adapter.visitStarted(this);\n this.delegate.visitStarted(this);\n }\n }\n\n cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel();\n }\n this.cancelRender();\n this.state = VisitState.canceled;\n }\n }\n\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.adapter.visitCompleted(this);\n this.state = VisitState.completed;\n this.followRedirect();\n\n if (!this.followedRedirect) {\n this.delegate.visitCompleted(this);\n }\n }\n }\n\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n this.delegate.visitCompleted(this);\n }\n }\n\n changeHistory() {\n if (!this.historyChanged && this.updateHistory) {\n const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n const method = getHistoryMethodForAction(actionForHistory);\n this.history.update(method, this.location, this.restorationIdentifier);\n this.historyChanged = true;\n }\n }\n\n issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest();\n } else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location);\n this.request.perform();\n }\n }\n\n simulateRequest() {\n if (this.response) {\n this.startRequest();\n this.recordResponse();\n this.finishRequest();\n }\n }\n\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\n }\n\n recordResponse(response = this.response) {\n this.response = response;\n if (response) {\n const { statusCode } = response;\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this);\n } else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n }\n }\n\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n\n loadResponse() {\n if (this.response) {\n const { statusCode, responseHTML } = this.response;\n this.render(async () => {\n if (this.shouldCacheSnapshot) this.cacheSnapshot();\n if (this.view.renderPromise) await this.view.renderPromise;\n\n if (isSuccessful(statusCode) && responseHTML != null) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n await this.renderPageSnapshot(snapshot, false);\n\n this.adapter.visitRendered(this);\n this.complete();\n } else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n this.adapter.visitRendered(this);\n this.fail();\n }\n });\n }\n }\n\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot\n }\n }\n }\n\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML)\n }\n }\n\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null\n }\n\n loadCachedSnapshot() {\n const snapshot = this.getCachedSnapshot();\n if (snapshot) {\n const isPreview = this.shouldIssueRequest();\n this.render(async () => {\n this.cacheSnapshot();\n if (this.isSamePage || this.isPageRefresh) {\n this.adapter.visitRendered(this);\n } else {\n if (this.view.renderPromise) await this.view.renderPromise;\n\n await this.renderPageSnapshot(snapshot, isPreview);\n\n this.adapter.visitRendered(this);\n if (!isPreview) {\n this.complete();\n }\n }\n });\n }\n }\n\n followRedirect() {\n if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n action: \"replace\",\n response: this.response,\n shouldCacheSnapshot: false,\n willRender: false\n });\n this.followedRedirect = true;\n }\n }\n\n goToSamePageAnchor() {\n if (this.isSamePage) {\n this.render(async () => {\n this.cacheSnapshot();\n this.performScroll();\n this.changeHistory();\n this.adapter.visitRendered(this);\n });\n }\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n if (this.acceptsStreamResponse) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted() {\n this.startRequest();\n }\n\n requestPreventedHandlingResponse(_request, _response) {}\n\n async requestSucceededWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.redirectedToLocation = response.redirected ? response.location : undefined;\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n\n async requestFailedWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n\n requestErrored(_request, _error) {\n this.recordResponse({\n statusCode: SystemStatusCode.networkFailure,\n redirected: false\n });\n }\n\n requestFinished() {\n this.finishRequest();\n }\n\n // Scrolling\n\n performScroll() {\n if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n } else {\n this.scrollToAnchor() || this.view.scrollToTop();\n }\n if (this.isSamePage) {\n this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n }\n\n this.scrolled = true;\n }\n }\n\n scrollToRestoredPosition() {\n const { scrollPosition } = this.restorationData;\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition);\n return true\n }\n }\n\n scrollToAnchor() {\n const anchor = getAnchor(this.location);\n if (anchor != null) {\n this.view.scrollToAnchor(anchor);\n return true\n }\n }\n\n // Instrumentation\n\n recordTimingMetric(metric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n\n getTimingMetrics() {\n return { ...this.timingMetrics }\n }\n\n // Private\n\n getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState\n case \"advance\":\n case \"restore\":\n return history.pushState\n }\n }\n\n hasPreloadedResponse() {\n return typeof this.response == \"object\"\n }\n\n shouldIssueRequest() {\n if (this.isSamePage) {\n return false\n } else if (this.action == \"restore\") {\n return !this.hasCachedSnapshot()\n } else {\n return this.willRender\n }\n }\n\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n this.snapshotCached = true;\n }\n }\n\n async render(callback) {\n this.cancelRender();\n this.frame = await nextRepaint();\n await callback();\n delete this.frame;\n }\n\n async renderPageSnapshot(snapshot, isPreview) {\n await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n this.performScroll();\n });\n }\n\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n}\n\nfunction isSuccessful(statusCode) {\n return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n progressBar = new ProgressBar()\n\n constructor(session) {\n this.session = session;\n }\n\n visitProposedToLocation(location, options) {\n if (locationIsVisitable(location, this.navigator.rootLocation)) {\n this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n } else {\n window.location.href = location.toString();\n }\n }\n\n visitStarted(visit) {\n this.location = visit.location;\n visit.loadCachedSnapshot();\n visit.issueRequest();\n visit.goToSamePageAnchor();\n }\n\n visitRequestStarted(visit) {\n this.progressBar.setValue(0);\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showVisitProgressBarAfterDelay();\n } else {\n this.showProgressBar();\n }\n }\n\n visitRequestCompleted(visit) {\n visit.loadResponse();\n }\n\n visitRequestFailedWithStatusCode(visit, statusCode) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload({\n reason: \"request_failed\",\n context: {\n statusCode\n }\n })\n default:\n return visit.loadResponse()\n }\n }\n\n visitRequestFinished(_visit) {}\n\n visitCompleted(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n pageInvalidated(reason) {\n this.reload(reason);\n }\n\n visitFailed(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n visitRendered(_visit) {}\n\n // Form Submission Delegate\n\n formSubmissionStarted(_formSubmission) {\n this.progressBar.setValue(0);\n this.showFormProgressBarAfterDelay();\n }\n\n formSubmissionFinished(_formSubmission) {\n this.progressBar.setValue(1);\n this.hideFormProgressBar();\n }\n\n // Private\n\n showVisitProgressBarAfterDelay() {\n this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n\n hideVisitProgressBar() {\n this.progressBar.hide();\n if (this.visitProgressBarTimeout != null) {\n window.clearTimeout(this.visitProgressBarTimeout);\n delete this.visitProgressBarTimeout;\n }\n }\n\n showFormProgressBarAfterDelay() {\n if (this.formProgressBarTimeout == null) {\n this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n }\n\n hideFormProgressBar() {\n this.progressBar.hide();\n if (this.formProgressBarTimeout != null) {\n window.clearTimeout(this.formProgressBarTimeout);\n delete this.formProgressBarTimeout;\n }\n }\n\n showProgressBar = () => {\n this.progressBar.show();\n }\n\n reload(reason) {\n dispatch(\"turbo:reload\", { detail: reason });\n\n window.location.href = this.location?.toString() || window.location.href;\n }\n\n get navigator() {\n return this.session.navigator\n }\n}\n\nclass CacheObserver {\n selector = \"[data-turbo-temporary]\"\n deprecatedSelector = \"[data-turbo-cache=false]\"\n\n started = false\n\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n\n removeTemporaryElements = (_event) => {\n for (const element of this.temporaryElements) {\n element.remove();\n }\n }\n\n get temporaryElements() {\n return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation]\n }\n\n get temporaryElementsWithDeprecation() {\n const elements = document.querySelectorAll(this.deprecatedSelector);\n\n if (elements.length) {\n console.warn(\n `The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`\n );\n }\n\n return [...elements]\n }\n}\n\nclass FrameRedirector {\n constructor(session, element) {\n this.session = session;\n this.element = element;\n this.linkInterceptor = new LinkInterceptor(this, element);\n this.formSubmitObserver = new FormSubmitObserver(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element, _location, _event) {\n return this.#shouldRedirect(element)\n }\n\n linkClickIntercepted(element, url, event) {\n const frame = this.#findFrameElement(element);\n if (frame) {\n frame.delegate.linkClickIntercepted(element, url, event);\n }\n }\n\n // Form submit observer delegate\n\n willSubmitForm(element, submitter) {\n return (\n element.closest(\"turbo-frame\") == null &&\n this.#shouldSubmit(element, submitter) &&\n this.#shouldRedirect(element, submitter)\n )\n }\n\n formSubmitted(element, submitter) {\n const frame = this.#findFrameElement(element, submitter);\n if (frame) {\n frame.delegate.formSubmitted(element, submitter);\n }\n }\n\n #shouldSubmit(form, submitter) {\n const action = getAction$1(form, submitter);\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const rootLocation = expandURL(meta?.content ?? \"/\");\n\n return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n }\n\n #shouldRedirect(element, submitter) {\n const isNavigatable =\n element instanceof HTMLFormElement\n ? this.session.submissionIsNavigatable(element, submitter)\n : this.session.elementIsNavigatable(element);\n\n if (isNavigatable) {\n const frame = this.#findFrameElement(element, submitter);\n return frame ? frame != element.closest(\"turbo-frame\") : false\n } else {\n return false\n }\n }\n\n #findFrameElement(element, submitter) {\n const id = submitter?.getAttribute(\"data-turbo-frame\") || element.getAttribute(\"data-turbo-frame\");\n if (id && id != \"_top\") {\n const frame = this.element.querySelector(`#${id}:not([disabled])`);\n if (frame instanceof FrameElement) {\n return frame\n }\n }\n }\n}\n\nclass History {\n location\n restorationIdentifier = uuid()\n restorationData = {}\n started = false\n pageLoaded = false\n currentIndex = 0\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false);\n addEventListener(\"load\", this.onPageLoad, false);\n this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n this.started = true;\n this.replace(new URL(window.location.href));\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false);\n removeEventListener(\"load\", this.onPageLoad, false);\n this.started = false;\n }\n }\n\n push(location, restorationIdentifier) {\n this.update(history.pushState, location, restorationIdentifier);\n }\n\n replace(location, restorationIdentifier) {\n this.update(history.replaceState, location, restorationIdentifier);\n }\n\n update(method, location, restorationIdentifier = uuid()) {\n if (method === history.pushState) ++this.currentIndex;\n\n const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n method.call(history, state, \"\", location.href);\n this.location = location;\n this.restorationIdentifier = restorationIdentifier;\n }\n\n // Restoration data\n\n getRestorationDataForIdentifier(restorationIdentifier) {\n return this.restorationData[restorationIdentifier] || {}\n }\n\n updateRestorationData(additionalData) {\n const { restorationIdentifier } = this;\n const restorationData = this.restorationData[restorationIdentifier];\n this.restorationData[restorationIdentifier] = {\n ...restorationData,\n ...additionalData\n };\n }\n\n // Scroll restoration\n\n assumeControlOfScrollRestoration() {\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n history.scrollRestoration = \"manual\";\n }\n }\n\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration;\n delete this.previousScrollRestoration;\n }\n }\n\n // Event handlers\n\n onPopState = (event) => {\n if (this.shouldHandlePopState()) {\n const { turbo } = event.state || {};\n if (turbo) {\n this.location = new URL(window.location.href);\n const { restorationIdentifier, restorationIndex } = turbo;\n this.restorationIdentifier = restorationIdentifier;\n const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n this.currentIndex = restorationIndex;\n }\n }\n }\n\n onPageLoad = async (_event) => {\n await nextMicrotask();\n this.pageLoaded = true;\n }\n\n // Private\n\n shouldHandlePopState() {\n // Safari dispatches a popstate event after window's load event, ignore it\n return this.pageIsLoaded()\n }\n\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\"\n }\n}\n\nclass LinkPrefetchObserver {\n started = false\n #prefetchedLink = null\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (this.started) return\n\n if (this.eventTarget.readyState === \"loading\") {\n this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n } else {\n this.#enable();\n }\n }\n\n stop() {\n if (!this.started) return\n\n this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n capture: true,\n passive: true\n });\n this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n capture: true,\n passive: true\n });\n\n this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n this.started = false;\n }\n\n #enable = () => {\n this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n capture: true,\n passive: true\n });\n this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n capture: true,\n passive: true\n });\n\n this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n this.started = true;\n }\n\n #tryToPrefetchRequest = (event) => {\n if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n const target = event.target;\n const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n if (isLink && this.#isPrefetchable(target)) {\n const link = target;\n const location = getLocationForLink(link);\n\n if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n this.#prefetchedLink = link;\n\n const fetchRequest = new FetchRequest(\n this,\n FetchMethod.get,\n location,\n new URLSearchParams(),\n target\n );\n\n prefetchCache.setLater(location.toString(), fetchRequest, this.#cacheTtl);\n }\n }\n }\n\n #cancelRequestIfObsolete = (event) => {\n if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n }\n\n #cancelPrefetchRequest = () => {\n prefetchCache.clear();\n this.#prefetchedLink = null;\n }\n\n #tryToUsePrefetchedRequest = (event) => {\n if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"get\") {\n const cached = prefetchCache.get(event.detail.url.toString());\n\n if (cached) {\n // User clicked link, use cache response\n event.detail.fetchRequest = cached;\n }\n\n prefetchCache.clear();\n }\n }\n\n prepareRequest(request) {\n const link = request.target;\n\n request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n const turboFrame = link.closest(\"turbo-frame\");\n const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n }\n }\n\n // Fetch request interface\n\n requestSucceededWithResponse() {}\n\n requestStarted(fetchRequest) {}\n\n requestErrored(fetchRequest) {}\n\n requestFinished(fetchRequest) {}\n\n requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n get #cacheTtl() {\n return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n }\n\n #isPrefetchable(link) {\n const href = link.getAttribute(\"href\");\n\n if (!href) return false\n\n if (unfetchableLink(link)) return false\n if (linkToTheSamePage(link)) return false\n if (linkOptsOut(link)) return false\n if (nonSafeLink(link)) return false\n if (eventPrevented(link)) return false\n\n return true\n }\n}\n\nconst unfetchableLink = (link) => {\n return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n return false\n};\n\nconst nonSafeLink = (link) => {\n const turboMethod = link.getAttribute(\"data-turbo-method\");\n if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n if (isUJS(link)) return true\n if (link.hasAttribute(\"data-turbo-confirm\")) return true\n if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n return false\n};\n\nconst isUJS = (link) => {\n return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n return event.defaultPrevented\n};\n\nclass Navigator {\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n proposeVisit(location, options = {}) {\n if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n this.delegate.visitProposedToLocation(location, options);\n }\n }\n\n startVisit(locatable, restorationIdentifier, options = {}) {\n this.stop();\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n referrer: this.location,\n ...options\n });\n this.currentVisit.start();\n }\n\n submitForm(form, submitter) {\n this.stop();\n this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n this.formSubmission.start();\n }\n\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop();\n delete this.formSubmission;\n }\n\n if (this.currentVisit) {\n this.currentVisit.cancel();\n delete this.currentVisit;\n }\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get rootLocation() {\n return this.view.snapshot.rootLocation\n }\n\n get history() {\n return this.delegate.history\n }\n\n // Form submission delegate\n\n formSubmissionStarted(formSubmission) {\n // Not all adapters implement formSubmissionStarted\n if (typeof this.adapter.formSubmissionStarted === \"function\") {\n this.adapter.formSubmissionStarted(formSubmission);\n }\n }\n\n async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n if (formSubmission == this.formSubmission) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const shouldCacheSnapshot = formSubmission.isSafe;\n if (!shouldCacheSnapshot) {\n this.view.clearSnapshotCache();\n }\n\n const { statusCode, redirected } = fetchResponse;\n const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n const visitOptions = {\n action,\n shouldCacheSnapshot,\n response: { statusCode, responseHTML, redirected }\n };\n this.proposeVisit(fetchResponse.location, visitOptions);\n }\n }\n }\n\n async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n const responseHTML = await fetchResponse.responseHTML;\n\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n if (fetchResponse.serverError) {\n await this.view.renderError(snapshot, this.currentVisit);\n } else {\n await this.view.renderPage(snapshot, false, true, this.currentVisit);\n }\n if(!snapshot.shouldPreserveScrollPosition) {\n this.view.scrollToTop();\n }\n this.view.clearSnapshotCache();\n }\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished(formSubmission) {\n // Not all adapters implement formSubmissionFinished\n if (typeof this.adapter.formSubmissionFinished === \"function\") {\n this.adapter.formSubmissionFinished(formSubmission);\n }\n }\n\n // Visit delegate\n\n visitStarted(visit) {\n this.delegate.visitStarted(visit);\n }\n\n visitCompleted(visit) {\n this.delegate.visitCompleted(visit);\n }\n\n locationWithActionIsSamePage(location, action) {\n const anchor = getAnchor(location);\n const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n\n return (\n action !== \"replace\" &&\n getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n (isRestorationToTop || (anchor != null && anchor !== currentAnchor))\n )\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n }\n\n // Visits\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n #getActionForFormSubmission(formSubmission, fetchResponse) {\n const { submitter, formElement } = formSubmission;\n return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n }\n\n #getDefaultAction(fetchResponse) {\n const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n return sameLocationRedirect ? \"replace\" : \"advance\"\n }\n}\n\nconst PageStage = {\n initial: 0,\n loading: 1,\n interactive: 2,\n complete: 3\n};\n\nclass PageObserver {\n stage = PageStage.initial\n started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading;\n }\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n addEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n removeEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = false;\n }\n }\n\n interpretReadyState = () => {\n const { readyState } = this;\n if (readyState == \"interactive\") {\n this.pageIsInteractive();\n } else if (readyState == \"complete\") {\n this.pageIsComplete();\n }\n }\n\n pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive;\n this.delegate.pageBecameInteractive();\n }\n }\n\n pageIsComplete() {\n this.pageIsInteractive();\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete;\n this.delegate.pageLoaded();\n }\n }\n\n pageWillUnload = () => {\n this.delegate.pageWillUnload();\n }\n\n get readyState() {\n return document.readyState\n }\n}\n\nclass ScrollObserver {\n started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false);\n this.onScroll();\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false);\n this.started = false;\n }\n }\n\n onScroll = () => {\n this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n }\n\n // Private\n\n updatePosition(position) {\n this.delegate.scrollPositionChanged(position);\n }\n}\n\nclass StreamMessageRenderer {\n render({ fragment }) {\n Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n withAutofocusFromFragment(fragment, () => {\n withPreservedFocus(() => {\n document.documentElement.appendChild(fragment);\n });\n });\n });\n }\n\n // Bardo delegate\n\n enteringBardo(currentPermanentElement, newPermanentElement) {\n newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n }\n\n leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n const permanentElementMap = {};\n for (const permanentElementInDocument of permanentElementsInDocument) {\n const { id } = permanentElementInDocument;\n\n for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n if (elementInStream) {\n permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n }\n }\n }\n\n return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n const generatedID = `turbo-stream-autofocus-${uuid()}`;\n const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n let willAutofocusId = null;\n\n if (elementWithAutofocus) {\n if (elementWithAutofocus.id) {\n willAutofocusId = elementWithAutofocus.id;\n } else {\n willAutofocusId = generatedID;\n }\n\n elementWithAutofocus.id = willAutofocusId;\n }\n\n callback();\n await nextRepaint();\n\n const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n if (hasNoActiveElement && willAutofocusId) {\n const elementToAutofocus = document.getElementById(willAutofocusId);\n\n if (elementIsFocusable(elementToAutofocus)) {\n elementToAutofocus.focus();\n }\n if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n elementToAutofocus.removeAttribute(\"id\");\n }\n }\n}\n\nasync function withPreservedFocus(callback) {\n const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n if (restoreFocusTo) {\n const elementToFocus = document.getElementById(restoreFocusTo);\n\n if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n elementToFocus.focus();\n }\n }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n for (const streamElement of nodeListOfStreamElements) {\n const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n if (elementWithAutofocus) return elementWithAutofocus\n }\n\n return null\n}\n\nclass StreamObserver {\n sources = new Set()\n #started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.#started) {\n this.#started = true;\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n stop() {\n if (this.#started) {\n this.#started = false;\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n connectStreamSource(source) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source);\n source.addEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n disconnectStreamSource(source) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source);\n source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n streamSourceIsConnected(source) {\n return this.sources.has(source)\n }\n\n inspectFetchResponse = (event) => {\n const response = fetchResponseFromEvent(event);\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault();\n this.receiveMessageResponse(response);\n }\n }\n\n receiveMessageEvent = (event) => {\n if (this.#started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data);\n }\n }\n\n async receiveMessageResponse(response) {\n const html = await response.responseHTML;\n if (html) {\n this.receiveMessageHTML(html);\n }\n }\n\n receiveMessageHTML(html) {\n this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n }\n}\n\nfunction fetchResponseFromEvent(event) {\n const fetchResponse = event.detail?.fetchResponse;\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse\n }\n}\n\nfunction fetchResponseIsStream(response) {\n const contentType = response.contentType ?? \"\";\n return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const { documentElement, body } = document;\n\n documentElement.replaceChild(newElement, body);\n }\n\n async render() {\n this.replaceHeadAndBody();\n this.activateScriptElements();\n }\n\n replaceHeadAndBody() {\n const { documentElement, head } = document;\n documentElement.replaceChild(this.newHead, head);\n this.renderElement(this.currentElement, this.newElement);\n }\n\n activateScriptElements() {\n for (const replaceableElement of this.scriptElements) {\n const parentNode = replaceableElement.parentNode;\n if (parentNode) {\n const element = activateScriptElement(replaceableElement);\n parentNode.replaceChild(element, replaceableElement);\n }\n }\n }\n\n get newHead() {\n return this.newSnapshot.headSnapshot.element\n }\n\n get scriptElements() {\n return document.documentElement.querySelectorAll(\"script\")\n }\n}\n\n// base IIFE to define idiomorph\nvar Idiomorph = (function () {\n\n //=============================================================================\n // AND NOW IT BEGINS...\n //=============================================================================\n let EMPTY_SET = new Set();\n\n // default configuration values, updatable by users now\n let defaults = {\n morphStyle: \"outerHTML\",\n callbacks : {\n beforeNodeAdded: noOp,\n afterNodeAdded: noOp,\n beforeNodeMorphed: noOp,\n afterNodeMorphed: noOp,\n beforeNodeRemoved: noOp,\n afterNodeRemoved: noOp,\n beforeAttributeUpdated: noOp,\n\n },\n head: {\n style: 'merge',\n shouldPreserve: function (elt) {\n return elt.getAttribute(\"im-preserve\") === \"true\";\n },\n shouldReAppend: function (elt) {\n return elt.getAttribute(\"im-re-append\") === \"true\";\n },\n shouldRemove: noOp,\n afterHeadMorphed: noOp,\n }\n };\n\n //=============================================================================\n // Core Morphing Algorithm - morph, morphNormalizedContent, morphOldNodeTo, morphChildren\n //=============================================================================\n function morph(oldNode, newContent, config = {}) {\n\n if (oldNode instanceof Document) {\n oldNode = oldNode.documentElement;\n }\n\n if (typeof newContent === 'string') {\n newContent = parseContent(newContent);\n }\n\n let normalizedContent = normalizeContent(newContent);\n\n let ctx = createMorphContext(oldNode, normalizedContent, config);\n\n return morphNormalizedContent(oldNode, normalizedContent, ctx);\n }\n\n function morphNormalizedContent(oldNode, normalizedNewContent, ctx) {\n if (ctx.head.block) {\n let oldHead = oldNode.querySelector('head');\n let newHead = normalizedNewContent.querySelector('head');\n if (oldHead && newHead) {\n let promises = handleHeadElement(newHead, oldHead, ctx);\n // when head promises resolve, call morph again, ignoring the head tag\n Promise.all(promises).then(function () {\n morphNormalizedContent(oldNode, normalizedNewContent, Object.assign(ctx, {\n head: {\n block: false,\n ignore: true\n }\n }));\n });\n return;\n }\n }\n\n if (ctx.morphStyle === \"innerHTML\") {\n\n // innerHTML, so we are only updating the children\n morphChildren(normalizedNewContent, oldNode, ctx);\n return oldNode.children;\n\n } else if (ctx.morphStyle === \"outerHTML\" || ctx.morphStyle == null) {\n // otherwise find the best element match in the new content, morph that, and merge its siblings\n // into either side of the best match\n let bestMatch = findBestNodeMatch(normalizedNewContent, oldNode, ctx);\n\n // stash the siblings that will need to be inserted on either side of the best match\n let previousSibling = bestMatch?.previousSibling;\n let nextSibling = bestMatch?.nextSibling;\n\n // morph it\n let morphedNode = morphOldNodeTo(oldNode, bestMatch, ctx);\n\n if (bestMatch) {\n // if there was a best match, merge the siblings in too and return the\n // whole bunch\n return insertSiblings(previousSibling, morphedNode, nextSibling);\n } else {\n // otherwise nothing was added to the DOM\n return []\n }\n } else {\n throw \"Do not understand how to morph style \" + ctx.morphStyle;\n }\n }\n\n\n /**\n * @param possibleActiveElement\n * @param ctx\n * @returns {boolean}\n */\n function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n return ctx.ignoreActiveValue && possibleActiveElement === document.activeElement && possibleActiveElement !== document.body;\n }\n\n /**\n * @param oldNode root node to merge content into\n * @param newContent new content to merge\n * @param ctx the merge context\n * @returns {Element} the element that ended up in the DOM\n */\n function morphOldNodeTo(oldNode, newContent, ctx) {\n if (ctx.ignoreActive && oldNode === document.activeElement) ; else if (newContent == null) {\n if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n\n oldNode.remove();\n ctx.callbacks.afterNodeRemoved(oldNode);\n return null;\n } else if (!isSoftMatch(oldNode, newContent)) {\n if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n if (ctx.callbacks.beforeNodeAdded(newContent) === false) return oldNode;\n\n oldNode.parentElement.replaceChild(newContent, oldNode);\n ctx.callbacks.afterNodeAdded(newContent);\n ctx.callbacks.afterNodeRemoved(oldNode);\n return newContent;\n } else {\n if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) return oldNode;\n\n if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (oldNode instanceof HTMLHeadElement && ctx.head.style !== \"morph\") {\n handleHeadElement(newContent, oldNode, ctx);\n } else {\n syncNodeFrom(newContent, oldNode, ctx);\n if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n morphChildren(newContent, oldNode, ctx);\n }\n }\n ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n return oldNode;\n }\n }\n\n /**\n * This is the core algorithm for matching up children. The idea is to use id sets to try to match up\n * nodes as faithfully as possible. We greedily match, which allows us to keep the algorithm fast, but\n * by using id sets, we are able to better match up with content deeper in the DOM.\n *\n * Basic algorithm is, for each node in the new content:\n *\n * - if we have reached the end of the old parent, append the new content\n * - if the new content has an id set match with the current insertion point, morph\n * - search for an id set match\n * - if id set match found, morph\n * - otherwise search for a \"soft\" match\n * - if a soft match is found, morph\n * - otherwise, prepend the new node before the current insertion point\n *\n * The two search algorithms terminate if competing node matches appear to outweigh what can be achieved\n * with the current node. See findIdSetMatch() and findSoftMatch() for details.\n *\n * @param {Element} newParent the parent element of the new content\n * @param {Element } oldParent the old content that we are merging the new content into\n * @param ctx the merge context\n */\n function morphChildren(newParent, oldParent, ctx) {\n\n let nextNewChild = newParent.firstChild;\n let insertionPoint = oldParent.firstChild;\n let newChild;\n\n // run through all the new content\n while (nextNewChild) {\n\n newChild = nextNewChild;\n nextNewChild = newChild.nextSibling;\n\n // if we are at the end of the exiting parent's children, just append\n if (insertionPoint == null) {\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n oldParent.appendChild(newChild);\n ctx.callbacks.afterNodeAdded(newChild);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // if the current node has an id set match then morph\n if (isIdSetMatch(newChild, insertionPoint, ctx)) {\n morphOldNodeTo(insertionPoint, newChild, ctx);\n insertionPoint = insertionPoint.nextSibling;\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // otherwise search forward in the existing old children for an id set match\n let idSetMatch = findIdSetMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n // if we found a potential match, remove the nodes until that point and morph\n if (idSetMatch) {\n insertionPoint = removeNodesBetween(insertionPoint, idSetMatch, ctx);\n morphOldNodeTo(idSetMatch, newChild, ctx);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // no id set match found, so scan forward for a soft match for the current node\n let softMatch = findSoftMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n // if we found a soft match for the current node, morph\n if (softMatch) {\n insertionPoint = removeNodesBetween(insertionPoint, softMatch, ctx);\n morphOldNodeTo(softMatch, newChild, ctx);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // abandon all hope of morphing, just insert the new child before the insertion point\n // and move on\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n oldParent.insertBefore(newChild, insertionPoint);\n ctx.callbacks.afterNodeAdded(newChild);\n removeIdsFromConsideration(ctx, newChild);\n }\n\n // remove any remaining old nodes that didn't match up with new content\n while (insertionPoint !== null) {\n\n let tempNode = insertionPoint;\n insertionPoint = insertionPoint.nextSibling;\n removeNode(tempNode, ctx);\n }\n }\n\n //=============================================================================\n // Attribute Syncing Code\n //=============================================================================\n\n /**\n * @param attr {String} the attribute to be mutated\n * @param to {Element} the element that is going to be updated\n * @param updateType {(\"update\"|\"remove\")}\n * @param ctx the merge context\n * @returns {boolean} true if the attribute should be ignored, false otherwise\n */\n function ignoreAttribute(attr, to, updateType, ctx) {\n if(attr === 'value' && ctx.ignoreActiveValue && to === document.activeElement){\n return true;\n }\n return ctx.callbacks.beforeAttributeUpdated(attr, to, updateType) === false;\n }\n\n /**\n * syncs a given node with another node, copying over all attributes and\n * inner element state from the 'from' node to the 'to' node\n *\n * @param {Element} from the element to copy attributes & state from\n * @param {Element} to the element to copy attributes & state to\n * @param ctx the merge context\n */\n function syncNodeFrom(from, to, ctx) {\n let type = from.nodeType;\n\n // if is an element type, sync the attributes from the\n // new node into the new node\n if (type === 1 /* element type */) {\n const fromAttributes = from.attributes;\n const toAttributes = to.attributes;\n for (const fromAttribute of fromAttributes) {\n if (ignoreAttribute(fromAttribute.name, to, 'update', ctx)) {\n continue;\n }\n if (to.getAttribute(fromAttribute.name) !== fromAttribute.value) {\n to.setAttribute(fromAttribute.name, fromAttribute.value);\n }\n }\n // iterate backwards to avoid skipping over items when a delete occurs\n for (let i = toAttributes.length - 1; 0 <= i; i--) {\n const toAttribute = toAttributes[i];\n if (ignoreAttribute(toAttribute.name, to, 'remove', ctx)) {\n continue;\n }\n if (!from.hasAttribute(toAttribute.name)) {\n to.removeAttribute(toAttribute.name);\n }\n }\n }\n\n // sync text nodes\n if (type === 8 /* comment */ || type === 3 /* text */) {\n if (to.nodeValue !== from.nodeValue) {\n to.nodeValue = from.nodeValue;\n }\n }\n\n if (!ignoreValueOfActiveElement(to, ctx)) {\n // sync input values\n syncInputValue(from, to, ctx);\n }\n }\n\n /**\n * @param from {Element} element to sync the value from\n * @param to {Element} element to sync the value to\n * @param attributeName {String} the attribute name\n * @param ctx the merge context\n */\n function syncBooleanAttribute(from, to, attributeName, ctx) {\n if (from[attributeName] !== to[attributeName]) {\n let ignoreUpdate = ignoreAttribute(attributeName, to, 'update', ctx);\n if (!ignoreUpdate) {\n to[attributeName] = from[attributeName];\n }\n if (from[attributeName]) {\n if (!ignoreUpdate) {\n to.setAttribute(attributeName, from[attributeName]);\n }\n } else {\n if (!ignoreAttribute(attributeName, to, 'remove', ctx)) {\n to.removeAttribute(attributeName);\n }\n }\n }\n }\n\n /**\n * NB: many bothans died to bring us information:\n *\n * https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n * https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n *\n * @param from {Element} the element to sync the input value from\n * @param to {Element} the element to sync the input value to\n * @param ctx the merge context\n */\n function syncInputValue(from, to, ctx) {\n if (from instanceof HTMLInputElement &&\n to instanceof HTMLInputElement &&\n from.type !== 'file') {\n\n let fromValue = from.value;\n let toValue = to.value;\n\n // sync boolean attributes\n syncBooleanAttribute(from, to, 'checked', ctx);\n syncBooleanAttribute(from, to, 'disabled', ctx);\n\n if (!from.hasAttribute('value')) {\n if (!ignoreAttribute('value', to, 'remove', ctx)) {\n to.value = '';\n to.removeAttribute('value');\n }\n } else if (fromValue !== toValue) {\n if (!ignoreAttribute('value', to, 'update', ctx)) {\n to.setAttribute('value', fromValue);\n to.value = fromValue;\n }\n }\n } else if (from instanceof HTMLOptionElement) {\n syncBooleanAttribute(from, to, 'selected', ctx);\n } else if (from instanceof HTMLTextAreaElement && to instanceof HTMLTextAreaElement) {\n let fromValue = from.value;\n let toValue = to.value;\n if (ignoreAttribute('value', to, 'update', ctx)) {\n return;\n }\n if (fromValue !== toValue) {\n to.value = fromValue;\n }\n if (to.firstChild && to.firstChild.nodeValue !== fromValue) {\n to.firstChild.nodeValue = fromValue;\n }\n }\n }\n\n //=============================================================================\n // the HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n //=============================================================================\n function handleHeadElement(newHeadTag, currentHead, ctx) {\n\n let added = [];\n let removed = [];\n let preserved = [];\n let nodesToAppend = [];\n\n let headMergeStyle = ctx.head.style;\n\n // put all new head elements into a Map, by their outerHTML\n let srcToNewHeadNodes = new Map();\n for (const newHeadChild of newHeadTag.children) {\n srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n }\n\n // for each elt in the current head\n for (const currentHeadElt of currentHead.children) {\n\n // If the current head element is in the map\n let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n if (inNewContent || isPreserved) {\n if (isReAppended) {\n // remove the current version and let the new version replace it and re-execute\n removed.push(currentHeadElt);\n } else {\n // this element already exists and should not be re-appended, so remove it from\n // the new content map, preserving it in the DOM\n srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n preserved.push(currentHeadElt);\n }\n } else {\n if (headMergeStyle === \"append\") {\n // we are appending and this existing element is not new content\n // so if and only if it is marked for re-append do we do anything\n if (isReAppended) {\n removed.push(currentHeadElt);\n nodesToAppend.push(currentHeadElt);\n }\n } else {\n // if this is a merge, we remove this content since it is not in the new head\n if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n removed.push(currentHeadElt);\n }\n }\n }\n }\n\n // Push the remaining new head elements in the Map into the\n // nodes to append to the head tag\n nodesToAppend.push(...srcToNewHeadNodes.values());\n\n let promises = [];\n for (const newNode of nodesToAppend) {\n let newElt = document.createRange().createContextualFragment(newNode.outerHTML).firstChild;\n if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n if (newElt.href || newElt.src) {\n let resolve = null;\n let promise = new Promise(function (_resolve) {\n resolve = _resolve;\n });\n newElt.addEventListener('load', function () {\n resolve();\n });\n promises.push(promise);\n }\n currentHead.appendChild(newElt);\n ctx.callbacks.afterNodeAdded(newElt);\n added.push(newElt);\n }\n }\n\n // remove all removed elements, after we have appended the new elements to avoid\n // additional network requests for things like style sheets\n for (const removedElement of removed) {\n if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n currentHead.removeChild(removedElement);\n ctx.callbacks.afterNodeRemoved(removedElement);\n }\n }\n\n ctx.head.afterHeadMorphed(currentHead, {added: added, kept: preserved, removed: removed});\n return promises;\n }\n\n function noOp() {\n }\n\n /*\n Deep merges the config object and the Idiomoroph.defaults object to\n produce a final configuration object\n */\n function mergeDefaults(config) {\n let finalConfig = {};\n // copy top level stuff into final config\n Object.assign(finalConfig, defaults);\n Object.assign(finalConfig, config);\n\n // copy callbacks into final config (do this to deep merge the callbacks)\n finalConfig.callbacks = {};\n Object.assign(finalConfig.callbacks, defaults.callbacks);\n Object.assign(finalConfig.callbacks, config.callbacks);\n\n // copy head config into final config (do this to deep merge the head)\n finalConfig.head = {};\n Object.assign(finalConfig.head, defaults.head);\n Object.assign(finalConfig.head, config.head);\n return finalConfig;\n }\n\n function createMorphContext(oldNode, newContent, config) {\n config = mergeDefaults(config);\n return {\n target: oldNode,\n newContent: newContent,\n config: config,\n morphStyle: config.morphStyle,\n ignoreActive: config.ignoreActive,\n ignoreActiveValue: config.ignoreActiveValue,\n idMap: createIdMap(oldNode, newContent),\n deadIds: new Set(),\n callbacks: config.callbacks,\n head: config.head\n }\n }\n\n function isIdSetMatch(node1, node2, ctx) {\n if (node1 == null || node2 == null) {\n return false;\n }\n if (node1.nodeType === node2.nodeType && node1.tagName === node2.tagName) {\n if (node1.id !== \"\" && node1.id === node2.id) {\n return true;\n } else {\n return getIdIntersectionCount(ctx, node1, node2) > 0;\n }\n }\n return false;\n }\n\n function isSoftMatch(node1, node2) {\n if (node1 == null || node2 == null) {\n return false;\n }\n return node1.nodeType === node2.nodeType && node1.tagName === node2.tagName\n }\n\n function removeNodesBetween(startInclusive, endExclusive, ctx) {\n while (startInclusive !== endExclusive) {\n let tempNode = startInclusive;\n startInclusive = startInclusive.nextSibling;\n removeNode(tempNode, ctx);\n }\n removeIdsFromConsideration(ctx, endExclusive);\n return endExclusive.nextSibling;\n }\n\n //=============================================================================\n // Scans forward from the insertionPoint in the old parent looking for a potential id match\n // for the newChild. We stop if we find a potential id match for the new child OR\n // if the number of potential id matches we are discarding is greater than the\n // potential id matches for the new child\n //=============================================================================\n function findIdSetMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n // max id matches we are willing to discard in our search\n let newChildPotentialIdCount = getIdIntersectionCount(ctx, newChild, oldParent);\n\n let potentialMatch = null;\n\n // only search forward if there is a possibility of an id match\n if (newChildPotentialIdCount > 0) {\n let potentialMatch = insertionPoint;\n // if there is a possibility of an id match, scan forward\n // keep track of the potential id match count we are discarding (the\n // newChildPotentialIdCount must be greater than this to make it likely\n // worth it)\n let otherMatchCount = 0;\n while (potentialMatch != null) {\n\n // If we have an id match, return the current potential match\n if (isIdSetMatch(newChild, potentialMatch, ctx)) {\n return potentialMatch;\n }\n\n // computer the other potential matches of this new content\n otherMatchCount += getIdIntersectionCount(ctx, potentialMatch, newContent);\n if (otherMatchCount > newChildPotentialIdCount) {\n // if we have more potential id matches in _other_ content, we\n // do not have a good candidate for an id match, so return null\n return null;\n }\n\n // advanced to the next old content child\n potentialMatch = potentialMatch.nextSibling;\n }\n }\n return potentialMatch;\n }\n\n //=============================================================================\n // Scans forward from the insertionPoint in the old parent looking for a potential soft match\n // for the newChild. We stop if we find a potential soft match for the new child OR\n // if we find a potential id match in the old parents children OR if we find two\n // potential soft matches for the next two pieces of new content\n //=============================================================================\n function findSoftMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n let potentialSoftMatch = insertionPoint;\n let nextSibling = newChild.nextSibling;\n let siblingSoftMatchCount = 0;\n\n while (potentialSoftMatch != null) {\n\n if (getIdIntersectionCount(ctx, potentialSoftMatch, newContent) > 0) {\n // the current potential soft match has a potential id set match with the remaining new\n // content so bail out of looking\n return null;\n }\n\n // if we have a soft match with the current node, return it\n if (isSoftMatch(newChild, potentialSoftMatch)) {\n return potentialSoftMatch;\n }\n\n if (isSoftMatch(nextSibling, potentialSoftMatch)) {\n // the next new node has a soft match with this node, so\n // increment the count of future soft matches\n siblingSoftMatchCount++;\n nextSibling = nextSibling.nextSibling;\n\n // If there are two future soft matches, bail to allow the siblings to soft match\n // so that we don't consume future soft matches for the sake of the current node\n if (siblingSoftMatchCount >= 2) {\n return null;\n }\n }\n\n // advanced to the next old content child\n potentialSoftMatch = potentialSoftMatch.nextSibling;\n }\n\n return potentialSoftMatch;\n }\n\n function parseContent(newContent) {\n let parser = new DOMParser();\n\n // remove svgs to avoid false-positive matches on head, etc.\n let contentWithSvgsRemoved = newContent.replace(/<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim, '');\n\n // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n if (contentWithSvgsRemoved.match(/<\\/html>/) || contentWithSvgsRemoved.match(/<\\/head>/) || contentWithSvgsRemoved.match(/<\\/body>/)) {\n let content = parser.parseFromString(newContent, \"text/html\");\n // if it is a full HTML document, return the document itself as the parent container\n if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n content.generatedByIdiomorph = true;\n return content;\n } else {\n // otherwise return the html element as the parent container\n let htmlElement = content.firstChild;\n if (htmlElement) {\n htmlElement.generatedByIdiomorph = true;\n return htmlElement;\n } else {\n return null;\n }\n }\n } else {\n // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n // deal with touchy tags like tr, tbody, etc.\n let responseDoc = parser.parseFromString(\"<body><template>\" + newContent + \"</template></body>\", \"text/html\");\n let content = responseDoc.body.querySelector('template').content;\n content.generatedByIdiomorph = true;\n return content\n }\n }\n\n function normalizeContent(newContent) {\n if (newContent == null) {\n // noinspection UnnecessaryLocalVariableJS\n const dummyParent = document.createElement('div');\n return dummyParent;\n } else if (newContent.generatedByIdiomorph) {\n // the template tag created by idiomorph parsing can serve as a dummy parent\n return newContent;\n } else if (newContent instanceof Node) {\n // a single node is added as a child to a dummy parent\n const dummyParent = document.createElement('div');\n dummyParent.append(newContent);\n return dummyParent;\n } else {\n // all nodes in the array or HTMLElement collection are consolidated under\n // a single dummy parent element\n const dummyParent = document.createElement('div');\n for (const elt of [...newContent]) {\n dummyParent.append(elt);\n }\n return dummyParent;\n }\n }\n\n function insertSiblings(previousSibling, morphedNode, nextSibling) {\n let stack = [];\n let added = [];\n while (previousSibling != null) {\n stack.push(previousSibling);\n previousSibling = previousSibling.previousSibling;\n }\n while (stack.length > 0) {\n let node = stack.pop();\n added.push(node); // push added preceding siblings on in order and insert\n morphedNode.parentElement.insertBefore(node, morphedNode);\n }\n added.push(morphedNode);\n while (nextSibling != null) {\n stack.push(nextSibling);\n added.push(nextSibling); // here we are going in order, so push on as we scan, rather than add\n nextSibling = nextSibling.nextSibling;\n }\n while (stack.length > 0) {\n morphedNode.parentElement.insertBefore(stack.pop(), morphedNode.nextSibling);\n }\n return added;\n }\n\n function findBestNodeMatch(newContent, oldNode, ctx) {\n let currentElement;\n currentElement = newContent.firstChild;\n let bestElement = currentElement;\n let score = 0;\n while (currentElement) {\n let newScore = scoreElement(currentElement, oldNode, ctx);\n if (newScore > score) {\n bestElement = currentElement;\n score = newScore;\n }\n currentElement = currentElement.nextSibling;\n }\n return bestElement;\n }\n\n function scoreElement(node1, node2, ctx) {\n if (isSoftMatch(node1, node2)) {\n return .5 + getIdIntersectionCount(ctx, node1, node2);\n }\n return 0;\n }\n\n function removeNode(tempNode, ctx) {\n removeIdsFromConsideration(ctx, tempNode);\n if (ctx.callbacks.beforeNodeRemoved(tempNode) === false) return;\n\n tempNode.remove();\n ctx.callbacks.afterNodeRemoved(tempNode);\n }\n\n //=============================================================================\n // ID Set Functions\n //=============================================================================\n\n function isIdInConsideration(ctx, id) {\n return !ctx.deadIds.has(id);\n }\n\n function idIsWithinNode(ctx, id, targetNode) {\n let idSet = ctx.idMap.get(targetNode) || EMPTY_SET;\n return idSet.has(id);\n }\n\n function removeIdsFromConsideration(ctx, node) {\n let idSet = ctx.idMap.get(node) || EMPTY_SET;\n for (const id of idSet) {\n ctx.deadIds.add(id);\n }\n }\n\n function getIdIntersectionCount(ctx, node1, node2) {\n let sourceSet = ctx.idMap.get(node1) || EMPTY_SET;\n let matchCount = 0;\n for (const id of sourceSet) {\n // a potential match is an id in the source and potentialIdsSet, but\n // that has not already been merged into the DOM\n if (isIdInConsideration(ctx, id) && idIsWithinNode(ctx, id, node2)) {\n ++matchCount;\n }\n }\n return matchCount;\n }\n\n /**\n * A bottom up algorithm that finds all elements with ids inside of the node\n * argument and populates id sets for those nodes and all their parents, generating\n * a set of ids contained within all nodes for the entire hierarchy in the DOM\n *\n * @param node {Element}\n * @param {Map<Node, Set<String>>} idMap\n */\n function populateIdMapForNode(node, idMap) {\n let nodeParent = node.parentElement;\n // find all elements with an id property\n let idElements = node.querySelectorAll('[id]');\n for (const elt of idElements) {\n let current = elt;\n // walk up the parent hierarchy of that element, adding the id\n // of element to the parent's id set\n while (current !== nodeParent && current != null) {\n let idSet = idMap.get(current);\n // if the id set doesn't exist, create it and insert it in the map\n if (idSet == null) {\n idSet = new Set();\n idMap.set(current, idSet);\n }\n idSet.add(elt.id);\n current = current.parentElement;\n }\n }\n }\n\n /**\n * This function computes a map of nodes to all ids contained within that node (inclusive of the\n * node). This map can be used to ask if two nodes have intersecting sets of ids, which allows\n * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n * to contribute to a parent nodes matching.\n *\n * @param {Element} oldContent the old content that will be morphed\n * @param {Element} newContent the new content to morph to\n * @returns {Map<Node, Set<String>>} a map of nodes to id sets for the\n */\n function createIdMap(oldContent, newContent) {\n let idMap = new Map();\n populateIdMapForNode(oldContent, idMap);\n populateIdMapForNode(newContent, idMap);\n return idMap;\n }\n\n //=============================================================================\n // This is what ends up becoming the Idiomorph global object\n //=============================================================================\n return {\n morph,\n defaults\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 } else {\n document.documentElement.appendChild(newElement);\n }\n }\n\n get shouldRender() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n }\n\n get reloadReason() {\n if (!this.newSnapshot.isVisitable) {\n return {\n reason: \"turbo_visit_control_is_reload\"\n }\n }\n\n if (!this.trackedElementsAreIdentical) {\n return {\n reason: \"tracked_element_mismatch\"\n }\n }\n }\n\n async prepareToRender() {\n this.#setLanguage();\n await this.mergeHead();\n }\n\n async render() {\n if (this.willRender) {\n await this.replaceBody();\n }\n }\n\n finishRendering() {\n super.finishRendering();\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement();\n }\n }\n\n get currentHeadSnapshot() {\n return this.currentSnapshot.headSnapshot\n }\n\n get newHeadSnapshot() {\n return this.newSnapshot.headSnapshot\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n #setLanguage() {\n const { documentElement } = this.currentSnapshot;\n const { lang } = this.newSnapshot;\n\n if (lang) {\n documentElement.setAttribute(\"lang\", lang);\n } else {\n documentElement.removeAttribute(\"lang\");\n }\n }\n\n async mergeHead() {\n const mergedHeadElements = this.mergeProvisionalElements();\n const newStylesheetElements = this.copyNewHeadStylesheetElements();\n this.copyNewHeadScriptElements();\n\n await mergedHeadElements;\n await newStylesheetElements;\n\n if (this.willRender) {\n this.removeUnusedDynamicStylesheetElements();\n }\n }\n\n async replaceBody() {\n await this.preservingPermanentElements(async () => {\n this.activateNewBody();\n await this.assignNewBody();\n });\n }\n\n get trackedElementsAreIdentical() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n }\n\n async copyNewHeadStylesheetElements() {\n const loadingElements = [];\n\n for (const element of this.newHeadStylesheetElements) {\n loadingElements.push(waitForLoad(element));\n\n document.head.appendChild(element);\n }\n\n await Promise.all(loadingElements);\n }\n\n copyNewHeadScriptElements() {\n for (const element of this.newHeadScriptElements) {\n document.head.appendChild(activateScriptElement(element));\n }\n }\n\n removeUnusedDynamicStylesheetElements() {\n for (const element of this.unusedDynamicStylesheetElements) {\n document.head.removeChild(element);\n }\n }\n\n async mergeProvisionalElements() {\n const newHeadElements = [...this.newHeadProvisionalElements];\n\n for (const element of this.currentHeadProvisionalElements) {\n if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n document.head.removeChild(element);\n }\n }\n\n for (const element of newHeadElements) {\n document.head.appendChild(element);\n }\n }\n\n isCurrentElementInElementList(element, elementList) {\n for (const [index, newElement] of elementList.entries()) {\n // if title element...\n if (element.tagName == \"TITLE\") {\n if (newElement.tagName != \"TITLE\") {\n continue\n }\n if (element.innerHTML == newElement.innerHTML) {\n elementList.splice(index, 1);\n return true\n }\n }\n\n // if any other element...\n if (newElement.isEqualNode(element)) {\n elementList.splice(index, 1);\n return true\n }\n }\n\n return false\n }\n\n removeCurrentHeadProvisionalElements() {\n for (const element of this.currentHeadProvisionalElements) {\n document.head.removeChild(element);\n }\n }\n\n copyNewHeadProvisionalElements() {\n for (const element of this.newHeadProvisionalElements) {\n document.head.appendChild(element);\n }\n }\n\n activateNewBody() {\n document.adoptNode(this.newElement);\n this.activateNewBodyScriptElements();\n }\n\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.newBodyScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n async assignNewBody() {\n await this.renderElement(this.currentElement, this.newElement);\n }\n\n get unusedDynamicStylesheetElements() {\n return this.oldHeadStylesheetElements.filter((element) => {\n return element.getAttribute(\"data-turbo-track\") === \"dynamic\"\n })\n }\n\n get oldHeadStylesheetElements() {\n return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)\n }\n\n get newHeadStylesheetElements() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get newHeadScriptElements() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get currentHeadProvisionalElements() {\n return this.currentHeadSnapshot.provisionalElements\n }\n\n get newHeadProvisionalElements() {\n return this.newHeadSnapshot.provisionalElements\n }\n\n get newBodyScriptElements() {\n return this.newElement.querySelectorAll(\"script\")\n }\n}\n\nclass MorphRenderer extends PageRenderer {\n async render() {\n if (this.willRender) await this.#morphBody();\n }\n\n get renderMethod() {\n return \"morph\"\n }\n\n // Private\n\n async #morphBody() {\n this.#morphElements(this.currentElement, this.newElement);\n this.#reloadRemoteFrames();\n\n dispatch(\"turbo:morph\", {\n detail: {\n currentElement: this.currentElement,\n newElement: this.newElement\n }\n });\n }\n\n #morphElements(currentElement, newElement, morphStyle = \"outerHTML\") {\n this.isMorphingTurboFrame = this.#isFrameReloadedWithMorph(currentElement);\n\n Idiomorph.morph(currentElement, newElement, {\n morphStyle: morphStyle,\n callbacks: {\n beforeNodeAdded: this.#shouldAddElement,\n beforeNodeMorphed: this.#shouldMorphElement,\n beforeAttributeUpdated: this.#shouldUpdateAttribute,\n beforeNodeRemoved: this.#shouldRemoveElement,\n afterNodeMorphed: this.#didMorphElement\n }\n });\n }\n\n #shouldAddElement = (node) => {\n return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n }\n\n #shouldMorphElement = (oldNode, newNode) => {\n if (oldNode instanceof HTMLElement) {\n if (!oldNode.hasAttribute(\"data-turbo-permanent\") && (this.isMorphingTurboFrame || !this.#isFrameReloadedWithMorph(oldNode))) {\n const event = dispatch(\"turbo:before-morph-element\", {\n cancelable: true,\n target: oldNode,\n detail: {\n newElement: newNode\n }\n });\n\n return !event.defaultPrevented\n } else {\n return false\n }\n }\n }\n\n #shouldUpdateAttribute = (attributeName, target, mutationType) => {\n const event = dispatch(\"turbo:before-morph-attribute\", { cancelable: true, target, detail: { attributeName, mutationType } });\n\n return !event.defaultPrevented\n }\n\n #didMorphElement = (oldNode, newNode) => {\n if (newNode instanceof HTMLElement) {\n dispatch(\"turbo:morph-element\", {\n target: oldNode,\n detail: {\n newElement: newNode\n }\n });\n }\n }\n\n #shouldRemoveElement = (node) => {\n return this.#shouldMorphElement(node)\n }\n\n #reloadRemoteFrames() {\n this.#remoteFrames().forEach((frame) => {\n if (this.#isFrameReloadedWithMorph(frame)) {\n this.#renderFrameWithMorph(frame);\n frame.reload();\n }\n });\n }\n\n #renderFrameWithMorph(frame) {\n frame.addEventListener(\"turbo:before-frame-render\", (event) => {\n event.detail.render = this.#morphFrameUpdate;\n }, { once: true });\n }\n\n #morphFrameUpdate = (currentElement, newElement) => {\n dispatch(\"turbo:before-frame-morph\", {\n target: currentElement,\n detail: { currentElement, newElement }\n });\n this.#morphElements(currentElement, newElement.children, \"innerHTML\");\n }\n\n #isFrameReloadedWithMorph(element) {\n return element.src && element.refresh === \"morph\"\n }\n\n #remoteFrames() {\n return Array.from(document.querySelectorAll('turbo-frame[src]')).filter(frame => {\n return !frame.closest('[data-turbo-permanent]')\n })\n }\n}\n\nclass SnapshotCache {\n keys = []\n snapshots = {}\n\n constructor(size) {\n this.size = size;\n }\n\n has(location) {\n return toCacheKey(location) in this.snapshots\n }\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\n put(location, snapshot) {\n this.write(location, snapshot);\n this.touch(location);\n return snapshot\n }\n\n clear() {\n this.snapshots = {};\n }\n\n // Private\n\n read(location) {\n return this.snapshots[toCacheKey(location)]\n }\n\n write(location, snapshot) {\n this.snapshots[toCacheKey(location)] = snapshot;\n }\n\n touch(location) {\n const key = toCacheKey(location);\n const index = this.keys.indexOf(key);\n if (index > -1) this.keys.splice(index, 1);\n this.keys.unshift(key);\n this.trim();\n }\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 snapshotCache = new SnapshotCache(10)\n lastRenderedLocation = new URL(location.href)\n forceReloaded = false\n\n shouldTransitionTo(newSnapshot) {\n return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n }\n\n renderPage(snapshot, isPreview = false, willRender = true, visit) {\n const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage;\n const rendererClass = shouldMorphPage ? MorphRenderer : PageRenderer;\n\n const renderer = new rendererClass(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n\n if (!renderer.shouldRender) {\n this.forceReloaded = true;\n } else {\n visit?.changeHistory();\n }\n\n return this.render(renderer)\n }\n\n renderError(snapshot, visit) {\n visit?.changeHistory();\n const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n return this.render(renderer)\n }\n\n clearSnapshotCache() {\n this.snapshotCache.clear();\n }\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\n getCachedSnapshotForLocation(location) {\n return this.snapshotCache.get(location)\n }\n\n isPageRefresh(visit) {\n return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n }\n\n shouldPreserveScrollPosition(visit) {\n return this.isPageRefresh(visit) && this.snapshot.shouldPreserveScrollPosition\n }\n\n get snapshot() {\n return PageSnapshot.fromElement(this.element)\n }\n}\n\nclass Preloader {\n selector = \"a[data-turbo-preload]\"\n\n constructor(delegate, snapshotCache) {\n this.delegate = delegate;\n this.snapshotCache = snapshotCache;\n }\n\n start() {\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n } else {\n this.preloadOnLoadLinksForView(document.body);\n }\n }\n\n stop() {\n document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n }\n\n preloadOnLoadLinksForView(element) {\n for (const link of element.querySelectorAll(this.selector)) {\n if (this.delegate.shouldPreloadLink(link)) {\n this.preloadURL(link);\n }\n }\n }\n\n async preloadURL(link) {\n const location = new URL(link.href);\n\n if (this.snapshotCache.has(location)) {\n return\n }\n\n const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n await fetchRequest.perform();\n }\n\n // Fetch request delegate\n\n prepareRequest(fetchRequest) {\n fetchRequest.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n }\n\n async requestSucceededWithResponse(fetchRequest, fetchResponse) {\n try {\n const responseHTML = await fetchResponse.responseHTML;\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n this.snapshotCache.put(fetchRequest.url, snapshot);\n } catch (_) {\n // If we cannot preload that is ok!\n }\n }\n\n requestStarted(fetchRequest) {}\n\n requestErrored(fetchRequest) {}\n\n requestFinished(fetchRequest) {}\n\n requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n #preloadAll = () => {\n this.preloadOnLoadLinksForView(document.body);\n }\n}\n\nclass Cache {\n constructor(session) {\n this.session = session;\n }\n\n clear() {\n this.session.clearCache();\n }\n\n resetCacheControl() {\n this.#setCacheControl(\"\");\n }\n\n exemptPageFromCache() {\n this.#setCacheControl(\"no-cache\");\n }\n\n exemptPageFromPreview() {\n this.#setCacheControl(\"no-preview\");\n }\n\n #setCacheControl(value) {\n setMetaContent(\"turbo-cache-control\", value);\n }\n}\n\nclass Session {\n navigator = new Navigator(this)\n history = new History(this)\n view = new PageView(this, document.documentElement)\n adapter = new BrowserAdapter(this)\n\n pageObserver = new PageObserver(this)\n cacheObserver = new CacheObserver()\n linkPrefetchObserver = new LinkPrefetchObserver(this, document)\n linkClickObserver = new LinkClickObserver(this, window)\n formSubmitObserver = new FormSubmitObserver(this, document)\n scrollObserver = new ScrollObserver(this)\n streamObserver = new StreamObserver(this)\n formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement)\n frameRedirector = new FrameRedirector(this, document.documentElement)\n streamMessageRenderer = new StreamMessageRenderer()\n cache = new Cache(this)\n\n drive = true\n enabled = true\n progressBarDelay = 500\n started = false\n formMode = \"on\"\n #pageRefreshDebouncePeriod = 150\n\n constructor(recentRequests) {\n this.recentRequests = recentRequests;\n this.preloader = new Preloader(this, this.view.snapshotCache);\n this.debouncedRefresh = this.refresh;\n this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod;\n }\n\n start() {\n if (!this.started) {\n this.pageObserver.start();\n this.cacheObserver.start();\n this.linkPrefetchObserver.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\n disable() {\n this.enabled = false;\n }\n\n stop() {\n if (this.started) {\n this.pageObserver.stop();\n this.cacheObserver.stop();\n this.linkPrefetchObserver.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.preloader.stop();\n this.started = false;\n }\n }\n\n registerAdapter(adapter) {\n this.adapter = adapter;\n }\n\n visit(location, options = {}) {\n const frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n if (frameElement instanceof FrameElement) {\n const action = options.action || getVisitAction(frameElement);\n\n frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action);\n frameElement.src = location.toString();\n } else {\n this.navigator.proposeVisit(expandURL(location), options);\n }\n }\n\n refresh(url, requestId) {\n const isRecentRequest = requestId && this.recentRequests.has(requestId);\n if (!isRecentRequest) {\n this.visit(url, { action: \"replace\", shouldCacheSnapshot: false });\n }\n }\n\n connectStreamSource(source) {\n this.streamObserver.connectStreamSource(source);\n }\n\n disconnectStreamSource(source) {\n this.streamObserver.disconnectStreamSource(source);\n }\n\n renderStreamMessage(message) {\n this.streamMessageRenderer.render(StreamMessage.wrap(message));\n }\n\n clearCache() {\n this.view.clearSnapshotCache();\n }\n\n setProgressBarDelay(delay) {\n this.progressBarDelay = delay;\n }\n\n setFormMode(mode) {\n this.formMode = mode;\n }\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n get pageRefreshDebouncePeriod() {\n return this.#pageRefreshDebouncePeriod\n }\n\n set pageRefreshDebouncePeriod(value) {\n this.refresh = debounce(this.debouncedRefresh.bind(this), value);\n this.#pageRefreshDebouncePeriod = value;\n }\n\n // Preloader delegate\n\n shouldPreloadLink(element) {\n const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n const isStream = element.hasAttribute(\"data-turbo-stream\");\n const frameTarget = element.getAttribute(\"data-turbo-frame\");\n const frame = frameTarget == \"_top\" ?\n null :\n document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n if (isUnsafe || isStream || frame instanceof FrameElement) {\n return false\n } else {\n const location = new URL(element.href);\n\n return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n }\n }\n\n // History delegate\n\n historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n if (this.enabled) {\n this.navigator.startVisit(location, restorationIdentifier, {\n action: \"restore\",\n historyChanged: true,\n direction\n });\n } else {\n this.adapter.pageInvalidated({\n reason: \"turbo_disabled\"\n });\n }\n }\n\n // Scroll observer delegate\n\n scrollPositionChanged(position) {\n this.history.updateRestorationData({ scrollPosition: position });\n }\n\n // Form click observer delegate\n\n willSubmitFormLinkToLocation(link, location) {\n return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n }\n\n submittedFormLinkToLocation() {}\n\n // Link hover observer delegate\n\n canPrefetchRequestToLocation(link, location) {\n return (\n this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation)\n )\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link, location, event) {\n return (\n this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation) &&\n this.applicationAllowsFollowingLinkToLocation(link, location, event)\n )\n }\n\n followedLinkToLocation(link, location) {\n const action = this.getActionForLink(link);\n const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n this.visit(location.href, { action, acceptsStreamResponse });\n }\n\n // Navigator delegate\n\n allowsVisitingLocationWithAction(location, action) {\n return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location)\n }\n\n visitProposedToLocation(location, options) {\n extendURLWithDeprecatedProperties(location);\n this.adapter.visitProposedToLocation(location, options);\n }\n\n // Visit delegate\n\n visitStarted(visit) {\n if (!visit.acceptsStreamResponse) {\n markAsBusy(document.documentElement);\n this.view.markVisitDirection(visit.direction);\n }\n extendURLWithDeprecatedProperties(visit.location);\n if (!visit.silent) {\n this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n }\n }\n\n visitCompleted(visit) {\n this.view.unmarkVisitDirection();\n clearBusyState(document.documentElement);\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n }\n\n locationWithActionIsSamePage(location, action) {\n return this.navigator.locationWithActionIsSamePage(location, action)\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n }\n\n // Form submit observer delegate\n\n willSubmitForm(form, submitter) {\n const action = getAction$1(form, submitter);\n\n return (\n this.submissionIsNavigatable(form, submitter) &&\n locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n )\n }\n\n formSubmitted(form, submitter) {\n this.navigator.submitForm(form, submitter);\n }\n\n // Page observer delegate\n\n pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location;\n this.notifyApplicationAfterPageLoad();\n }\n\n pageLoaded() {\n this.history.assumeControlOfScrollRestoration();\n }\n\n pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration();\n }\n\n // Stream observer delegate\n\n receivedMessageFromStream(message) {\n this.renderStreamMessage(message);\n }\n\n // Page view delegate\n\n viewWillCacheSnapshot() {\n if (!this.navigator.currentVisit?.silent) {\n this.notifyApplicationBeforeCachingSnapshot();\n }\n }\n\n allowsImmediateRender({ element }, options) {\n const event = this.notifyApplicationBeforeRender(element, options);\n const {\n defaultPrevented,\n detail: { render }\n } = event;\n\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n\n return !defaultPrevented\n }\n\n viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) {\n this.view.lastRenderedLocation = this.history.location;\n this.notifyApplicationAfterRender(renderMethod);\n }\n\n preloadOnLoadLinksForView(element) {\n this.preloader.preloadOnLoadLinksForView(element);\n }\n\n viewInvalidated(reason) {\n this.adapter.pageInvalidated(reason);\n }\n\n // Frame element\n\n frameLoaded(frame) {\n this.notifyApplicationAfterFrameLoad(frame);\n }\n\n frameRendered(fetchResponse, frame) {\n this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n }\n\n // Application events\n\n applicationAllowsFollowingLinkToLocation(link, location, ev) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n return !event.defaultPrevented\n }\n\n applicationAllowsVisitingLocation(location) {\n const event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented\n }\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\n notifyApplicationBeforeVisitingLocation(location) {\n return dispatch(\"turbo:before-visit\", {\n detail: { url: location.href },\n cancelable: true\n })\n }\n\n notifyApplicationAfterVisitingLocation(location, action) {\n return dispatch(\"turbo:visit\", { detail: { url: location.href, action } })\n }\n\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\")\n }\n\n notifyApplicationBeforeRender(newBody, options) {\n return dispatch(\"turbo:before-render\", {\n detail: { newBody, ...options },\n cancelable: true\n })\n }\n\n notifyApplicationAfterRender(renderMethod) {\n return dispatch(\"turbo:render\", { detail: { renderMethod } })\n }\n\n notifyApplicationAfterPageLoad(timing = {}) {\n return dispatch(\"turbo:load\", {\n detail: { url: this.location.href, timing }\n })\n }\n\n notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n dispatchEvent(\n new HashChangeEvent(\"hashchange\", {\n oldURL: oldURL.toString(),\n newURL: newURL.toString()\n })\n );\n }\n\n notifyApplicationAfterFrameLoad(frame) {\n return dispatch(\"turbo:frame-load\", { target: frame })\n }\n\n notifyApplicationAfterFrameRender(fetchResponse, frame) {\n return dispatch(\"turbo:frame-render\", {\n detail: { fetchResponse },\n target: frame,\n cancelable: true\n })\n }\n\n // Helpers\n\n submissionIsNavigatable(form, submitter) {\n if (this.formMode == \"off\") {\n return false\n } else {\n const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n if (this.formMode == \"optin\") {\n return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null\n } else {\n return submitterIsNavigatable && this.elementIsNavigatable(form)\n }\n }\n }\n\n elementIsNavigatable(element) {\n const container = findClosestRecursively(element, \"[data-turbo]\");\n const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n // Check if Drive is enabled on the session or we're within a Frame.\n if (this.drive || withinFrame) {\n // Element is navigatable by default, unless `data-turbo=\"false\"`.\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\"\n } else {\n return true\n }\n } else {\n // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n if (container) {\n return container.getAttribute(\"data-turbo\") == \"true\"\n } else {\n return false\n }\n }\n }\n\n // Private\n\n getActionForLink(link) {\n return getVisitAction(link) || \"advance\"\n }\n\n get snapshot() {\n return this.view.snapshot\n }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get() {\n return this.toString()\n }\n }\n};\n\nconst session = new Session(recentRequests);\nconst { cache, navigator: navigator$1 } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n session.renderStreamMessage(message);\n}\n\n/**\n * Removes all entries from the Turbo Drive page cache.\n * Call this when state has changed on the server that may affect cached pages.\n *\n * @deprecated since version 7.2.0 in favor of `Turbo.cache.clear()`\n */\nfunction clearCache() {\n console.warn(\n \"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 );\n session.clearCache();\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n session.setProgressBarDelay(delay);\n}\n\nfunction setConfirmMethod(confirmMethod) {\n FormSubmission.confirmMethod = confirmMethod;\n}\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 fetch: fetchWithTurboHeaders,\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});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n #currentFetchRequest = null\n #resolveVisitPromise = () => {}\n #connected = false\n #hasBeenLoaded = false\n #ignoredAttributes = new Set()\n action = null\n\n constructor(element) {\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\n // Frame delegate\n\n connect() {\n if (!this.#connected) {\n this.#connected = true;\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n } else {\n this.#loadSourceURL();\n }\n this.formLinkClickObserver.start();\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\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\n disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.#loadSourceURL();\n }\n }\n\n sourceURLChanged() {\n if (this.#isIgnoringChangesTo(\"src\")) return\n\n if (this.element.isConnected) {\n this.complete = false;\n }\n\n if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n this.#loadSourceURL();\n }\n }\n\n sourceURLReloaded() {\n const { src } = this.element;\n this.element.removeAttribute(\"complete\");\n this.element.src = null;\n this.element.src = src;\n return this.element.loaded\n }\n\n loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n } else {\n this.appearanceObserver.stop();\n this.#loadSourceURL();\n }\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\n async loadResponse(fetchResponse) {\n if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n this.sourceURL = fetchResponse.response.url;\n }\n\n try {\n const html = await fetchResponse.responseHTML;\n if (html) {\n const document = parseHTMLDocument(html);\n const pageSnapshot = PageSnapshot.fromDocument(document);\n\n if (pageSnapshot.isVisitable) {\n await this.#loadFrameResponse(fetchResponse, document);\n } else {\n await this.#handleUnvisitableFrameResponse(fetchResponse);\n }\n }\n } finally {\n this.fetchResponseLoaded = () => Promise.resolve();\n }\n }\n\n // Appearance observer delegate\n\n elementAppearedInViewport(element) {\n this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element));\n this.#loadSourceURL();\n }\n\n // Form link click observer delegate\n\n willSubmitFormLinkToLocation(link) {\n return this.#shouldInterceptNavigation(link)\n }\n\n submittedFormLinkToLocation(link, _location, form) {\n const frame = this.#findFrameElement(link);\n if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element, _location, _event) {\n return this.#shouldInterceptNavigation(element)\n }\n\n linkClickIntercepted(element, location) {\n this.#navigateFrame(element, location);\n }\n\n // Form submit observer delegate\n\n willSubmitForm(element, submitter) {\n return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n }\n\n formSubmitted(element, submitter) {\n if (this.formSubmission) {\n this.formSubmission.stop();\n }\n\n this.formSubmission = new FormSubmission(this, element, submitter);\n const { fetchRequest } = this.formSubmission;\n this.prepareRequest(fetchRequest);\n this.formSubmission.start();\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n request.headers[\"Turbo-Frame\"] = this.id;\n\n if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted(_request) {\n markAsBusy(this.element);\n }\n\n requestPreventedHandlingResponse(_request, _response) {\n this.#resolveVisitPromise();\n }\n\n async requestSucceededWithResponse(request, response) {\n await this.loadResponse(response);\n this.#resolveVisitPromise();\n }\n\n async requestFailedWithResponse(request, response) {\n await this.loadResponse(response);\n this.#resolveVisitPromise();\n }\n\n requestErrored(request, error) {\n console.error(error);\n this.#resolveVisitPromise();\n }\n\n requestFinished(_request) {\n clearBusyState(this.element);\n }\n\n // Form submission delegate\n\n formSubmissionStarted({ formElement }) {\n markAsBusy(formElement, this.#findFrameElement(formElement));\n }\n\n formSubmissionSucceededWithResponse(formSubmission, response) {\n const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame));\n frame.delegate.loadResponse(response);\n\n if (!formSubmission.isSafe) {\n session.clearCache();\n }\n }\n\n formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n this.element.delegate.loadResponse(fetchResponse);\n session.clearCache();\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished({ formElement }) {\n clearBusyState(formElement, this.#findFrameElement(formElement));\n }\n\n // View delegate\n\n allowsImmediateRender({ element: newFrame }, options) {\n const event = dispatch(\"turbo:before-frame-render\", {\n target: this.element,\n detail: { newFrame, ...options },\n cancelable: true\n });\n const {\n defaultPrevented,\n detail: { render }\n } = event;\n\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n\n return !defaultPrevented\n }\n\n viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) {}\n\n preloadOnLoadLinksForView(element) {\n session.preloadOnLoadLinksForView(element);\n }\n\n viewInvalidated() {}\n\n // Frame renderer delegate\n\n willRenderFrame(currentElement, _newElement) {\n this.previousFrameElement = currentElement.cloneNode(true);\n }\n\n visitCachedSnapshot = ({ element }) => {\n const frame = element.querySelector(\"#\" + this.element.id);\n\n if (frame && this.previousFrameElement) {\n frame.replaceChildren(...this.previousFrameElement.children);\n }\n\n delete this.previousFrameElement;\n }\n\n // Private\n\n async #loadFrameResponse(fetchResponse, document) {\n const newFrameElement = await this.extractForeignFrameElement(document.body);\n\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) await this.view.renderPromise;\n this.changeHistory();\n\n await this.view.render(renderer);\n this.complete = true;\n session.frameRendered(fetchResponse, this.element);\n session.frameLoaded(this.element);\n await this.fetchResponseLoaded(fetchResponse);\n } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) {\n this.#handleFrameMissingFromResponse(fetchResponse);\n }\n }\n\n async #visit(url) {\n const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n\n this.#currentFetchRequest?.cancel();\n this.#currentFetchRequest = request;\n\n return new Promise((resolve) => {\n this.#resolveVisitPromise = () => {\n this.#resolveVisitPromise = () => {};\n this.#currentFetchRequest = null;\n resolve();\n };\n request.perform();\n })\n }\n\n #navigateFrame(element, url, submitter) {\n const frame = this.#findFrameElement(element, submitter);\n\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter, element, frame));\n\n this.#withCurrentNavigationElement(element, () => {\n frame.src = url;\n });\n }\n\n proposeVisitIfNavigatedWithAction(frame, action = null) {\n this.action = action;\n\n if (this.action) {\n const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n const { visitCachedSnapshot } = frame.delegate;\n\n frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n if (frame.src) {\n const { statusCode, redirected } = fetchResponse;\n const responseHTML = await fetchResponse.responseHTML;\n const response = { statusCode, redirected, responseHTML };\n const options = {\n response,\n visitCachedSnapshot,\n willRender: false,\n updateHistory: false,\n restorationIdentifier: this.restorationIdentifier,\n snapshot: pageSnapshot\n };\n\n if (this.action) options.action = this.action;\n\n session.visit(frame.src, options);\n }\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\n async #handleUnvisitableFrameResponse(fetchResponse) {\n console.warn(\n `The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`\n );\n\n await this.#visitResponse(fetchResponse.response);\n }\n\n #willHandleFrameMissingFromResponse(fetchResponse) {\n this.element.setAttribute(\"complete\", \"\");\n\n const response = fetchResponse.response;\n const visit = async (url, options) => {\n if (url instanceof Response) {\n this.#visitResponse(url);\n } else {\n session.visit(url, options);\n }\n };\n\n const event = dispatch(\"turbo:frame-missing\", {\n target: this.element,\n detail: { response, visit },\n cancelable: true\n });\n\n return !event.defaultPrevented\n }\n\n #handleFrameMissingFromResponse(fetchResponse) {\n this.view.missing();\n this.#throwFrameMissingError(fetchResponse);\n }\n\n #throwFrameMissingError(fetchResponse) {\n const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n throw new TurboFrameMissingError(message)\n }\n\n async #visitResponse(response) {\n const wrapped = new FetchResponse(response);\n const responseHTML = await wrapped.responseHTML;\n const { location, redirected, statusCode } = wrapped;\n\n return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n }\n\n #findFrameElement(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n return getFrameElementById(id) ?? this.element\n }\n\n async extractForeignFrameElement(container) {\n let element;\n const id = CSS.escape(this.id);\n\n try {\n element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n if (element) {\n return element\n }\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 } catch (error) {\n console.error(error);\n return new FrameElement()\n }\n\n return null\n }\n\n #formActionIsVisitable(form, submitter) {\n const action = getAction$1(form, submitter);\n\n return locationIsVisitable(expandURL(action), this.rootLocation)\n }\n\n #shouldInterceptNavigation(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n return false\n }\n\n if (!this.enabled || id == \"_top\") {\n return false\n }\n\n if (id) {\n const frameElement = getFrameElementById(id);\n if (frameElement) {\n return !frameElement.disabled\n }\n }\n\n if (!session.elementIsNavigatable(element)) {\n return false\n }\n\n if (submitter && !session.elementIsNavigatable(submitter)) {\n return false\n }\n\n return true\n }\n\n // Computed properties\n\n get id() {\n return this.element.id\n }\n\n get enabled() {\n return !this.element.disabled\n }\n\n get sourceURL() {\n if (this.element.src) {\n return this.element.src\n }\n }\n\n set sourceURL(sourceURL) {\n this.#ignoringChangesToAttribute(\"src\", () => {\n this.element.src = sourceURL ?? null;\n });\n }\n\n get loadingStyle() {\n return this.element.loading\n }\n\n get isLoading() {\n return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n }\n\n get complete() {\n return this.element.hasAttribute(\"complete\")\n }\n\n set complete(value) {\n if (value) {\n this.element.setAttribute(\"complete\", \"\");\n } else {\n this.element.removeAttribute(\"complete\");\n }\n }\n\n get isActive() {\n return this.element.isActive && this.#connected\n }\n\n get rootLocation() {\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const root = meta?.content ?? \"/\";\n return expandURL(root)\n }\n\n #isIgnoringChangesTo(attributeName) {\n return this.#ignoredAttributes.has(attributeName)\n }\n\n #ignoringChangesToAttribute(attributeName, callback) {\n this.#ignoredAttributes.add(attributeName);\n callback();\n this.#ignoredAttributes.delete(attributeName);\n }\n\n #withCurrentNavigationElement(element, callback) {\n this.currentNavigationElement = element;\n callback();\n delete this.currentNavigationElement;\n }\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}\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 <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`)\n }\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true);\n }\n\n if (element instanceof FrameElement) {\n element.connectedCallback();\n element.disconnectedCallback();\n return element\n }\n }\n}\n\nconst StreamActions = {\n after() {\n this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n },\n\n append() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.append(this.templateContent));\n },\n\n before() {\n this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n },\n\n prepend() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.prepend(this.templateContent));\n },\n\n remove() {\n this.targetElements.forEach((e) => e.remove());\n },\n\n replace() {\n this.targetElements.forEach((e) => e.replaceWith(this.templateContent));\n },\n\n update() {\n this.targetElements.forEach((targetElement) => {\n targetElement.innerHTML = \"\";\n targetElement.append(this.templateContent);\n });\n },\n\n refresh() {\n session.refresh(this.baseURI, this.requestId);\n }\n};\n\n// <turbo-stream action=replace target=id><template>...\n\n/**\n * Renders updates to the page from a stream of messages.\n *\n * Using the `action` attribute, this can be configured one of four ways:\n *\n * - `append` - appends the result to the container\n * - `prepend` - prepends the result to the container\n * - `replace` - replaces the contents of the container\n * - `remove` - removes the container\n * - `before` - inserts the result before the target\n * - `after` - inserts the result after the target\n *\n * @customElement turbo-stream\n * @example\n * <turbo-stream action=\"append\" target=\"dom_id\">\n * <template>\n * Content to append to container designated with the dom_id.\n * </template>\n * </turbo-stream>\n */\nclass StreamElement extends HTMLElement {\n static async renderElement(newElement) {\n await newElement.performAction();\n }\n\n async connectedCallback() {\n try {\n await this.render();\n } catch (error) {\n console.error(error);\n } finally {\n this.disconnect();\n }\n }\n\n async render() {\n return (this.renderPromise ??= (async () => {\n const event = this.beforeRenderEvent;\n\n if (this.dispatchEvent(event)) {\n await nextRepaint();\n await event.detail.render(this);\n }\n })())\n }\n\n disconnect() {\n try {\n this.remove();\n // eslint-disable-next-line no-empty\n } catch {}\n }\n\n /**\n * Removes duplicate children (by ID)\n */\n removeDuplicateTargetChildren() {\n this.duplicateChildren.forEach((c) => c.remove());\n }\n\n /**\n * Gets the list of duplicate children (i.e. those with the same ID)\n */\n get duplicateChildren() {\n const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.id).map((c) => c.id);\n\n return existingChildren.filter((c) => newChildrenIds.includes(c.id))\n }\n\n /**\n * Gets the action function to be performed.\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\n /**\n * Gets the target elements which the template will be rendered to.\n */\n get targetElements() {\n if (this.target) {\n return this.targetElementsById\n } else if (this.targets) {\n return this.targetElementsByQuery\n } else {\n this.#raise(\"target or targets attribute is missing\");\n }\n }\n\n /**\n * Gets the contents of the main `<template>`.\n */\n get templateContent() {\n return this.templateElement.content.cloneNode(true)\n }\n\n /**\n * Gets the main `<template>` used for rendering\n */\n get templateElement() {\n if (this.firstElementChild === null) {\n const template = this.ownerDocument.createElement(\"template\");\n this.appendChild(template);\n return template\n } else if (this.firstElementChild instanceof HTMLTemplateElement) {\n return this.firstElementChild\n }\n this.#raise(\"first child element must be a <template> element\");\n }\n\n /**\n * Gets the current action.\n */\n get action() {\n return this.getAttribute(\"action\")\n }\n\n /**\n * Gets the current target (an element ID) to which the result will\n * be rendered.\n */\n get target() {\n return this.getAttribute(\"target\")\n }\n\n /**\n * Gets the current \"targets\" selector (a CSS selector)\n */\n get targets() {\n return this.getAttribute(\"targets\")\n }\n\n /**\n * Reads the request-id attribute\n */\n get requestId() {\n return this.getAttribute(\"request-id\")\n }\n\n #raise(message) {\n throw new Error(`${this.description}: ${message}`)\n }\n\n get description() {\n return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n }\n\n get beforeRenderEvent() {\n return new CustomEvent(\"turbo:before-stream-render\", {\n bubbles: true,\n cancelable: true,\n detail: { newStream: this, render: StreamElement.renderElement }\n })\n }\n\n get targetElementsById() {\n const element = this.ownerDocument?.getElementById(this.target);\n\n if (element !== null) {\n return [element]\n } else {\n return []\n }\n }\n\n get targetElementsByQuery() {\n const elements = this.ownerDocument?.querySelectorAll(this.targets);\n\n if (elements.length !== 0) {\n return Array.prototype.slice.call(elements)\n } else {\n return []\n }\n }\n}\n\nclass StreamSourceElement extends HTMLElement {\n streamSource = null\n\n connectedCallback() {\n this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n\n connectStreamSource(this.streamSource);\n }\n\n disconnectedCallback() {\n if (this.streamSource) {\n this.streamSource.close();\n\n disconnectStreamSource(this.streamSource);\n }\n }\n\n get src() {\n return this.getAttribute(\"src\") || \"\"\n }\n}\n\nFrameElement.delegateConstructor = FrameController;\n\nif (customElements.get(\"turbo-frame\") === undefined) {\n customElements.define(\"turbo-frame\", FrameElement);\n}\n\nif (customElements.get(\"turbo-stream\") === undefined) {\n customElements.define(\"turbo-stream\", StreamElement);\n}\n\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n let element = document.currentScript;\n if (!element) return\n if (element.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n element = element.parentElement;\n while (element) {\n if (element == document.body) {\n return console.warn(\n unindent`\n You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n Load your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n \u2014\u2014\n Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n `,\n element.outerHTML\n )\n }\n\n element = element.parentElement;\n }\n})();\n\nwindow.Turbo = { ...Turbo, StreamActions };\nstart();\n\nexport { FetchEnctype, FetchMethod, FetchRequest, FetchResponse, FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, connectStreamSource, disconnectStreamSource, fetchWithTurboHeaders as fetch, fetchEnctypeFromString, fetchMethodFromString, isSafe, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n", "let consumer\n\nexport async function getConsumer() {\n return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n const { subscriptions } = await getConsumer()\n return subscriptions.create(channel, mixin)\n}\n", "// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// 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, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n if (!obj || typeof obj !== 'object') return obj;\n if (obj instanceof Date || obj instanceof RegExp) return obj;\n if (Array.isArray(obj)) return obj.map(walk);\n return Object.keys(obj).reduce(function (acc, key) {\n var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n return '_' + x.toLowerCase();\n });\n acc[camel] = walk(obj[key]);\n return acc;\n }, {});\n};", "import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n async connectedCallback() {\n connectStreamSource(this)\n this.subscription = await subscribeTo(this.channel, {\n received: this.dispatchMessageEvent.bind(this),\n connected: this.subscriptionConnected.bind(this),\n disconnected: this.subscriptionDisconnected.bind(this)\n })\n }\n\n disconnectedCallback() {\n disconnectStreamSource(this)\n if (this.subscription) this.subscription.unsubscribe()\n }\n\n dispatchMessageEvent(data) {\n const event = new MessageEvent(\"message\", { data })\n return this.dispatchEvent(event)\n }\n\n subscriptionConnected() {\n this.setAttribute(\"connected\", \"\")\n }\n\n subscriptionDisconnected() {\n this.removeAttribute(\"connected\")\n }\n\n get channel() {\n const channel = this.getAttribute(\"channel\")\n const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n", "export function encodeMethodIntoRequestBody(event) {\n if (event.target instanceof HTMLFormElement) {\n const { target: form, detail: { fetchOptions } } = event\n\n form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n const method = determineFetchMethod(submitter, body, form)\n\n if (!/get/i.test(method)) {\n if (/post/i.test(method)) {\n body.delete(\"_method\")\n } else {\n body.set(\"_method\", method)\n }\n\n fetchOptions.method = \"post\"\n }\n }, { once: true })\n }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n const formMethod = determineFormMethod(submitter)\n const overrideMethod = body.get(\"_method\")\n const method = form.getAttribute(\"method\") || \"get\"\n\n if (typeof formMethod == \"string\") {\n return formMethod\n } else if (typeof overrideMethod == \"string\") {\n return overrideMethod\n } else {\n return method\n }\n}\n\nfunction determineFormMethod(submitter) {\n if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n // Rails 7 ActionView::Helpers::FormBuilder#button method has an override\n // for formmethod if the button does not have name or value attributes\n // set, which is the default. This means that if you use <%= f.button\n // formmethod: :delete %>, it will generate a <button name=\"_method\"\n // value=\"delete\" formmethod=\"post\">. Therefore, if the submitter's name\n // is already _method, it's value attribute already contains the desired\n // method.\n if (submitter.name === '_method') {\n return submitter.value\n } else if (submitter.hasAttribute(\"formmethod\")) {\n return submitter.formMethod\n } else {\n return null\n }\n } else {\n return null\n }\n}\n\nfunction isBodyInit(body) {\n return body instanceof FormData || body instanceof URLSearchParams\n}\n", "import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\nwindow.Turbo = Turbo\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n", "import { application } from \"../application\"\nimport(\"./analysis_controller\").then(c => application.register(\"analysis\", c.default))\nimport(\"./annual_contribution_controller\").then(c => application.register(\"annual-contribution\", c.default))\nimport(\"./autosize_controller\").then(c => application.register(\"autosize\", c.default))\nimport(\"./body_scroll_position_controller\").then(c => application.register(\"body-scroll-position\", c.default))\nimport(\"./bond_controller\").then(c => application.register(\"bond\", c.default))\nimport(\"./chart_controller\").then(c => application.register(\"chart\", c.default))\nimport(\"./checkbox_controls_controller\").then(c => application.register(\"checkbox-controls\", c.default))\nimport(\"./checkout_controller\").then(c => application.register(\"checkout\", c.default))\nimport(\"./column_controller\").then(c => application.register(\"column\", c.default))\nimport(\"./column_list_controller\").then(c => application.register(\"column-list\", c.default))\nimport(\"./column_search_controller\").then(c => application.register(\"column-search\", c.default))\nimport(\"./columns_controller\").then(c => application.register(\"columns\", c.default))\nimport(\"./connection_controller\").then(c => application.register(\"connection\", c.default))\nimport(\"./connection_progress_controller\").then(c => application.register(\"connection-progress\", c.default))\nimport(\"./connector_controller\").then(c => application.register(\"connector\", c.default))\nimport(\"./date_inquiry_controller\").then(c => application.register(\"date-inquiry\", c.default))\nimport(\"./dividend_growth_slider_controller\").then(c => application.register(\"dividend-growth-slider\", c.default))\nimport(\"./dividend_safety/comparer_controller\").then(c => application.register(\"dividend-safety--comparer\", c.default))\nimport(\"./dividend_safety/review_controller\").then(c => application.register(\"dividend-safety--review\", c.default))\nimport(\"./dividend_yield_slider_controller\").then(c => application.register(\"dividend-yield-slider\", c.default))\nimport(\"./entry_controller\").then(c => application.register(\"entry\", c.default))\nimport(\"./event_controller\").then(c => application.register(\"event\", c.default))\nimport(\"./fair_value_history_controller\").then(c => application.register(\"fair-value-history\", c.default))\nimport(\"./file_chooser_controller\").then(c => application.register(\"file-chooser\", c.default))\nimport(\"./financials_controller\").then(c => application.register(\"financials\", c.default))\nimport(\"./form_controller\").then(c => application.register(\"form\", c.default))\nimport(\"./holdings_grid_controller\").then(c => application.register(\"holdings-grid\", c.default))\nimport(\"./ignore_enter_controller\").then(c => application.register(\"ignore-enter\", c.default))\nimport(\"./industry_list_controller\").then(c => application.register(\"industry-list\", c.default))\nimport(\"./infinite_page_controller\").then(c => application.register(\"infinite-page\", c.default))\nimport(\"./load_in_chunks_controller\").then(c => application.register(\"load-in-chunks\", c.default))\nimport(\"./maintain_jump_controller\").then(c => application.register(\"maintain-jump\", c.default))\nimport(\"./modal_controller\").then(c => application.register(\"modal\", c.default))\nimport(\"./newsletter_signup_controller\").then(c => application.register(\"newsletter-signup\", c.default))\nimport(\"./notes_loader_controller\").then(c => application.register(\"notes-loader\", c.default))\nimport(\"./number_input_controller\").then(c => application.register(\"number-input\", c.default))\nimport(\"./payout_form_controller\").then(c => application.register(\"payout-form\", c.default))\nimport(\"./quantity_validator_controller\").then(c => application.register(\"quantity-validator\", c.default))\nimport(\"./remove_in_lite_controller\").then(c => application.register(\"remove-in-lite\", c.default))\nimport(\"./scroll_hinter_controller\").then(c => application.register(\"scroll-hinter\", c.default))\nimport(\"./scroll_position_controller\").then(c => application.register(\"scroll-position\", c.default))\nimport(\"./scroll_to_element_controller\").then(c => application.register(\"scroll-to-element\", c.default))\nimport(\"./sorter_controller\").then(c => application.register(\"sorter\", c.default))\nimport(\"./spreadsheet_import_preview_controller\").then(c => application.register(\"spreadsheet-import-preview\", c.default))\nimport(\"./sticky_element_controller\").then(c => application.register(\"sticky-element\", c.default))\nimport(\"./today_or_otherwise_controller\").then(c => application.register(\"today-or-otherwise\", c.default))\nimport(\"./totals_controller\").then(c => application.register(\"totals\", c.default))\nimport(\"./widowless_controller\").then(c => application.register(\"widowless\", c.default))\nimport(\"./yodlee_controller\").then(c => application.register(\"yodlee\", c.default))", "import \"@hotwired/turbo-rails\"\nimport \"./controllers\"\n\nimport smoothscroll from 'smoothscroll-polyfill';\nsmoothscroll.polyfill();\n\nimport { Application } from \"@hotwired/stimulus\"\nconst application = Application.start()\nwindow.Stimulus = application\nexport { application }"], "mappings": "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", "names": [] }