{"version":3,"file":"2751.000d1b6f.js","mappings":"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","sources":["webpack://@bang/www/./node_modules/@hotwired/stimulus/dist/stimulus.js","webpack://@bang/www/./node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js","webpack://@bang/www/./node_modules/@symfony/stimulus-bridge/dist/index.js","webpack://@bang/www/./node_modules/stimulus-use/dist/index.js"],"sourcesContent":["/*\nStimulus 3.2.1\nCopyright © 2023 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName,\n eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n constructor(element, index, descriptor, schema) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!hasProperty(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = [this.keyFilter];\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n this.invokeWithEvent(actionEvent);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n const { controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element, controller });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, { params: this.action.params });\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n this.method.call(this.controller, event);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n return false;\n }\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details) {\n this._selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n else {\n return false;\n }\n }\n matchElementsInTree(tree) {\n const { selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n else {\n return [];\n }\n }\n elementMatched(element) {\n const { selector } = this;\n if (selector) {\n this.selectorMatched(element, selector);\n }\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors) {\n this.selectorUnmatched(element, selector);\n }\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) {\n this.selectorMatched(element, selector);\n }\n else if (!matches && matchedBefore) {\n this.selectorUnmatched(element, selector);\n }\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName) => {\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context) => context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n this.attributeObserverMap.forEach((observer) => observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer) => observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) {\n return hasOutlet && hasOutletController && element.matches(selector);\n }\n else {\n return false;\n }\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) {\n observer.selector = this.selector(outletName);\n }\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) {\n this.scopeObserver.elementMatchedValue(scope.element, scope);\n }\n else {\n console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outletElement) => {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n return outletElement;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const { controller, token, typeObject } = payload;\n const hasType = isSomething(typeObject.type);\n const hasDefault = isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n if (onlyType)\n return typeFromObject;\n if (onlyDefault)\n return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n }\n if (fullObject)\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const { controller, token, typeDefinition } = payload;\n const typeObject = { controller, token, typeObject: typeDefinition };\n const typeFromObject = parseValueTypeObject(typeObject);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const hasDefault = hasProperty(typeDefinition, \"default\");\n const hasType = hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault)\n return typeObject.default;\n if (hasType) {\n const { type } = typeObject;\n const constantFromType = parseValueTypeConstant(type);\n if (constantFromType)\n return defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token, typeDefinition } = payload;\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value.replace(/_/g, \"\"));\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON,\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n","/*!\nTurbo 8.0.6\nCopyright © 2024 37signals LLC\n */\n/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Javan Makhmali\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function (prototype) {\n if (typeof prototype.requestSubmit == \"function\") return\n\n prototype.requestSubmit = function (submitter) {\n if (submitter) {\n validateSubmitter(submitter, this);\n submitter.click();\n } else {\n submitter = document.createElement(\"input\");\n submitter.type = \"submit\";\n submitter.hidden = true;\n this.appendChild(submitter);\n submitter.click();\n this.removeChild(submitter);\n }\n };\n\n function validateSubmitter(submitter, form) {\n submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n submitter.form == form ||\n raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n }\n\n function raise(errorConstructor, message, name) {\n throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n const candidate = element ? element.closest(\"input, button\") : null;\n return candidate?.type == \"submit\" ? candidate : null\n}\n\nfunction clickCaptured(event) {\n const submitter = findSubmitterFromClickTarget(event.target);\n\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter);\n }\n}\n\n(function () {\n if (\"submitter\" in Event.prototype) return\n\n let prototype = window.Event.prototype;\n // Certain versions of Safari 15 have a bug where they won't\n // populate the submitter. This hurts TurboDrive's enable/disable detection.\n // See https://bugs.webkit.org/show_bug.cgi?id=229660\n if (\"SubmitEvent\" in window) {\n const prototypeOfSubmitEvent = window.SubmitEvent.prototype;\n\n if (/Apple Computer/.test(navigator.vendor) && !(\"submitter\" in prototypeOfSubmitEvent)) {\n prototype = prototypeOfSubmitEvent;\n } else {\n return // polyfill not needed\n }\n }\n\n addEventListener(\"click\", clickCaptured, true);\n\n Object.defineProperty(prototype, \"submitter\", {\n get() {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target)\n }\n }\n });\n})();\n\nconst FrameLoadingStyle = {\n eager: \"eager\",\n lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n * \n * \n * Show all expanded messages in this frame.\n * \n *\n *
\n * Show response from this form within this frame.\n *
\n *
\n */\nclass FrameElement extends HTMLElement {\n static delegateConstructor = undefined\n\n loaded = Promise.resolve()\n\n static get observedAttributes() {\n return [\"disabled\", \"loading\", \"src\"]\n }\n\n constructor() {\n super();\n this.delegate = new FrameElement.delegateConstructor(this);\n }\n\n connectedCallback() {\n this.delegate.connect();\n }\n\n disconnectedCallback() {\n this.delegate.disconnect();\n }\n\n reload() {\n return this.delegate.sourceURLReloaded()\n }\n\n attributeChangedCallback(name) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged();\n } else if (name == \"src\") {\n this.delegate.sourceURLChanged();\n } else if (name == \"disabled\") {\n this.delegate.disabledChanged();\n }\n }\n\n /**\n * Gets the URL to lazily load source HTML from\n */\n get src() {\n return this.getAttribute(\"src\")\n }\n\n /**\n * Sets the URL to lazily load source HTML from\n */\n set src(value) {\n if (value) {\n this.setAttribute(\"src\", value);\n } else {\n this.removeAttribute(\"src\");\n }\n }\n\n /**\n * Gets the refresh mode for the frame.\n */\n get refresh() {\n return this.getAttribute(\"refresh\")\n }\n\n /**\n * Sets the refresh mode for the frame.\n */\n set refresh(value) {\n if (value) {\n this.setAttribute(\"refresh\", value);\n } else {\n this.removeAttribute(\"refresh\");\n }\n }\n\n get shouldReloadWithMorph() {\n return this.src && this.refresh === \"morph\"\n }\n\n /**\n * Determines if the element is loading\n */\n get loading() {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n }\n\n /**\n * Sets the value of if the element is loading\n */\n set loading(value) {\n if (value) {\n this.setAttribute(\"loading\", value);\n } else {\n this.removeAttribute(\"loading\");\n }\n }\n\n /**\n * Gets the disabled state of the frame.\n *\n * If disabled, no requests will be intercepted by the frame.\n */\n get disabled() {\n return this.hasAttribute(\"disabled\")\n }\n\n /**\n * Sets the disabled state of the frame.\n *\n * If disabled, no requests will be intercepted by the frame.\n */\n set disabled(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n }\n\n /**\n * Gets the autoscroll state of the frame.\n *\n * If true, the frame will be scrolled into view automatically on update.\n */\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\")\n }\n\n /**\n * Sets the autoscroll state of the frame.\n *\n * If true, the frame will be scrolled into view automatically on update.\n */\n set autoscroll(value) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\");\n } else {\n this.removeAttribute(\"autoscroll\");\n }\n }\n\n /**\n * Determines if the element has finished loading\n */\n get complete() {\n return !this.delegate.isLoading\n }\n\n /**\n * Gets the active state of the frame.\n *\n * If inactive, source changes will not be observed.\n */\n get isActive() {\n return this.ownerDocument === document && !this.isPreview\n }\n\n /**\n * Sets the active state of the frame.\n *\n * If inactive, source changes will not be observed.\n */\n get isPreview() {\n return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n }\n}\n\nfunction frameLoadingStyleFromString(style) {\n switch (style.toLowerCase()) {\n case \"lazy\":\n return FrameLoadingStyle.lazy\n default:\n return FrameLoadingStyle.eager\n }\n}\n\nconst drive = {\n enabled: true,\n progressBarDelay: 500,\n unvisitableExtensions: new Set(\n [\n \".7z\", \".aac\", \".apk\", \".avi\", \".bmp\", \".bz2\", \".css\", \".csv\", \".deb\", \".dmg\", \".doc\",\n \".docx\", \".exe\", \".gif\", \".gz\", \".heic\", \".heif\", \".ico\", \".iso\", \".jpeg\", \".jpg\",\n \".js\", \".json\", \".m4a\", \".mkv\", \".mov\", \".mp3\", \".mp4\", \".mpeg\", \".mpg\", \".msi\",\n \".ogg\", \".ogv\", \".pdf\", \".pkg\", \".png\", \".ppt\", \".pptx\", \".rar\", \".rtf\",\n \".svg\", \".tar\", \".tif\", \".tiff\", \".txt\", \".wav\", \".webm\", \".webp\", \".wma\", \".wmv\",\n \".xls\", \".xlsx\", \".xml\", \".zip\"\n ]\n )\n};\n\nfunction activateScriptElement(element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element\n } else {\n const createdScriptElement = document.createElement(\"script\");\n const cspNonce = getMetaContent(\"csp-nonce\");\n if (cspNonce) {\n createdScriptElement.nonce = cspNonce;\n }\n createdScriptElement.textContent = element.textContent;\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n return createdScriptElement\n }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n for (const { name, value } of sourceElement.attributes) {\n destinationElement.setAttribute(name, value);\n }\n}\n\nfunction createDocumentFragment(html) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n return template.content\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n const event = new CustomEvent(eventName, {\n cancelable,\n bubbles: true,\n composed: true,\n detail\n });\n\n if (target && target.isConnected) {\n target.dispatchEvent(event);\n } else {\n document.documentElement.dispatchEvent(event);\n }\n\n return event\n}\n\nfunction cancelEvent(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n\nfunction nextRepaint() {\n if (document.visibilityState === \"hidden\") {\n return nextEventLoopTick()\n } else {\n return nextAnimationFrame()\n }\n}\n\nfunction nextAnimationFrame() {\n return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction nextMicrotask() {\n return Promise.resolve()\n}\n\nfunction parseHTMLDocument(html = \"\") {\n return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nfunction unindent(strings, ...values) {\n const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n const match = lines[0].match(/^\\s+/);\n const indent = match ? match[0].length : 0;\n return lines.map((line) => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings, values) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i];\n return result + string + value\n }, \"\")\n}\n\nfunction uuid() {\n return Array.from({ length: 36 })\n .map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\"\n } else if (i == 14) {\n return \"4\"\n } else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16)\n } else {\n return Math.floor(Math.random() * 15).toString(16)\n }\n })\n .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n if (typeof value == \"string\") return value\n }\n\n return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n return elements.some((element) => element && element.hasAttribute(attributeName))\n}\n\nfunction markAsBusy(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.setAttribute(\"busy\", \"\");\n }\n element.setAttribute(\"aria-busy\", \"true\");\n }\n}\n\nfunction clearBusyState(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.removeAttribute(\"busy\");\n }\n\n element.removeAttribute(\"aria-busy\");\n }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n return new Promise((resolve) => {\n const onComplete = () => {\n element.removeEventListener(\"error\", onComplete);\n element.removeEventListener(\"load\", onComplete);\n resolve();\n };\n\n element.addEventListener(\"load\", onComplete, { once: true });\n element.addEventListener(\"error\", onComplete, { once: true });\n setTimeout(resolve, timeoutInMilliseconds);\n })\n}\n\nfunction getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState\n case \"advance\":\n case \"restore\":\n return history.pushState\n }\n}\n\nfunction isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n const action = getAttribute(\"data-turbo-action\", ...elements);\n\n return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n const element = getMetaElement(name);\n return element && element.content\n}\n\nfunction setMetaContent(name, content) {\n let element = getMetaElement(name);\n\n if (!element) {\n element = document.createElement(\"meta\");\n element.setAttribute(\"name\", name);\n\n document.head.appendChild(element);\n }\n\n element.setAttribute(\"content\", content);\n\n return element\n}\n\nfunction findClosestRecursively(element, selector) {\n if (element instanceof Element) {\n return (\n element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n )\n }\n}\n\nfunction elementIsFocusable(element) {\n const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n const before = reader();\n\n callback();\n\n await nextAnimationFrame();\n\n const after = reader();\n\n return [before, after]\n}\n\nfunction doesNotTargetIFrame(name) {\n if (name === \"_blank\") {\n return false\n } else if (name) {\n for (const element of document.getElementsByName(name)) {\n if (element instanceof HTMLIFrameElement) return false\n }\n\n return true\n } else {\n return true\n }\n}\n\nfunction findLinkFromClickTarget(target) {\n return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\")\n}\n\nfunction getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction debounce(fn, delay) {\n let timeoutId = null;\n\n return (...args) => {\n const callback = () => fn.apply(this, args);\n clearTimeout(timeoutId);\n timeoutId = setTimeout(callback, delay);\n }\n}\n\nconst submitter = {\n \"aria-disabled\": {\n beforeSubmit: submitter => {\n submitter.setAttribute(\"aria-disabled\", \"true\");\n submitter.addEventListener(\"click\", cancelEvent);\n },\n\n afterSubmit: submitter => {\n submitter.removeAttribute(\"aria-disabled\");\n submitter.removeEventListener(\"click\", cancelEvent);\n }\n },\n\n \"disabled\": {\n beforeSubmit: submitter => submitter.disabled = true,\n afterSubmit: submitter => submitter.disabled = false\n }\n};\n\nclass Config {\n #submitter = null\n\n constructor(config) {\n Object.assign(this, config);\n }\n\n get submitter() {\n return this.#submitter\n }\n\n set submitter(value) {\n this.#submitter = submitter[value] || value;\n }\n}\n\nconst forms = new Config({\n mode: \"on\",\n submitter: \"disabled\"\n});\n\nconst config = {\n drive,\n forms\n};\n\nfunction expandURL(locatable) {\n return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n let anchorMatch;\n if (url.hash) {\n return url.hash.slice(1)\n // eslint-disable-next-line no-cond-assign\n } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n return anchorMatch[1]\n }\n}\n\nfunction getAction$1(form, submitter) {\n const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n return expandURL(action)\n}\n\nfunction getExtension(url) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isPrefixedBy(baseURL, url) {\n const prefix = getPrefix(url);\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n return isPrefixedBy(location, rootLocation) && !config.drive.unvisitableExtensions.has(getExtension(location))\n}\n\nfunction getRequestURL(url) {\n const anchor = getAnchor(url);\n return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n return getPathComponents(url).slice(-1)[0]\n}\n\nfunction getPrefix(url) {\n return addTrailingSlash(url.origin + url.pathname)\n}\n\nfunction addTrailingSlash(value) {\n return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n constructor(response) {\n this.response = response;\n }\n\n get succeeded() {\n return this.response.ok\n }\n\n get failed() {\n return !this.succeeded\n }\n\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499\n }\n\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599\n }\n\n get redirected() {\n return this.response.redirected\n }\n\n get location() {\n return expandURL(this.response.url)\n }\n\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n }\n\n get statusCode() {\n return this.response.status\n }\n\n get contentType() {\n return this.header(\"Content-Type\")\n }\n\n get responseText() {\n return this.response.clone().text()\n }\n\n get responseHTML() {\n if (this.isHTML) {\n return this.response.clone().text()\n } else {\n return Promise.resolve(undefined)\n }\n }\n\n header(name) {\n return this.response.headers.get(name)\n }\n}\n\nclass LimitedSet extends Set {\n constructor(maxSize) {\n super();\n this.maxSize = maxSize;\n }\n\n add(value) {\n if (this.size >= this.maxSize) {\n const iterator = this.values();\n const oldestValue = iterator.next().value;\n this.delete(oldestValue);\n }\n super.add(value);\n }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nconst nativeFetch = window.fetch;\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n const modifiedHeaders = new Headers(options.headers || {});\n const requestUID = uuid();\n recentRequests.add(requestUID);\n modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n return nativeFetch(url, {\n ...options,\n headers: modifiedHeaders\n })\n}\n\nfunction fetchMethodFromString(method) {\n switch (method.toLowerCase()) {\n case \"get\":\n return FetchMethod.get\n case \"post\":\n return FetchMethod.post\n case \"put\":\n return FetchMethod.put\n case \"patch\":\n return FetchMethod.patch\n case \"delete\":\n return FetchMethod.delete\n }\n}\n\nconst FetchMethod = {\n get: \"get\",\n post: \"post\",\n put: \"put\",\n patch: \"patch\",\n delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n switch (encoding.toLowerCase()) {\n case FetchEnctype.multipart:\n return FetchEnctype.multipart\n case FetchEnctype.plain:\n return FetchEnctype.plain\n default:\n return FetchEnctype.urlEncoded\n }\n}\n\nconst FetchEnctype = {\n urlEncoded: \"application/x-www-form-urlencoded\",\n multipart: \"multipart/form-data\",\n plain: \"text/plain\"\n};\n\nclass FetchRequest {\n abortController = new AbortController()\n #resolveRequestPromise = (_value) => {}\n\n constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n this.delegate = delegate;\n this.url = url;\n this.target = target;\n this.fetchOptions = {\n credentials: \"same-origin\",\n redirect: \"follow\",\n method: method.toUpperCase(),\n headers: { ...this.defaultHeaders },\n body: body,\n signal: this.abortSignal,\n referrer: this.delegate.referrer?.href\n };\n this.enctype = enctype;\n }\n\n get method() {\n return this.fetchOptions.method\n }\n\n set method(value) {\n const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n this.url.search = \"\";\n\n const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n this.url = url;\n this.fetchOptions.body = body;\n this.fetchOptions.method = fetchMethod.toUpperCase();\n }\n\n get headers() {\n return this.fetchOptions.headers\n }\n\n set headers(value) {\n this.fetchOptions.headers = value;\n }\n\n get body() {\n if (this.isSafe) {\n return this.url.searchParams\n } else {\n return this.fetchOptions.body\n }\n }\n\n set body(value) {\n this.fetchOptions.body = value;\n }\n\n get location() {\n return this.url\n }\n\n get params() {\n return this.url.searchParams\n }\n\n get entries() {\n return this.body ? Array.from(this.body.entries()) : []\n }\n\n cancel() {\n this.abortController.abort();\n }\n\n async perform() {\n const { fetchOptions } = this;\n this.delegate.prepareRequest(this);\n const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n try {\n this.delegate.requestStarted(this);\n\n if (event.detail.fetchRequest) {\n this.response = event.detail.fetchRequest.response;\n } else {\n this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n }\n\n const response = await this.response;\n return await this.receive(response)\n } catch (error) {\n if (error.name !== \"AbortError\") {\n if (this.#willDelegateErrorHandling(error)) {\n this.delegate.requestErrored(this, error);\n }\n throw error\n }\n } finally {\n this.delegate.requestFinished(this);\n }\n }\n\n async receive(response) {\n const fetchResponse = new FetchResponse(response);\n const event = dispatch(\"turbo:before-fetch-response\", {\n cancelable: true,\n detail: { fetchResponse },\n target: this.target\n });\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n } else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse);\n } else {\n this.delegate.requestFailedWithResponse(this, fetchResponse);\n }\n return fetchResponse\n }\n\n get defaultHeaders() {\n return {\n Accept: \"text/html, application/xhtml+xml\"\n }\n }\n\n get isSafe() {\n return isSafe(this.method)\n }\n\n get abortSignal() {\n return this.abortController.signal\n }\n\n acceptResponseType(mimeType) {\n this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n }\n\n async #allowRequestToBeIntercepted(fetchOptions) {\n const requestInterception = new Promise((resolve) => (this.#resolveRequestPromise = resolve));\n const event = dispatch(\"turbo:before-fetch-request\", {\n cancelable: true,\n detail: {\n fetchOptions,\n url: this.url,\n resume: this.#resolveRequestPromise\n },\n target: this.target\n });\n this.url = event.detail.url;\n if (event.defaultPrevented) await requestInterception;\n\n return event\n }\n\n #willDelegateErrorHandling(error) {\n const event = dispatch(\"turbo:fetch-request-error\", {\n target: this.target,\n cancelable: true,\n detail: { request: this, error: error }\n });\n\n return !event.defaultPrevented\n }\n}\n\nfunction isSafe(fetchMethod) {\n return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n const searchParams =\n Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n if (isSafe(method)) {\n return [mergeIntoURLSearchParams(resource, searchParams), null]\n } else if (enctype == FetchEnctype.urlEncoded) {\n return [resource, searchParams]\n } else {\n return [resource, requestBody]\n }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n const entries = [];\n\n for (const [name, value] of requestBody) {\n if (value instanceof File) continue\n else entries.push([name, value]);\n }\n\n return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n url.search = searchParams.toString();\n\n return url\n}\n\nclass AppearanceObserver {\n started = false\n\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n this.intersectionObserver = new IntersectionObserver(this.intersect);\n }\n\n start() {\n if (!this.started) {\n this.started = true;\n this.intersectionObserver.observe(this.element);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n this.intersectionObserver.unobserve(this.element);\n }\n }\n\n intersect = (entries) => {\n const lastEntry = entries.slice(-1)[0];\n if (lastEntry?.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element);\n }\n }\n}\n\nclass StreamMessage {\n static contentType = \"text/vnd.turbo-stream.html\"\n\n static wrap(message) {\n if (typeof message == \"string\") {\n return new this(createDocumentFragment(message))\n } else {\n return message\n }\n }\n\n constructor(fragment) {\n this.fragment = importStreamElements(fragment);\n }\n}\n\nfunction importStreamElements(fragment) {\n for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n const streamElement = document.importNode(element, true);\n\n for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n }\n\n element.replaceWith(streamElement);\n }\n\n return fragment\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache {\n #prefetchTimeout = null\n #prefetched = null\n\n get(url) {\n if (this.#prefetched && this.#prefetched.url === url && this.#prefetched.expire > Date.now()) {\n return this.#prefetched.request\n }\n }\n\n setLater(url, request, ttl) {\n this.clear();\n\n this.#prefetchTimeout = setTimeout(() => {\n request.perform();\n this.set(url, request, ttl);\n this.#prefetchTimeout = null;\n }, PREFETCH_DELAY);\n }\n\n set(url, request, ttl) {\n this.#prefetched = { url, request, expire: new Date(new Date().getTime() + ttl) };\n }\n\n clear() {\n if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n this.#prefetched = null;\n }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n initialized: \"initialized\",\n requesting: \"requesting\",\n waiting: \"waiting\",\n receiving: \"receiving\",\n stopping: \"stopping\",\n stopped: \"stopped\"\n};\n\nclass FormSubmission {\n state = FormSubmissionState.initialized\n\n static confirmMethod(message) {\n return Promise.resolve(confirm(message))\n }\n\n constructor(delegate, formElement, submitter, mustRedirect = false) {\n const method = getMethod(formElement, submitter);\n const action = getAction(getFormAction(formElement, submitter), method);\n const body = buildFormData(formElement, submitter);\n const enctype = getEnctype(formElement, submitter);\n\n this.delegate = delegate;\n this.formElement = formElement;\n this.submitter = submitter;\n this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n this.mustRedirect = mustRedirect;\n }\n\n get method() {\n return this.fetchRequest.method\n }\n\n set method(value) {\n this.fetchRequest.method = value;\n }\n\n get action() {\n return this.fetchRequest.url.toString()\n }\n\n set action(value) {\n this.fetchRequest.url = expandURL(value);\n }\n\n get body() {\n return this.fetchRequest.body\n }\n\n get enctype() {\n return this.fetchRequest.enctype\n }\n\n get isSafe() {\n return this.fetchRequest.isSafe\n }\n\n get location() {\n return this.fetchRequest.url\n }\n\n // The submission process\n\n async start() {\n const { initialized, requesting } = FormSubmissionState;\n const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n if (typeof confirmationMessage === \"string\") {\n const confirmMethod = typeof config.forms.confirm === \"function\" ?\n config.forms.confirm :\n FormSubmission.confirmMethod;\n\n const answer = await confirmMethod(confirmationMessage, this.formElement, this.submitter);\n if (!answer) {\n return\n }\n }\n\n if (this.state == initialized) {\n this.state = requesting;\n return this.fetchRequest.perform()\n }\n }\n\n stop() {\n const { stopping, stopped } = FormSubmissionState;\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping;\n this.fetchRequest.cancel();\n return true\n }\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n if (!request.isSafe) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n if (token) {\n request.headers[\"X-CSRF-Token\"] = token;\n }\n }\n\n if (this.requestAcceptsTurboStreamResponse(request)) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted(_request) {\n this.state = FormSubmissionState.waiting;\n if (this.submitter) config.forms.submitter.beforeSubmit(this.submitter);\n this.setSubmitsWith();\n markAsBusy(this.formElement);\n dispatch(\"turbo:submit-start\", {\n target: this.formElement,\n detail: { formSubmission: this }\n });\n this.delegate.formSubmissionStarted(this);\n }\n\n requestPreventedHandlingResponse(request, response) {\n prefetchCache.clear();\n\n this.result = { success: response.succeeded, fetchResponse: response };\n }\n\n requestSucceededWithResponse(request, response) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response);\n return\n }\n\n prefetchCache.clear();\n\n if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n const error = new Error(\"Form responses must redirect to another location\");\n this.delegate.formSubmissionErrored(this, error);\n } else {\n this.state = FormSubmissionState.receiving;\n this.result = { success: true, fetchResponse: response };\n this.delegate.formSubmissionSucceededWithResponse(this, response);\n }\n }\n\n requestFailedWithResponse(request, response) {\n this.result = { success: false, fetchResponse: response };\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n\n requestErrored(request, error) {\n this.result = { success: false, error };\n this.delegate.formSubmissionErrored(this, error);\n }\n\n requestFinished(_request) {\n this.state = FormSubmissionState.stopped;\n if (this.submitter) config.forms.submitter.afterSubmit(this.submitter);\n this.resetSubmitterText();\n clearBusyState(this.formElement);\n dispatch(\"turbo:submit-end\", {\n target: this.formElement,\n detail: { formSubmission: this, ...this.result }\n });\n this.delegate.formSubmissionFinished(this);\n }\n\n // Private\n\n setSubmitsWith() {\n if (!this.submitter || !this.submitsWith) return\n\n if (this.submitter.matches(\"button\")) {\n this.originalSubmitText = this.submitter.innerHTML;\n this.submitter.innerHTML = this.submitsWith;\n } else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n this.originalSubmitText = input.value;\n input.value = this.submitsWith;\n }\n }\n\n resetSubmitterText() {\n if (!this.submitter || !this.originalSubmitText) return\n\n if (this.submitter.matches(\"button\")) {\n this.submitter.innerHTML = this.originalSubmitText;\n } else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n input.value = this.originalSubmitText;\n }\n }\n\n requestMustRedirect(request) {\n return !request.isSafe && this.mustRedirect\n }\n\n requestAcceptsTurboStreamResponse(request) {\n return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n }\n\n get submitsWith() {\n return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n }\n}\n\nfunction buildFormData(formElement, submitter) {\n const formData = new FormData(formElement);\n const name = submitter?.getAttribute(\"name\");\n const value = submitter?.getAttribute(\"value\");\n\n if (name) {\n formData.append(name, value || \"\");\n }\n\n return formData\n}\n\nfunction getCookieValue(cookieName) {\n if (cookieName != null) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\");\n return value ? decodeURIComponent(value) : undefined\n }\n }\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n if (submitter?.hasAttribute(\"formaction\")) {\n return submitter.getAttribute(\"formaction\") || \"\"\n } else {\n return formElement.getAttribute(\"action\") || formElementAction || \"\"\n }\n}\n\nfunction getAction(formAction, fetchMethod) {\n const action = expandURL(formAction);\n\n if (isSafe(fetchMethod)) {\n action.search = \"\";\n }\n\n return action\n}\n\nfunction getMethod(formElement, submitter) {\n const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n constructor(element) {\n this.element = element;\n }\n\n get activeElement() {\n return this.element.ownerDocument.activeElement\n }\n\n get children() {\n return [...this.element.children]\n }\n\n hasAnchor(anchor) {\n return this.getElementForAnchor(anchor) != null\n }\n\n getElementForAnchor(anchor) {\n return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n }\n\n get isConnected() {\n return this.element.isConnected\n }\n\n get firstAutofocusableElement() {\n return queryAutofocusableElement(this.element)\n }\n\n get permanentElements() {\n return queryPermanentElementsAll(this.element)\n }\n\n getPermanentElementById(id) {\n return getPermanentElementById(this.element, id)\n }\n\n getPermanentElementMapForSnapshot(snapshot) {\n const permanentElementMap = {};\n\n for (const currentPermanentElement of this.permanentElements) {\n const { id } = currentPermanentElement;\n const newPermanentElement = snapshot.getPermanentElementById(id);\n if (newPermanentElement) {\n permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n }\n }\n\n return permanentElementMap\n }\n}\n\nfunction getPermanentElementById(node, id) {\n return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n started = false\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n this.started = false;\n }\n }\n\n submitCaptured = () => {\n this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n }\n\n submitBubbled = (event) => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n const submitter = event.submitter || undefined;\n\n if (\n form &&\n submissionDoesNotDismissDialog(form, submitter) &&\n submissionDoesNotTargetIFrame(form, submitter) &&\n this.delegate.willSubmitForm(form, submitter)\n ) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.delegate.formSubmitted(form, submitter);\n }\n }\n }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n const target = submitter?.getAttribute(\"formtarget\") || form.getAttribute(\"target\");\n\n return doesNotTargetIFrame(target)\n}\n\nclass View {\n #resolveRenderPromise = (_value) => {}\n #resolveInterceptionPromise = (_value) => {}\n\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n }\n\n // Scrolling\n\n scrollToAnchor(anchor) {\n const element = this.snapshot.getElementForAnchor(anchor);\n if (element) {\n this.scrollToElement(element);\n this.focusElement(element);\n } else {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n }\n\n scrollToAnchorFromLocation(location) {\n this.scrollToAnchor(getAnchor(location));\n }\n\n scrollToElement(element) {\n element.scrollIntoView();\n }\n\n focusElement(element) {\n if (element instanceof HTMLElement) {\n if (element.hasAttribute(\"tabindex\")) {\n element.focus();\n } else {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n element.removeAttribute(\"tabindex\");\n }\n }\n }\n\n scrollToPosition({ x, y }) {\n this.scrollRoot.scrollTo(x, y);\n }\n\n scrollToTop() {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n\n get scrollRoot() {\n return window\n }\n\n // Rendering\n\n async render(renderer) {\n const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n // A workaround to ignore tracked element mismatch reloads when performing\n // a promoted Visit from a frame navigation\n const shouldInvalidate = willRender;\n\n if (shouldRender) {\n try {\n this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n this.renderer = renderer;\n await this.prepareToRenderSnapshot(renderer);\n\n const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n if (!immediateRender) await renderInterception;\n\n await this.renderSnapshot(renderer);\n this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n this.delegate.preloadOnLoadLinksForView(this.element);\n this.finishRenderingSnapshot(renderer);\n } finally {\n delete this.renderer;\n this.#resolveRenderPromise(undefined);\n delete this.renderPromise;\n }\n } else if (shouldInvalidate) {\n this.invalidate(renderer.reloadReason);\n }\n }\n\n invalidate(reason) {\n this.delegate.viewInvalidated(reason);\n }\n\n async prepareToRenderSnapshot(renderer) {\n this.markAsPreview(renderer.isPreview);\n await renderer.prepareToRender();\n }\n\n markAsPreview(isPreview) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\");\n } else {\n this.element.removeAttribute(\"data-turbo-preview\");\n }\n }\n\n markVisitDirection(direction) {\n this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n }\n\n unmarkVisitDirection() {\n this.element.removeAttribute(\"data-turbo-visit-direction\");\n }\n\n async renderSnapshot(renderer) {\n await renderer.render();\n }\n\n finishRenderingSnapshot(renderer) {\n renderer.finishRendering();\n }\n}\n\nclass FrameView extends View {\n missing() {\n this.element.innerHTML = `Content missing`;\n }\n\n get snapshot() {\n return new Snapshot(this.element)\n }\n}\n\nclass LinkInterceptor {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n }\n\n start() {\n this.element.addEventListener(\"click\", this.clickBubbled);\n document.addEventListener(\"turbo:click\", this.linkClicked);\n document.addEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled);\n document.removeEventListener(\"turbo:click\", this.linkClicked);\n document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n clickBubbled = (event) => {\n if (this.clickEventIsSignificant(event)) {\n this.clickEvent = event;\n } else {\n delete this.clickEvent;\n }\n }\n\n linkClicked = (event) => {\n if (this.clickEvent && this.clickEventIsSignificant(event)) {\n if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n this.clickEvent.preventDefault();\n event.preventDefault();\n this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n }\n }\n delete this.clickEvent;\n }\n\n willVisit = (_event) => {\n delete this.clickEvent;\n }\n\n clickEventIsSignificant(event) {\n const target = event.composed ? event.target?.parentElement : event.target;\n const element = findLinkFromClickTarget(target) || target;\n\n return element instanceof Element && element.closest(\"turbo-frame, html\") == this.element\n }\n}\n\nclass LinkClickObserver {\n started = false\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n\n clickCaptured = () => {\n this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n }\n\n clickBubbled = (event) => {\n if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n const target = (event.composedPath && event.composedPath()[0]) || event.target;\n const link = findLinkFromClickTarget(target);\n if (link && doesNotTargetIFrame(link.target)) {\n const location = getLocationForLink(link);\n if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n event.preventDefault();\n this.delegate.followedLinkToLocation(link, location);\n }\n }\n }\n }\n\n clickEventIsSignificant(event) {\n return !(\n (event.target && event.target.isContentEditable) ||\n event.defaultPrevented ||\n event.which > 1 ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey\n )\n }\n}\n\nclass FormLinkClickObserver {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.linkInterceptor = new LinkClickObserver(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n }\n\n // Link hover observer delegate\n\n canPrefetchRequestToLocation(link, location) {\n return false\n }\n\n prefetchAndCacheRequestToLocation(link, location) {\n return\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link, location, originalEvent) {\n return (\n this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n )\n }\n\n followedLinkToLocation(link, location) {\n const form = document.createElement(\"form\");\n\n const type = \"hidden\";\n for (const [name, value] of location.searchParams) {\n form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n }\n\n const action = Object.assign(location, { search: \"\" });\n form.setAttribute(\"data-turbo\", \"true\");\n form.setAttribute(\"action\", action.href);\n form.setAttribute(\"hidden\", \"\");\n\n const method = link.getAttribute(\"data-turbo-method\");\n if (method) form.setAttribute(\"method\", method);\n\n const turboFrame = link.getAttribute(\"data-turbo-frame\");\n if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n const turboAction = getVisitAction(link);\n if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n const turboStream = link.hasAttribute(\"data-turbo-stream\");\n if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n this.delegate.submittedFormLinkToLocation(link, location, form);\n\n document.body.appendChild(form);\n form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n requestAnimationFrame(() => form.requestSubmit());\n }\n}\n\nclass Bardo {\n static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n const bardo = new this(delegate, permanentElementMap);\n bardo.enter();\n await callback();\n bardo.leave();\n }\n\n constructor(delegate, permanentElementMap) {\n this.delegate = delegate;\n this.permanentElementMap = permanentElementMap;\n }\n\n enter() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n }\n }\n\n leave() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement] = this.permanentElementMap[id];\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n this.delegate.leavingBardo(currentPermanentElement);\n }\n }\n\n replaceNewPermanentElementWithPlaceholder(permanentElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement);\n permanentElement.replaceWith(placeholder);\n }\n\n replaceCurrentPermanentElementWithClone(permanentElement) {\n const clone = permanentElement.cloneNode(true);\n permanentElement.replaceWith(clone);\n }\n\n replacePlaceholderWithPermanentElement(permanentElement) {\n const placeholder = this.getPlaceholderById(permanentElement.id);\n placeholder?.replaceWith(permanentElement);\n }\n\n getPlaceholderById(id) {\n return this.placeholders.find((element) => element.content == id)\n }\n\n get placeholders() {\n return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n const element = document.createElement(\"meta\");\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n element.setAttribute(\"content\", permanentElement.id);\n return element\n}\n\nclass Renderer {\n #activeElement = null\n\n constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n this.currentSnapshot = currentSnapshot;\n this.newSnapshot = newSnapshot;\n this.isPreview = isPreview;\n this.willRender = willRender;\n this.renderElement = renderElement;\n this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n }\n\n get shouldRender() {\n return true\n }\n\n get shouldAutofocus() {\n return true\n }\n\n get reloadReason() {\n return\n }\n\n prepareToRender() {\n return\n }\n\n render() {\n // Abstract method\n }\n\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve();\n delete this.resolvingFunctions;\n }\n }\n\n async preservingPermanentElements(callback) {\n await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n }\n\n focusFirstAutofocusableElement() {\n if (this.shouldAutofocus) {\n const element = this.connectedSnapshot.firstAutofocusableElement;\n if (element) {\n element.focus();\n }\n }\n }\n\n // Bardo delegate\n\n enteringBardo(currentPermanentElement) {\n if (this.#activeElement) return\n\n if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n this.#activeElement = this.currentSnapshot.activeElement;\n }\n }\n\n leavingBardo(currentPermanentElement) {\n if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n this.#activeElement.focus();\n\n this.#activeElement = null;\n }\n }\n\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n }\n\n get currentElement() {\n return this.currentSnapshot.element\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n }\n\n get renderMethod() {\n return \"replace\"\n }\n}\n\nclass FrameRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const destinationRange = document.createRange();\n destinationRange.selectNodeContents(currentElement);\n destinationRange.deleteContents();\n\n const frameElement = newElement;\n const sourceRange = frameElement.ownerDocument?.createRange();\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement);\n currentElement.appendChild(sourceRange.extractContents());\n }\n }\n\n constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n this.delegate = delegate;\n }\n\n get shouldRender() {\n return true\n }\n\n async render() {\n await nextRepaint();\n this.preservingPermanentElements(() => {\n this.loadFrameElement();\n });\n this.scrollFrameIntoView();\n await nextRepaint();\n this.focusFirstAutofocusableElement();\n await nextRepaint();\n this.activateScriptElements();\n }\n\n loadFrameElement() {\n this.delegate.willRenderFrame(this.currentElement, this.newElement);\n this.renderElement(this.currentElement, this.newElement);\n }\n\n scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n const element = this.currentElement.firstElementChild;\n const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n if (element) {\n element.scrollIntoView({ block, behavior });\n return true\n }\n }\n return false\n }\n\n activateScriptElements() {\n for (const inertScriptElement of this.newScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n get newScriptElements() {\n return this.currentElement.querySelectorAll(\"script\")\n }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value\n } else {\n return defaultValue\n }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n if (value == \"auto\" || value == \"smooth\") {\n return value\n } else {\n return defaultValue\n }\n}\n\n// base IIFE to define idiomorph\nvar Idiomorph = (function () {\n\n //=============================================================================\n // AND NOW IT BEGINS...\n //=============================================================================\n let EMPTY_SET = new Set();\n\n // default configuration values, updatable by users now\n let defaults = {\n morphStyle: \"outerHTML\",\n callbacks : {\n beforeNodeAdded: noOp,\n afterNodeAdded: noOp,\n beforeNodeMorphed: noOp,\n afterNodeMorphed: noOp,\n beforeNodeRemoved: noOp,\n afterNodeRemoved: noOp,\n beforeAttributeUpdated: noOp,\n\n },\n head: {\n style: 'merge',\n shouldPreserve: function (elt) {\n return elt.getAttribute(\"im-preserve\") === \"true\";\n },\n shouldReAppend: function (elt) {\n return elt.getAttribute(\"im-re-append\") === \"true\";\n },\n shouldRemove: noOp,\n afterHeadMorphed: noOp,\n }\n };\n\n //=============================================================================\n // Core Morphing Algorithm - morph, morphNormalizedContent, morphOldNodeTo, morphChildren\n //=============================================================================\n function morph(oldNode, newContent, config = {}) {\n\n if (oldNode instanceof Document) {\n oldNode = oldNode.documentElement;\n }\n\n if (typeof newContent === 'string') {\n newContent = parseContent(newContent);\n }\n\n let normalizedContent = normalizeContent(newContent);\n\n let ctx = createMorphContext(oldNode, normalizedContent, config);\n\n return morphNormalizedContent(oldNode, normalizedContent, ctx);\n }\n\n function morphNormalizedContent(oldNode, normalizedNewContent, ctx) {\n if (ctx.head.block) {\n let oldHead = oldNode.querySelector('head');\n let newHead = normalizedNewContent.querySelector('head');\n if (oldHead && newHead) {\n let promises = handleHeadElement(newHead, oldHead, ctx);\n // when head promises resolve, call morph again, ignoring the head tag\n Promise.all(promises).then(function () {\n morphNormalizedContent(oldNode, normalizedNewContent, Object.assign(ctx, {\n head: {\n block: false,\n ignore: true\n }\n }));\n });\n return;\n }\n }\n\n if (ctx.morphStyle === \"innerHTML\") {\n\n // innerHTML, so we are only updating the children\n morphChildren(normalizedNewContent, oldNode, ctx);\n return oldNode.children;\n\n } else if (ctx.morphStyle === \"outerHTML\" || ctx.morphStyle == null) {\n // otherwise find the best element match in the new content, morph that, and merge its siblings\n // into either side of the best match\n let bestMatch = findBestNodeMatch(normalizedNewContent, oldNode, ctx);\n\n // stash the siblings that will need to be inserted on either side of the best match\n let previousSibling = bestMatch?.previousSibling;\n let nextSibling = bestMatch?.nextSibling;\n\n // morph it\n let morphedNode = morphOldNodeTo(oldNode, bestMatch, ctx);\n\n if (bestMatch) {\n // if there was a best match, merge the siblings in too and return the\n // whole bunch\n return insertSiblings(previousSibling, morphedNode, nextSibling);\n } else {\n // otherwise nothing was added to the DOM\n return []\n }\n } else {\n throw \"Do not understand how to morph style \" + ctx.morphStyle;\n }\n }\n\n\n /**\n * @param possibleActiveElement\n * @param ctx\n * @returns {boolean}\n */\n function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n return ctx.ignoreActiveValue && possibleActiveElement === document.activeElement && possibleActiveElement !== document.body;\n }\n\n /**\n * @param oldNode root node to merge content into\n * @param newContent new content to merge\n * @param ctx the merge context\n * @returns {Element} the element that ended up in the DOM\n */\n function morphOldNodeTo(oldNode, newContent, ctx) {\n if (ctx.ignoreActive && oldNode === document.activeElement) ; else if (newContent == null) {\n if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n\n oldNode.remove();\n ctx.callbacks.afterNodeRemoved(oldNode);\n return null;\n } else if (!isSoftMatch(oldNode, newContent)) {\n if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n if (ctx.callbacks.beforeNodeAdded(newContent) === false) return oldNode;\n\n oldNode.parentElement.replaceChild(newContent, oldNode);\n ctx.callbacks.afterNodeAdded(newContent);\n ctx.callbacks.afterNodeRemoved(oldNode);\n return newContent;\n } else {\n if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) return oldNode;\n\n if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (oldNode instanceof HTMLHeadElement && ctx.head.style !== \"morph\") {\n handleHeadElement(newContent, oldNode, ctx);\n } else {\n syncNodeFrom(newContent, oldNode, ctx);\n if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n morphChildren(newContent, oldNode, ctx);\n }\n }\n ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n return oldNode;\n }\n }\n\n /**\n * This is the core algorithm for matching up children. The idea is to use id sets to try to match up\n * nodes as faithfully as possible. We greedily match, which allows us to keep the algorithm fast, but\n * by using id sets, we are able to better match up with content deeper in the DOM.\n *\n * Basic algorithm is, for each node in the new content:\n *\n * - if we have reached the end of the old parent, append the new content\n * - if the new content has an id set match with the current insertion point, morph\n * - search for an id set match\n * - if id set match found, morph\n * - otherwise search for a \"soft\" match\n * - if a soft match is found, morph\n * - otherwise, prepend the new node before the current insertion point\n *\n * The two search algorithms terminate if competing node matches appear to outweigh what can be achieved\n * with the current node. See findIdSetMatch() and findSoftMatch() for details.\n *\n * @param {Element} newParent the parent element of the new content\n * @param {Element } oldParent the old content that we are merging the new content into\n * @param ctx the merge context\n */\n function morphChildren(newParent, oldParent, ctx) {\n\n let nextNewChild = newParent.firstChild;\n let insertionPoint = oldParent.firstChild;\n let newChild;\n\n // run through all the new content\n while (nextNewChild) {\n\n newChild = nextNewChild;\n nextNewChild = newChild.nextSibling;\n\n // if we are at the end of the exiting parent's children, just append\n if (insertionPoint == null) {\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n oldParent.appendChild(newChild);\n ctx.callbacks.afterNodeAdded(newChild);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // if the current node has an id set match then morph\n if (isIdSetMatch(newChild, insertionPoint, ctx)) {\n morphOldNodeTo(insertionPoint, newChild, ctx);\n insertionPoint = insertionPoint.nextSibling;\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // otherwise search forward in the existing old children for an id set match\n let idSetMatch = findIdSetMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n // if we found a potential match, remove the nodes until that point and morph\n if (idSetMatch) {\n insertionPoint = removeNodesBetween(insertionPoint, idSetMatch, ctx);\n morphOldNodeTo(idSetMatch, newChild, ctx);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // no id set match found, so scan forward for a soft match for the current node\n let softMatch = findSoftMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n // if we found a soft match for the current node, morph\n if (softMatch) {\n insertionPoint = removeNodesBetween(insertionPoint, softMatch, ctx);\n morphOldNodeTo(softMatch, newChild, ctx);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // abandon all hope of morphing, just insert the new child before the insertion point\n // and move on\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n oldParent.insertBefore(newChild, insertionPoint);\n ctx.callbacks.afterNodeAdded(newChild);\n removeIdsFromConsideration(ctx, newChild);\n }\n\n // remove any remaining old nodes that didn't match up with new content\n while (insertionPoint !== null) {\n\n let tempNode = insertionPoint;\n insertionPoint = insertionPoint.nextSibling;\n removeNode(tempNode, ctx);\n }\n }\n\n //=============================================================================\n // Attribute Syncing Code\n //=============================================================================\n\n /**\n * @param attr {String} the attribute to be mutated\n * @param to {Element} the element that is going to be updated\n * @param updateType {(\"update\"|\"remove\")}\n * @param ctx the merge context\n * @returns {boolean} true if the attribute should be ignored, false otherwise\n */\n function ignoreAttribute(attr, to, updateType, ctx) {\n if(attr === 'value' && ctx.ignoreActiveValue && to === document.activeElement){\n return true;\n }\n return ctx.callbacks.beforeAttributeUpdated(attr, to, updateType) === false;\n }\n\n /**\n * syncs a given node with another node, copying over all attributes and\n * inner element state from the 'from' node to the 'to' node\n *\n * @param {Element} from the element to copy attributes & state from\n * @param {Element} to the element to copy attributes & state to\n * @param ctx the merge context\n */\n function syncNodeFrom(from, to, ctx) {\n let type = from.nodeType;\n\n // if is an element type, sync the attributes from the\n // new node into the new node\n if (type === 1 /* element type */) {\n const fromAttributes = from.attributes;\n const toAttributes = to.attributes;\n for (const fromAttribute of fromAttributes) {\n if (ignoreAttribute(fromAttribute.name, to, 'update', ctx)) {\n continue;\n }\n if (to.getAttribute(fromAttribute.name) !== fromAttribute.value) {\n to.setAttribute(fromAttribute.name, fromAttribute.value);\n }\n }\n // iterate backwards to avoid skipping over items when a delete occurs\n for (let i = toAttributes.length - 1; 0 <= i; i--) {\n const toAttribute = toAttributes[i];\n if (ignoreAttribute(toAttribute.name, to, 'remove', ctx)) {\n continue;\n }\n if (!from.hasAttribute(toAttribute.name)) {\n to.removeAttribute(toAttribute.name);\n }\n }\n }\n\n // sync text nodes\n if (type === 8 /* comment */ || type === 3 /* text */) {\n if (to.nodeValue !== from.nodeValue) {\n to.nodeValue = from.nodeValue;\n }\n }\n\n if (!ignoreValueOfActiveElement(to, ctx)) {\n // sync input values\n syncInputValue(from, to, ctx);\n }\n }\n\n /**\n * @param from {Element} element to sync the value from\n * @param to {Element} element to sync the value to\n * @param attributeName {String} the attribute name\n * @param ctx the merge context\n */\n function syncBooleanAttribute(from, to, attributeName, ctx) {\n if (from[attributeName] !== to[attributeName]) {\n let ignoreUpdate = ignoreAttribute(attributeName, to, 'update', ctx);\n if (!ignoreUpdate) {\n to[attributeName] = from[attributeName];\n }\n if (from[attributeName]) {\n if (!ignoreUpdate) {\n to.setAttribute(attributeName, from[attributeName]);\n }\n } else {\n if (!ignoreAttribute(attributeName, to, 'remove', ctx)) {\n to.removeAttribute(attributeName);\n }\n }\n }\n }\n\n /**\n * NB: many bothans died to bring us information:\n *\n * https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n * https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n *\n * @param from {Element} the element to sync the input value from\n * @param to {Element} the element to sync the input value to\n * @param ctx the merge context\n */\n function syncInputValue(from, to, ctx) {\n if (from instanceof HTMLInputElement &&\n to instanceof HTMLInputElement &&\n from.type !== 'file') {\n\n let fromValue = from.value;\n let toValue = to.value;\n\n // sync boolean attributes\n syncBooleanAttribute(from, to, 'checked', ctx);\n syncBooleanAttribute(from, to, 'disabled', ctx);\n\n if (!from.hasAttribute('value')) {\n if (!ignoreAttribute('value', to, 'remove', ctx)) {\n to.value = '';\n to.removeAttribute('value');\n }\n } else if (fromValue !== toValue) {\n if (!ignoreAttribute('value', to, 'update', ctx)) {\n to.setAttribute('value', fromValue);\n to.value = fromValue;\n }\n }\n } else if (from instanceof HTMLOptionElement) {\n syncBooleanAttribute(from, to, 'selected', ctx);\n } else if (from instanceof HTMLTextAreaElement && to instanceof HTMLTextAreaElement) {\n let fromValue = from.value;\n let toValue = to.value;\n if (ignoreAttribute('value', to, 'update', ctx)) {\n return;\n }\n if (fromValue !== toValue) {\n to.value = fromValue;\n }\n if (to.firstChild && to.firstChild.nodeValue !== fromValue) {\n to.firstChild.nodeValue = fromValue;\n }\n }\n }\n\n //=============================================================================\n // the HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n //=============================================================================\n function handleHeadElement(newHeadTag, currentHead, ctx) {\n\n let added = [];\n let removed = [];\n let preserved = [];\n let nodesToAppend = [];\n\n let headMergeStyle = ctx.head.style;\n\n // put all new head elements into a Map, by their outerHTML\n let srcToNewHeadNodes = new Map();\n for (const newHeadChild of newHeadTag.children) {\n srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n }\n\n // for each elt in the current head\n for (const currentHeadElt of currentHead.children) {\n\n // If the current head element is in the map\n let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n if (inNewContent || isPreserved) {\n if (isReAppended) {\n // remove the current version and let the new version replace it and re-execute\n removed.push(currentHeadElt);\n } else {\n // this element already exists and should not be re-appended, so remove it from\n // the new content map, preserving it in the DOM\n srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n preserved.push(currentHeadElt);\n }\n } else {\n if (headMergeStyle === \"append\") {\n // we are appending and this existing element is not new content\n // so if and only if it is marked for re-append do we do anything\n if (isReAppended) {\n removed.push(currentHeadElt);\n nodesToAppend.push(currentHeadElt);\n }\n } else {\n // if this is a merge, we remove this content since it is not in the new head\n if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n removed.push(currentHeadElt);\n }\n }\n }\n }\n\n // Push the remaining new head elements in the Map into the\n // nodes to append to the head tag\n nodesToAppend.push(...srcToNewHeadNodes.values());\n\n let promises = [];\n for (const newNode of nodesToAppend) {\n let newElt = document.createRange().createContextualFragment(newNode.outerHTML).firstChild;\n if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n if (newElt.href || newElt.src) {\n let resolve = null;\n let promise = new Promise(function (_resolve) {\n resolve = _resolve;\n });\n newElt.addEventListener('load', function () {\n resolve();\n });\n promises.push(promise);\n }\n currentHead.appendChild(newElt);\n ctx.callbacks.afterNodeAdded(newElt);\n added.push(newElt);\n }\n }\n\n // remove all removed elements, after we have appended the new elements to avoid\n // additional network requests for things like style sheets\n for (const removedElement of removed) {\n if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n currentHead.removeChild(removedElement);\n ctx.callbacks.afterNodeRemoved(removedElement);\n }\n }\n\n ctx.head.afterHeadMorphed(currentHead, {added: added, kept: preserved, removed: removed});\n return promises;\n }\n\n function noOp() {\n }\n\n /*\n Deep merges the config object and the Idiomoroph.defaults object to\n produce a final configuration object\n */\n function mergeDefaults(config) {\n let finalConfig = {};\n // copy top level stuff into final config\n Object.assign(finalConfig, defaults);\n Object.assign(finalConfig, config);\n\n // copy callbacks into final config (do this to deep merge the callbacks)\n finalConfig.callbacks = {};\n Object.assign(finalConfig.callbacks, defaults.callbacks);\n Object.assign(finalConfig.callbacks, config.callbacks);\n\n // copy head config into final config (do this to deep merge the head)\n finalConfig.head = {};\n Object.assign(finalConfig.head, defaults.head);\n Object.assign(finalConfig.head, config.head);\n return finalConfig;\n }\n\n function createMorphContext(oldNode, newContent, config) {\n config = mergeDefaults(config);\n return {\n target: oldNode,\n newContent: newContent,\n config: config,\n morphStyle: config.morphStyle,\n ignoreActive: config.ignoreActive,\n ignoreActiveValue: config.ignoreActiveValue,\n idMap: createIdMap(oldNode, newContent),\n deadIds: new Set(),\n callbacks: config.callbacks,\n head: config.head\n }\n }\n\n function isIdSetMatch(node1, node2, ctx) {\n if (node1 == null || node2 == null) {\n return false;\n }\n if (node1.nodeType === node2.nodeType && node1.tagName === node2.tagName) {\n if (node1.id !== \"\" && node1.id === node2.id) {\n return true;\n } else {\n return getIdIntersectionCount(ctx, node1, node2) > 0;\n }\n }\n return false;\n }\n\n function isSoftMatch(node1, node2) {\n if (node1 == null || node2 == null) {\n return false;\n }\n return node1.nodeType === node2.nodeType && node1.tagName === node2.tagName\n }\n\n function removeNodesBetween(startInclusive, endExclusive, ctx) {\n while (startInclusive !== endExclusive) {\n let tempNode = startInclusive;\n startInclusive = startInclusive.nextSibling;\n removeNode(tempNode, ctx);\n }\n removeIdsFromConsideration(ctx, endExclusive);\n return endExclusive.nextSibling;\n }\n\n //=============================================================================\n // Scans forward from the insertionPoint in the old parent looking for a potential id match\n // for the newChild. We stop if we find a potential id match for the new child OR\n // if the number of potential id matches we are discarding is greater than the\n // potential id matches for the new child\n //=============================================================================\n function findIdSetMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n // max id matches we are willing to discard in our search\n let newChildPotentialIdCount = getIdIntersectionCount(ctx, newChild, oldParent);\n\n let potentialMatch = null;\n\n // only search forward if there is a possibility of an id match\n if (newChildPotentialIdCount > 0) {\n let potentialMatch = insertionPoint;\n // if there is a possibility of an id match, scan forward\n // keep track of the potential id match count we are discarding (the\n // newChildPotentialIdCount must be greater than this to make it likely\n // worth it)\n let otherMatchCount = 0;\n while (potentialMatch != null) {\n\n // If we have an id match, return the current potential match\n if (isIdSetMatch(newChild, potentialMatch, ctx)) {\n return potentialMatch;\n }\n\n // computer the other potential matches of this new content\n otherMatchCount += getIdIntersectionCount(ctx, potentialMatch, newContent);\n if (otherMatchCount > newChildPotentialIdCount) {\n // if we have more potential id matches in _other_ content, we\n // do not have a good candidate for an id match, so return null\n return null;\n }\n\n // advanced to the next old content child\n potentialMatch = potentialMatch.nextSibling;\n }\n }\n return potentialMatch;\n }\n\n //=============================================================================\n // Scans forward from the insertionPoint in the old parent looking for a potential soft match\n // for the newChild. We stop if we find a potential soft match for the new child OR\n // if we find a potential id match in the old parents children OR if we find two\n // potential soft matches for the next two pieces of new content\n //=============================================================================\n function findSoftMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n let potentialSoftMatch = insertionPoint;\n let nextSibling = newChild.nextSibling;\n let siblingSoftMatchCount = 0;\n\n while (potentialSoftMatch != null) {\n\n if (getIdIntersectionCount(ctx, potentialSoftMatch, newContent) > 0) {\n // the current potential soft match has a potential id set match with the remaining new\n // content so bail out of looking\n return null;\n }\n\n // if we have a soft match with the current node, return it\n if (isSoftMatch(newChild, potentialSoftMatch)) {\n return potentialSoftMatch;\n }\n\n if (isSoftMatch(nextSibling, potentialSoftMatch)) {\n // the next new node has a soft match with this node, so\n // increment the count of future soft matches\n siblingSoftMatchCount++;\n nextSibling = nextSibling.nextSibling;\n\n // If there are two future soft matches, bail to allow the siblings to soft match\n // so that we don't consume future soft matches for the sake of the current node\n if (siblingSoftMatchCount >= 2) {\n return null;\n }\n }\n\n // advanced to the next old content child\n potentialSoftMatch = potentialSoftMatch.nextSibling;\n }\n\n return potentialSoftMatch;\n }\n\n function parseContent(newContent) {\n let parser = new DOMParser();\n\n // remove svgs to avoid false-positive matches on head, etc.\n let contentWithSvgsRemoved = newContent.replace(/]*>|>)([\\s\\S]*?)<\\/svg>/gim, '');\n\n // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n if (contentWithSvgsRemoved.match(/<\\/html>/) || contentWithSvgsRemoved.match(/<\\/head>/) || contentWithSvgsRemoved.match(/<\\/body>/)) {\n let content = parser.parseFromString(newContent, \"text/html\");\n // if it is a full HTML document, return the document itself as the parent container\n if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n content.generatedByIdiomorph = true;\n return content;\n } else {\n // otherwise return the html element as the parent container\n let htmlElement = content.firstChild;\n if (htmlElement) {\n htmlElement.generatedByIdiomorph = true;\n return htmlElement;\n } else {\n return null;\n }\n }\n } else {\n // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n // deal with touchy tags like tr, tbody, etc.\n let responseDoc = parser.parseFromString(\"\", \"text/html\");\n let content = responseDoc.body.querySelector('template').content;\n content.generatedByIdiomorph = true;\n return content\n }\n }\n\n function normalizeContent(newContent) {\n if (newContent == null) {\n // noinspection UnnecessaryLocalVariableJS\n const dummyParent = document.createElement('div');\n return dummyParent;\n } else if (newContent.generatedByIdiomorph) {\n // the template tag created by idiomorph parsing can serve as a dummy parent\n return newContent;\n } else if (newContent instanceof Node) {\n // a single node is added as a child to a dummy parent\n const dummyParent = document.createElement('div');\n dummyParent.append(newContent);\n return dummyParent;\n } else {\n // all nodes in the array or HTMLElement collection are consolidated under\n // a single dummy parent element\n const dummyParent = document.createElement('div');\n for (const elt of [...newContent]) {\n dummyParent.append(elt);\n }\n return dummyParent;\n }\n }\n\n function insertSiblings(previousSibling, morphedNode, nextSibling) {\n let stack = [];\n let added = [];\n while (previousSibling != null) {\n stack.push(previousSibling);\n previousSibling = previousSibling.previousSibling;\n }\n while (stack.length > 0) {\n let node = stack.pop();\n added.push(node); // push added preceding siblings on in order and insert\n morphedNode.parentElement.insertBefore(node, morphedNode);\n }\n added.push(morphedNode);\n while (nextSibling != null) {\n stack.push(nextSibling);\n added.push(nextSibling); // here we are going in order, so push on as we scan, rather than add\n nextSibling = nextSibling.nextSibling;\n }\n while (stack.length > 0) {\n morphedNode.parentElement.insertBefore(stack.pop(), morphedNode.nextSibling);\n }\n return added;\n }\n\n function findBestNodeMatch(newContent, oldNode, ctx) {\n let currentElement;\n currentElement = newContent.firstChild;\n let bestElement = currentElement;\n let score = 0;\n while (currentElement) {\n let newScore = scoreElement(currentElement, oldNode, ctx);\n if (newScore > score) {\n bestElement = currentElement;\n score = newScore;\n }\n currentElement = currentElement.nextSibling;\n }\n return bestElement;\n }\n\n function scoreElement(node1, node2, ctx) {\n if (isSoftMatch(node1, node2)) {\n return .5 + getIdIntersectionCount(ctx, node1, node2);\n }\n return 0;\n }\n\n function removeNode(tempNode, ctx) {\n removeIdsFromConsideration(ctx, tempNode);\n if (ctx.callbacks.beforeNodeRemoved(tempNode) === false) return;\n\n tempNode.remove();\n ctx.callbacks.afterNodeRemoved(tempNode);\n }\n\n //=============================================================================\n // ID Set Functions\n //=============================================================================\n\n function isIdInConsideration(ctx, id) {\n return !ctx.deadIds.has(id);\n }\n\n function idIsWithinNode(ctx, id, targetNode) {\n let idSet = ctx.idMap.get(targetNode) || EMPTY_SET;\n return idSet.has(id);\n }\n\n function removeIdsFromConsideration(ctx, node) {\n let idSet = ctx.idMap.get(node) || EMPTY_SET;\n for (const id of idSet) {\n ctx.deadIds.add(id);\n }\n }\n\n function getIdIntersectionCount(ctx, node1, node2) {\n let sourceSet = ctx.idMap.get(node1) || EMPTY_SET;\n let matchCount = 0;\n for (const id of sourceSet) {\n // a potential match is an id in the source and potentialIdsSet, but\n // that has not already been merged into the DOM\n if (isIdInConsideration(ctx, id) && idIsWithinNode(ctx, id, node2)) {\n ++matchCount;\n }\n }\n return matchCount;\n }\n\n /**\n * A bottom up algorithm that finds all elements with ids inside of the node\n * argument and populates id sets for those nodes and all their parents, generating\n * a set of ids contained within all nodes for the entire hierarchy in the DOM\n *\n * @param node {Element}\n * @param {Map>} idMap\n */\n function populateIdMapForNode(node, idMap) {\n let nodeParent = node.parentElement;\n // find all elements with an id property\n let idElements = node.querySelectorAll('[id]');\n for (const elt of idElements) {\n let current = elt;\n // walk up the parent hierarchy of that element, adding the id\n // of element to the parent's id set\n while (current !== nodeParent && current != null) {\n let idSet = idMap.get(current);\n // if the id set doesn't exist, create it and insert it in the map\n if (idSet == null) {\n idSet = new Set();\n idMap.set(current, idSet);\n }\n idSet.add(elt.id);\n current = current.parentElement;\n }\n }\n }\n\n /**\n * This function computes a map of nodes to all ids contained within that node (inclusive of the\n * node). This map can be used to ask if two nodes have intersecting sets of ids, which allows\n * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n * to contribute to a parent nodes matching.\n *\n * @param {Element} oldContent the old content that will be morphed\n * @param {Element} newContent the new content to morph to\n * @returns {Map>} a map of nodes to id sets for the\n */\n function createIdMap(oldContent, newContent) {\n let idMap = new Map();\n populateIdMapForNode(oldContent, idMap);\n populateIdMapForNode(newContent, idMap);\n return idMap;\n }\n\n //=============================================================================\n // This is what ends up becoming the Idiomorph global object\n //=============================================================================\n return {\n morph,\n defaults\n }\n })();\n\nfunction morphElements(currentElement, newElement, { callbacks, ...options } = {}) {\n Idiomorph.morph(currentElement, newElement, {\n ...options,\n callbacks: new DefaultIdiomorphCallbacks(callbacks)\n });\n}\n\nfunction morphChildren(currentElement, newElement) {\n morphElements(currentElement, newElement.children, {\n morphStyle: \"innerHTML\"\n });\n}\n\nclass DefaultIdiomorphCallbacks {\n #beforeNodeMorphed\n\n constructor({ beforeNodeMorphed } = {}) {\n this.#beforeNodeMorphed = beforeNodeMorphed || (() => true);\n }\n\n beforeNodeAdded = (node) => {\n return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n }\n\n beforeNodeMorphed = (currentElement, newElement) => {\n if (currentElement instanceof Element) {\n if (!currentElement.hasAttribute(\"data-turbo-permanent\") && this.#beforeNodeMorphed(currentElement, newElement)) {\n const event = dispatch(\"turbo:before-morph-element\", {\n cancelable: true,\n target: currentElement,\n detail: { currentElement, newElement }\n });\n\n return !event.defaultPrevented\n } else {\n return false\n }\n }\n }\n\n beforeAttributeUpdated = (attributeName, target, mutationType) => {\n const event = dispatch(\"turbo:before-morph-attribute\", {\n cancelable: true,\n target,\n detail: { attributeName, mutationType }\n });\n\n return !event.defaultPrevented\n }\n\n beforeNodeRemoved = (node) => {\n return this.beforeNodeMorphed(node)\n }\n\n afterNodeMorphed = (currentElement, newElement) => {\n if (currentElement instanceof Element) {\n dispatch(\"turbo:morph-element\", {\n target: currentElement,\n detail: { currentElement, newElement }\n });\n }\n }\n}\n\nclass MorphingFrameRenderer extends FrameRenderer {\n static renderElement(currentElement, newElement) {\n dispatch(\"turbo:before-frame-morph\", {\n target: currentElement,\n detail: { currentElement, newElement }\n });\n\n morphChildren(currentElement, newElement);\n }\n}\n\nclass ProgressBar {\n static animationDuration = 300 /*ms*/\n\n static get defaultCSS() {\n return unindent`\n .turbo-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 2147483647;\n transition:\n width ${ProgressBar.animationDuration}ms ease-out,\n opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n transform: translate3d(0, 0, 0);\n }\n `\n }\n\n hiding = false\n value = 0\n visible = false\n\n constructor() {\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n this.installStylesheetElement();\n this.setValue(0);\n }\n\n show() {\n if (!this.visible) {\n this.visible = true;\n this.installProgressElement();\n this.startTrickling();\n }\n }\n\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true;\n this.fadeProgressElement(() => {\n this.uninstallProgressElement();\n this.stopTrickling();\n this.visible = false;\n this.hiding = false;\n });\n }\n }\n\n setValue(value) {\n this.value = value;\n this.refresh();\n }\n\n // Private\n\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }\n\n installProgressElement() {\n this.progressElement.style.width = \"0\";\n this.progressElement.style.opacity = \"1\";\n document.documentElement.insertBefore(this.progressElement, document.body);\n this.refresh();\n }\n\n fadeProgressElement(callback) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n }\n }\n\n stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n\n trickle = () => {\n this.setValue(this.value + Math.random() / 100);\n }\n\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + this.value * 90}%`;\n });\n }\n\n createStylesheetElement() {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n element.textContent = ProgressBar.defaultCSS;\n if (this.cspNonce) {\n element.nonce = this.cspNonce;\n }\n return element\n }\n\n createProgressElement() {\n const element = document.createElement(\"div\");\n element.className = \"turbo-progress-bar\";\n return element\n }\n\n get cspNonce() {\n return getMetaContent(\"csp-nonce\")\n }\n}\n\nclass HeadSnapshot extends Snapshot {\n detailsByOuterHTML = this.children\n .filter((element) => !elementIsNoscript(element))\n .map((element) => elementWithoutNonce(element))\n .reduce((result, element) => {\n const { outerHTML } = element;\n const details =\n outerHTML in result\n ? result[outerHTML]\n : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: []\n };\n return {\n ...result,\n [outerHTML]: {\n ...details,\n elements: [...details.elements, element]\n }\n }\n }, {})\n\n get trackedElementSignature() {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\")\n }\n\n getScriptElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n }\n\n getStylesheetElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n }\n\n getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n .filter(({ type }) => type == matchedType)\n .map(({ elements: [element] }) => element)\n }\n\n get provisionalElements() {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n if (type == null && !tracked) {\n return [...result, ...elements]\n } else if (elements.length > 1) {\n return [...result, ...elements.slice(1)]\n } else {\n return result\n }\n }, [])\n }\n\n getMetaValue(name) {\n const element = this.findMetaElementByName(name);\n return element ? element.getAttribute(\"content\") : null\n }\n\n findMetaElementByName(name) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const {\n elements: [element]\n } = this.detailsByOuterHTML[outerHTML];\n return elementIsMetaElementWithName(element, name) ? element : result\n }, undefined | undefined)\n }\n}\n\nfunction elementType(element) {\n if (elementIsScript(element)) {\n return \"script\"\n } else if (elementIsStylesheet(element)) {\n return \"stylesheet\"\n }\n}\n\nfunction elementIsTracked(element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n const tagName = element.localName;\n return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n const tagName = element.localName;\n return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n const tagName = element.localName;\n return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n const tagName = element.localName;\n return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n if (element.hasAttribute(\"nonce\")) {\n element.setAttribute(\"nonce\", \"\");\n }\n\n return element\n}\n\nclass PageSnapshot extends Snapshot {\n static fromHTMLString(html = \"\") {\n return this.fromDocument(parseHTMLDocument(html))\n }\n\n static fromElement(element) {\n return this.fromDocument(element.ownerDocument)\n }\n\n static fromDocument({ documentElement, body, head }) {\n return new this(documentElement, body, new HeadSnapshot(head))\n }\n\n constructor(documentElement, body, headSnapshot) {\n super(body);\n this.documentElement = documentElement;\n this.headSnapshot = headSnapshot;\n }\n\n clone() {\n const clonedElement = this.element.cloneNode(true);\n\n const selectElements = this.element.querySelectorAll(\"select\");\n const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n for (const [index, source] of selectElements.entries()) {\n const clone = clonedSelectElements[index];\n for (const option of clone.selectedOptions) option.selected = false;\n for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n }\n\n for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n clonedPasswordInput.value = \"\";\n }\n\n return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n }\n\n get lang() {\n return this.documentElement.getAttribute(\"lang\")\n }\n\n get headElement() {\n return this.headSnapshot.element\n }\n\n get rootLocation() {\n const root = this.getSetting(\"root\") ?? \"/\";\n return expandURL(root)\n }\n\n get cacheControlValue() {\n return this.getSetting(\"cache-control\")\n }\n\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\"\n }\n\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\"\n }\n\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\"\n }\n\n get prefersViewTransitions() {\n return this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\"\n }\n\n get shouldMorphPage() {\n return this.getSetting(\"refresh-method\") === \"morph\"\n }\n\n get shouldPreserveScrollPosition() {\n return this.getSetting(\"refresh-scroll\") === \"preserve\"\n }\n\n // Private\n\n getSetting(name) {\n return this.headSnapshot.getMetaValue(`turbo-${name}`)\n }\n}\n\nclass ViewTransitioner {\n #viewTransitionStarted = false\n #lastOperation = Promise.resolve()\n\n renderChange(useViewTransition, render) {\n if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n this.#viewTransitionStarted = true;\n this.#lastOperation = this.#lastOperation.then(async () => {\n await document.startViewTransition(render).finished;\n });\n } else {\n this.#lastOperation = this.#lastOperation.then(render);\n }\n\n return this.#lastOperation\n }\n\n get viewTransitionsAvailable() {\n return document.startViewTransition\n }\n}\n\nconst defaultOptions = {\n action: \"advance\",\n historyChanged: false,\n visitCachedSnapshot: () => {},\n willRender: true,\n updateHistory: true,\n shouldCacheSnapshot: true,\n acceptsStreamResponse: false\n};\n\nconst TimingMetric = {\n visitStart: \"visitStart\",\n requestStart: \"requestStart\",\n requestEnd: \"requestEnd\",\n visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n initialized: \"initialized\",\n started: \"started\",\n canceled: \"canceled\",\n failed: \"failed\",\n completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n networkFailure: 0,\n timeoutFailure: -1,\n contentTypeMismatch: -2\n};\n\nconst Direction = {\n advance: \"forward\",\n restore: \"back\",\n replace: \"none\"\n};\n\nclass Visit {\n identifier = uuid() // Required by turbo-ios\n timingMetrics = {}\n\n followedRedirect = false\n historyChanged = false\n scrolled = false\n shouldCacheSnapshot = true\n acceptsStreamResponse = false\n snapshotCached = false\n state = VisitState.initialized\n viewTransitioner = new ViewTransitioner()\n\n constructor(delegate, location, restorationIdentifier, options = {}) {\n this.delegate = delegate;\n this.location = location;\n this.restorationIdentifier = restorationIdentifier || uuid();\n\n const {\n action,\n historyChanged,\n referrer,\n snapshot,\n snapshotHTML,\n response,\n visitCachedSnapshot,\n willRender,\n updateHistory,\n shouldCacheSnapshot,\n acceptsStreamResponse,\n direction\n } = {\n ...defaultOptions,\n ...options\n };\n this.action = action;\n this.historyChanged = historyChanged;\n this.referrer = referrer;\n this.snapshot = snapshot;\n this.snapshotHTML = snapshotHTML;\n this.response = response;\n this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n this.isPageRefresh = this.view.isPageRefresh(this);\n this.visitCachedSnapshot = visitCachedSnapshot;\n this.willRender = willRender;\n this.updateHistory = updateHistory;\n this.scrolled = !willRender;\n this.shouldCacheSnapshot = shouldCacheSnapshot;\n this.acceptsStreamResponse = acceptsStreamResponse;\n this.direction = direction || Direction[action];\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get history() {\n return this.delegate.history\n }\n\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n }\n\n get silent() {\n return this.isSamePage\n }\n\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart);\n this.state = VisitState.started;\n this.adapter.visitStarted(this);\n this.delegate.visitStarted(this);\n }\n }\n\n cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel();\n }\n this.cancelRender();\n this.state = VisitState.canceled;\n }\n }\n\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.adapter.visitCompleted(this);\n this.state = VisitState.completed;\n this.followRedirect();\n\n if (!this.followedRedirect) {\n this.delegate.visitCompleted(this);\n }\n }\n }\n\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n this.delegate.visitCompleted(this);\n }\n }\n\n changeHistory() {\n if (!this.historyChanged && this.updateHistory) {\n const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n const method = getHistoryMethodForAction(actionForHistory);\n this.history.update(method, this.location, this.restorationIdentifier);\n this.historyChanged = true;\n }\n }\n\n issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest();\n } else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location);\n this.request.perform();\n }\n }\n\n simulateRequest() {\n if (this.response) {\n this.startRequest();\n this.recordResponse();\n this.finishRequest();\n }\n }\n\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\n }\n\n recordResponse(response = this.response) {\n this.response = response;\n if (response) {\n const { statusCode } = response;\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this);\n } else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n }\n }\n\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n\n loadResponse() {\n if (this.response) {\n const { statusCode, responseHTML } = this.response;\n this.render(async () => {\n if (this.shouldCacheSnapshot) this.cacheSnapshot();\n if (this.view.renderPromise) await this.view.renderPromise;\n\n if (isSuccessful(statusCode) && responseHTML != null) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n await this.renderPageSnapshot(snapshot, false);\n\n this.adapter.visitRendered(this);\n this.complete();\n } else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n this.adapter.visitRendered(this);\n this.fail();\n }\n });\n }\n }\n\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot\n }\n }\n }\n\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML)\n }\n }\n\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null\n }\n\n loadCachedSnapshot() {\n const snapshot = this.getCachedSnapshot();\n if (snapshot) {\n const isPreview = this.shouldIssueRequest();\n this.render(async () => {\n this.cacheSnapshot();\n if (this.isSamePage || this.isPageRefresh) {\n this.adapter.visitRendered(this);\n } else {\n if (this.view.renderPromise) await this.view.renderPromise;\n\n await this.renderPageSnapshot(snapshot, isPreview);\n\n this.adapter.visitRendered(this);\n if (!isPreview) {\n this.complete();\n }\n }\n });\n }\n }\n\n followRedirect() {\n if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n action: \"replace\",\n response: this.response,\n shouldCacheSnapshot: false,\n willRender: false\n });\n this.followedRedirect = true;\n }\n }\n\n goToSamePageAnchor() {\n if (this.isSamePage) {\n this.render(async () => {\n this.cacheSnapshot();\n this.performScroll();\n this.changeHistory();\n this.adapter.visitRendered(this);\n });\n }\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n if (this.acceptsStreamResponse) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted() {\n this.startRequest();\n }\n\n requestPreventedHandlingResponse(_request, _response) {}\n\n async requestSucceededWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.redirectedToLocation = response.redirected ? response.location : undefined;\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n\n async requestFailedWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n\n requestErrored(_request, _error) {\n this.recordResponse({\n statusCode: SystemStatusCode.networkFailure,\n redirected: false\n });\n }\n\n requestFinished() {\n this.finishRequest();\n }\n\n // Scrolling\n\n performScroll() {\n if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n } else {\n this.scrollToAnchor() || this.view.scrollToTop();\n }\n if (this.isSamePage) {\n this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n }\n\n this.scrolled = true;\n }\n }\n\n scrollToRestoredPosition() {\n const { scrollPosition } = this.restorationData;\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition);\n return true\n }\n }\n\n scrollToAnchor() {\n const anchor = getAnchor(this.location);\n if (anchor != null) {\n this.view.scrollToAnchor(anchor);\n return true\n }\n }\n\n // Instrumentation\n\n recordTimingMetric(metric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n\n getTimingMetrics() {\n return { ...this.timingMetrics }\n }\n\n // Private\n\n getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState\n case \"advance\":\n case \"restore\":\n return history.pushState\n }\n }\n\n hasPreloadedResponse() {\n return typeof this.response == \"object\"\n }\n\n shouldIssueRequest() {\n if (this.isSamePage) {\n return false\n } else if (this.action == \"restore\") {\n return !this.hasCachedSnapshot()\n } else {\n return this.willRender\n }\n }\n\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n this.snapshotCached = true;\n }\n }\n\n async render(callback) {\n this.cancelRender();\n await new Promise((resolve) => {\n this.frame =\n document.visibilityState === \"hidden\" ? setTimeout(() => resolve(), 0) : requestAnimationFrame(() => resolve());\n });\n await callback();\n delete this.frame;\n }\n\n async renderPageSnapshot(snapshot, isPreview) {\n await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n this.performScroll();\n });\n }\n\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n}\n\nfunction isSuccessful(statusCode) {\n return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n progressBar = new ProgressBar()\n\n constructor(session) {\n this.session = session;\n }\n\n visitProposedToLocation(location, options) {\n if (locationIsVisitable(location, this.navigator.rootLocation)) {\n this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n } else {\n window.location.href = location.toString();\n }\n }\n\n visitStarted(visit) {\n this.location = visit.location;\n visit.loadCachedSnapshot();\n visit.issueRequest();\n visit.goToSamePageAnchor();\n }\n\n visitRequestStarted(visit) {\n this.progressBar.setValue(0);\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showVisitProgressBarAfterDelay();\n } else {\n this.showProgressBar();\n }\n }\n\n visitRequestCompleted(visit) {\n visit.loadResponse();\n }\n\n visitRequestFailedWithStatusCode(visit, statusCode) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload({\n reason: \"request_failed\",\n context: {\n statusCode\n }\n })\n default:\n return visit.loadResponse()\n }\n }\n\n visitRequestFinished(_visit) {}\n\n visitCompleted(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n pageInvalidated(reason) {\n this.reload(reason);\n }\n\n visitFailed(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n visitRendered(_visit) {}\n\n // Form Submission Delegate\n\n formSubmissionStarted(_formSubmission) {\n this.progressBar.setValue(0);\n this.showFormProgressBarAfterDelay();\n }\n\n formSubmissionFinished(_formSubmission) {\n this.progressBar.setValue(1);\n this.hideFormProgressBar();\n }\n\n // Private\n\n showVisitProgressBarAfterDelay() {\n this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n\n hideVisitProgressBar() {\n this.progressBar.hide();\n if (this.visitProgressBarTimeout != null) {\n window.clearTimeout(this.visitProgressBarTimeout);\n delete this.visitProgressBarTimeout;\n }\n }\n\n showFormProgressBarAfterDelay() {\n if (this.formProgressBarTimeout == null) {\n this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n }\n\n hideFormProgressBar() {\n this.progressBar.hide();\n if (this.formProgressBarTimeout != null) {\n window.clearTimeout(this.formProgressBarTimeout);\n delete this.formProgressBarTimeout;\n }\n }\n\n showProgressBar = () => {\n this.progressBar.show();\n }\n\n reload(reason) {\n dispatch(\"turbo:reload\", { detail: reason });\n\n window.location.href = this.location?.toString() || window.location.href;\n }\n\n get navigator() {\n return this.session.navigator\n }\n}\n\nclass CacheObserver {\n selector = \"[data-turbo-temporary]\"\n deprecatedSelector = \"[data-turbo-cache=false]\"\n\n started = false\n\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n\n removeTemporaryElements = (_event) => {\n for (const element of this.temporaryElements) {\n element.remove();\n }\n }\n\n get temporaryElements() {\n return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation]\n }\n\n get temporaryElementsWithDeprecation() {\n const elements = document.querySelectorAll(this.deprecatedSelector);\n\n if (elements.length) {\n console.warn(\n `The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`\n );\n }\n\n return [...elements]\n }\n}\n\nclass FrameRedirector {\n constructor(session, element) {\n this.session = session;\n this.element = element;\n this.linkInterceptor = new LinkInterceptor(this, element);\n this.formSubmitObserver = new FormSubmitObserver(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element, _location, _event) {\n return this.#shouldRedirect(element)\n }\n\n linkClickIntercepted(element, url, event) {\n const frame = this.#findFrameElement(element);\n if (frame) {\n frame.delegate.linkClickIntercepted(element, url, event);\n }\n }\n\n // Form submit observer delegate\n\n willSubmitForm(element, submitter) {\n return (\n element.closest(\"turbo-frame\") == null &&\n this.#shouldSubmit(element, submitter) &&\n this.#shouldRedirect(element, submitter)\n )\n }\n\n formSubmitted(element, submitter) {\n const frame = this.#findFrameElement(element, submitter);\n if (frame) {\n frame.delegate.formSubmitted(element, submitter);\n }\n }\n\n #shouldSubmit(form, submitter) {\n const action = getAction$1(form, submitter);\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const rootLocation = expandURL(meta?.content ?? \"/\");\n\n return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n }\n\n #shouldRedirect(element, submitter) {\n const isNavigatable =\n element instanceof HTMLFormElement\n ? this.session.submissionIsNavigatable(element, submitter)\n : this.session.elementIsNavigatable(element);\n\n if (isNavigatable) {\n const frame = this.#findFrameElement(element, submitter);\n return frame ? frame != element.closest(\"turbo-frame\") : false\n } else {\n return false\n }\n }\n\n #findFrameElement(element, submitter) {\n const id = submitter?.getAttribute(\"data-turbo-frame\") || element.getAttribute(\"data-turbo-frame\");\n if (id && id != \"_top\") {\n const frame = this.element.querySelector(`#${id}:not([disabled])`);\n if (frame instanceof FrameElement) {\n return frame\n }\n }\n }\n}\n\nclass History {\n location\n restorationIdentifier = uuid()\n restorationData = {}\n started = false\n pageLoaded = false\n currentIndex = 0\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false);\n addEventListener(\"load\", this.onPageLoad, false);\n this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n this.started = true;\n this.replace(new URL(window.location.href));\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false);\n removeEventListener(\"load\", this.onPageLoad, false);\n this.started = false;\n }\n }\n\n push(location, restorationIdentifier) {\n this.update(history.pushState, location, restorationIdentifier);\n }\n\n replace(location, restorationIdentifier) {\n this.update(history.replaceState, location, restorationIdentifier);\n }\n\n update(method, location, restorationIdentifier = uuid()) {\n if (method === history.pushState) ++this.currentIndex;\n\n const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n method.call(history, state, \"\", location.href);\n this.location = location;\n this.restorationIdentifier = restorationIdentifier;\n }\n\n // Restoration data\n\n getRestorationDataForIdentifier(restorationIdentifier) {\n return this.restorationData[restorationIdentifier] || {}\n }\n\n updateRestorationData(additionalData) {\n const { restorationIdentifier } = this;\n const restorationData = this.restorationData[restorationIdentifier];\n this.restorationData[restorationIdentifier] = {\n ...restorationData,\n ...additionalData\n };\n }\n\n // Scroll restoration\n\n assumeControlOfScrollRestoration() {\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n history.scrollRestoration = \"manual\";\n }\n }\n\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration;\n delete this.previousScrollRestoration;\n }\n }\n\n // Event handlers\n\n onPopState = (event) => {\n if (this.shouldHandlePopState()) {\n const { turbo } = event.state || {};\n if (turbo) {\n this.location = new URL(window.location.href);\n const { restorationIdentifier, restorationIndex } = turbo;\n this.restorationIdentifier = restorationIdentifier;\n const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n this.currentIndex = restorationIndex;\n }\n }\n }\n\n onPageLoad = async (_event) => {\n await nextMicrotask();\n this.pageLoaded = true;\n }\n\n // Private\n\n shouldHandlePopState() {\n // Safari dispatches a popstate event after window's load event, ignore it\n return this.pageIsLoaded()\n }\n\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\"\n }\n}\n\nclass LinkPrefetchObserver {\n started = false\n #prefetchedLink = null\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (this.started) return\n\n if (this.eventTarget.readyState === \"loading\") {\n this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n } else {\n this.#enable();\n }\n }\n\n stop() {\n if (!this.started) return\n\n this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n capture: true,\n passive: true\n });\n this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n capture: true,\n passive: true\n });\n\n this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n this.started = false;\n }\n\n #enable = () => {\n this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n capture: true,\n passive: true\n });\n this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n capture: true,\n passive: true\n });\n\n this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n this.started = true;\n }\n\n #tryToPrefetchRequest = (event) => {\n if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n const target = event.target;\n const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n if (isLink && this.#isPrefetchable(target)) {\n const link = target;\n const location = getLocationForLink(link);\n\n if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n this.#prefetchedLink = link;\n\n const fetchRequest = new FetchRequest(\n this,\n FetchMethod.get,\n location,\n new URLSearchParams(),\n target\n );\n\n prefetchCache.setLater(location.toString(), fetchRequest, this.#cacheTtl);\n }\n }\n }\n\n #cancelRequestIfObsolete = (event) => {\n if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n }\n\n #cancelPrefetchRequest = () => {\n prefetchCache.clear();\n this.#prefetchedLink = null;\n }\n\n #tryToUsePrefetchedRequest = (event) => {\n if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"GET\") {\n const cached = prefetchCache.get(event.detail.url.toString());\n\n if (cached) {\n // User clicked link, use cache response\n event.detail.fetchRequest = cached;\n }\n\n prefetchCache.clear();\n }\n }\n\n prepareRequest(request) {\n const link = request.target;\n\n request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n const turboFrame = link.closest(\"turbo-frame\");\n const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n }\n }\n\n // Fetch request interface\n\n requestSucceededWithResponse() {}\n\n requestStarted(fetchRequest) {}\n\n requestErrored(fetchRequest) {}\n\n requestFinished(fetchRequest) {}\n\n requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n get #cacheTtl() {\n return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n }\n\n #isPrefetchable(link) {\n const href = link.getAttribute(\"href\");\n\n if (!href) return false\n\n if (unfetchableLink(link)) return false\n if (linkToTheSamePage(link)) return false\n if (linkOptsOut(link)) return false\n if (nonSafeLink(link)) return false\n if (eventPrevented(link)) return false\n\n return true\n }\n}\n\nconst unfetchableLink = (link) => {\n return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n return false\n};\n\nconst nonSafeLink = (link) => {\n const turboMethod = link.getAttribute(\"data-turbo-method\");\n if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n if (isUJS(link)) return true\n if (link.hasAttribute(\"data-turbo-confirm\")) return true\n if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n return false\n};\n\nconst isUJS = (link) => {\n return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n return event.defaultPrevented\n};\n\nclass Navigator {\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n proposeVisit(location, options = {}) {\n if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n this.delegate.visitProposedToLocation(location, options);\n }\n }\n\n startVisit(locatable, restorationIdentifier, options = {}) {\n this.stop();\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n referrer: this.location,\n ...options\n });\n this.currentVisit.start();\n }\n\n submitForm(form, submitter) {\n this.stop();\n this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n this.formSubmission.start();\n }\n\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop();\n delete this.formSubmission;\n }\n\n if (this.currentVisit) {\n this.currentVisit.cancel();\n delete this.currentVisit;\n }\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get rootLocation() {\n return this.view.snapshot.rootLocation\n }\n\n get history() {\n return this.delegate.history\n }\n\n // Form submission delegate\n\n formSubmissionStarted(formSubmission) {\n // Not all adapters implement formSubmissionStarted\n if (typeof this.adapter.formSubmissionStarted === \"function\") {\n this.adapter.formSubmissionStarted(formSubmission);\n }\n }\n\n async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n if (formSubmission == this.formSubmission) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const shouldCacheSnapshot = formSubmission.isSafe;\n if (!shouldCacheSnapshot) {\n this.view.clearSnapshotCache();\n }\n\n const { statusCode, redirected } = fetchResponse;\n const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n const visitOptions = {\n action,\n shouldCacheSnapshot,\n response: { statusCode, responseHTML, redirected }\n };\n this.proposeVisit(fetchResponse.location, visitOptions);\n }\n }\n }\n\n async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n const responseHTML = await fetchResponse.responseHTML;\n\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n if (fetchResponse.serverError) {\n await this.view.renderError(snapshot, this.currentVisit);\n } else {\n await this.view.renderPage(snapshot, false, true, this.currentVisit);\n }\n if(!snapshot.shouldPreserveScrollPosition) {\n this.view.scrollToTop();\n }\n this.view.clearSnapshotCache();\n }\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished(formSubmission) {\n // Not all adapters implement formSubmissionFinished\n if (typeof this.adapter.formSubmissionFinished === \"function\") {\n this.adapter.formSubmissionFinished(formSubmission);\n }\n }\n\n // Visit delegate\n\n visitStarted(visit) {\n this.delegate.visitStarted(visit);\n }\n\n visitCompleted(visit) {\n this.delegate.visitCompleted(visit);\n delete this.currentVisit;\n }\n\n locationWithActionIsSamePage(location, action) {\n const anchor = getAnchor(location);\n const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n\n return (\n action !== \"replace\" &&\n getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n (isRestorationToTop || (anchor != null && anchor !== currentAnchor))\n )\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n }\n\n // Visits\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n #getActionForFormSubmission(formSubmission, fetchResponse) {\n const { submitter, formElement } = formSubmission;\n return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n }\n\n #getDefaultAction(fetchResponse) {\n const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n return sameLocationRedirect ? \"replace\" : \"advance\"\n }\n}\n\nconst PageStage = {\n initial: 0,\n loading: 1,\n interactive: 2,\n complete: 3\n};\n\nclass PageObserver {\n stage = PageStage.initial\n started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading;\n }\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n addEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n removeEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = false;\n }\n }\n\n interpretReadyState = () => {\n const { readyState } = this;\n if (readyState == \"interactive\") {\n this.pageIsInteractive();\n } else if (readyState == \"complete\") {\n this.pageIsComplete();\n }\n }\n\n pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive;\n this.delegate.pageBecameInteractive();\n }\n }\n\n pageIsComplete() {\n this.pageIsInteractive();\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete;\n this.delegate.pageLoaded();\n }\n }\n\n pageWillUnload = () => {\n this.delegate.pageWillUnload();\n }\n\n get readyState() {\n return document.readyState\n }\n}\n\nclass ScrollObserver {\n started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false);\n this.onScroll();\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false);\n this.started = false;\n }\n }\n\n onScroll = () => {\n this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n }\n\n // Private\n\n updatePosition(position) {\n this.delegate.scrollPositionChanged(position);\n }\n}\n\nclass StreamMessageRenderer {\n render({ fragment }) {\n Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n withAutofocusFromFragment(fragment, () => {\n withPreservedFocus(() => {\n document.documentElement.appendChild(fragment);\n });\n });\n });\n }\n\n // Bardo delegate\n\n enteringBardo(currentPermanentElement, newPermanentElement) {\n newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n }\n\n leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n const permanentElementMap = {};\n for (const permanentElementInDocument of permanentElementsInDocument) {\n const { id } = permanentElementInDocument;\n\n for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n if (elementInStream) {\n permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n }\n }\n }\n\n return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n const generatedID = `turbo-stream-autofocus-${uuid()}`;\n const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n let willAutofocusId = null;\n\n if (elementWithAutofocus) {\n if (elementWithAutofocus.id) {\n willAutofocusId = elementWithAutofocus.id;\n } else {\n willAutofocusId = generatedID;\n }\n\n elementWithAutofocus.id = willAutofocusId;\n }\n\n callback();\n await nextRepaint();\n\n const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n if (hasNoActiveElement && willAutofocusId) {\n const elementToAutofocus = document.getElementById(willAutofocusId);\n\n if (elementIsFocusable(elementToAutofocus)) {\n elementToAutofocus.focus();\n }\n if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n elementToAutofocus.removeAttribute(\"id\");\n }\n }\n}\n\nasync function withPreservedFocus(callback) {\n const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n if (restoreFocusTo) {\n const elementToFocus = document.getElementById(restoreFocusTo);\n\n if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n elementToFocus.focus();\n }\n }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n for (const streamElement of nodeListOfStreamElements) {\n const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n if (elementWithAutofocus) return elementWithAutofocus\n }\n\n return null\n}\n\nclass StreamObserver {\n sources = new Set()\n #started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.#started) {\n this.#started = true;\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n stop() {\n if (this.#started) {\n this.#started = false;\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n connectStreamSource(source) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source);\n source.addEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n disconnectStreamSource(source) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source);\n source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n streamSourceIsConnected(source) {\n return this.sources.has(source)\n }\n\n inspectFetchResponse = (event) => {\n const response = fetchResponseFromEvent(event);\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault();\n this.receiveMessageResponse(response);\n }\n }\n\n receiveMessageEvent = (event) => {\n if (this.#started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data);\n }\n }\n\n async receiveMessageResponse(response) {\n const html = await response.responseHTML;\n if (html) {\n this.receiveMessageHTML(html);\n }\n }\n\n receiveMessageHTML(html) {\n this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n }\n}\n\nfunction fetchResponseFromEvent(event) {\n const fetchResponse = event.detail?.fetchResponse;\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse\n }\n}\n\nfunction fetchResponseIsStream(response) {\n const contentType = response.contentType ?? \"\";\n return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const { documentElement, body } = document;\n\n documentElement.replaceChild(newElement, body);\n }\n\n async render() {\n this.replaceHeadAndBody();\n this.activateScriptElements();\n }\n\n replaceHeadAndBody() {\n const { documentElement, head } = document;\n documentElement.replaceChild(this.newHead, head);\n this.renderElement(this.currentElement, this.newElement);\n }\n\n activateScriptElements() {\n for (const replaceableElement of this.scriptElements) {\n const parentNode = replaceableElement.parentNode;\n if (parentNode) {\n const element = activateScriptElement(replaceableElement);\n parentNode.replaceChild(element, replaceableElement);\n }\n }\n }\n\n get newHead() {\n return this.newSnapshot.headSnapshot.element\n }\n\n get scriptElements() {\n return document.documentElement.querySelectorAll(\"script\")\n }\n}\n\nclass PageRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n if (document.body && newElement instanceof HTMLBodyElement) {\n document.body.replaceWith(newElement);\n } else {\n document.documentElement.appendChild(newElement);\n }\n }\n\n get shouldRender() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n }\n\n get reloadReason() {\n if (!this.newSnapshot.isVisitable) {\n return {\n reason: \"turbo_visit_control_is_reload\"\n }\n }\n\n if (!this.trackedElementsAreIdentical) {\n return {\n reason: \"tracked_element_mismatch\"\n }\n }\n }\n\n async prepareToRender() {\n this.#setLanguage();\n await this.mergeHead();\n }\n\n async render() {\n if (this.willRender) {\n await this.replaceBody();\n }\n }\n\n finishRendering() {\n super.finishRendering();\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement();\n }\n }\n\n get currentHeadSnapshot() {\n return this.currentSnapshot.headSnapshot\n }\n\n get newHeadSnapshot() {\n return this.newSnapshot.headSnapshot\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n #setLanguage() {\n const { documentElement } = this.currentSnapshot;\n const { lang } = this.newSnapshot;\n\n if (lang) {\n documentElement.setAttribute(\"lang\", lang);\n } else {\n documentElement.removeAttribute(\"lang\");\n }\n }\n\n async mergeHead() {\n const mergedHeadElements = this.mergeProvisionalElements();\n const newStylesheetElements = this.copyNewHeadStylesheetElements();\n this.copyNewHeadScriptElements();\n\n await mergedHeadElements;\n await newStylesheetElements;\n\n if (this.willRender) {\n this.removeUnusedDynamicStylesheetElements();\n }\n }\n\n async replaceBody() {\n await this.preservingPermanentElements(async () => {\n this.activateNewBody();\n await this.assignNewBody();\n });\n }\n\n get trackedElementsAreIdentical() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n }\n\n async copyNewHeadStylesheetElements() {\n const loadingElements = [];\n\n for (const element of this.newHeadStylesheetElements) {\n loadingElements.push(waitForLoad(element));\n\n document.head.appendChild(element);\n }\n\n await Promise.all(loadingElements);\n }\n\n copyNewHeadScriptElements() {\n for (const element of this.newHeadScriptElements) {\n document.head.appendChild(activateScriptElement(element));\n }\n }\n\n removeUnusedDynamicStylesheetElements() {\n for (const element of this.unusedDynamicStylesheetElements) {\n document.head.removeChild(element);\n }\n }\n\n async mergeProvisionalElements() {\n const newHeadElements = [...this.newHeadProvisionalElements];\n\n for (const element of this.currentHeadProvisionalElements) {\n if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n document.head.removeChild(element);\n }\n }\n\n for (const element of newHeadElements) {\n document.head.appendChild(element);\n }\n }\n\n isCurrentElementInElementList(element, elementList) {\n for (const [index, newElement] of elementList.entries()) {\n // if title element...\n if (element.tagName == \"TITLE\") {\n if (newElement.tagName != \"TITLE\") {\n continue\n }\n if (element.innerHTML == newElement.innerHTML) {\n elementList.splice(index, 1);\n return true\n }\n }\n\n // if any other element...\n if (newElement.isEqualNode(element)) {\n elementList.splice(index, 1);\n return true\n }\n }\n\n return false\n }\n\n removeCurrentHeadProvisionalElements() {\n for (const element of this.currentHeadProvisionalElements) {\n document.head.removeChild(element);\n }\n }\n\n copyNewHeadProvisionalElements() {\n for (const element of this.newHeadProvisionalElements) {\n document.head.appendChild(element);\n }\n }\n\n activateNewBody() {\n document.adoptNode(this.newElement);\n this.activateNewBodyScriptElements();\n }\n\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.newBodyScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n async assignNewBody() {\n await this.renderElement(this.currentElement, this.newElement);\n }\n\n get unusedDynamicStylesheetElements() {\n return this.oldHeadStylesheetElements.filter((element) => {\n return element.getAttribute(\"data-turbo-track\") === \"dynamic\"\n })\n }\n\n get oldHeadStylesheetElements() {\n return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)\n }\n\n get newHeadStylesheetElements() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get newHeadScriptElements() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get currentHeadProvisionalElements() {\n return this.currentHeadSnapshot.provisionalElements\n }\n\n get newHeadProvisionalElements() {\n return this.newHeadSnapshot.provisionalElements\n }\n\n get newBodyScriptElements() {\n return this.newElement.querySelectorAll(\"script\")\n }\n}\n\nclass MorphingPageRenderer extends PageRenderer {\n static renderElement(currentElement, newElement) {\n morphElements(currentElement, newElement, {\n callbacks: {\n beforeNodeMorphed: element => !canRefreshFrame(element)\n }\n });\n\n for (const frame of currentElement.querySelectorAll(\"turbo-frame\")) {\n if (canRefreshFrame(frame)) frame.reload();\n }\n\n dispatch(\"turbo:morph\", { detail: { currentElement, newElement } });\n }\n\n async preservingPermanentElements(callback) {\n return await callback()\n }\n\n get renderMethod() {\n return \"morph\"\n }\n\n get shouldAutofocus() {\n return false\n }\n}\n\nfunction canRefreshFrame(frame) {\n return frame instanceof FrameElement &&\n frame.src &&\n frame.refresh === \"morph\" &&\n !frame.closest(\"[data-turbo-permanent]\")\n}\n\nclass SnapshotCache {\n keys = []\n snapshots = {}\n\n constructor(size) {\n this.size = size;\n }\n\n has(location) {\n return toCacheKey(location) in this.snapshots\n }\n\n get(location) {\n if (this.has(location)) {\n const snapshot = this.read(location);\n this.touch(location);\n return snapshot\n }\n }\n\n put(location, snapshot) {\n this.write(location, snapshot);\n this.touch(location);\n return snapshot\n }\n\n clear() {\n this.snapshots = {};\n }\n\n // Private\n\n read(location) {\n return this.snapshots[toCacheKey(location)]\n }\n\n write(location, snapshot) {\n this.snapshots[toCacheKey(location)] = snapshot;\n }\n\n touch(location) {\n const key = toCacheKey(location);\n const index = this.keys.indexOf(key);\n if (index > -1) this.keys.splice(index, 1);\n this.keys.unshift(key);\n this.trim();\n }\n\n trim() {\n for (const key of this.keys.splice(this.size)) {\n delete this.snapshots[key];\n }\n }\n}\n\nclass PageView extends View {\n snapshotCache = new SnapshotCache(10)\n lastRenderedLocation = new URL(location.href)\n forceReloaded = false\n\n shouldTransitionTo(newSnapshot) {\n return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n }\n\n renderPage(snapshot, isPreview = false, willRender = true, visit) {\n const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage;\n const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer;\n\n const renderer = new rendererClass(this.snapshot, snapshot, rendererClass.renderElement, isPreview, willRender);\n\n if (!renderer.shouldRender) {\n this.forceReloaded = true;\n } else {\n visit?.changeHistory();\n }\n\n return this.render(renderer)\n }\n\n renderError(snapshot, visit) {\n visit?.changeHistory();\n const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n return this.render(renderer)\n }\n\n clearSnapshotCache() {\n this.snapshotCache.clear();\n }\n\n async cacheSnapshot(snapshot = this.snapshot) {\n if (snapshot.isCacheable) {\n this.delegate.viewWillCacheSnapshot();\n const { lastRenderedLocation: location } = this;\n await nextEventLoopTick();\n const cachedSnapshot = snapshot.clone();\n this.snapshotCache.put(location, cachedSnapshot);\n return cachedSnapshot\n }\n }\n\n getCachedSnapshotForLocation(location) {\n return this.snapshotCache.get(location)\n }\n\n isPageRefresh(visit) {\n return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n }\n\n shouldPreserveScrollPosition(visit) {\n return this.isPageRefresh(visit) && this.snapshot.shouldPreserveScrollPosition\n }\n\n get snapshot() {\n return PageSnapshot.fromElement(this.element)\n }\n}\n\nclass Preloader {\n selector = \"a[data-turbo-preload]\"\n\n constructor(delegate, snapshotCache) {\n this.delegate = delegate;\n this.snapshotCache = snapshotCache;\n }\n\n start() {\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n } else {\n this.preloadOnLoadLinksForView(document.body);\n }\n }\n\n stop() {\n document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n }\n\n preloadOnLoadLinksForView(element) {\n for (const link of element.querySelectorAll(this.selector)) {\n if (this.delegate.shouldPreloadLink(link)) {\n this.preloadURL(link);\n }\n }\n }\n\n async preloadURL(link) {\n const location = new URL(link.href);\n\n if (this.snapshotCache.has(location)) {\n return\n }\n\n const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n await fetchRequest.perform();\n }\n\n // Fetch request delegate\n\n prepareRequest(fetchRequest) {\n fetchRequest.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n }\n\n async requestSucceededWithResponse(fetchRequest, fetchResponse) {\n try {\n const responseHTML = await fetchResponse.responseHTML;\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n this.snapshotCache.put(fetchRequest.url, snapshot);\n } catch (_) {\n // If we cannot preload that is ok!\n }\n }\n\n requestStarted(fetchRequest) {}\n\n requestErrored(fetchRequest) {}\n\n requestFinished(fetchRequest) {}\n\n requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n #preloadAll = () => {\n this.preloadOnLoadLinksForView(document.body);\n }\n}\n\nclass Cache {\n constructor(session) {\n this.session = session;\n }\n\n clear() {\n this.session.clearCache();\n }\n\n resetCacheControl() {\n this.#setCacheControl(\"\");\n }\n\n exemptPageFromCache() {\n this.#setCacheControl(\"no-cache\");\n }\n\n exemptPageFromPreview() {\n this.#setCacheControl(\"no-preview\");\n }\n\n #setCacheControl(value) {\n setMetaContent(\"turbo-cache-control\", value);\n }\n}\n\nclass Session {\n navigator = new Navigator(this)\n history = new History(this)\n view = new PageView(this, document.documentElement)\n adapter = new BrowserAdapter(this)\n\n pageObserver = new PageObserver(this)\n cacheObserver = new CacheObserver()\n linkPrefetchObserver = new LinkPrefetchObserver(this, document)\n linkClickObserver = new LinkClickObserver(this, window)\n formSubmitObserver = new FormSubmitObserver(this, document)\n scrollObserver = new ScrollObserver(this)\n streamObserver = new StreamObserver(this)\n formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement)\n frameRedirector = new FrameRedirector(this, document.documentElement)\n streamMessageRenderer = new StreamMessageRenderer()\n cache = new Cache(this)\n\n enabled = true\n started = false\n #pageRefreshDebouncePeriod = 150\n\n constructor(recentRequests) {\n this.recentRequests = recentRequests;\n this.preloader = new Preloader(this, this.view.snapshotCache);\n this.debouncedRefresh = this.refresh;\n this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod;\n }\n\n start() {\n if (!this.started) {\n this.pageObserver.start();\n this.cacheObserver.start();\n this.linkPrefetchObserver.start();\n this.formLinkClickObserver.start();\n this.linkClickObserver.start();\n this.formSubmitObserver.start();\n this.scrollObserver.start();\n this.streamObserver.start();\n this.frameRedirector.start();\n this.history.start();\n this.preloader.start();\n this.started = true;\n this.enabled = true;\n }\n }\n\n disable() {\n this.enabled = false;\n }\n\n stop() {\n if (this.started) {\n this.pageObserver.stop();\n this.cacheObserver.stop();\n this.linkPrefetchObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkClickObserver.stop();\n this.formSubmitObserver.stop();\n this.scrollObserver.stop();\n this.streamObserver.stop();\n this.frameRedirector.stop();\n this.history.stop();\n this.preloader.stop();\n this.started = false;\n }\n }\n\n registerAdapter(adapter) {\n this.adapter = adapter;\n }\n\n visit(location, options = {}) {\n const frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n if (frameElement instanceof FrameElement) {\n const action = options.action || getVisitAction(frameElement);\n\n frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action);\n frameElement.src = location.toString();\n } else {\n this.navigator.proposeVisit(expandURL(location), options);\n }\n }\n\n refresh(url, requestId) {\n const isRecentRequest = requestId && this.recentRequests.has(requestId);\n if (!isRecentRequest && !this.navigator.currentVisit) {\n this.visit(url, { action: \"replace\", shouldCacheSnapshot: false });\n }\n }\n\n connectStreamSource(source) {\n this.streamObserver.connectStreamSource(source);\n }\n\n disconnectStreamSource(source) {\n this.streamObserver.disconnectStreamSource(source);\n }\n\n renderStreamMessage(message) {\n this.streamMessageRenderer.render(StreamMessage.wrap(message));\n }\n\n clearCache() {\n this.view.clearSnapshotCache();\n }\n\n setProgressBarDelay(delay) {\n console.warn(\n \"Please replace `session.setProgressBarDelay(delay)` with `session.progressBarDelay = delay`. The function is deprecated and will be removed in a future version of Turbo.`\"\n );\n\n this.progressBarDelay = delay;\n }\n\n set progressBarDelay(delay) {\n config.drive.progressBarDelay = delay;\n }\n\n get progressBarDelay() {\n return config.drive.progressBarDelay\n }\n\n set drive(value) {\n config.drive.enabled = value;\n }\n\n get drive() {\n return config.drive.enabled\n }\n\n set formMode(value) {\n config.forms.mode = value;\n }\n\n get formMode() {\n return config.forms.mode\n }\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n get pageRefreshDebouncePeriod() {\n return this.#pageRefreshDebouncePeriod\n }\n\n set pageRefreshDebouncePeriod(value) {\n this.refresh = debounce(this.debouncedRefresh.bind(this), value);\n this.#pageRefreshDebouncePeriod = value;\n }\n\n // Preloader delegate\n\n shouldPreloadLink(element) {\n const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n const isStream = element.hasAttribute(\"data-turbo-stream\");\n const frameTarget = element.getAttribute(\"data-turbo-frame\");\n const frame = frameTarget == \"_top\" ?\n null :\n document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n if (isUnsafe || isStream || frame instanceof FrameElement) {\n return false\n } else {\n const location = new URL(element.href);\n\n return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n }\n }\n\n // History delegate\n\n historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n if (this.enabled) {\n this.navigator.startVisit(location, restorationIdentifier, {\n action: \"restore\",\n historyChanged: true,\n direction\n });\n } else {\n this.adapter.pageInvalidated({\n reason: \"turbo_disabled\"\n });\n }\n }\n\n // Scroll observer delegate\n\n scrollPositionChanged(position) {\n this.history.updateRestorationData({ scrollPosition: position });\n }\n\n // Form click observer delegate\n\n willSubmitFormLinkToLocation(link, location) {\n return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n }\n\n submittedFormLinkToLocation() {}\n\n // Link hover observer delegate\n\n canPrefetchRequestToLocation(link, location) {\n return (\n this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation)\n )\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link, location, event) {\n return (\n this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation) &&\n this.applicationAllowsFollowingLinkToLocation(link, location, event)\n )\n }\n\n followedLinkToLocation(link, location) {\n const action = this.getActionForLink(link);\n const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n this.visit(location.href, { action, acceptsStreamResponse });\n }\n\n // Navigator delegate\n\n allowsVisitingLocationWithAction(location, action) {\n return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location)\n }\n\n visitProposedToLocation(location, options) {\n extendURLWithDeprecatedProperties(location);\n this.adapter.visitProposedToLocation(location, options);\n }\n\n // Visit delegate\n\n visitStarted(visit) {\n if (!visit.acceptsStreamResponse) {\n markAsBusy(document.documentElement);\n this.view.markVisitDirection(visit.direction);\n }\n extendURLWithDeprecatedProperties(visit.location);\n if (!visit.silent) {\n this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n }\n }\n\n visitCompleted(visit) {\n this.view.unmarkVisitDirection();\n clearBusyState(document.documentElement);\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n }\n\n locationWithActionIsSamePage(location, action) {\n return this.navigator.locationWithActionIsSamePage(location, action)\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n }\n\n // Form submit observer delegate\n\n willSubmitForm(form, submitter) {\n const action = getAction$1(form, submitter);\n\n return (\n this.submissionIsNavigatable(form, submitter) &&\n locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n )\n }\n\n formSubmitted(form, submitter) {\n this.navigator.submitForm(form, submitter);\n }\n\n // Page observer delegate\n\n pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location;\n this.notifyApplicationAfterPageLoad();\n }\n\n pageLoaded() {\n this.history.assumeControlOfScrollRestoration();\n }\n\n pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration();\n }\n\n // Stream observer delegate\n\n receivedMessageFromStream(message) {\n this.renderStreamMessage(message);\n }\n\n // Page view delegate\n\n viewWillCacheSnapshot() {\n if (!this.navigator.currentVisit?.silent) {\n this.notifyApplicationBeforeCachingSnapshot();\n }\n }\n\n allowsImmediateRender({ element }, options) {\n const event = this.notifyApplicationBeforeRender(element, options);\n const {\n defaultPrevented,\n detail: { render }\n } = event;\n\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n\n return !defaultPrevented\n }\n\n viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) {\n this.view.lastRenderedLocation = this.history.location;\n this.notifyApplicationAfterRender(renderMethod);\n }\n\n preloadOnLoadLinksForView(element) {\n this.preloader.preloadOnLoadLinksForView(element);\n }\n\n viewInvalidated(reason) {\n this.adapter.pageInvalidated(reason);\n }\n\n // Frame element\n\n frameLoaded(frame) {\n this.notifyApplicationAfterFrameLoad(frame);\n }\n\n frameRendered(fetchResponse, frame) {\n this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n }\n\n // Application events\n\n applicationAllowsFollowingLinkToLocation(link, location, ev) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n return !event.defaultPrevented\n }\n\n applicationAllowsVisitingLocation(location) {\n const event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented\n }\n\n notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n return dispatch(\"turbo:click\", {\n target: link,\n detail: { url: location.href, originalEvent: event },\n cancelable: true\n })\n }\n\n notifyApplicationBeforeVisitingLocation(location) {\n return dispatch(\"turbo:before-visit\", {\n detail: { url: location.href },\n cancelable: true\n })\n }\n\n notifyApplicationAfterVisitingLocation(location, action) {\n return dispatch(\"turbo:visit\", { detail: { url: location.href, action } })\n }\n\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\")\n }\n\n notifyApplicationBeforeRender(newBody, options) {\n return dispatch(\"turbo:before-render\", {\n detail: { newBody, ...options },\n cancelable: true\n })\n }\n\n notifyApplicationAfterRender(renderMethod) {\n return dispatch(\"turbo:render\", { detail: { renderMethod } })\n }\n\n notifyApplicationAfterPageLoad(timing = {}) {\n return dispatch(\"turbo:load\", {\n detail: { url: this.location.href, timing }\n })\n }\n\n notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n dispatchEvent(\n new HashChangeEvent(\"hashchange\", {\n oldURL: oldURL.toString(),\n newURL: newURL.toString()\n })\n );\n }\n\n notifyApplicationAfterFrameLoad(frame) {\n return dispatch(\"turbo:frame-load\", { target: frame })\n }\n\n notifyApplicationAfterFrameRender(fetchResponse, frame) {\n return dispatch(\"turbo:frame-render\", {\n detail: { fetchResponse },\n target: frame,\n cancelable: true\n })\n }\n\n // Helpers\n\n submissionIsNavigatable(form, submitter) {\n if (config.forms.mode == \"off\") {\n return false\n } else {\n const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n if (config.forms.mode == \"optin\") {\n return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null\n } else {\n return submitterIsNavigatable && this.elementIsNavigatable(form)\n }\n }\n }\n\n elementIsNavigatable(element) {\n const container = findClosestRecursively(element, \"[data-turbo]\");\n const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n // Check if Drive is enabled on the session or we're within a Frame.\n if (config.drive.enabled || withinFrame) {\n // Element is navigatable by default, unless `data-turbo=\"false\"`.\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\"\n } else {\n return true\n }\n } else {\n // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n if (container) {\n return container.getAttribute(\"data-turbo\") == \"true\"\n } else {\n return false\n }\n }\n }\n\n // Private\n\n getActionForLink(link) {\n return getVisitAction(link) || \"advance\"\n }\n\n get snapshot() {\n return this.view.snapshot\n }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get() {\n return this.toString()\n }\n }\n};\n\nconst session = new Session(recentRequests);\nconst { cache, navigator: navigator$1 } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n session.renderStreamMessage(message);\n}\n\n/**\n * Removes all entries from the Turbo Drive page cache.\n * Call this when state has changed on the server that may affect cached pages.\n *\n * @deprecated since version 7.2.0 in favor of `Turbo.cache.clear()`\n */\nfunction clearCache() {\n console.warn(\n \"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n session.clearCache();\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n console.warn(\n \"Please replace `Turbo.setProgressBarDelay(delay)` with `Turbo.config.drive.progressBarDelay = delay`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n config.drive.progressBarDelay = delay;\n}\n\nfunction setConfirmMethod(confirmMethod) {\n console.warn(\n \"Please replace `Turbo.setConfirmMethod(confirmMethod)` with `Turbo.config.forms.confirm = confirmMethod`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n config.forms.confirm = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n console.warn(\n \"Please replace `Turbo.setFormMode(mode)` with `Turbo.config.forms.mode = mode`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n config.forms.mode = mode;\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n __proto__: null,\n navigator: navigator$1,\n session: session,\n cache: cache,\n PageRenderer: PageRenderer,\n PageSnapshot: PageSnapshot,\n FrameRenderer: FrameRenderer,\n fetch: fetchWithTurboHeaders,\n config: config,\n start: start,\n registerAdapter: registerAdapter,\n visit: visit,\n connectStreamSource: connectStreamSource,\n disconnectStreamSource: disconnectStreamSource,\n renderStreamMessage: renderStreamMessage,\n clearCache: clearCache,\n setProgressBarDelay: setProgressBarDelay,\n setConfirmMethod: setConfirmMethod,\n setFormMode: setFormMode\n});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n #currentFetchRequest = null\n #resolveVisitPromise = () => {}\n #connected = false\n #hasBeenLoaded = false\n #ignoredAttributes = new Set()\n action = null\n\n constructor(element) {\n this.element = element;\n this.view = new FrameView(this, this.element);\n this.appearanceObserver = new AppearanceObserver(this, this.element);\n this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n this.linkInterceptor = new LinkInterceptor(this, this.element);\n this.restorationIdentifier = uuid();\n this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n }\n\n // Frame delegate\n\n connect() {\n if (!this.#connected) {\n this.#connected = true;\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n } else {\n this.#loadSourceURL();\n }\n this.formLinkClickObserver.start();\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n }\n\n disconnect() {\n if (this.#connected) {\n this.#connected = false;\n this.appearanceObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n }\n\n disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.#loadSourceURL();\n }\n }\n\n sourceURLChanged() {\n if (this.#isIgnoringChangesTo(\"src\")) return\n\n if (this.element.isConnected) {\n this.complete = false;\n }\n\n if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n this.#loadSourceURL();\n }\n }\n\n sourceURLReloaded() {\n if (this.element.shouldReloadWithMorph) {\n this.element.addEventListener(\"turbo:before-frame-render\", ({ detail }) => {\n detail.render = MorphingFrameRenderer.renderElement;\n }, { once: true });\n }\n\n const { src } = this.element;\n this.element.removeAttribute(\"complete\");\n this.element.src = null;\n this.element.src = src;\n return this.element.loaded\n }\n\n loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n } else {\n this.appearanceObserver.stop();\n this.#loadSourceURL();\n }\n }\n\n async #loadSourceURL() {\n if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n this.element.loaded = this.#visit(expandURL(this.sourceURL));\n this.appearanceObserver.stop();\n await this.element.loaded;\n this.#hasBeenLoaded = true;\n }\n }\n\n async loadResponse(fetchResponse) {\n if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n this.sourceURL = fetchResponse.response.url;\n }\n\n try {\n const html = await fetchResponse.responseHTML;\n if (html) {\n const document = parseHTMLDocument(html);\n const pageSnapshot = PageSnapshot.fromDocument(document);\n\n if (pageSnapshot.isVisitable) {\n await this.#loadFrameResponse(fetchResponse, document);\n } else {\n await this.#handleUnvisitableFrameResponse(fetchResponse);\n }\n }\n } finally {\n this.fetchResponseLoaded = () => Promise.resolve();\n }\n }\n\n // Appearance observer delegate\n\n elementAppearedInViewport(element) {\n this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element));\n this.#loadSourceURL();\n }\n\n // Form link click observer delegate\n\n willSubmitFormLinkToLocation(link) {\n return this.#shouldInterceptNavigation(link)\n }\n\n submittedFormLinkToLocation(link, _location, form) {\n const frame = this.#findFrameElement(link);\n if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element, _location, _event) {\n return this.#shouldInterceptNavigation(element)\n }\n\n linkClickIntercepted(element, location) {\n this.#navigateFrame(element, location);\n }\n\n // Form submit observer delegate\n\n willSubmitForm(element, submitter) {\n return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n }\n\n formSubmitted(element, submitter) {\n if (this.formSubmission) {\n this.formSubmission.stop();\n }\n\n this.formSubmission = new FormSubmission(this, element, submitter);\n const { fetchRequest } = this.formSubmission;\n this.prepareRequest(fetchRequest);\n this.formSubmission.start();\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n request.headers[\"Turbo-Frame\"] = this.id;\n\n if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted(_request) {\n markAsBusy(this.element);\n }\n\n requestPreventedHandlingResponse(_request, _response) {\n this.#resolveVisitPromise();\n }\n\n async requestSucceededWithResponse(request, response) {\n await this.loadResponse(response);\n this.#resolveVisitPromise();\n }\n\n async requestFailedWithResponse(request, response) {\n await this.loadResponse(response);\n this.#resolveVisitPromise();\n }\n\n requestErrored(request, error) {\n console.error(error);\n this.#resolveVisitPromise();\n }\n\n requestFinished(_request) {\n clearBusyState(this.element);\n }\n\n // Form submission delegate\n\n formSubmissionStarted({ formElement }) {\n markAsBusy(formElement, this.#findFrameElement(formElement));\n }\n\n formSubmissionSucceededWithResponse(formSubmission, response) {\n const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame));\n frame.delegate.loadResponse(response);\n\n if (!formSubmission.isSafe) {\n session.clearCache();\n }\n }\n\n formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n this.element.delegate.loadResponse(fetchResponse);\n session.clearCache();\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished({ formElement }) {\n clearBusyState(formElement, this.#findFrameElement(formElement));\n }\n\n // View delegate\n\n allowsImmediateRender({ element: newFrame }, options) {\n const event = dispatch(\"turbo:before-frame-render\", {\n target: this.element,\n detail: { newFrame, ...options },\n cancelable: true\n });\n\n const {\n defaultPrevented,\n detail: { render }\n } = event;\n\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n\n return !defaultPrevented\n }\n\n viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) {}\n\n preloadOnLoadLinksForView(element) {\n session.preloadOnLoadLinksForView(element);\n }\n\n viewInvalidated() {}\n\n // Frame renderer delegate\n\n willRenderFrame(currentElement, _newElement) {\n this.previousFrameElement = currentElement.cloneNode(true);\n }\n\n visitCachedSnapshot = ({ element }) => {\n const frame = element.querySelector(\"#\" + this.element.id);\n\n if (frame && this.previousFrameElement) {\n frame.replaceChildren(...this.previousFrameElement.children);\n }\n\n delete this.previousFrameElement;\n }\n\n // Private\n\n async #loadFrameResponse(fetchResponse, document) {\n const newFrameElement = await this.extractForeignFrameElement(document.body);\n\n if (newFrameElement) {\n const snapshot = new Snapshot(newFrameElement);\n const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n\n if (this.view.renderPromise) await this.view.renderPromise;\n this.changeHistory();\n\n await this.view.render(renderer);\n this.complete = true;\n session.frameRendered(fetchResponse, this.element);\n session.frameLoaded(this.element);\n await this.fetchResponseLoaded(fetchResponse);\n } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) {\n this.#handleFrameMissingFromResponse(fetchResponse);\n }\n }\n\n async #visit(url) {\n const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n\n this.#currentFetchRequest?.cancel();\n this.#currentFetchRequest = request;\n\n return new Promise((resolve) => {\n this.#resolveVisitPromise = () => {\n this.#resolveVisitPromise = () => {};\n this.#currentFetchRequest = null;\n resolve();\n };\n request.perform();\n })\n }\n\n #navigateFrame(element, url, submitter) {\n const frame = this.#findFrameElement(element, submitter);\n\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter, element, frame));\n\n this.#withCurrentNavigationElement(element, () => {\n frame.src = url;\n });\n }\n\n proposeVisitIfNavigatedWithAction(frame, action = null) {\n this.action = action;\n\n if (this.action) {\n const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n const { visitCachedSnapshot } = frame.delegate;\n\n frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n if (frame.src) {\n const { statusCode, redirected } = fetchResponse;\n const responseHTML = await fetchResponse.responseHTML;\n const response = { statusCode, redirected, responseHTML };\n const options = {\n response,\n visitCachedSnapshot,\n willRender: false,\n updateHistory: false,\n restorationIdentifier: this.restorationIdentifier,\n snapshot: pageSnapshot\n };\n\n if (this.action) options.action = this.action;\n\n session.visit(frame.src, options);\n }\n };\n }\n }\n\n changeHistory() {\n if (this.action) {\n const method = getHistoryMethodForAction(this.action);\n session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n }\n }\n\n async #handleUnvisitableFrameResponse(fetchResponse) {\n console.warn(\n `The response (${fetchResponse.statusCode}) from is performing a full page visit due to turbo-visit-control.`\n );\n\n await this.#visitResponse(fetchResponse.response);\n }\n\n #willHandleFrameMissingFromResponse(fetchResponse) {\n this.element.setAttribute(\"complete\", \"\");\n\n const response = fetchResponse.response;\n const visit = async (url, options) => {\n if (url instanceof Response) {\n this.#visitResponse(url);\n } else {\n session.visit(url, options);\n }\n };\n\n const event = dispatch(\"turbo:frame-missing\", {\n target: this.element,\n detail: { response, visit },\n cancelable: true\n });\n\n return !event.defaultPrevented\n }\n\n #handleFrameMissingFromResponse(fetchResponse) {\n this.view.missing();\n this.#throwFrameMissingError(fetchResponse);\n }\n\n #throwFrameMissingError(fetchResponse) {\n const message = `The response (${fetchResponse.statusCode}) did not contain the expected and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n throw new TurboFrameMissingError(message)\n }\n\n async #visitResponse(response) {\n const wrapped = new FetchResponse(response);\n const responseHTML = await wrapped.responseHTML;\n const { location, redirected, statusCode } = wrapped;\n\n return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n }\n\n #findFrameElement(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n return getFrameElementById(id) ?? this.element\n }\n\n async extractForeignFrameElement(container) {\n let element;\n const id = CSS.escape(this.id);\n\n try {\n element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n if (element) {\n return element\n }\n\n element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n if (element) {\n await element.loaded;\n return await this.extractForeignFrameElement(element)\n }\n } catch (error) {\n console.error(error);\n return new FrameElement()\n }\n\n return null\n }\n\n #formActionIsVisitable(form, submitter) {\n const action = getAction$1(form, submitter);\n\n return locationIsVisitable(expandURL(action), this.rootLocation)\n }\n\n #shouldInterceptNavigation(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n return false\n }\n\n if (!this.enabled || id == \"_top\") {\n return false\n }\n\n if (id) {\n const frameElement = getFrameElementById(id);\n if (frameElement) {\n return !frameElement.disabled\n }\n }\n\n if (!session.elementIsNavigatable(element)) {\n return false\n }\n\n if (submitter && !session.elementIsNavigatable(submitter)) {\n return false\n }\n\n return true\n }\n\n // Computed properties\n\n get id() {\n return this.element.id\n }\n\n get enabled() {\n return !this.element.disabled\n }\n\n get sourceURL() {\n if (this.element.src) {\n return this.element.src\n }\n }\n\n set sourceURL(sourceURL) {\n this.#ignoringChangesToAttribute(\"src\", () => {\n this.element.src = sourceURL ?? null;\n });\n }\n\n get loadingStyle() {\n return this.element.loading\n }\n\n get isLoading() {\n return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n }\n\n get complete() {\n return this.element.hasAttribute(\"complete\")\n }\n\n set complete(value) {\n if (value) {\n this.element.setAttribute(\"complete\", \"\");\n } else {\n this.element.removeAttribute(\"complete\");\n }\n }\n\n get isActive() {\n return this.element.isActive && this.#connected\n }\n\n get rootLocation() {\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const root = meta?.content ?? \"/\";\n return expandURL(root)\n }\n\n #isIgnoringChangesTo(attributeName) {\n return this.#ignoredAttributes.has(attributeName)\n }\n\n #ignoringChangesToAttribute(attributeName, callback) {\n this.#ignoredAttributes.add(attributeName);\n callback();\n this.#ignoredAttributes.delete(attributeName);\n }\n\n #withCurrentNavigationElement(element, callback) {\n this.currentNavigationElement = element;\n callback();\n delete this.currentNavigationElement;\n }\n}\n\nfunction getFrameElementById(id) {\n if (id != null) {\n const element = document.getElementById(id);\n if (element instanceof FrameElement) {\n return element\n }\n }\n}\n\nfunction activateElement(element, currentURL) {\n if (element) {\n const src = element.getAttribute(\"src\");\n if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n throw new Error(`Matching element has a source URL which references itself`)\n }\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true);\n }\n\n if (element instanceof FrameElement) {\n element.connectedCallback();\n element.disconnectedCallback();\n return element\n }\n }\n}\n\nconst StreamActions = {\n after() {\n this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n },\n\n append() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.append(this.templateContent));\n },\n\n before() {\n this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n },\n\n prepend() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.prepend(this.templateContent));\n },\n\n remove() {\n this.targetElements.forEach((e) => e.remove());\n },\n\n replace() {\n const method = this.getAttribute(\"method\");\n\n this.targetElements.forEach((targetElement) => {\n if (method === \"morph\") {\n morphElements(targetElement, this.templateContent);\n } else {\n targetElement.replaceWith(this.templateContent);\n }\n });\n },\n\n update() {\n const method = this.getAttribute(\"method\");\n\n this.targetElements.forEach((targetElement) => {\n if (method === \"morph\") {\n morphChildren(targetElement, this.templateContent);\n } else {\n targetElement.innerHTML = \"\";\n targetElement.append(this.templateContent);\n }\n });\n },\n\n refresh() {\n session.refresh(this.baseURI, this.requestId);\n }\n};\n\n//