{"version":3,"file":"stimulus-CigQyn_X.js","names":[],"sources":["../../../node_modules/@hotwired/stimulus/dist/stimulus.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"],"x_google_ignoreList":[0],"mappings":"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"}