{"version":3,"file":"application.js","mappings":"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","sources":["webpack://app/./app/components/corporate/welcome/component_controller.js","webpack://app/./app/components/ sync component_controller\\.js$","webpack://app/./node_modules/@hotwired/stimulus/dist/stimulus.js","webpack://app/./node_modules/@rails/actioncable/src/adapters.js","webpack://app/./node_modules/@rails/actioncable/src/logger.js","webpack://app/./node_modules/@rails/actioncable/src/connection_monitor.js","webpack://app/./node_modules/@rails/actioncable/src/internal.js","webpack://app/./node_modules/@rails/actioncable/src/connection.js","webpack://app/./node_modules/@rails/actioncable/src/subscription.js","webpack://app/./node_modules/@rails/actioncable/src/subscription_guarantor.js","webpack://app/./node_modules/@rails/actioncable/src/subscriptions.js","webpack://app/./node_modules/@rails/actioncable/src/consumer.js","webpack://app/./node_modules/@rails/actioncable/src/index.js","webpack://app/webpack/bootstrap","webpack://app/webpack/runtime/define property getters","webpack://app/webpack/runtime/hasOwnProperty shorthand","webpack://app/webpack/runtime/make namespace object","webpack://app/./node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js","webpack://app/./node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","webpack://app/./app/javascript/application.js"],"sourcesContent":["import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static targets = ['buttons', 'container', 'dialog', 'title', 'content']\n\n connect() {\n this.closed = true;\n }\n\n close() {\n this.closed = true;\n this.containerTarget.classList.remove('open')\n this.buttonsTarget.childNodes[0].classList.remove('open');\n this.buttonsTarget.childNodes[1].classList.remove('open');\n this.buttonsTarget.childNodes[2].classList.remove('open');\n }\n\n transitionend() {\n if (this.closed) {\n this.dialogTarget.classList.add('closed')\n }\n }\n\n open(e) {\n e.preventDefault();\n console.log('open');\n\n const button = e.currentTarget;\n const id = button.attributes.href.textContent;\n\n this.closed = false;\n this.dialogTarget.classList.remove('closed')\n\n this.dialogTarget.style.top = 'auto';\n this.dialogTarget.style.left = 'auto';\n\n setTimeout(() => {\n\n console.log(this.dialogTarget)\n this.dialogTarget.style.top = button.offsetTop + 'px';\n this.dialogTarget.style.left = button.offsetLeft + 'px';\n console.log(`${id} ${button.offsetTop} / ${button.offsetLeft}`)\n\n setTimeout(() => {\n console.log('Move Open')\n console.log(this.dialogTarget)\n button.classList.add('open');\n this.containerTarget.classList.add('open');\n\n this.titleTarget.innerHTML = id\n this.contentTarget.innerHTML = document.querySelector(id).innerHTML\n\n }, 25)\n }, 25)\n }\n}\n","var map = {\n\t\"./corporate/welcome/component_controller.js\": 739\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 140;","/*\nStimulus 3.0.1\nCopyright © 2021 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 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())\n .reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\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).sort().forEach(key => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName: matches[2],\n eventOptions: matches[9] ? parseEventOptions(matches[9]) : {},\n identifier: matches[5],\n methodName: matches[7]\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.split(\":\").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 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) {\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 }\n static forToken(token) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content));\n }\n toString() {\n const eventNameSuffix = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventNameSuffix}->${this.identifier}#${this.methodName}`;\n }\n get params() {\n if (this.eventTarget instanceof Element) {\n return this.getParamsFromEventTargetAttributes(this.eventTarget);\n }\n else {\n return {};\n }\n }\n getParamsFromEventTargetAttributes(eventTarget) {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`);\n const attributes = Array.from(eventTarget.attributes);\n attributes.forEach(({ name, value }) => {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n Object.assign(params, { [camelize(key)]: typecast(value) });\n }\n });\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n}\nconst defaultEventNames = {\n \"a\": e => \"click\",\n \"button\": e => \"click\",\n \"form\": e => \"submit\",\n \"details\": e => \"toggle\",\n \"input\": e => e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\",\n \"select\": e => \"change\",\n \"textarea\": e => \"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)) {\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 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 (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\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\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 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)\n .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.trim().split(/\\s+/).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));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token);\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 this.invokeChangedCallbacksForDefaultValues();\n }\n start() {\n this.stringMapObserver.start();\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 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 }\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\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 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 try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\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.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 invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\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\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) => [\n ...Object.getOwnPropertyNames(object),\n ...Object.getOwnPropertySymbols(object)\n ];\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 () { this.a.call(this); };\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\n || this.findTarget(targetName)\n || 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 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 }\n findElement(selector) {\n return this.element.matches(selector)\n ? this.element\n : 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}\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 }\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};\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 }\n static start(element, schema) {\n const application = new Application(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 if (controllerConstructor.shouldLoad) {\n this.load({ identifier, controllerConstructor });\n }\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach(definition => this.router.loadDefinition(definition));\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 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);\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) {\n const definition = parseValueDefinitionPair(valueDefinitionPair);\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]) {\n return valueDescriptorForTokenAndTypeDefinition(token, typeDefinition);\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array: return \"array\";\n case Boolean: return \"boolean\";\n case Number: return \"number\";\n case Object: return \"object\";\n case String: return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\": return \"boolean\";\n case \"number\": return \"number\";\n case \"string\": 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(typeObject) {\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n if (typeFromObject) {\n const defaultValueType = parseValueTypeDefault(typeObject.default);\n if (typeFromObject !== defaultValueType) {\n throw new Error(`Type \"${typeFromObject}\" must match the type of the default value. Given default value: \"${typeObject.default}\" as \"${defaultValueType}\"`);\n }\n return typeFromObject;\n }\n}\nfunction parseValueTypeDefinition(typeDefinition) {\n const typeFromObject = parseValueTypeObject(typeDefinition);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n throw new Error(`Unknown value type \"${typeDefinition}\"`);\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(token, typeDefinition) {\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(typeDefinition);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() { return defaultValueForDefinition(typeDefinition); },\n get hasCustomDefaultValue() { return parseValueTypeDefault(typeDefinition) !== undefined; },\n reader: readers[type],\n writer: writers[type] || writers.default\n };\n}\nconst defaultValuesByType = {\n get array() { return []; },\n boolean: false,\n number: 0,\n get object() { return {}; },\n string: \"\"\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(\"Expected array\");\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || value == \"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 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 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 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 = [ClassPropertiesBlessing, TargetPropertiesBlessing, ValuePropertiesBlessing];\nController.targets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n","export default {\n logger: self.console,\n WebSocket: self.WebSocket\n}\n","import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n// ActionCable.logger.enabled = true\n//\n// Example:\n//\n// import * as ActionCable from '@rails/actioncable'\n//\n// ActionCable.logger.enabled = true\n// ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n log(...messages) {\n if (this.enabled) {\n messages.push(Date.now())\n adapters.logger.log(\"[ActionCable]\", ...messages)\n }\n },\n}\n","import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n constructor(connection) {\n this.visibilityDidChange = this.visibilityDidChange.bind(this)\n this.connection = connection\n this.reconnectAttempts = 0\n }\n\n start() {\n if (!this.isRunning()) {\n this.startedAt = now()\n delete this.stoppedAt\n this.startPolling()\n addEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n }\n }\n\n stop() {\n if (this.isRunning()) {\n this.stoppedAt = now()\n this.stopPolling()\n removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(\"ConnectionMonitor stopped\")\n }\n }\n\n isRunning() {\n return this.startedAt && !this.stoppedAt\n }\n\n recordPing() {\n this.pingedAt = now()\n }\n\n recordConnect() {\n this.reconnectAttempts = 0\n this.recordPing()\n delete this.disconnectedAt\n logger.log(\"ConnectionMonitor recorded connect\")\n }\n\n recordDisconnect() {\n this.disconnectedAt = now()\n logger.log(\"ConnectionMonitor recorded disconnect\")\n }\n\n // Private\n\n startPolling() {\n this.stopPolling()\n this.poll()\n }\n\n stopPolling() {\n clearTimeout(this.pollTimeout)\n }\n\n poll() {\n this.pollTimeout = setTimeout(() => {\n this.reconnectIfStale()\n this.poll()\n }\n , this.getPollInterval())\n }\n\n getPollInterval() {\n const { staleThreshold, reconnectionBackoffRate } = this.constructor\n const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n const jitter = jitterMax * Math.random()\n return staleThreshold * 1000 * backoff * (1 + jitter)\n }\n\n reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n this.reconnectAttempts++\n if (this.disconnectedRecently()) {\n logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n } else {\n logger.log(\"ConnectionMonitor reopening\")\n this.connection.reopen()\n }\n }\n }\n\n get refreshedAt() {\n return this.pingedAt ? this.pingedAt : this.startedAt\n }\n\n connectionIsStale() {\n return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n }\n\n disconnectedRecently() {\n return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n }\n\n visibilityDidChange() {\n if (document.visibilityState === \"visible\") {\n setTimeout(() => {\n if (this.connectionIsStale() || !this.connection.isOpen()) {\n logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n this.connection.reopen()\n }\n }\n , 200)\n }\n }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n","export default {\n \"message_types\": {\n \"welcome\": \"welcome\",\n \"disconnect\": \"disconnect\",\n \"ping\": \"ping\",\n \"confirmation\": \"confirm_subscription\",\n \"rejection\": \"reject_subscription\"\n },\n \"disconnect_reasons\": {\n \"unauthorized\": \"unauthorized\",\n \"invalid_request\": \"invalid_request\",\n \"server_restart\": \"server_restart\"\n },\n \"default_mount_path\": \"/cable\",\n \"protocols\": [\n \"actioncable-v1-json\",\n \"actioncable-unsupported\"\n ]\n}\n","import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n constructor(consumer) {\n this.open = this.open.bind(this)\n this.consumer = consumer\n this.subscriptions = this.consumer.subscriptions\n this.monitor = new ConnectionMonitor(this)\n this.disconnected = true\n }\n\n send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data))\n return true\n } else {\n return false\n }\n }\n\n open() {\n if (this.isActive()) {\n logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n return false\n } else {\n logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`)\n if (this.webSocket) { this.uninstallEventHandlers() }\n this.webSocket = new adapters.WebSocket(this.consumer.url, protocols)\n this.installEventHandlers()\n this.monitor.start()\n return true\n }\n }\n\n close({allowReconnect} = {allowReconnect: true}) {\n if (!allowReconnect) { this.monitor.stop() }\n // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n if (this.isOpen()) {\n return this.webSocket.close()\n }\n }\n\n reopen() {\n logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n if (this.isActive()) {\n try {\n return this.close()\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error)\n }\n finally {\n logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n setTimeout(this.open, this.constructor.reopenDelay)\n }\n } else {\n return this.open()\n }\n }\n\n getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol\n }\n }\n\n isOpen() {\n return this.isState(\"open\")\n }\n\n isActive() {\n return this.isState(\"open\", \"connecting\")\n }\n\n // Private\n\n isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n }\n\n isState(...states) {\n return indexOf.call(states, this.getState()) >= 0\n }\n\n getState() {\n if (this.webSocket) {\n for (let state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase()\n }\n }\n }\n return null\n }\n\n installEventHandlers() {\n for (let eventName in this.events) {\n const handler = this.events[eventName].bind(this)\n this.webSocket[`on${eventName}`] = handler\n }\n }\n\n uninstallEventHandlers() {\n for (let eventName in this.events) {\n this.webSocket[`on${eventName}`] = function() {}\n }\n }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n message(event) {\n if (!this.isProtocolSupported()) { return }\n const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n switch (type) {\n case message_types.welcome:\n this.monitor.recordConnect()\n return this.subscriptions.reload()\n case message_types.disconnect:\n logger.log(`Disconnecting. Reason: ${reason}`)\n return this.close({allowReconnect: reconnect})\n case message_types.ping:\n return this.monitor.recordPing()\n case message_types.confirmation:\n this.subscriptions.confirmSubscription(identifier)\n return this.subscriptions.notify(identifier, \"connected\")\n case message_types.rejection:\n return this.subscriptions.reject(identifier)\n default:\n return this.subscriptions.notify(identifier, \"received\", message)\n }\n },\n\n open() {\n logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n this.disconnected = false\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n return this.close({allowReconnect: false})\n }\n },\n\n close(event) {\n logger.log(\"WebSocket onclose event\")\n if (this.disconnected) { return }\n this.disconnected = true\n this.monitor.recordDisconnect()\n return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n },\n\n error() {\n logger.log(\"WebSocket onerror event\")\n }\n}\n\nexport default Connection\n","// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n// connected() {\n// // Called once the subscription has been successfully completed\n// },\n//\n// disconnected({ willAttemptReconnect: boolean }) {\n// // Called when the client has disconnected with the server.\n// // The object will have an `willAttemptReconnect` property which\n// // says whether the client has the intention of attempting\n// // to reconnect.\n// },\n//\n// appear() {\n// this.perform('appear', {appearing_on: this.appearingOn()})\n// },\n//\n// away() {\n// this.perform('away')\n// },\n//\n// appearingOn() {\n// $('main').data('appearing-on')\n// }\n// })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n// class AppearanceChannel < ApplicationActionCable::Channel\n// def subscribed\n// current_user.appear\n// end\n//\n// def unsubscribed\n// current_user.disappear\n// end\n//\n// def appear(data)\n// current_user.appear on: data['appearing_on']\n// end\n//\n// def away\n// current_user.away\n// end\n// end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n if (properties != null) {\n for (let key in properties) {\n const value = properties[key]\n object[key] = value\n }\n }\n return object\n}\n\nexport default class Subscription {\n constructor(consumer, params = {}, mixin) {\n this.consumer = consumer\n this.identifier = JSON.stringify(params)\n extend(this, mixin)\n }\n\n // Perform a channel action with the optional data passed as an attribute\n perform(action, data = {}) {\n data.action = action\n return this.send(data)\n }\n\n send(data) {\n return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n }\n\n unsubscribe() {\n return this.consumer.subscriptions.remove(this)\n }\n}\n","import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n constructor(subscriptions) {\n this.subscriptions = subscriptions\n this.pendingSubscriptions = []\n }\n\n guarantee(subscription) {\n if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n this.pendingSubscriptions.push(subscription) \n }\n else {\n logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n }\n this.startGuaranteeing()\n }\n\n forget(subscription) {\n logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n }\n\n startGuaranteeing() {\n this.stopGuaranteeing()\n this.retrySubscribing()\n }\n \n stopGuaranteeing() {\n clearTimeout(this.retryTimeout)\n }\n\n retrySubscribing() {\n this.retryTimeout = setTimeout(() => {\n if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n this.pendingSubscriptions.map((subscription) => {\n logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n this.subscriptions.subscribe(subscription)\n })\n }\n }\n , 500)\n }\n}\n\nexport default SubscriptionGuarantor","import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n constructor(consumer) {\n this.consumer = consumer\n this.guarantor = new SubscriptionGuarantor(this)\n this.subscriptions = []\n }\n\n create(channelName, mixin) {\n const channel = channelName\n const params = typeof channel === \"object\" ? channel : {channel}\n const subscription = new Subscription(this.consumer, params, mixin)\n return this.add(subscription)\n }\n\n // Private\n\n add(subscription) {\n this.subscriptions.push(subscription)\n this.consumer.ensureActiveConnection()\n this.notify(subscription, \"initialized\")\n this.subscribe(subscription)\n return subscription\n }\n\n remove(subscription) {\n this.forget(subscription)\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\")\n }\n return subscription\n }\n\n reject(identifier) {\n return this.findAll(identifier).map((subscription) => {\n this.forget(subscription)\n this.notify(subscription, \"rejected\")\n return subscription\n })\n }\n\n forget(subscription) {\n this.guarantor.forget(subscription)\n this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n return subscription\n }\n\n findAll(identifier) {\n return this.subscriptions.filter((s) => s.identifier === identifier)\n }\n\n reload() {\n return this.subscriptions.map((subscription) =>\n this.subscribe(subscription))\n }\n\n notifyAll(callbackName, ...args) {\n return this.subscriptions.map((subscription) =>\n this.notify(subscription, callbackName, ...args))\n }\n\n notify(subscription, callbackName, ...args) {\n let subscriptions\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription)\n } else {\n subscriptions = [subscription]\n }\n\n return subscriptions.map((subscription) =>\n (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n }\n\n subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription)\n }\n }\n\n confirmSubscription(identifier) {\n logger.log(`Subscription confirmed ${identifier}`)\n this.findAll(identifier).map((subscription) =>\n this.guarantor.forget(subscription))\n }\n\n sendCommand(subscription, command) {\n const {identifier} = subscription\n return this.consumer.send({command, identifier})\n }\n}\n","import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n// App.cable.disconnect()\n//\n// and to restart the connection:\n//\n// App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n constructor(url) {\n this._url = url\n this.subscriptions = new Subscriptions(this)\n this.connection = new Connection(this)\n }\n\n get url() {\n return createWebSocketURL(this._url)\n }\n\n send(data) {\n return this.connection.send(data)\n }\n\n connect() {\n return this.connection.open()\n }\n\n disconnect() {\n return this.connection.close({allowReconnect: false})\n }\n\n ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open()\n }\n }\n}\n\nexport function createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url()\n }\n\n if (url && !/^wss?:/i.test(url)) {\n const a = document.createElement(\"a\")\n a.href = url\n // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n a.href = a.href\n a.protocol = a.protocol.replace(\"http\", \"ws\")\n return a.href\n } else {\n return url\n }\n}\n","import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n Connection,\n ConnectionMonitor,\n Consumer,\n INTERNAL,\n Subscription,\n Subscriptions,\n SubscriptionGuarantor,\n adapters,\n createWebSocketURL,\n logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n return new Consumer(url)\n}\n\nexport function getConfig(name) {\n const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n if (element) {\n return element.getAttribute(\"content\")\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/*\nTurbo 7.2.4\nCopyright © 2022 37signals LLC\n */\n(function () {\n if (window.Reflect === undefined ||\n window.customElements === undefined ||\n window.customElements.polyfillWrapFlushCallback) {\n return;\n }\n const BuiltInHTMLElement = HTMLElement;\n const wrapperForTheName = {\n HTMLElement: function HTMLElement() {\n return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n },\n };\n window.HTMLElement = wrapperForTheName[\"HTMLElement\"];\n HTMLElement.prototype = BuiltInHTMLElement.prototype;\n HTMLElement.prototype.constructor = HTMLElement;\n Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n\n/**\n * The MIT License (MIT)\n * \n * Copyright (c) 2019 Javan Makhmali\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function(prototype) {\n if (typeof prototype.requestSubmit == \"function\") return\n\n prototype.requestSubmit = function(submitter) {\n if (submitter) {\n validateSubmitter(submitter, this);\n submitter.click();\n } else {\n submitter = document.createElement(\"input\");\n submitter.type = \"submit\";\n submitter.hidden = true;\n this.appendChild(submitter);\n submitter.click();\n this.removeChild(submitter);\n }\n };\n\n function validateSubmitter(submitter, form) {\n submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n submitter.form == form || raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n }\n\n function raise(errorConstructor, message, name) {\n throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\nfunction findSubmitterFromClickTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n const candidate = element ? element.closest(\"input, button\") : null;\n return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\nfunction clickCaptured(event) {\n const submitter = findSubmitterFromClickTarget(event.target);\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter);\n }\n}\n(function () {\n if (\"submitter\" in Event.prototype)\n return;\n let prototype;\n if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n prototype = window.SubmitEvent.prototype;\n }\n else if (\"SubmitEvent\" in window) {\n return;\n }\n else {\n prototype = window.Event.prototype;\n }\n addEventListener(\"click\", clickCaptured, true);\n Object.defineProperty(prototype, \"submitter\", {\n get() {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target);\n }\n },\n });\n})();\n\nvar FrameLoadingStyle;\n(function (FrameLoadingStyle) {\n FrameLoadingStyle[\"eager\"] = \"eager\";\n FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\nclass FrameElement extends HTMLElement {\n constructor() {\n super();\n this.loaded = Promise.resolve();\n this.delegate = new FrameElement.delegateConstructor(this);\n }\n static get observedAttributes() {\n return [\"disabled\", \"complete\", \"loading\", \"src\"];\n }\n connectedCallback() {\n this.delegate.connect();\n }\n disconnectedCallback() {\n this.delegate.disconnect();\n }\n reload() {\n return this.delegate.sourceURLReloaded();\n }\n attributeChangedCallback(name) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged();\n }\n else if (name == \"complete\") {\n this.delegate.completeChanged();\n }\n else if (name == \"src\") {\n this.delegate.sourceURLChanged();\n }\n else {\n this.delegate.disabledChanged();\n }\n }\n get src() {\n return this.getAttribute(\"src\");\n }\n set src(value) {\n if (value) {\n this.setAttribute(\"src\", value);\n }\n else {\n this.removeAttribute(\"src\");\n }\n }\n get loading() {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n }\n set loading(value) {\n if (value) {\n this.setAttribute(\"loading\", value);\n }\n else {\n this.removeAttribute(\"loading\");\n }\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n }\n else {\n this.removeAttribute(\"disabled\");\n }\n }\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\");\n }\n set autoscroll(value) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\");\n }\n else {\n this.removeAttribute(\"autoscroll\");\n }\n }\n get complete() {\n return !this.delegate.isLoading;\n }\n get isActive() {\n return this.ownerDocument === document && !this.isPreview;\n }\n get isPreview() {\n var _a, _b;\n return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\n }\n}\nfunction frameLoadingStyleFromString(style) {\n switch (style.toLowerCase()) {\n case \"lazy\":\n return FrameLoadingStyle.lazy;\n default:\n return FrameLoadingStyle.eager;\n }\n}\n\nfunction expandURL(locatable) {\n return new URL(locatable.toString(), document.baseURI);\n}\nfunction getAnchor(url) {\n let anchorMatch;\n if (url.hash) {\n return url.hash.slice(1);\n }\n else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n return anchorMatch[1];\n }\n}\nfunction getAction(form, submitter) {\n const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formaction\")) || form.getAttribute(\"action\") || form.action;\n return expandURL(action);\n}\nfunction getExtension(url) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\nfunction isHTML(url) {\n return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/);\n}\nfunction isPrefixedBy(baseURL, url) {\n const prefix = getPrefix(url);\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\nfunction locationIsVisitable(location, rootLocation) {\n return isPrefixedBy(location, rootLocation) && isHTML(location);\n}\nfunction getRequestURL(url) {\n const anchor = getAnchor(url);\n return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href;\n}\nfunction toCacheKey(url) {\n return getRequestURL(url);\n}\nfunction urlsAreEqual(left, right) {\n return expandURL(left).href == expandURL(right).href;\n}\nfunction getPathComponents(url) {\n return url.pathname.split(\"/\").slice(1);\n}\nfunction getLastPathComponent(url) {\n return getPathComponents(url).slice(-1)[0];\n}\nfunction getPrefix(url) {\n return addTrailingSlash(url.origin + url.pathname);\n}\nfunction addTrailingSlash(value) {\n return value.endsWith(\"/\") ? value : value + \"/\";\n}\n\nclass FetchResponse {\n constructor(response) {\n this.response = response;\n }\n get succeeded() {\n return this.response.ok;\n }\n get failed() {\n return !this.succeeded;\n }\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499;\n }\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599;\n }\n get redirected() {\n return this.response.redirected;\n }\n get location() {\n return expandURL(this.response.url);\n }\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n }\n get statusCode() {\n return this.response.status;\n }\n get contentType() {\n return this.header(\"Content-Type\");\n }\n get responseText() {\n return this.response.clone().text();\n }\n get responseHTML() {\n if (this.isHTML) {\n return this.response.clone().text();\n }\n else {\n return Promise.resolve(undefined);\n }\n }\n header(name) {\n return this.response.headers.get(name);\n }\n}\n\nfunction isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\n\nfunction activateScriptElement(element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element;\n }\n else {\n const createdScriptElement = document.createElement(\"script\");\n const cspNonce = getMetaContent(\"csp-nonce\");\n if (cspNonce) {\n createdScriptElement.nonce = cspNonce;\n }\n createdScriptElement.textContent = element.textContent;\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n return createdScriptElement;\n }\n}\nfunction copyElementAttributes(destinationElement, sourceElement) {\n for (const { name, value } of sourceElement.attributes) {\n destinationElement.setAttribute(name, value);\n }\n}\nfunction createDocumentFragment(html) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n return template.content;\n}\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n const event = new CustomEvent(eventName, {\n cancelable,\n bubbles: true,\n detail,\n });\n if (target && target.isConnected) {\n target.dispatchEvent(event);\n }\n else {\n document.documentElement.dispatchEvent(event);\n }\n return event;\n}\nfunction nextAnimationFrame() {\n return new Promise((resolve) => requestAnimationFrame(() => resolve()));\n}\nfunction nextEventLoopTick() {\n return new Promise((resolve) => setTimeout(() => resolve(), 0));\n}\nfunction nextMicrotask() {\n return Promise.resolve();\n}\nfunction parseHTMLDocument(html = \"\") {\n return new DOMParser().parseFromString(html, \"text/html\");\n}\nfunction unindent(strings, ...values) {\n const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n const match = lines[0].match(/^\\s+/);\n const indent = match ? match[0].length : 0;\n return lines.map((line) => line.slice(indent)).join(\"\\n\");\n}\nfunction interpolate(strings, values) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i];\n return result + string + value;\n }, \"\");\n}\nfunction uuid() {\n return Array.from({ length: 36 })\n .map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\";\n }\n else if (i == 14) {\n return \"4\";\n }\n else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16);\n }\n else {\n return Math.floor(Math.random() * 15).toString(16);\n }\n })\n .join(\"\");\n}\nfunction getAttribute(attributeName, ...elements) {\n for (const value of elements.map((element) => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {\n if (typeof value == \"string\")\n return value;\n }\n return null;\n}\nfunction hasAttribute(attributeName, ...elements) {\n return elements.some((element) => element && element.hasAttribute(attributeName));\n}\nfunction markAsBusy(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.setAttribute(\"busy\", \"\");\n }\n element.setAttribute(\"aria-busy\", \"true\");\n }\n}\nfunction clearBusyState(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.removeAttribute(\"busy\");\n }\n element.removeAttribute(\"aria-busy\");\n }\n}\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n return new Promise((resolve) => {\n const onComplete = () => {\n element.removeEventListener(\"error\", onComplete);\n element.removeEventListener(\"load\", onComplete);\n resolve();\n };\n element.addEventListener(\"load\", onComplete, { once: true });\n element.addEventListener(\"error\", onComplete, { once: true });\n setTimeout(resolve, timeoutInMilliseconds);\n });\n}\nfunction getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState;\n case \"advance\":\n case \"restore\":\n return history.pushState;\n }\n}\nfunction getVisitAction(...elements) {\n const action = getAttribute(\"data-turbo-action\", ...elements);\n return isAction(action) ? action : null;\n}\nfunction getMetaElement(name) {\n return document.querySelector(`meta[name=\"${name}\"]`);\n}\nfunction getMetaContent(name) {\n const element = getMetaElement(name);\n return element && element.content;\n}\nfunction setMetaContent(name, content) {\n let element = getMetaElement(name);\n if (!element) {\n element = document.createElement(\"meta\");\n element.setAttribute(\"name\", name);\n document.head.appendChild(element);\n }\n element.setAttribute(\"content\", content);\n return element;\n}\n\nvar FetchMethod;\n(function (FetchMethod) {\n FetchMethod[FetchMethod[\"get\"] = 0] = \"get\";\n FetchMethod[FetchMethod[\"post\"] = 1] = \"post\";\n FetchMethod[FetchMethod[\"put\"] = 2] = \"put\";\n FetchMethod[FetchMethod[\"patch\"] = 3] = \"patch\";\n FetchMethod[FetchMethod[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\nfunction fetchMethodFromString(method) {\n switch (method.toLowerCase()) {\n case \"get\":\n return FetchMethod.get;\n case \"post\":\n return FetchMethod.post;\n case \"put\":\n return FetchMethod.put;\n case \"patch\":\n return FetchMethod.patch;\n case \"delete\":\n return FetchMethod.delete;\n }\n}\nclass FetchRequest {\n constructor(delegate, method, location, body = new URLSearchParams(), target = null) {\n this.abortController = new AbortController();\n this.resolveRequestPromise = (_value) => { };\n this.delegate = delegate;\n this.method = method;\n this.headers = this.defaultHeaders;\n this.body = body;\n this.url = location;\n this.target = target;\n }\n get location() {\n return this.url;\n }\n get params() {\n return this.url.searchParams;\n }\n get entries() {\n return this.body ? Array.from(this.body.entries()) : [];\n }\n cancel() {\n this.abortController.abort();\n }\n async perform() {\n var _a, _b;\n const { fetchOptions } = this;\n (_b = (_a = this.delegate).prepareHeadersForRequest) === null || _b === void 0 ? void 0 : _b.call(_a, this.headers, this);\n await this.allowRequestToBeIntercepted(fetchOptions);\n try {\n this.delegate.requestStarted(this);\n const response = await fetch(this.url.href, fetchOptions);\n return await this.receive(response);\n }\n catch (error) {\n if (error.name !== \"AbortError\") {\n if (this.willDelegateErrorHandling(error)) {\n this.delegate.requestErrored(this, error);\n }\n throw error;\n }\n }\n finally {\n this.delegate.requestFinished(this);\n }\n }\n async receive(response) {\n const fetchResponse = new FetchResponse(response);\n const event = dispatch(\"turbo:before-fetch-response\", {\n cancelable: true,\n detail: { fetchResponse },\n target: this.target,\n });\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n }\n else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse);\n }\n else {\n this.delegate.requestFailedWithResponse(this, fetchResponse);\n }\n return fetchResponse;\n }\n get fetchOptions() {\n var _a;\n return {\n method: FetchMethod[this.method].toUpperCase(),\n credentials: \"same-origin\",\n headers: this.headers,\n redirect: \"follow\",\n body: this.isIdempotent ? null : this.body,\n signal: this.abortSignal,\n referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href,\n };\n }\n get defaultHeaders() {\n return {\n Accept: \"text/html, application/xhtml+xml\",\n };\n }\n get isIdempotent() {\n return this.method == FetchMethod.get;\n }\n get abortSignal() {\n return this.abortController.signal;\n }\n acceptResponseType(mimeType) {\n this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n }\n async allowRequestToBeIntercepted(fetchOptions) {\n const requestInterception = new Promise((resolve) => (this.resolveRequestPromise = resolve));\n const event = dispatch(\"turbo:before-fetch-request\", {\n cancelable: true,\n detail: {\n fetchOptions,\n url: this.url,\n resume: this.resolveRequestPromise,\n },\n target: this.target,\n });\n if (event.defaultPrevented)\n await requestInterception;\n }\n willDelegateErrorHandling(error) {\n const event = dispatch(\"turbo:fetch-request-error\", {\n target: this.target,\n cancelable: true,\n detail: { request: this, error: error },\n });\n return !event.defaultPrevented;\n }\n}\n\nclass AppearanceObserver {\n constructor(delegate, element) {\n this.started = false;\n this.intersect = (entries) => {\n const lastEntry = entries.slice(-1)[0];\n if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element);\n }\n };\n this.delegate = delegate;\n this.element = element;\n this.intersectionObserver = new IntersectionObserver(this.intersect);\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.intersectionObserver.observe(this.element);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.intersectionObserver.unobserve(this.element);\n }\n }\n}\n\nclass StreamMessage {\n constructor(fragment) {\n this.fragment = importStreamElements(fragment);\n }\n static wrap(message) {\n if (typeof message == \"string\") {\n return new this(createDocumentFragment(message));\n }\n else {\n return message;\n }\n }\n}\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\nfunction importStreamElements(fragment) {\n for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n const streamElement = document.importNode(element, true);\n for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n }\n element.replaceWith(streamElement);\n }\n return fragment;\n}\n\nvar FormSubmissionState;\n(function (FormSubmissionState) {\n FormSubmissionState[FormSubmissionState[\"initialized\"] = 0] = \"initialized\";\n FormSubmissionState[FormSubmissionState[\"requesting\"] = 1] = \"requesting\";\n FormSubmissionState[FormSubmissionState[\"waiting\"] = 2] = \"waiting\";\n FormSubmissionState[FormSubmissionState[\"receiving\"] = 3] = \"receiving\";\n FormSubmissionState[FormSubmissionState[\"stopping\"] = 4] = \"stopping\";\n FormSubmissionState[FormSubmissionState[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\nvar FormEnctype;\n(function (FormEnctype) {\n FormEnctype[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n FormEnctype[\"multipart\"] = \"multipart/form-data\";\n FormEnctype[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\nfunction formEnctypeFromString(encoding) {\n switch (encoding.toLowerCase()) {\n case FormEnctype.multipart:\n return FormEnctype.multipart;\n case FormEnctype.plain:\n return FormEnctype.plain;\n default:\n return FormEnctype.urlEncoded;\n }\n}\nclass FormSubmission {\n constructor(delegate, formElement, submitter, mustRedirect = false) {\n this.state = FormSubmissionState.initialized;\n this.delegate = delegate;\n this.formElement = formElement;\n this.submitter = submitter;\n this.formData = buildFormData(formElement, submitter);\n this.location = expandURL(this.action);\n if (this.method == FetchMethod.get) {\n mergeFormDataEntries(this.location, [...this.body.entries()]);\n }\n this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n this.mustRedirect = mustRedirect;\n }\n static confirmMethod(message, _element, _submitter) {\n return Promise.resolve(confirm(message));\n }\n get method() {\n var _a;\n const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n }\n get action() {\n var _a;\n const formElementAction = typeof this.formElement.action === \"string\" ? this.formElement.action : null;\n if ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"formaction\")) {\n return this.submitter.getAttribute(\"formaction\") || \"\";\n }\n else {\n return this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n }\n }\n get body() {\n if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n return new URLSearchParams(this.stringFormData);\n }\n else {\n return this.formData;\n }\n }\n get enctype() {\n var _a;\n return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n }\n get isIdempotent() {\n return this.fetchRequest.isIdempotent;\n }\n get stringFormData() {\n return [...this.formData].reduce((entries, [name, value]) => {\n return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n }, []);\n }\n async start() {\n const { initialized, requesting } = FormSubmissionState;\n const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n if (typeof confirmationMessage === \"string\") {\n const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\n if (!answer) {\n return;\n }\n }\n if (this.state == initialized) {\n this.state = requesting;\n return this.fetchRequest.perform();\n }\n }\n stop() {\n const { stopping, stopped } = FormSubmissionState;\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping;\n this.fetchRequest.cancel();\n return true;\n }\n }\n prepareHeadersForRequest(headers, request) {\n if (!request.isIdempotent) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n if (token) {\n headers[\"X-CSRF-Token\"] = token;\n }\n }\n if (this.requestAcceptsTurboStreamResponse(request)) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n requestStarted(_request) {\n var _a;\n this.state = FormSubmissionState.waiting;\n (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute(\"disabled\", \"\");\n dispatch(\"turbo:submit-start\", {\n target: this.formElement,\n detail: { formSubmission: this },\n });\n this.delegate.formSubmissionStarted(this);\n }\n requestPreventedHandlingResponse(request, response) {\n this.result = { success: response.succeeded, fetchResponse: response };\n }\n requestSucceededWithResponse(request, response) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n const error = new Error(\"Form responses must redirect to another location\");\n this.delegate.formSubmissionErrored(this, error);\n }\n else {\n this.state = FormSubmissionState.receiving;\n this.result = { success: true, fetchResponse: response };\n this.delegate.formSubmissionSucceededWithResponse(this, response);\n }\n }\n requestFailedWithResponse(request, response) {\n this.result = { success: false, fetchResponse: response };\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n requestErrored(request, error) {\n this.result = { success: false, error };\n this.delegate.formSubmissionErrored(this, error);\n }\n requestFinished(_request) {\n var _a;\n this.state = FormSubmissionState.stopped;\n (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute(\"disabled\");\n dispatch(\"turbo:submit-end\", {\n target: this.formElement,\n detail: Object.assign({ formSubmission: this }, this.result),\n });\n this.delegate.formSubmissionFinished(this);\n }\n requestMustRedirect(request) {\n return !request.isIdempotent && this.mustRedirect;\n }\n requestAcceptsTurboStreamResponse(request) {\n return !request.isIdempotent || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement);\n }\n}\nfunction buildFormData(formElement, submitter) {\n const formData = new FormData(formElement);\n const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"value\");\n if (name) {\n formData.append(name, value || \"\");\n }\n return formData;\n}\nfunction getCookieValue(cookieName) {\n if (cookieName != null) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\");\n return value ? decodeURIComponent(value) : undefined;\n }\n }\n}\nfunction responseSucceededWithoutRedirect(response) {\n return response.statusCode == 200 && !response.redirected;\n}\nfunction mergeFormDataEntries(url, entries) {\n const searchParams = new URLSearchParams();\n for (const [name, value] of entries) {\n if (value instanceof File)\n continue;\n searchParams.append(name, value);\n }\n url.search = searchParams.toString();\n return url;\n}\n\nclass Snapshot {\n constructor(element) {\n this.element = element;\n }\n get activeElement() {\n return this.element.ownerDocument.activeElement;\n }\n get children() {\n return [...this.element.children];\n }\n hasAnchor(anchor) {\n return this.getElementForAnchor(anchor) != null;\n }\n getElementForAnchor(anchor) {\n return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null;\n }\n get isConnected() {\n return this.element.isConnected;\n }\n get firstAutofocusableElement() {\n const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n for (const element of this.element.querySelectorAll(\"[autofocus]\")) {\n if (element.closest(inertDisabledOrHidden) == null)\n return element;\n else\n continue;\n }\n return null;\n }\n get permanentElements() {\n return queryPermanentElementsAll(this.element);\n }\n getPermanentElementById(id) {\n return getPermanentElementById(this.element, id);\n }\n getPermanentElementMapForSnapshot(snapshot) {\n const permanentElementMap = {};\n for (const currentPermanentElement of this.permanentElements) {\n const { id } = currentPermanentElement;\n const newPermanentElement = snapshot.getPermanentElementById(id);\n if (newPermanentElement) {\n permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n }\n }\n return permanentElementMap;\n }\n}\nfunction getPermanentElementById(node, id) {\n return node.querySelector(`#${id}[data-turbo-permanent]`);\n}\nfunction queryPermanentElementsAll(node) {\n return node.querySelectorAll(\"[id][data-turbo-permanent]\");\n}\n\nclass FormSubmitObserver {\n constructor(delegate, eventTarget) {\n this.started = false;\n this.submitCaptured = () => {\n this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n };\n this.submitBubbled = ((event) => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n const submitter = event.submitter || undefined;\n if (form &&\n submissionDoesNotDismissDialog(form, submitter) &&\n submissionDoesNotTargetIFrame(form, submitter) &&\n this.delegate.willSubmitForm(form, submitter)) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.delegate.formSubmitted(form, submitter);\n }\n }\n });\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n this.started = false;\n }\n }\n}\nfunction submissionDoesNotDismissDialog(form, submitter) {\n const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n return method != \"dialog\";\n}\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n const target = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formtarget\")) || form.target;\n for (const element of document.getElementsByName(target)) {\n if (element instanceof HTMLIFrameElement)\n return false;\n }\n return true;\n}\n\nclass View {\n constructor(delegate, element) {\n this.resolveRenderPromise = (_value) => { };\n this.resolveInterceptionPromise = (_value) => { };\n this.delegate = delegate;\n this.element = element;\n }\n scrollToAnchor(anchor) {\n const element = this.snapshot.getElementForAnchor(anchor);\n if (element) {\n this.scrollToElement(element);\n this.focusElement(element);\n }\n else {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n }\n scrollToAnchorFromLocation(location) {\n this.scrollToAnchor(getAnchor(location));\n }\n scrollToElement(element) {\n element.scrollIntoView();\n }\n focusElement(element) {\n if (element instanceof HTMLElement) {\n if (element.hasAttribute(\"tabindex\")) {\n element.focus();\n }\n else {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n element.removeAttribute(\"tabindex\");\n }\n }\n }\n scrollToPosition({ x, y }) {\n this.scrollRoot.scrollTo(x, y);\n }\n scrollToTop() {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n get scrollRoot() {\n return window;\n }\n async render(renderer) {\n const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;\n if (shouldRender) {\n try {\n this.renderPromise = new Promise((resolve) => (this.resolveRenderPromise = resolve));\n this.renderer = renderer;\n await this.prepareToRenderSnapshot(renderer);\n const renderInterception = new Promise((resolve) => (this.resolveInterceptionPromise = resolve));\n const options = { resume: this.resolveInterceptionPromise, render: this.renderer.renderElement };\n const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n if (!immediateRender)\n await renderInterception;\n await this.renderSnapshot(renderer);\n this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n this.delegate.preloadOnLoadLinksForView(this.element);\n this.finishRenderingSnapshot(renderer);\n }\n finally {\n delete this.renderer;\n this.resolveRenderPromise(undefined);\n delete this.renderPromise;\n }\n }\n else {\n this.invalidate(renderer.reloadReason);\n }\n }\n invalidate(reason) {\n this.delegate.viewInvalidated(reason);\n }\n async prepareToRenderSnapshot(renderer) {\n this.markAsPreview(renderer.isPreview);\n await renderer.prepareToRender();\n }\n markAsPreview(isPreview) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\");\n }\n else {\n this.element.removeAttribute(\"data-turbo-preview\");\n }\n }\n async renderSnapshot(renderer) {\n await renderer.render();\n }\n finishRenderingSnapshot(renderer) {\n renderer.finishRendering();\n }\n}\n\nclass FrameView extends View {\n invalidate() {\n this.element.innerHTML = \"\";\n }\n get snapshot() {\n return new Snapshot(this.element);\n }\n}\n\nclass LinkInterceptor {\n constructor(delegate, element) {\n this.clickBubbled = (event) => {\n if (this.respondsToEventTarget(event.target)) {\n this.clickEvent = event;\n }\n else {\n delete this.clickEvent;\n }\n };\n this.linkClicked = ((event) => {\n if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n this.clickEvent.preventDefault();\n event.preventDefault();\n this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n }\n }\n delete this.clickEvent;\n });\n this.willVisit = ((_event) => {\n delete this.clickEvent;\n });\n this.delegate = delegate;\n this.element = element;\n }\n start() {\n this.element.addEventListener(\"click\", this.clickBubbled);\n document.addEventListener(\"turbo:click\", this.linkClicked);\n document.addEventListener(\"turbo:before-visit\", this.willVisit);\n }\n stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled);\n document.removeEventListener(\"turbo:click\", this.linkClicked);\n document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n }\n respondsToEventTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n return element && element.closest(\"turbo-frame, html\") == this.element;\n }\n}\n\nclass LinkClickObserver {\n constructor(delegate, eventTarget) {\n this.started = false;\n this.clickCaptured = () => {\n this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n };\n this.clickBubbled = (event) => {\n if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n const target = (event.composedPath && event.composedPath()[0]) || event.target;\n const link = this.findLinkFromClickTarget(target);\n if (link && doesNotTargetIFrame(link)) {\n const location = this.getLocationForLink(link);\n if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n event.preventDefault();\n this.delegate.followedLinkToLocation(link, location);\n }\n }\n }\n };\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n clickEventIsSignificant(event) {\n return !((event.target && event.target.isContentEditable) ||\n event.defaultPrevented ||\n event.which > 1 ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey);\n }\n findLinkFromClickTarget(target) {\n if (target instanceof Element) {\n return target.closest(\"a[href]:not([target^=_]):not([download])\");\n }\n }\n getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\");\n }\n}\nfunction doesNotTargetIFrame(anchor) {\n for (const element of document.getElementsByName(anchor.target)) {\n if (element instanceof HTMLIFrameElement)\n return false;\n }\n return true;\n}\n\nclass FormLinkClickObserver {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.linkInterceptor = new LinkClickObserver(this, element);\n }\n start() {\n this.linkInterceptor.start();\n }\n stop() {\n this.linkInterceptor.stop();\n }\n willFollowLinkToLocation(link, location, originalEvent) {\n return (this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n link.hasAttribute(\"data-turbo-method\"));\n }\n followedLinkToLocation(link, location) {\n const action = location.href;\n const form = document.createElement(\"form\");\n form.setAttribute(\"data-turbo\", \"true\");\n form.setAttribute(\"action\", action);\n form.setAttribute(\"hidden\", \"\");\n const method = link.getAttribute(\"data-turbo-method\");\n if (method)\n form.setAttribute(\"method\", method);\n const turboFrame = link.getAttribute(\"data-turbo-frame\");\n if (turboFrame)\n form.setAttribute(\"data-turbo-frame\", turboFrame);\n const turboAction = link.getAttribute(\"data-turbo-action\");\n if (turboAction)\n form.setAttribute(\"data-turbo-action\", turboAction);\n const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n if (turboConfirm)\n form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n const turboStream = link.hasAttribute(\"data-turbo-stream\");\n if (turboStream)\n form.setAttribute(\"data-turbo-stream\", \"\");\n this.delegate.submittedFormLinkToLocation(link, location, form);\n document.body.appendChild(form);\n form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n requestAnimationFrame(() => form.requestSubmit());\n }\n}\n\nclass Bardo {\n constructor(delegate, permanentElementMap) {\n this.delegate = delegate;\n this.permanentElementMap = permanentElementMap;\n }\n static preservingPermanentElements(delegate, permanentElementMap, callback) {\n const bardo = new this(delegate, permanentElementMap);\n bardo.enter();\n callback();\n bardo.leave();\n }\n enter() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n }\n }\n leave() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement] = this.permanentElementMap[id];\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n this.delegate.leavingBardo(currentPermanentElement);\n }\n }\n replaceNewPermanentElementWithPlaceholder(permanentElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement);\n permanentElement.replaceWith(placeholder);\n }\n replaceCurrentPermanentElementWithClone(permanentElement) {\n const clone = permanentElement.cloneNode(true);\n permanentElement.replaceWith(clone);\n }\n replacePlaceholderWithPermanentElement(permanentElement) {\n const placeholder = this.getPlaceholderById(permanentElement.id);\n placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n }\n getPlaceholderById(id) {\n return this.placeholders.find((element) => element.content == id);\n }\n get placeholders() {\n return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")];\n }\n}\nfunction createPlaceholderForPermanentElement(permanentElement) {\n const element = document.createElement(\"meta\");\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n element.setAttribute(\"content\", permanentElement.id);\n return element;\n}\n\nclass Renderer {\n constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n this.activeElement = null;\n this.currentSnapshot = currentSnapshot;\n this.newSnapshot = newSnapshot;\n this.isPreview = isPreview;\n this.willRender = willRender;\n this.renderElement = renderElement;\n this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n }\n get shouldRender() {\n return true;\n }\n get reloadReason() {\n return;\n }\n prepareToRender() {\n return;\n }\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve();\n delete this.resolvingFunctions;\n }\n }\n preservingPermanentElements(callback) {\n Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n }\n focusFirstAutofocusableElement() {\n const element = this.connectedSnapshot.firstAutofocusableElement;\n if (elementIsFocusable(element)) {\n element.focus();\n }\n }\n enteringBardo(currentPermanentElement) {\n if (this.activeElement)\n return;\n if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n this.activeElement = this.currentSnapshot.activeElement;\n }\n }\n leavingBardo(currentPermanentElement) {\n if (currentPermanentElement.contains(this.activeElement) && this.activeElement instanceof HTMLElement) {\n this.activeElement.focus();\n this.activeElement = null;\n }\n }\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n }\n get currentElement() {\n return this.currentSnapshot.element;\n }\n get newElement() {\n return this.newSnapshot.element;\n }\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n }\n}\nfunction elementIsFocusable(element) {\n return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\n constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n this.delegate = delegate;\n }\n static renderElement(currentElement, newElement) {\n var _a;\n const destinationRange = document.createRange();\n destinationRange.selectNodeContents(currentElement);\n destinationRange.deleteContents();\n const frameElement = newElement;\n const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement);\n currentElement.appendChild(sourceRange.extractContents());\n }\n }\n get shouldRender() {\n return true;\n }\n async render() {\n await nextAnimationFrame();\n this.preservingPermanentElements(() => {\n this.loadFrameElement();\n });\n this.scrollFrameIntoView();\n await nextAnimationFrame();\n this.focusFirstAutofocusableElement();\n await nextAnimationFrame();\n this.activateScriptElements();\n }\n loadFrameElement() {\n this.delegate.willRenderFrame(this.currentElement, this.newElement);\n this.renderElement(this.currentElement, this.newElement);\n }\n scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n const element = this.currentElement.firstElementChild;\n const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n if (element) {\n element.scrollIntoView({ block, behavior });\n return true;\n }\n }\n return false;\n }\n activateScriptElements() {\n for (const inertScriptElement of this.newScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n get newScriptElements() {\n return this.currentElement.querySelectorAll(\"script\");\n }\n}\nfunction readScrollLogicalPosition(value, defaultValue) {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value;\n }\n else {\n return defaultValue;\n }\n}\nfunction readScrollBehavior(value, defaultValue) {\n if (value == \"auto\" || value == \"smooth\") {\n return value;\n }\n else {\n return defaultValue;\n }\n}\n\nclass ProgressBar {\n constructor() {\n this.hiding = false;\n this.value = 0;\n this.visible = false;\n this.trickle = () => {\n this.setValue(this.value + Math.random() / 100);\n };\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n this.installStylesheetElement();\n this.setValue(0);\n }\n static get defaultCSS() {\n return unindent `\n .turbo-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 2147483647;\n transition:\n width ${ProgressBar.animationDuration}ms ease-out,\n opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n transform: translate3d(0, 0, 0);\n }\n `;\n }\n show() {\n if (!this.visible) {\n this.visible = true;\n this.installProgressElement();\n this.startTrickling();\n }\n }\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true;\n this.fadeProgressElement(() => {\n this.uninstallProgressElement();\n this.stopTrickling();\n this.visible = false;\n this.hiding = false;\n });\n }\n }\n setValue(value) {\n this.value = value;\n this.refresh();\n }\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }\n installProgressElement() {\n this.progressElement.style.width = \"0\";\n this.progressElement.style.opacity = \"1\";\n document.documentElement.insertBefore(this.progressElement, document.body);\n this.refresh();\n }\n fadeProgressElement(callback) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n }\n }\n stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + this.value * 90}%`;\n });\n }\n createStylesheetElement() {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n element.textContent = ProgressBar.defaultCSS;\n if (this.cspNonce) {\n element.nonce = this.cspNonce;\n }\n return element;\n }\n createProgressElement() {\n const element = document.createElement(\"div\");\n element.className = \"turbo-progress-bar\";\n return element;\n }\n get cspNonce() {\n return getMetaContent(\"csp-nonce\");\n }\n}\nProgressBar.animationDuration = 300;\n\nclass HeadSnapshot extends Snapshot {\n constructor() {\n super(...arguments);\n this.detailsByOuterHTML = this.children\n .filter((element) => !elementIsNoscript(element))\n .map((element) => elementWithoutNonce(element))\n .reduce((result, element) => {\n const { outerHTML } = element;\n const details = outerHTML in result\n ? result[outerHTML]\n : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: [],\n };\n return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });\n }, {});\n }\n get trackedElementSignature() {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\");\n }\n getScriptElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n }\n getStylesheetElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\n }\n getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n .filter(({ type }) => type == matchedType)\n .map(({ elements: [element] }) => element);\n }\n get provisionalElements() {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n if (type == null && !tracked) {\n return [...result, ...elements];\n }\n else if (elements.length > 1) {\n return [...result, ...elements.slice(1)];\n }\n else {\n return result;\n }\n }, []);\n }\n getMetaValue(name) {\n const element = this.findMetaElementByName(name);\n return element ? element.getAttribute(\"content\") : null;\n }\n findMetaElementByName(name) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { elements: [element], } = this.detailsByOuterHTML[outerHTML];\n return elementIsMetaElementWithName(element, name) ? element : result;\n }, undefined);\n }\n}\nfunction elementType(element) {\n if (elementIsScript(element)) {\n return \"script\";\n }\n else if (elementIsStylesheet(element)) {\n return \"stylesheet\";\n }\n}\nfunction elementIsTracked(element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\nfunction elementIsScript(element) {\n const tagName = element.localName;\n return tagName == \"script\";\n}\nfunction elementIsNoscript(element) {\n const tagName = element.localName;\n return tagName == \"noscript\";\n}\nfunction elementIsStylesheet(element) {\n const tagName = element.localName;\n return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\");\n}\nfunction elementIsMetaElementWithName(element, name) {\n const tagName = element.localName;\n return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\nfunction elementWithoutNonce(element) {\n if (element.hasAttribute(\"nonce\")) {\n element.setAttribute(\"nonce\", \"\");\n }\n return element;\n}\n\nclass PageSnapshot extends Snapshot {\n constructor(element, headSnapshot) {\n super(element);\n this.headSnapshot = headSnapshot;\n }\n static fromHTMLString(html = \"\") {\n return this.fromDocument(parseHTMLDocument(html));\n }\n static fromElement(element) {\n return this.fromDocument(element.ownerDocument);\n }\n static fromDocument({ head, body }) {\n return new this(body, new HeadSnapshot(head));\n }\n clone() {\n const clonedElement = this.element.cloneNode(true);\n const selectElements = this.element.querySelectorAll(\"select\");\n const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n for (const [index, source] of selectElements.entries()) {\n const clone = clonedSelectElements[index];\n for (const option of clone.selectedOptions)\n option.selected = false;\n for (const option of source.selectedOptions)\n clone.options[option.index].selected = true;\n }\n for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n clonedPasswordInput.value = \"\";\n }\n return new PageSnapshot(clonedElement, this.headSnapshot);\n }\n get headElement() {\n return this.headSnapshot.element;\n }\n get rootLocation() {\n var _a;\n const root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n return expandURL(root);\n }\n get cacheControlValue() {\n return this.getSetting(\"cache-control\");\n }\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\";\n }\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\";\n }\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\";\n }\n getSetting(name) {\n return this.headSnapshot.getMetaValue(`turbo-${name}`);\n }\n}\n\nvar TimingMetric;\n(function (TimingMetric) {\n TimingMetric[\"visitStart\"] = \"visitStart\";\n TimingMetric[\"requestStart\"] = \"requestStart\";\n TimingMetric[\"requestEnd\"] = \"requestEnd\";\n TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\nvar VisitState;\n(function (VisitState) {\n VisitState[\"initialized\"] = \"initialized\";\n VisitState[\"started\"] = \"started\";\n VisitState[\"canceled\"] = \"canceled\";\n VisitState[\"failed\"] = \"failed\";\n VisitState[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\nconst defaultOptions = {\n action: \"advance\",\n historyChanged: false,\n visitCachedSnapshot: () => { },\n willRender: true,\n updateHistory: true,\n shouldCacheSnapshot: true,\n acceptsStreamResponse: false,\n};\nvar SystemStatusCode;\n(function (SystemStatusCode) {\n SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\nclass Visit {\n constructor(delegate, location, restorationIdentifier, options = {}) {\n this.identifier = uuid();\n this.timingMetrics = {};\n this.followedRedirect = false;\n this.historyChanged = false;\n this.scrolled = false;\n this.shouldCacheSnapshot = true;\n this.acceptsStreamResponse = false;\n this.snapshotCached = false;\n this.state = VisitState.initialized;\n this.delegate = delegate;\n this.location = location;\n this.restorationIdentifier = restorationIdentifier || uuid();\n const { action, historyChanged, referrer, snapshot, snapshotHTML, response, visitCachedSnapshot, willRender, updateHistory, shouldCacheSnapshot, acceptsStreamResponse, } = Object.assign(Object.assign({}, defaultOptions), options);\n this.action = action;\n this.historyChanged = historyChanged;\n this.referrer = referrer;\n this.snapshot = snapshot;\n this.snapshotHTML = snapshotHTML;\n this.response = response;\n this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n this.visitCachedSnapshot = visitCachedSnapshot;\n this.willRender = willRender;\n this.updateHistory = updateHistory;\n this.scrolled = !willRender;\n this.shouldCacheSnapshot = shouldCacheSnapshot;\n this.acceptsStreamResponse = acceptsStreamResponse;\n }\n get adapter() {\n return this.delegate.adapter;\n }\n get view() {\n return this.delegate.view;\n }\n get history() {\n return this.delegate.history;\n }\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n }\n get silent() {\n return this.isSamePage;\n }\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart);\n this.state = VisitState.started;\n this.adapter.visitStarted(this);\n this.delegate.visitStarted(this);\n }\n }\n cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel();\n }\n this.cancelRender();\n this.state = VisitState.canceled;\n }\n }\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.state = VisitState.completed;\n this.followRedirect();\n if (!this.followedRedirect) {\n this.adapter.visitCompleted(this);\n this.delegate.visitCompleted(this);\n }\n }\n }\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n }\n }\n changeHistory() {\n var _a;\n if (!this.historyChanged && this.updateHistory) {\n const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n const method = getHistoryMethodForAction(actionForHistory);\n this.history.update(method, this.location, this.restorationIdentifier);\n this.historyChanged = true;\n }\n }\n issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest();\n }\n else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location);\n this.request.perform();\n }\n }\n simulateRequest() {\n if (this.response) {\n this.startRequest();\n this.recordResponse();\n this.finishRequest();\n }\n }\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\n }\n recordResponse(response = this.response) {\n this.response = response;\n if (response) {\n const { statusCode } = response;\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this);\n }\n else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n }\n }\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n loadResponse() {\n if (this.response) {\n const { statusCode, responseHTML } = this.response;\n this.render(async () => {\n if (this.shouldCacheSnapshot)\n this.cacheSnapshot();\n if (this.view.renderPromise)\n await this.view.renderPromise;\n if (isSuccessful(statusCode) && responseHTML != null) {\n await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender, this);\n this.performScroll();\n this.adapter.visitRendered(this);\n this.complete();\n }\n else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n this.adapter.visitRendered(this);\n this.fail();\n }\n });\n }\n }\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot;\n }\n }\n }\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML);\n }\n }\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null;\n }\n loadCachedSnapshot() {\n const snapshot = this.getCachedSnapshot();\n if (snapshot) {\n const isPreview = this.shouldIssueRequest();\n this.render(async () => {\n this.cacheSnapshot();\n if (this.isSamePage) {\n this.adapter.visitRendered(this);\n }\n else {\n if (this.view.renderPromise)\n await this.view.renderPromise;\n await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n this.performScroll();\n this.adapter.visitRendered(this);\n if (!isPreview) {\n this.complete();\n }\n }\n });\n }\n }\n followRedirect() {\n var _a;\n if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.redirected)) {\n this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n action: \"replace\",\n response: this.response,\n });\n this.followedRedirect = true;\n }\n }\n goToSamePageAnchor() {\n if (this.isSamePage) {\n this.render(async () => {\n this.cacheSnapshot();\n this.performScroll();\n this.changeHistory();\n this.adapter.visitRendered(this);\n });\n }\n }\n prepareHeadersForRequest(headers, request) {\n if (this.acceptsStreamResponse) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n requestStarted() {\n this.startRequest();\n }\n requestPreventedHandlingResponse(_request, _response) { }\n async requestSucceededWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected,\n });\n }\n else {\n this.redirectedToLocation = response.redirected ? response.location : undefined;\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n async requestFailedWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected,\n });\n }\n else {\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n requestErrored(_request, _error) {\n this.recordResponse({\n statusCode: SystemStatusCode.networkFailure,\n redirected: false,\n });\n }\n requestFinished() {\n this.finishRequest();\n }\n performScroll() {\n if (!this.scrolled && !this.view.forceReloaded) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n }\n else {\n this.scrollToAnchor() || this.view.scrollToTop();\n }\n if (this.isSamePage) {\n this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n }\n this.scrolled = true;\n }\n }\n scrollToRestoredPosition() {\n const { scrollPosition } = this.restorationData;\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition);\n return true;\n }\n }\n scrollToAnchor() {\n const anchor = getAnchor(this.location);\n if (anchor != null) {\n this.view.scrollToAnchor(anchor);\n return true;\n }\n }\n recordTimingMetric(metric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n getTimingMetrics() {\n return Object.assign({}, this.timingMetrics);\n }\n getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState;\n case \"advance\":\n case \"restore\":\n return history.pushState;\n }\n }\n hasPreloadedResponse() {\n return typeof this.response == \"object\";\n }\n shouldIssueRequest() {\n if (this.isSamePage) {\n return false;\n }\n else if (this.action == \"restore\") {\n return !this.hasCachedSnapshot();\n }\n else {\n return this.willRender;\n }\n }\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n this.snapshotCached = true;\n }\n }\n async render(callback) {\n this.cancelRender();\n await new Promise((resolve) => {\n this.frame = requestAnimationFrame(() => resolve());\n });\n await callback();\n delete this.frame;\n }\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n}\nfunction isSuccessful(statusCode) {\n return statusCode >= 200 && statusCode < 300;\n}\n\nclass BrowserAdapter {\n constructor(session) {\n this.progressBar = new ProgressBar();\n this.showProgressBar = () => {\n this.progressBar.show();\n };\n this.session = session;\n }\n visitProposedToLocation(location, options) {\n this.navigator.startVisit(location, (options === null || options === void 0 ? void 0 : options.restorationIdentifier) || uuid(), options);\n }\n visitStarted(visit) {\n this.location = visit.location;\n visit.loadCachedSnapshot();\n visit.issueRequest();\n visit.goToSamePageAnchor();\n }\n visitRequestStarted(visit) {\n this.progressBar.setValue(0);\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showVisitProgressBarAfterDelay();\n }\n else {\n this.showProgressBar();\n }\n }\n visitRequestCompleted(visit) {\n visit.loadResponse();\n }\n visitRequestFailedWithStatusCode(visit, statusCode) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload({\n reason: \"request_failed\",\n context: {\n statusCode,\n },\n });\n default:\n return visit.loadResponse();\n }\n }\n visitRequestFinished(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n visitCompleted(_visit) { }\n pageInvalidated(reason) {\n this.reload(reason);\n }\n visitFailed(_visit) { }\n visitRendered(_visit) { }\n formSubmissionStarted(_formSubmission) {\n this.progressBar.setValue(0);\n this.showFormProgressBarAfterDelay();\n }\n formSubmissionFinished(_formSubmission) {\n this.progressBar.setValue(1);\n this.hideFormProgressBar();\n }\n showVisitProgressBarAfterDelay() {\n this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n hideVisitProgressBar() {\n this.progressBar.hide();\n if (this.visitProgressBarTimeout != null) {\n window.clearTimeout(this.visitProgressBarTimeout);\n delete this.visitProgressBarTimeout;\n }\n }\n showFormProgressBarAfterDelay() {\n if (this.formProgressBarTimeout == null) {\n this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n }\n hideFormProgressBar() {\n this.progressBar.hide();\n if (this.formProgressBarTimeout != null) {\n window.clearTimeout(this.formProgressBarTimeout);\n delete this.formProgressBarTimeout;\n }\n }\n reload(reason) {\n var _a;\n dispatch(\"turbo:reload\", { detail: reason });\n window.location.href = ((_a = this.location) === null || _a === void 0 ? void 0 : _a.toString()) || window.location.href;\n }\n get navigator() {\n return this.session.navigator;\n }\n}\n\nclass CacheObserver {\n constructor() {\n this.started = false;\n this.removeStaleElements = ((_event) => {\n const staleElements = [...document.querySelectorAll('[data-turbo-cache=\"false\"]')];\n for (const element of staleElements) {\n element.remove();\n }\n });\n }\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n }\n }\n}\n\nclass FrameRedirector {\n constructor(session, element) {\n this.session = session;\n this.element = element;\n this.linkInterceptor = new LinkInterceptor(this, element);\n this.formSubmitObserver = new FormSubmitObserver(this, element);\n }\n start() {\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n stop() {\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n shouldInterceptLinkClick(element, _location, _event) {\n return this.shouldRedirect(element);\n }\n linkClickIntercepted(element, url, event) {\n const frame = this.findFrameElement(element);\n if (frame) {\n frame.delegate.linkClickIntercepted(element, url, event);\n }\n }\n willSubmitForm(element, submitter) {\n return (element.closest(\"turbo-frame\") == null &&\n this.shouldSubmit(element, submitter) &&\n this.shouldRedirect(element, submitter));\n }\n formSubmitted(element, submitter) {\n const frame = this.findFrameElement(element, submitter);\n if (frame) {\n frame.delegate.formSubmitted(element, submitter);\n }\n }\n shouldSubmit(form, submitter) {\n var _a;\n const action = getAction(form, submitter);\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\");\n return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);\n }\n shouldRedirect(element, submitter) {\n const isNavigatable = element instanceof HTMLFormElement\n ? this.session.submissionIsNavigatable(element, submitter)\n : this.session.elementIsNavigatable(element);\n if (isNavigatable) {\n const frame = this.findFrameElement(element, submitter);\n return frame ? frame != element.closest(\"turbo-frame\") : false;\n }\n else {\n return false;\n }\n }\n findFrameElement(element, submitter) {\n const id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\");\n if (id && id != \"_top\") {\n const frame = this.element.querySelector(`#${id}:not([disabled])`);\n if (frame instanceof FrameElement) {\n return frame;\n }\n }\n }\n}\n\nclass History {\n constructor(delegate) {\n this.restorationIdentifier = uuid();\n this.restorationData = {};\n this.started = false;\n this.pageLoaded = false;\n this.onPopState = (event) => {\n if (this.shouldHandlePopState()) {\n const { turbo } = event.state || {};\n if (turbo) {\n this.location = new URL(window.location.href);\n const { restorationIdentifier } = turbo;\n this.restorationIdentifier = restorationIdentifier;\n this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);\n }\n }\n };\n this.onPageLoad = async (_event) => {\n await nextMicrotask();\n this.pageLoaded = true;\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false);\n addEventListener(\"load\", this.onPageLoad, false);\n this.started = true;\n this.replace(new URL(window.location.href));\n }\n }\n stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false);\n removeEventListener(\"load\", this.onPageLoad, false);\n this.started = false;\n }\n }\n push(location, restorationIdentifier) {\n this.update(history.pushState, location, restorationIdentifier);\n }\n replace(location, restorationIdentifier) {\n this.update(history.replaceState, location, restorationIdentifier);\n }\n update(method, location, restorationIdentifier = uuid()) {\n const state = { turbo: { restorationIdentifier } };\n method.call(history, state, \"\", location.href);\n this.location = location;\n this.restorationIdentifier = restorationIdentifier;\n }\n getRestorationDataForIdentifier(restorationIdentifier) {\n return this.restorationData[restorationIdentifier] || {};\n }\n updateRestorationData(additionalData) {\n const { restorationIdentifier } = this;\n const restorationData = this.restorationData[restorationIdentifier];\n this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n }\n assumeControlOfScrollRestoration() {\n var _a;\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n history.scrollRestoration = \"manual\";\n }\n }\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration;\n delete this.previousScrollRestoration;\n }\n }\n shouldHandlePopState() {\n return this.pageIsLoaded();\n }\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\";\n }\n}\n\nclass Navigator {\n constructor(delegate) {\n this.delegate = delegate;\n }\n proposeVisit(location, options = {}) {\n if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n if (locationIsVisitable(location, this.view.snapshot.rootLocation)) {\n this.delegate.visitProposedToLocation(location, options);\n }\n else {\n window.location.href = location.toString();\n }\n }\n }\n startVisit(locatable, restorationIdentifier, options = {}) {\n this.stop();\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({ referrer: this.location }, options));\n this.currentVisit.start();\n }\n submitForm(form, submitter) {\n this.stop();\n this.formSubmission = new FormSubmission(this, form, submitter, true);\n this.formSubmission.start();\n }\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop();\n delete this.formSubmission;\n }\n if (this.currentVisit) {\n this.currentVisit.cancel();\n delete this.currentVisit;\n }\n }\n get adapter() {\n return this.delegate.adapter;\n }\n get view() {\n return this.delegate.view;\n }\n get history() {\n return this.delegate.history;\n }\n formSubmissionStarted(formSubmission) {\n if (typeof this.adapter.formSubmissionStarted === \"function\") {\n this.adapter.formSubmissionStarted(formSubmission);\n }\n }\n async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n if (formSubmission == this.formSubmission) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const shouldCacheSnapshot = formSubmission.method == FetchMethod.get;\n if (!shouldCacheSnapshot) {\n this.view.clearSnapshotCache();\n }\n const { statusCode, redirected } = fetchResponse;\n const action = this.getActionForFormSubmission(formSubmission);\n const visitOptions = {\n action,\n shouldCacheSnapshot,\n response: { statusCode, responseHTML, redirected },\n };\n this.proposeVisit(fetchResponse.location, visitOptions);\n }\n }\n }\n async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n if (fetchResponse.serverError) {\n await this.view.renderError(snapshot, this.currentVisit);\n }\n else {\n await this.view.renderPage(snapshot, false, true, this.currentVisit);\n }\n this.view.scrollToTop();\n this.view.clearSnapshotCache();\n }\n }\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n formSubmissionFinished(formSubmission) {\n if (typeof this.adapter.formSubmissionFinished === \"function\") {\n this.adapter.formSubmissionFinished(formSubmission);\n }\n }\n visitStarted(visit) {\n this.delegate.visitStarted(visit);\n }\n visitCompleted(visit) {\n this.delegate.visitCompleted(visit);\n }\n locationWithActionIsSamePage(location, action) {\n const anchor = getAnchor(location);\n const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n return (action !== \"replace\" &&\n getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n (isRestorationToTop || (anchor != null && anchor !== currentAnchor)));\n }\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n }\n get location() {\n return this.history.location;\n }\n get restorationIdentifier() {\n return this.history.restorationIdentifier;\n }\n getActionForFormSubmission(formSubmission) {\n const { formElement, submitter } = formSubmission;\n const action = getAttribute(\"data-turbo-action\", submitter, formElement);\n return isAction(action) ? action : \"advance\";\n }\n}\n\nvar PageStage;\n(function (PageStage) {\n PageStage[PageStage[\"initial\"] = 0] = \"initial\";\n PageStage[PageStage[\"loading\"] = 1] = \"loading\";\n PageStage[PageStage[\"interactive\"] = 2] = \"interactive\";\n PageStage[PageStage[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\nclass PageObserver {\n constructor(delegate) {\n this.stage = PageStage.initial;\n this.started = false;\n this.interpretReadyState = () => {\n const { readyState } = this;\n if (readyState == \"interactive\") {\n this.pageIsInteractive();\n }\n else if (readyState == \"complete\") {\n this.pageIsComplete();\n }\n };\n this.pageWillUnload = () => {\n this.delegate.pageWillUnload();\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading;\n }\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n addEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n removeEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = false;\n }\n }\n pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive;\n this.delegate.pageBecameInteractive();\n }\n }\n pageIsComplete() {\n this.pageIsInteractive();\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete;\n this.delegate.pageLoaded();\n }\n }\n get readyState() {\n return document.readyState;\n }\n}\n\nclass ScrollObserver {\n constructor(delegate) {\n this.started = false;\n this.onScroll = () => {\n this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false);\n this.onScroll();\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false);\n this.started = false;\n }\n }\n updatePosition(position) {\n this.delegate.scrollPositionChanged(position);\n }\n}\n\nclass StreamMessageRenderer {\n render({ fragment }) {\n Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => document.documentElement.appendChild(fragment));\n }\n enteringBardo(currentPermanentElement, newPermanentElement) {\n newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n }\n leavingBardo() { }\n}\nfunction getPermanentElementMapForFragment(fragment) {\n const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n const permanentElementMap = {};\n for (const permanentElementInDocument of permanentElementsInDocument) {\n const { id } = permanentElementInDocument;\n for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n if (elementInStream) {\n permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n }\n }\n }\n return permanentElementMap;\n}\n\nclass StreamObserver {\n constructor(delegate) {\n this.sources = new Set();\n this.started = false;\n this.inspectFetchResponse = ((event) => {\n const response = fetchResponseFromEvent(event);\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault();\n this.receiveMessageResponse(response);\n }\n });\n this.receiveMessageEvent = (event) => {\n if (this.started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data);\n }\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n connectStreamSource(source) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source);\n source.addEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n disconnectStreamSource(source) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source);\n source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n streamSourceIsConnected(source) {\n return this.sources.has(source);\n }\n async receiveMessageResponse(response) {\n const html = await response.responseHTML;\n if (html) {\n this.receiveMessageHTML(html);\n }\n }\n receiveMessageHTML(html) {\n this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n }\n}\nfunction fetchResponseFromEvent(event) {\n var _a;\n const fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse;\n }\n}\nfunction fetchResponseIsStream(response) {\n var _a;\n const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n return contentType.startsWith(StreamMessage.contentType);\n}\n\nclass ErrorRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const { documentElement, body } = document;\n documentElement.replaceChild(newElement, body);\n }\n async render() {\n this.replaceHeadAndBody();\n this.activateScriptElements();\n }\n replaceHeadAndBody() {\n const { documentElement, head } = document;\n documentElement.replaceChild(this.newHead, head);\n this.renderElement(this.currentElement, this.newElement);\n }\n activateScriptElements() {\n for (const replaceableElement of this.scriptElements) {\n const parentNode = replaceableElement.parentNode;\n if (parentNode) {\n const element = activateScriptElement(replaceableElement);\n parentNode.replaceChild(element, replaceableElement);\n }\n }\n }\n get newHead() {\n return this.newSnapshot.headSnapshot.element;\n }\n get scriptElements() {\n return document.documentElement.querySelectorAll(\"script\");\n }\n}\n\nclass PageRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n if (document.body && newElement instanceof HTMLBodyElement) {\n document.body.replaceWith(newElement);\n }\n else {\n document.documentElement.appendChild(newElement);\n }\n }\n get shouldRender() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n }\n get reloadReason() {\n if (!this.newSnapshot.isVisitable) {\n return {\n reason: \"turbo_visit_control_is_reload\",\n };\n }\n if (!this.trackedElementsAreIdentical) {\n return {\n reason: \"tracked_element_mismatch\",\n };\n }\n }\n async prepareToRender() {\n await this.mergeHead();\n }\n async render() {\n if (this.willRender) {\n this.replaceBody();\n }\n }\n finishRendering() {\n super.finishRendering();\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement();\n }\n }\n get currentHeadSnapshot() {\n return this.currentSnapshot.headSnapshot;\n }\n get newHeadSnapshot() {\n return this.newSnapshot.headSnapshot;\n }\n get newElement() {\n return this.newSnapshot.element;\n }\n async mergeHead() {\n const newStylesheetElements = this.copyNewHeadStylesheetElements();\n this.copyNewHeadScriptElements();\n this.removeCurrentHeadProvisionalElements();\n this.copyNewHeadProvisionalElements();\n await newStylesheetElements;\n }\n replaceBody() {\n this.preservingPermanentElements(() => {\n this.activateNewBody();\n this.assignNewBody();\n });\n }\n get trackedElementsAreIdentical() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n }\n async copyNewHeadStylesheetElements() {\n const loadingElements = [];\n for (const element of this.newHeadStylesheetElements) {\n loadingElements.push(waitForLoad(element));\n document.head.appendChild(element);\n }\n await Promise.all(loadingElements);\n }\n copyNewHeadScriptElements() {\n for (const element of this.newHeadScriptElements) {\n document.head.appendChild(activateScriptElement(element));\n }\n }\n removeCurrentHeadProvisionalElements() {\n for (const element of this.currentHeadProvisionalElements) {\n document.head.removeChild(element);\n }\n }\n copyNewHeadProvisionalElements() {\n for (const element of this.newHeadProvisionalElements) {\n document.head.appendChild(element);\n }\n }\n activateNewBody() {\n document.adoptNode(this.newElement);\n this.activateNewBodyScriptElements();\n }\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.newBodyScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n assignNewBody() {\n this.renderElement(this.currentElement, this.newElement);\n }\n get newHeadStylesheetElements() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n }\n get newHeadScriptElements() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n }\n get currentHeadProvisionalElements() {\n return this.currentHeadSnapshot.provisionalElements;\n }\n get newHeadProvisionalElements() {\n return this.newHeadSnapshot.provisionalElements;\n }\n get newBodyScriptElements() {\n return this.newElement.querySelectorAll(\"script\");\n }\n}\n\nclass SnapshotCache {\n constructor(size) {\n this.keys = [];\n this.snapshots = {};\n this.size = size;\n }\n has(location) {\n return toCacheKey(location) in this.snapshots;\n }\n get(location) {\n if (this.has(location)) {\n const snapshot = this.read(location);\n this.touch(location);\n return snapshot;\n }\n }\n put(location, snapshot) {\n this.write(location, snapshot);\n this.touch(location);\n return snapshot;\n }\n clear() {\n this.snapshots = {};\n }\n read(location) {\n return this.snapshots[toCacheKey(location)];\n }\n write(location, snapshot) {\n this.snapshots[toCacheKey(location)] = snapshot;\n }\n touch(location) {\n const key = toCacheKey(location);\n const index = this.keys.indexOf(key);\n if (index > -1)\n this.keys.splice(index, 1);\n this.keys.unshift(key);\n this.trim();\n }\n trim() {\n for (const key of this.keys.splice(this.size)) {\n delete this.snapshots[key];\n }\n }\n}\n\nclass PageView extends View {\n constructor() {\n super(...arguments);\n this.snapshotCache = new SnapshotCache(10);\n this.lastRenderedLocation = new URL(location.href);\n this.forceReloaded = false;\n }\n renderPage(snapshot, isPreview = false, willRender = true, visit) {\n const renderer = new PageRenderer(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n if (!renderer.shouldRender) {\n this.forceReloaded = true;\n }\n else {\n visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n }\n return this.render(renderer);\n }\n renderError(snapshot, visit) {\n visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n return this.render(renderer);\n }\n clearSnapshotCache() {\n this.snapshotCache.clear();\n }\n async cacheSnapshot(snapshot = this.snapshot) {\n if (snapshot.isCacheable) {\n this.delegate.viewWillCacheSnapshot();\n const { lastRenderedLocation: location } = this;\n await nextEventLoopTick();\n const cachedSnapshot = snapshot.clone();\n this.snapshotCache.put(location, cachedSnapshot);\n return cachedSnapshot;\n }\n }\n getCachedSnapshotForLocation(location) {\n return this.snapshotCache.get(location);\n }\n get snapshot() {\n return PageSnapshot.fromElement(this.element);\n }\n}\n\nclass Preloader {\n constructor(delegate) {\n this.selector = \"a[data-turbo-preload]\";\n this.delegate = delegate;\n }\n get snapshotCache() {\n return this.delegate.navigator.view.snapshotCache;\n }\n start() {\n if (document.readyState === \"loading\") {\n return document.addEventListener(\"DOMContentLoaded\", () => {\n this.preloadOnLoadLinksForView(document.body);\n });\n }\n else {\n this.preloadOnLoadLinksForView(document.body);\n }\n }\n preloadOnLoadLinksForView(element) {\n for (const link of element.querySelectorAll(this.selector)) {\n this.preloadURL(link);\n }\n }\n async preloadURL(link) {\n const location = new URL(link.href);\n if (this.snapshotCache.has(location)) {\n return;\n }\n try {\n const response = await fetch(location.toString(), { headers: { \"VND.PREFETCH\": \"true\", Accept: \"text/html\" } });\n const responseText = await response.text();\n const snapshot = PageSnapshot.fromHTMLString(responseText);\n this.snapshotCache.put(location, snapshot);\n }\n catch (_) {\n }\n }\n}\n\nclass Session {\n constructor() {\n this.navigator = new Navigator(this);\n this.history = new History(this);\n this.preloader = new Preloader(this);\n this.view = new PageView(this, document.documentElement);\n this.adapter = new BrowserAdapter(this);\n this.pageObserver = new PageObserver(this);\n this.cacheObserver = new CacheObserver();\n this.linkClickObserver = new LinkClickObserver(this, window);\n this.formSubmitObserver = new FormSubmitObserver(this, document);\n this.scrollObserver = new ScrollObserver(this);\n this.streamObserver = new StreamObserver(this);\n this.formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement);\n this.frameRedirector = new FrameRedirector(this, document.documentElement);\n this.streamMessageRenderer = new StreamMessageRenderer();\n this.drive = true;\n this.enabled = true;\n this.progressBarDelay = 500;\n this.started = false;\n this.formMode = \"on\";\n }\n start() {\n if (!this.started) {\n this.pageObserver.start();\n this.cacheObserver.start();\n this.formLinkClickObserver.start();\n this.linkClickObserver.start();\n this.formSubmitObserver.start();\n this.scrollObserver.start();\n this.streamObserver.start();\n this.frameRedirector.start();\n this.history.start();\n this.preloader.start();\n this.started = true;\n this.enabled = true;\n }\n }\n disable() {\n this.enabled = false;\n }\n stop() {\n if (this.started) {\n this.pageObserver.stop();\n this.cacheObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkClickObserver.stop();\n this.formSubmitObserver.stop();\n this.scrollObserver.stop();\n this.streamObserver.stop();\n this.frameRedirector.stop();\n this.history.stop();\n this.started = false;\n }\n }\n registerAdapter(adapter) {\n this.adapter = adapter;\n }\n visit(location, options = {}) {\n const frameElement = options.frame ? document.getElementById(options.frame) : null;\n if (frameElement instanceof FrameElement) {\n frameElement.src = location.toString();\n frameElement.loaded;\n }\n else {\n this.navigator.proposeVisit(expandURL(location), options);\n }\n }\n connectStreamSource(source) {\n this.streamObserver.connectStreamSource(source);\n }\n disconnectStreamSource(source) {\n this.streamObserver.disconnectStreamSource(source);\n }\n renderStreamMessage(message) {\n this.streamMessageRenderer.render(StreamMessage.wrap(message));\n }\n clearCache() {\n this.view.clearSnapshotCache();\n }\n setProgressBarDelay(delay) {\n this.progressBarDelay = delay;\n }\n setFormMode(mode) {\n this.formMode = mode;\n }\n get location() {\n return this.history.location;\n }\n get restorationIdentifier() {\n return this.history.restorationIdentifier;\n }\n historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {\n if (this.enabled) {\n this.navigator.startVisit(location, restorationIdentifier, {\n action: \"restore\",\n historyChanged: true,\n });\n }\n else {\n this.adapter.pageInvalidated({\n reason: \"turbo_disabled\",\n });\n }\n }\n scrollPositionChanged(position) {\n this.history.updateRestorationData({ scrollPosition: position });\n }\n willSubmitFormLinkToLocation(link, location) {\n return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation);\n }\n submittedFormLinkToLocation() { }\n willFollowLinkToLocation(link, location, event) {\n return (this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation) &&\n this.applicationAllowsFollowingLinkToLocation(link, location, event));\n }\n followedLinkToLocation(link, location) {\n const action = this.getActionForLink(link);\n const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n this.visit(location.href, { action, acceptsStreamResponse });\n }\n allowsVisitingLocationWithAction(location, action) {\n return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location);\n }\n visitProposedToLocation(location, options) {\n extendURLWithDeprecatedProperties(location);\n this.adapter.visitProposedToLocation(location, options);\n }\n visitStarted(visit) {\n if (!visit.acceptsStreamResponse) {\n markAsBusy(document.documentElement);\n }\n extendURLWithDeprecatedProperties(visit.location);\n if (!visit.silent) {\n this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n }\n }\n visitCompleted(visit) {\n clearBusyState(document.documentElement);\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n }\n locationWithActionIsSamePage(location, action) {\n return this.navigator.locationWithActionIsSamePage(location, action);\n }\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n }\n willSubmitForm(form, submitter) {\n const action = getAction(form, submitter);\n return (this.submissionIsNavigatable(form, submitter) &&\n locationIsVisitable(expandURL(action), this.snapshot.rootLocation));\n }\n formSubmitted(form, submitter) {\n this.navigator.submitForm(form, submitter);\n }\n pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location;\n this.notifyApplicationAfterPageLoad();\n }\n pageLoaded() {\n this.history.assumeControlOfScrollRestoration();\n }\n pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration();\n }\n receivedMessageFromStream(message) {\n this.renderStreamMessage(message);\n }\n viewWillCacheSnapshot() {\n var _a;\n if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n this.notifyApplicationBeforeCachingSnapshot();\n }\n }\n allowsImmediateRender({ element }, options) {\n const event = this.notifyApplicationBeforeRender(element, options);\n const { defaultPrevented, detail: { render }, } = event;\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n return !defaultPrevented;\n }\n viewRenderedSnapshot(_snapshot, _isPreview) {\n this.view.lastRenderedLocation = this.history.location;\n this.notifyApplicationAfterRender();\n }\n preloadOnLoadLinksForView(element) {\n this.preloader.preloadOnLoadLinksForView(element);\n }\n viewInvalidated(reason) {\n this.adapter.pageInvalidated(reason);\n }\n frameLoaded(frame) {\n this.notifyApplicationAfterFrameLoad(frame);\n }\n frameRendered(fetchResponse, frame) {\n this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n }\n applicationAllowsFollowingLinkToLocation(link, location, ev) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n return !event.defaultPrevented;\n }\n applicationAllowsVisitingLocation(location) {\n const event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented;\n }\n notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n return dispatch(\"turbo:click\", {\n target: link,\n detail: { url: location.href, originalEvent: event },\n cancelable: true,\n });\n }\n notifyApplicationBeforeVisitingLocation(location) {\n return dispatch(\"turbo:before-visit\", {\n detail: { url: location.href },\n cancelable: true,\n });\n }\n notifyApplicationAfterVisitingLocation(location, action) {\n return dispatch(\"turbo:visit\", { detail: { url: location.href, action } });\n }\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\");\n }\n notifyApplicationBeforeRender(newBody, options) {\n return dispatch(\"turbo:before-render\", {\n detail: Object.assign({ newBody }, options),\n cancelable: true,\n });\n }\n notifyApplicationAfterRender() {\n return dispatch(\"turbo:render\");\n }\n notifyApplicationAfterPageLoad(timing = {}) {\n return dispatch(\"turbo:load\", {\n detail: { url: this.location.href, timing },\n });\n }\n notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n dispatchEvent(new HashChangeEvent(\"hashchange\", {\n oldURL: oldURL.toString(),\n newURL: newURL.toString(),\n }));\n }\n notifyApplicationAfterFrameLoad(frame) {\n return dispatch(\"turbo:frame-load\", { target: frame });\n }\n notifyApplicationAfterFrameRender(fetchResponse, frame) {\n return dispatch(\"turbo:frame-render\", {\n detail: { fetchResponse },\n target: frame,\n cancelable: true,\n });\n }\n submissionIsNavigatable(form, submitter) {\n if (this.formMode == \"off\") {\n return false;\n }\n else {\n const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n if (this.formMode == \"optin\") {\n return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null;\n }\n else {\n return submitterIsNavigatable && this.elementIsNavigatable(form);\n }\n }\n }\n elementIsNavigatable(element) {\n const container = element.closest(\"[data-turbo]\");\n const withinFrame = element.closest(\"turbo-frame\");\n if (this.drive || withinFrame) {\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\";\n }\n else {\n return true;\n }\n }\n else {\n if (container) {\n return container.getAttribute(\"data-turbo\") == \"true\";\n }\n else {\n return false;\n }\n }\n }\n getActionForLink(link) {\n const action = link.getAttribute(\"data-turbo-action\");\n return isAction(action) ? action : \"advance\";\n }\n get snapshot() {\n return this.view.snapshot;\n }\n}\nfunction extendURLWithDeprecatedProperties(url) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\nconst deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get() {\n return this.toString();\n },\n },\n};\n\nclass Cache {\n constructor(session) {\n this.session = session;\n }\n clear() {\n this.session.clearCache();\n }\n resetCacheControl() {\n this.setCacheControl(\"\");\n }\n exemptPageFromCache() {\n this.setCacheControl(\"no-cache\");\n }\n exemptPageFromPreview() {\n this.setCacheControl(\"no-preview\");\n }\n setCacheControl(value) {\n setMetaContent(\"turbo-cache-control\", value);\n }\n}\n\nconst StreamActions = {\n after() {\n this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e.nextSibling); });\n },\n append() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.append(this.templateContent));\n },\n before() {\n this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e); });\n },\n prepend() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.prepend(this.templateContent));\n },\n remove() {\n this.targetElements.forEach((e) => e.remove());\n },\n replace() {\n this.targetElements.forEach((e) => e.replaceWith(this.templateContent));\n },\n update() {\n this.targetElements.forEach((e) => e.replaceChildren(this.templateContent));\n },\n};\n\nconst session = new Session();\nconst cache = new Cache(session);\nconst { navigator: navigator$1 } = session;\nfunction start() {\n session.start();\n}\nfunction registerAdapter(adapter) {\n session.registerAdapter(adapter);\n}\nfunction visit(location, options) {\n session.visit(location, options);\n}\nfunction connectStreamSource(source) {\n session.connectStreamSource(source);\n}\nfunction disconnectStreamSource(source) {\n session.disconnectStreamSource(source);\n}\nfunction renderStreamMessage(message) {\n session.renderStreamMessage(message);\n}\nfunction clearCache() {\n console.warn(\"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\");\n session.clearCache();\n}\nfunction setProgressBarDelay(delay) {\n session.setProgressBarDelay(delay);\n}\nfunction setConfirmMethod(confirmMethod) {\n FormSubmission.confirmMethod = confirmMethod;\n}\nfunction setFormMode(mode) {\n session.setFormMode(mode);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n __proto__: null,\n navigator: navigator$1,\n session: session,\n cache: cache,\n PageRenderer: PageRenderer,\n PageSnapshot: PageSnapshot,\n FrameRenderer: FrameRenderer,\n start: start,\n registerAdapter: registerAdapter,\n visit: visit,\n connectStreamSource: connectStreamSource,\n disconnectStreamSource: disconnectStreamSource,\n renderStreamMessage: renderStreamMessage,\n clearCache: clearCache,\n setProgressBarDelay: setProgressBarDelay,\n setConfirmMethod: setConfirmMethod,\n setFormMode: setFormMode,\n StreamActions: StreamActions\n});\n\nclass FrameController {\n constructor(element) {\n this.fetchResponseLoaded = (_fetchResponse) => { };\n this.currentFetchRequest = null;\n this.resolveVisitPromise = () => { };\n this.connected = false;\n this.hasBeenLoaded = false;\n this.ignoredAttributes = new Set();\n this.action = null;\n this.visitCachedSnapshot = ({ element }) => {\n const frame = element.querySelector(\"#\" + this.element.id);\n if (frame && this.previousFrameElement) {\n frame.replaceChildren(...this.previousFrameElement.children);\n }\n delete this.previousFrameElement;\n };\n this.element = element;\n this.view = new FrameView(this, this.element);\n this.appearanceObserver = new AppearanceObserver(this, this.element);\n this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n this.linkInterceptor = new LinkInterceptor(this, this.element);\n this.restorationIdentifier = uuid();\n this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n }\n connect() {\n if (!this.connected) {\n this.connected = true;\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n }\n else {\n this.loadSourceURL();\n }\n this.formLinkClickObserver.start();\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n }\n disconnect() {\n if (this.connected) {\n this.connected = false;\n this.appearanceObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n }\n disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.loadSourceURL();\n }\n }\n sourceURLChanged() {\n if (this.isIgnoringChangesTo(\"src\"))\n return;\n if (this.element.isConnected) {\n this.complete = false;\n }\n if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n this.loadSourceURL();\n }\n }\n sourceURLReloaded() {\n const { src } = this.element;\n this.ignoringChangesToAttribute(\"complete\", () => {\n this.element.removeAttribute(\"complete\");\n });\n this.element.src = null;\n this.element.src = src;\n return this.element.loaded;\n }\n completeChanged() {\n if (this.isIgnoringChangesTo(\"complete\"))\n return;\n this.loadSourceURL();\n }\n loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n }\n else {\n this.appearanceObserver.stop();\n this.loadSourceURL();\n }\n }\n async loadSourceURL() {\n if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n this.element.loaded = this.visit(expandURL(this.sourceURL));\n this.appearanceObserver.stop();\n await this.element.loaded;\n this.hasBeenLoaded = true;\n }\n }\n async loadResponse(fetchResponse) {\n if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n this.sourceURL = fetchResponse.response.url;\n }\n try {\n const html = await fetchResponse.responseHTML;\n if (html) {\n const { body } = parseHTMLDocument(html);\n const newFrameElement = await this.extractForeignFrameElement(body);\n if (newFrameElement) {\n const snapshot = new Snapshot(newFrameElement);\n const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n if (this.view.renderPromise)\n await this.view.renderPromise;\n this.changeHistory();\n await this.view.render(renderer);\n this.complete = true;\n session.frameRendered(fetchResponse, this.element);\n session.frameLoaded(this.element);\n this.fetchResponseLoaded(fetchResponse);\n }\n else if (this.willHandleFrameMissingFromResponse(fetchResponse)) {\n console.warn(`A matching frame for #${this.element.id} was missing from the response, transforming into full-page Visit.`);\n this.visitResponse(fetchResponse.response);\n }\n }\n }\n catch (error) {\n console.error(error);\n this.view.invalidate();\n }\n finally {\n this.fetchResponseLoaded = () => { };\n }\n }\n elementAppearedInViewport(_element) {\n this.loadSourceURL();\n }\n willSubmitFormLinkToLocation(link) {\n return this.shouldInterceptNavigation(link);\n }\n submittedFormLinkToLocation(link, _location, form) {\n const frame = this.findFrameElement(link);\n if (frame)\n form.setAttribute(\"data-turbo-frame\", frame.id);\n }\n shouldInterceptLinkClick(element, _location, _event) {\n return this.shouldInterceptNavigation(element);\n }\n linkClickIntercepted(element, location) {\n this.navigateFrame(element, location);\n }\n willSubmitForm(element, submitter) {\n return element.closest(\"turbo-frame\") == this.element && this.shouldInterceptNavigation(element, submitter);\n }\n formSubmitted(element, submitter) {\n if (this.formSubmission) {\n this.formSubmission.stop();\n }\n this.formSubmission = new FormSubmission(this, element, submitter);\n const { fetchRequest } = this.formSubmission;\n this.prepareHeadersForRequest(fetchRequest.headers, fetchRequest);\n this.formSubmission.start();\n }\n prepareHeadersForRequest(headers, request) {\n var _a;\n headers[\"Turbo-Frame\"] = this.id;\n if ((_a = this.currentNavigationElement) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"data-turbo-stream\")) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n requestStarted(_request) {\n markAsBusy(this.element);\n }\n requestPreventedHandlingResponse(_request, _response) {\n this.resolveVisitPromise();\n }\n async requestSucceededWithResponse(request, response) {\n await this.loadResponse(response);\n this.resolveVisitPromise();\n }\n async requestFailedWithResponse(request, response) {\n console.error(response);\n await this.loadResponse(response);\n this.resolveVisitPromise();\n }\n requestErrored(request, error) {\n console.error(error);\n this.resolveVisitPromise();\n }\n requestFinished(_request) {\n clearBusyState(this.element);\n }\n formSubmissionStarted({ formElement }) {\n markAsBusy(formElement, this.findFrameElement(formElement));\n }\n formSubmissionSucceededWithResponse(formSubmission, response) {\n const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n frame.delegate.loadResponse(response);\n }\n formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n this.element.delegate.loadResponse(fetchResponse);\n }\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n formSubmissionFinished({ formElement }) {\n clearBusyState(formElement, this.findFrameElement(formElement));\n }\n allowsImmediateRender({ element: newFrame }, options) {\n const event = dispatch(\"turbo:before-frame-render\", {\n target: this.element,\n detail: Object.assign({ newFrame }, options),\n cancelable: true,\n });\n const { defaultPrevented, detail: { render }, } = event;\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n return !defaultPrevented;\n }\n viewRenderedSnapshot(_snapshot, _isPreview) { }\n preloadOnLoadLinksForView(element) {\n session.preloadOnLoadLinksForView(element);\n }\n viewInvalidated() { }\n willRenderFrame(currentElement, _newElement) {\n this.previousFrameElement = currentElement.cloneNode(true);\n }\n async visit(url) {\n var _a;\n const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();\n this.currentFetchRequest = request;\n return new Promise((resolve) => {\n this.resolveVisitPromise = () => {\n this.resolveVisitPromise = () => { };\n this.currentFetchRequest = null;\n resolve();\n };\n request.perform();\n });\n }\n navigateFrame(element, url, submitter) {\n const frame = this.findFrameElement(element, submitter);\n this.pageSnapshot = PageSnapshot.fromElement(frame).clone();\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n this.withCurrentNavigationElement(element, () => {\n frame.src = url;\n });\n }\n proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n this.action = getVisitAction(submitter, element, frame);\n if (isAction(this.action)) {\n const { visitCachedSnapshot } = frame.delegate;\n frame.delegate.fetchResponseLoaded = (fetchResponse) => {\n if (frame.src) {\n const { statusCode, redirected } = fetchResponse;\n const responseHTML = frame.ownerDocument.documentElement.outerHTML;\n const response = { statusCode, redirected, responseHTML };\n const options = {\n response,\n visitCachedSnapshot,\n willRender: false,\n updateHistory: false,\n restorationIdentifier: this.restorationIdentifier,\n snapshot: this.pageSnapshot,\n };\n if (this.action)\n options.action = this.action;\n session.visit(frame.src, options);\n }\n };\n }\n }\n changeHistory() {\n if (this.action) {\n const method = getHistoryMethodForAction(this.action);\n session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n }\n }\n willHandleFrameMissingFromResponse(fetchResponse) {\n this.element.setAttribute(\"complete\", \"\");\n const response = fetchResponse.response;\n const visit = async (url, options = {}) => {\n if (url instanceof Response) {\n this.visitResponse(url);\n }\n else {\n session.visit(url, options);\n }\n };\n const event = dispatch(\"turbo:frame-missing\", {\n target: this.element,\n detail: { response, visit },\n cancelable: true,\n });\n return !event.defaultPrevented;\n }\n async visitResponse(response) {\n const wrapped = new FetchResponse(response);\n const responseHTML = await wrapped.responseHTML;\n const { location, redirected, statusCode } = wrapped;\n return session.visit(location, { response: { redirected, statusCode, responseHTML } });\n }\n findFrameElement(element, submitter) {\n var _a;\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n }\n async extractForeignFrameElement(container) {\n let element;\n const id = CSS.escape(this.id);\n try {\n element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n if (element) {\n return element;\n }\n element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n if (element) {\n await element.loaded;\n return await this.extractForeignFrameElement(element);\n }\n }\n catch (error) {\n console.error(error);\n return new FrameElement();\n }\n return null;\n }\n formActionIsVisitable(form, submitter) {\n const action = getAction(form, submitter);\n return locationIsVisitable(expandURL(action), this.rootLocation);\n }\n shouldInterceptNavigation(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {\n return false;\n }\n if (!this.enabled || id == \"_top\") {\n return false;\n }\n if (id) {\n const frameElement = getFrameElementById(id);\n if (frameElement) {\n return !frameElement.disabled;\n }\n }\n if (!session.elementIsNavigatable(element)) {\n return false;\n }\n if (submitter && !session.elementIsNavigatable(submitter)) {\n return false;\n }\n return true;\n }\n get id() {\n return this.element.id;\n }\n get enabled() {\n return !this.element.disabled;\n }\n get sourceURL() {\n if (this.element.src) {\n return this.element.src;\n }\n }\n set sourceURL(sourceURL) {\n this.ignoringChangesToAttribute(\"src\", () => {\n this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n });\n }\n get loadingStyle() {\n return this.element.loading;\n }\n get isLoading() {\n return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n }\n get complete() {\n return this.element.hasAttribute(\"complete\");\n }\n set complete(value) {\n this.ignoringChangesToAttribute(\"complete\", () => {\n if (value) {\n this.element.setAttribute(\"complete\", \"\");\n }\n else {\n this.element.removeAttribute(\"complete\");\n }\n });\n }\n get isActive() {\n return this.element.isActive && this.connected;\n }\n get rootLocation() {\n var _a;\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\";\n return expandURL(root);\n }\n isIgnoringChangesTo(attributeName) {\n return this.ignoredAttributes.has(attributeName);\n }\n ignoringChangesToAttribute(attributeName, callback) {\n this.ignoredAttributes.add(attributeName);\n callback();\n this.ignoredAttributes.delete(attributeName);\n }\n withCurrentNavigationElement(element, callback) {\n this.currentNavigationElement = element;\n callback();\n delete this.currentNavigationElement;\n }\n}\nfunction getFrameElementById(id) {\n if (id != null) {\n const element = document.getElementById(id);\n if (element instanceof FrameElement) {\n return element;\n }\n }\n}\nfunction activateElement(element, currentURL) {\n if (element) {\n const src = element.getAttribute(\"src\");\n if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n throw new Error(`Matching element has a source URL which references itself`);\n }\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true);\n }\n if (element instanceof FrameElement) {\n element.connectedCallback();\n element.disconnectedCallback();\n return element;\n }\n }\n}\n\nclass StreamElement extends HTMLElement {\n static async renderElement(newElement) {\n await newElement.performAction();\n }\n async connectedCallback() {\n try {\n await this.render();\n }\n catch (error) {\n console.error(error);\n }\n finally {\n this.disconnect();\n }\n }\n async render() {\n var _a;\n return ((_a = this.renderPromise) !== null && _a !== void 0 ? _a : (this.renderPromise = (async () => {\n const event = this.beforeRenderEvent;\n if (this.dispatchEvent(event)) {\n await nextAnimationFrame();\n await event.detail.render(this);\n }\n })()));\n }\n disconnect() {\n try {\n this.remove();\n }\n catch (_a) { }\n }\n removeDuplicateTargetChildren() {\n this.duplicateChildren.forEach((c) => c.remove());\n }\n get duplicateChildren() {\n var _a;\n const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n const newChildrenIds = [...(((_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children) || [])].filter((c) => !!c.id).map((c) => c.id);\n return existingChildren.filter((c) => newChildrenIds.includes(c.id));\n }\n get performAction() {\n if (this.action) {\n const actionFunction = StreamActions[this.action];\n if (actionFunction) {\n return actionFunction;\n }\n this.raise(\"unknown action\");\n }\n this.raise(\"action attribute is missing\");\n }\n get targetElements() {\n if (this.target) {\n return this.targetElementsById;\n }\n else if (this.targets) {\n return this.targetElementsByQuery;\n }\n else {\n this.raise(\"target or targets attribute is missing\");\n }\n }\n get templateContent() {\n return this.templateElement.content.cloneNode(true);\n }\n get templateElement() {\n if (this.firstElementChild === null) {\n const template = this.ownerDocument.createElement(\"template\");\n this.appendChild(template);\n return template;\n }\n else if (this.firstElementChild instanceof HTMLTemplateElement) {\n return this.firstElementChild;\n }\n this.raise(\"first child element must be a