turbo-spark 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +28 -0
- data/Rakefile +8 -0
- data/app/assets/javascripts/hotwire_spark.js +3701 -0
- data/app/assets/javascripts/hotwire_spark.js.map +1 -0
- data/app/assets/javascripts/hotwire_spark.min.js +2 -0
- data/app/assets/javascripts/hotwire_spark.min.js.map +1 -0
- data/app/assets/stylesheets/hotwire_spark/application.css +15 -0
- data/app/channels/hotwire_spark/channel.rb +5 -0
- data/app/controllers/hotwire_spark/application_controller.rb +4 -0
- data/app/helpers/hotwire_spark/application_helper.rb +4 -0
- data/app/jobs/hotwire_spark/application_job.rb +4 -0
- data/app/mailers/hotwire_spark/application_mailer.rb +6 -0
- data/app/models/hotwire_spark/application_record.rb +5 -0
- data/app/views/layouts/hotwire_spark/application.html.erb +17 -0
- data/config/routes.rb +2 -0
- data/lib/hotwire_spark/engine.rb +7 -0
- data/lib/hotwire_spark/version.rb +3 -0
- data/lib/hotwire_spark.rb +5 -0
- data/lib/tasks/hotwire_spark_tasks.rake +4 -0
- metadata +80 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"hotwire_spark.min.js","sources":["../../../node_modules/@rails/actioncable/app/assets/javascripts/actioncable.esm.js","../../javascript/hotwire_spark/channels/consumer.js","../../javascript/hotwire_spark/helpers.js","../../../node_modules/idiomorph/dist/idiomorph.esm.js","../../javascript/hotwire_spark/logger.js","../../../node_modules/@hotwired/stimulus/dist/stimulus.js","../../javascript/hotwire_spark/reloaders/stimulus_reloader.js","../../javascript/hotwire_spark/reloaders/html_reloader.js","../../javascript/hotwire_spark/reloaders/css_reloader.js","../../javascript/hotwire_spark/channels/monitoring_channel.js","../../javascript/hotwire_spark/index.js"],"sourcesContent":["var adapters = {\n logger: typeof console !== \"undefined\" ? console : undefined,\n WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined\n};\n\nvar logger = {\n log(...messages) {\n if (this.enabled) {\n messages.push(Date.now());\n adapters.logger.log(\"[ActionCable]\", ...messages);\n }\n }\n};\n\nconst now = () => (new Date).getTime();\n\nconst secondsSince = time => (now() - time) / 1e3;\n\nclass ConnectionMonitor {\n constructor(connection) {\n this.visibilityDidChange = this.visibilityDidChange.bind(this);\n this.connection = connection;\n this.reconnectAttempts = 0;\n }\n start() {\n if (!this.isRunning()) {\n this.startedAt = now();\n delete this.stoppedAt;\n this.startPolling();\n addEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`);\n }\n }\n stop() {\n if (this.isRunning()) {\n this.stoppedAt = now();\n this.stopPolling();\n removeEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(\"ConnectionMonitor stopped\");\n }\n }\n isRunning() {\n return this.startedAt && !this.stoppedAt;\n }\n recordMessage() {\n this.pingedAt = now();\n }\n recordConnect() {\n this.reconnectAttempts = 0;\n delete this.disconnectedAt;\n logger.log(\"ConnectionMonitor recorded connect\");\n }\n recordDisconnect() {\n this.disconnectedAt = now();\n logger.log(\"ConnectionMonitor recorded disconnect\");\n }\n startPolling() {\n this.stopPolling();\n this.poll();\n }\n stopPolling() {\n clearTimeout(this.pollTimeout);\n }\n poll() {\n this.pollTimeout = setTimeout((() => {\n this.reconnectIfStale();\n this.poll();\n }), this.getPollInterval());\n }\n getPollInterval() {\n const {staleThreshold: staleThreshold, reconnectionBackoffRate: reconnectionBackoffRate} = this.constructor;\n const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10));\n const jitterMax = this.reconnectAttempts === 0 ? 1 : reconnectionBackoffRate;\n const jitter = jitterMax * Math.random();\n return staleThreshold * 1e3 * backoff * (1 + jitter);\n }\n reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`);\n this.reconnectAttempts++;\n if (this.disconnectedRecently()) {\n logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`);\n } else {\n logger.log(\"ConnectionMonitor reopening\");\n this.connection.reopen();\n }\n }\n }\n get refreshedAt() {\n return this.pingedAt ? this.pingedAt : this.startedAt;\n }\n connectionIsStale() {\n return secondsSince(this.refreshedAt) > this.constructor.staleThreshold;\n }\n disconnectedRecently() {\n return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\n }\n visibilityDidChange() {\n if (document.visibilityState === \"visible\") {\n setTimeout((() => {\n if (this.connectionIsStale() || !this.connection.isOpen()) {\n logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`);\n this.connection.reopen();\n }\n }), 200);\n }\n }\n}\n\nConnectionMonitor.staleThreshold = 6;\n\nConnectionMonitor.reconnectionBackoffRate = .15;\n\nvar INTERNAL = {\n message_types: {\n welcome: \"welcome\",\n disconnect: \"disconnect\",\n ping: \"ping\",\n confirmation: \"confirm_subscription\",\n rejection: \"reject_subscription\"\n },\n disconnect_reasons: {\n unauthorized: \"unauthorized\",\n invalid_request: \"invalid_request\",\n server_restart: \"server_restart\",\n remote: \"remote\"\n },\n default_mount_path: \"/cable\",\n protocols: [ \"actioncable-v1-json\", \"actioncable-unsupported\" ]\n};\n\nconst {message_types: message_types, protocols: protocols} = INTERNAL;\n\nconst supportedProtocols = protocols.slice(0, protocols.length - 1);\n\nconst indexOf = [].indexOf;\n\nclass Connection {\n constructor(consumer) {\n this.open = this.open.bind(this);\n this.consumer = consumer;\n this.subscriptions = this.consumer.subscriptions;\n this.monitor = new ConnectionMonitor(this);\n this.disconnected = true;\n }\n send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data));\n return true;\n } else {\n return false;\n }\n }\n open() {\n if (this.isActive()) {\n logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`);\n return false;\n } else {\n const socketProtocols = [ ...protocols, ...this.consumer.subprotocols || [] ];\n logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`);\n if (this.webSocket) {\n this.uninstallEventHandlers();\n }\n this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols);\n this.installEventHandlers();\n this.monitor.start();\n return true;\n }\n }\n close({allowReconnect: allowReconnect} = {\n allowReconnect: true\n }) {\n if (!allowReconnect) {\n this.monitor.stop();\n }\n if (this.isOpen()) {\n return this.webSocket.close();\n }\n }\n reopen() {\n logger.log(`Reopening WebSocket, current state is ${this.getState()}`);\n if (this.isActive()) {\n try {\n return this.close();\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error);\n } finally {\n logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`);\n setTimeout(this.open, this.constructor.reopenDelay);\n }\n } else {\n return this.open();\n }\n }\n getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol;\n }\n }\n isOpen() {\n return this.isState(\"open\");\n }\n isActive() {\n return this.isState(\"open\", \"connecting\");\n }\n triedToReconnect() {\n return this.monitor.reconnectAttempts > 0;\n }\n isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;\n }\n isState(...states) {\n return indexOf.call(states, this.getState()) >= 0;\n }\n getState() {\n if (this.webSocket) {\n for (let state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase();\n }\n }\n }\n return null;\n }\n installEventHandlers() {\n for (let eventName in this.events) {\n const handler = this.events[eventName].bind(this);\n this.webSocket[`on${eventName}`] = handler;\n }\n }\n uninstallEventHandlers() {\n for (let eventName in this.events) {\n this.webSocket[`on${eventName}`] = function() {};\n }\n }\n}\n\nConnection.reopenDelay = 500;\n\nConnection.prototype.events = {\n message(event) {\n if (!this.isProtocolSupported()) {\n return;\n }\n const {identifier: identifier, message: message, reason: reason, reconnect: reconnect, type: type} = JSON.parse(event.data);\n this.monitor.recordMessage();\n switch (type) {\n case message_types.welcome:\n if (this.triedToReconnect()) {\n this.reconnectAttempted = true;\n }\n this.monitor.recordConnect();\n return this.subscriptions.reload();\n\n case message_types.disconnect:\n logger.log(`Disconnecting. Reason: ${reason}`);\n return this.close({\n allowReconnect: reconnect\n });\n\n case message_types.ping:\n return null;\n\n case message_types.confirmation:\n this.subscriptions.confirmSubscription(identifier);\n if (this.reconnectAttempted) {\n this.reconnectAttempted = false;\n return this.subscriptions.notify(identifier, \"connected\", {\n reconnected: true\n });\n } else {\n return this.subscriptions.notify(identifier, \"connected\", {\n reconnected: false\n });\n }\n\n case message_types.rejection:\n return this.subscriptions.reject(identifier);\n\n default:\n return this.subscriptions.notify(identifier, \"received\", message);\n }\n },\n open() {\n logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`);\n this.disconnected = false;\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\");\n return this.close({\n allowReconnect: false\n });\n }\n },\n close(event) {\n logger.log(\"WebSocket onclose event\");\n if (this.disconnected) {\n return;\n }\n this.disconnected = true;\n this.monitor.recordDisconnect();\n return this.subscriptions.notifyAll(\"disconnected\", {\n willAttemptReconnect: this.monitor.isRunning()\n });\n },\n error() {\n logger.log(\"WebSocket onerror event\");\n }\n};\n\nconst extend = function(object, properties) {\n if (properties != null) {\n for (let key in properties) {\n const value = properties[key];\n object[key] = value;\n }\n }\n return object;\n};\n\nclass Subscription {\n constructor(consumer, params = {}, mixin) {\n this.consumer = consumer;\n this.identifier = JSON.stringify(params);\n extend(this, mixin);\n }\n perform(action, data = {}) {\n data.action = action;\n return this.send(data);\n }\n send(data) {\n return this.consumer.send({\n command: \"message\",\n identifier: this.identifier,\n data: JSON.stringify(data)\n });\n }\n unsubscribe() {\n return this.consumer.subscriptions.remove(this);\n }\n}\n\nclass SubscriptionGuarantor {\n constructor(subscriptions) {\n this.subscriptions = subscriptions;\n this.pendingSubscriptions = [];\n }\n guarantee(subscription) {\n if (this.pendingSubscriptions.indexOf(subscription) == -1) {\n logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`);\n this.pendingSubscriptions.push(subscription);\n } else {\n logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`);\n }\n this.startGuaranteeing();\n }\n forget(subscription) {\n logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`);\n this.pendingSubscriptions = this.pendingSubscriptions.filter((s => s !== subscription));\n }\n startGuaranteeing() {\n this.stopGuaranteeing();\n this.retrySubscribing();\n }\n stopGuaranteeing() {\n clearTimeout(this.retryTimeout);\n }\n retrySubscribing() {\n this.retryTimeout = setTimeout((() => {\n if (this.subscriptions && typeof this.subscriptions.subscribe === \"function\") {\n this.pendingSubscriptions.map((subscription => {\n logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`);\n this.subscriptions.subscribe(subscription);\n }));\n }\n }), 500);\n }\n}\n\nclass Subscriptions {\n constructor(consumer) {\n this.consumer = consumer;\n this.guarantor = new SubscriptionGuarantor(this);\n this.subscriptions = [];\n }\n create(channelName, mixin) {\n const channel = channelName;\n const params = typeof channel === \"object\" ? channel : {\n channel: channel\n };\n const subscription = new Subscription(this.consumer, params, mixin);\n return this.add(subscription);\n }\n add(subscription) {\n this.subscriptions.push(subscription);\n this.consumer.ensureActiveConnection();\n this.notify(subscription, \"initialized\");\n this.subscribe(subscription);\n return subscription;\n }\n remove(subscription) {\n this.forget(subscription);\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\");\n }\n return subscription;\n }\n reject(identifier) {\n return this.findAll(identifier).map((subscription => {\n this.forget(subscription);\n this.notify(subscription, \"rejected\");\n return subscription;\n }));\n }\n forget(subscription) {\n this.guarantor.forget(subscription);\n this.subscriptions = this.subscriptions.filter((s => s !== subscription));\n return subscription;\n }\n findAll(identifier) {\n return this.subscriptions.filter((s => s.identifier === identifier));\n }\n reload() {\n return this.subscriptions.map((subscription => this.subscribe(subscription)));\n }\n notifyAll(callbackName, ...args) {\n return this.subscriptions.map((subscription => this.notify(subscription, callbackName, ...args)));\n }\n notify(subscription, callbackName, ...args) {\n let subscriptions;\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription);\n } else {\n subscriptions = [ subscription ];\n }\n return subscriptions.map((subscription => typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined));\n }\n subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription);\n }\n }\n confirmSubscription(identifier) {\n logger.log(`Subscription confirmed ${identifier}`);\n this.findAll(identifier).map((subscription => this.guarantor.forget(subscription)));\n }\n sendCommand(subscription, command) {\n const {identifier: identifier} = subscription;\n return this.consumer.send({\n command: command,\n identifier: identifier\n });\n }\n}\n\nclass Consumer {\n constructor(url) {\n this._url = url;\n this.subscriptions = new Subscriptions(this);\n this.connection = new Connection(this);\n this.subprotocols = [];\n }\n get url() {\n return createWebSocketURL(this._url);\n }\n send(data) {\n return this.connection.send(data);\n }\n connect() {\n return this.connection.open();\n }\n disconnect() {\n return this.connection.close({\n allowReconnect: false\n });\n }\n ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open();\n }\n }\n addSubProtocol(subprotocol) {\n this.subprotocols = [ ...this.subprotocols, subprotocol ];\n }\n}\n\nfunction createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url();\n }\n if (url && !/^wss?:/i.test(url)) {\n const a = document.createElement(\"a\");\n a.href = url;\n a.href = a.href;\n a.protocol = a.protocol.replace(\"http\", \"ws\");\n return a.href;\n } else {\n return url;\n }\n}\n\nfunction createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n return new Consumer(url);\n}\n\nfunction getConfig(name) {\n const element = document.head.querySelector(`meta[name='action-cable-${name}']`);\n if (element) {\n return element.getAttribute(\"content\");\n }\n}\n\nexport { Connection, ConnectionMonitor, Consumer, INTERNAL, Subscription, SubscriptionGuarantor, Subscriptions, adapters, createConsumer, createWebSocketURL, getConfig, logger };\n","import { createConsumer } from \"@rails/actioncable\"\n\nexport default createConsumer()\n","export function nameFromFilePath(path) {\n return path.split(\"/\").pop().split(\".\")[0]\n}\n\nexport function urlWithParams(urlString, params) {\n const url = new URL(urlString, window.location.origin)\n Object.entries(params).forEach(([key, value]) => {\n url.searchParams.set(key, value)\n })\n return url.toString()\n}\n\nexport function cacheBustedUrl(urlString) {\n return urlWithParams(urlString, { reload: Date.now() })\n}\n\nexport async function reloadHtmlDocument() {\n let currentUrl = cacheBustedUrl(urlWithParams(window.location.href, { hotwire_spark: \"true\" }))\n const response = await fetch(currentUrl)\n\n if (!response.ok) {\n throw new Error(`${response.status} when fetching ${currentUrl}`)\n }\n\n const fetchedHTML = await response.text()\n const parser = new DOMParser()\n return parser.parseFromString(fetchedHTML, \"text/html\")\n}\n\n","// base IIFE to define idiomorph\nvar Idiomorph = (function () {\n 'use strict';\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;\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) {\n // don't morph focused element\n } 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) {\n // ignore the head element\n } 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 log(\"to append: \", nodesToAppend);\n\n let promises = [];\n for (const newNode of nodesToAppend) {\n log(\"adding: \", newNode);\n let newElt = document.createRange().createContextualFragment(newNode.outerHTML).firstChild;\n log(newElt);\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 //=============================================================================\n // Misc\n //=============================================================================\n\n function log() {\n //console.log(arguments);\n }\n\n function noOp() {\n }\n\n /*\n Deep merges the config object and the Idiomoroph.defaults object to\n produce a final configuration object\n */\n function mergeDefaults(config) {\n let finalConfig = {};\n // copy top level stuff into final config\n Object.assign(finalConfig, defaults);\n Object.assign(finalConfig, config);\n\n // copy callbacks into final config (do this to deep merge the callbacks)\n finalConfig.callbacks = {};\n Object.assign(finalConfig.callbacks, defaults.callbacks);\n Object.assign(finalConfig.callbacks, config.callbacks);\n\n // copy head config into final config (do this to deep merge the head)\n finalConfig.head = {};\n Object.assign(finalConfig.head, defaults.head);\n Object.assign(finalConfig.head, config.head);\n return finalConfig;\n }\n\n function createMorphContext(oldNode, newContent, config) {\n config = mergeDefaults(config);\n return {\n target: oldNode,\n newContent: newContent,\n config: config,\n morphStyle: config.morphStyle,\n ignoreActive: config.ignoreActive,\n ignoreActiveValue: config.ignoreActiveValue,\n idMap: createIdMap(oldNode, newContent),\n deadIds: new Set(),\n callbacks: config.callbacks,\n head: config.head\n }\n }\n\n function isIdSetMatch(node1, node2, ctx) {\n if (node1 == null || node2 == null) {\n return false;\n }\n if (node1.nodeType === node2.nodeType && node1.tagName === node2.tagName) {\n if (node1.id !== \"\" && node1.id === node2.id) {\n return true;\n } else {\n return getIdIntersectionCount(ctx, node1, node2) > 0;\n }\n }\n return false;\n }\n\n function isSoftMatch(node1, node2) {\n if (node1 == null || node2 == null) {\n return false;\n }\n return node1.nodeType === node2.nodeType && node1.tagName === node2.tagName\n }\n\n function removeNodesBetween(startInclusive, endExclusive, ctx) {\n while (startInclusive !== endExclusive) {\n let tempNode = startInclusive;\n startInclusive = startInclusive.nextSibling;\n removeNode(tempNode, ctx);\n }\n removeIdsFromConsideration(ctx, endExclusive);\n return endExclusive.nextSibling;\n }\n\n //=============================================================================\n // Scans forward from the insertionPoint in the old parent looking for a potential id match\n // for the newChild. We stop if we find a potential id match for the new child OR\n // if the number of potential id matches we are discarding is greater than the\n // potential id matches for the new child\n //=============================================================================\n function findIdSetMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n // max id matches we are willing to discard in our search\n let newChildPotentialIdCount = getIdIntersectionCount(ctx, newChild, oldParent);\n\n let potentialMatch = null;\n\n // only search forward if there is a possibility of an id match\n if (newChildPotentialIdCount > 0) {\n let potentialMatch = insertionPoint;\n // if there is a possibility of an id match, scan forward\n // keep track of the potential id match count we are discarding (the\n // newChildPotentialIdCount must be greater than this to make it likely\n // worth it)\n let otherMatchCount = 0;\n while (potentialMatch != null) {\n\n // If we have an id match, return the current potential match\n if (isIdSetMatch(newChild, potentialMatch, ctx)) {\n return potentialMatch;\n }\n\n // computer the other potential matches of this new content\n otherMatchCount += getIdIntersectionCount(ctx, potentialMatch, newContent);\n if (otherMatchCount > newChildPotentialIdCount) {\n // if we have more potential id matches in _other_ content, we\n // do not have a good candidate for an id match, so return null\n return null;\n }\n\n // advanced to the next old content child\n potentialMatch = potentialMatch.nextSibling;\n }\n }\n return potentialMatch;\n }\n\n //=============================================================================\n // Scans forward from the insertionPoint in the old parent looking for a potential soft match\n // for the newChild. We stop if we find a potential soft match for the new child OR\n // if we find a potential id match in the old parents children OR if we find two\n // potential soft matches for the next two pieces of new content\n //=============================================================================\n function findSoftMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n let potentialSoftMatch = insertionPoint;\n let nextSibling = newChild.nextSibling;\n let siblingSoftMatchCount = 0;\n\n while (potentialSoftMatch != null) {\n\n if (getIdIntersectionCount(ctx, potentialSoftMatch, newContent) > 0) {\n // the current potential soft match has a potential id set match with the remaining new\n // content so bail out of looking\n return null;\n }\n\n // if we have a soft match with the current node, return it\n if (isSoftMatch(newChild, potentialSoftMatch)) {\n return potentialSoftMatch;\n }\n\n if (isSoftMatch(nextSibling, potentialSoftMatch)) {\n // the next new node has a soft match with this node, so\n // increment the count of future soft matches\n siblingSoftMatchCount++;\n nextSibling = nextSibling.nextSibling;\n\n // If there are two future soft matches, bail to allow the siblings to soft match\n // so that we don't consume future soft matches for the sake of the current node\n if (siblingSoftMatchCount >= 2) {\n return null;\n }\n }\n\n // advanced to the next old content child\n potentialSoftMatch = potentialSoftMatch.nextSibling;\n }\n\n return potentialSoftMatch;\n }\n\n function parseContent(newContent) {\n let parser = new DOMParser();\n\n // remove svgs to avoid false-positive matches on head, etc.\n let contentWithSvgsRemoved = newContent.replace(/<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim, '');\n\n // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n if (contentWithSvgsRemoved.match(/<\\/html>/) || contentWithSvgsRemoved.match(/<\\/head>/) || contentWithSvgsRemoved.match(/<\\/body>/)) {\n let content = parser.parseFromString(newContent, \"text/html\");\n // if it is a full HTML document, return the document itself as the parent container\n if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n content.generatedByIdiomorph = true;\n return content;\n } else {\n // otherwise return the html element as the parent container\n let htmlElement = content.firstChild;\n if (htmlElement) {\n htmlElement.generatedByIdiomorph = true;\n return htmlElement;\n } else {\n return null;\n }\n }\n } else {\n // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n // deal with touchy tags like tr, tbody, etc.\n let responseDoc = parser.parseFromString(\"<body><template>\" + newContent + \"</template></body>\", \"text/html\");\n let content = responseDoc.body.querySelector('template').content;\n content.generatedByIdiomorph = true;\n return content\n }\n }\n\n function normalizeContent(newContent) {\n if (newContent == null) {\n // noinspection UnnecessaryLocalVariableJS\n const dummyParent = document.createElement('div');\n return dummyParent;\n } else if (newContent.generatedByIdiomorph) {\n // the template tag created by idiomorph parsing can serve as a dummy parent\n return newContent;\n } else if (newContent instanceof Node) {\n // a single node is added as a child to a dummy parent\n const dummyParent = document.createElement('div');\n dummyParent.append(newContent);\n return dummyParent;\n } else {\n // all nodes in the array or HTMLElement collection are consolidated under\n // a single dummy parent element\n const dummyParent = document.createElement('div');\n for (const elt of [...newContent]) {\n dummyParent.append(elt);\n }\n return dummyParent;\n }\n }\n\n function insertSiblings(previousSibling, morphedNode, nextSibling) {\n let stack = []\n let added = []\n while (previousSibling != null) {\n stack.push(previousSibling);\n previousSibling = previousSibling.previousSibling;\n }\n while (stack.length > 0) {\n let node = stack.pop();\n added.push(node); // push added preceding siblings on in order and insert\n morphedNode.parentElement.insertBefore(node, morphedNode);\n }\n added.push(morphedNode);\n while (nextSibling != null) {\n stack.push(nextSibling);\n added.push(nextSibling); // here we are going in order, so push on as we scan, rather than add\n nextSibling = nextSibling.nextSibling;\n }\n while (stack.length > 0) {\n morphedNode.parentElement.insertBefore(stack.pop(), morphedNode.nextSibling);\n }\n return added;\n }\n\n function findBestNodeMatch(newContent, oldNode, ctx) {\n let currentElement;\n currentElement = newContent.firstChild;\n let bestElement = currentElement;\n let score = 0;\n while (currentElement) {\n let newScore = scoreElement(currentElement, oldNode, ctx);\n if (newScore > score) {\n bestElement = currentElement;\n score = newScore;\n }\n currentElement = currentElement.nextSibling;\n }\n return bestElement;\n }\n\n function scoreElement(node1, node2, ctx) {\n if (isSoftMatch(node1, node2)) {\n return .5 + getIdIntersectionCount(ctx, node1, node2);\n }\n return 0;\n }\n\n function removeNode(tempNode, ctx) {\n removeIdsFromConsideration(ctx, tempNode)\n if (ctx.callbacks.beforeNodeRemoved(tempNode) === false) return;\n\n tempNode.remove();\n ctx.callbacks.afterNodeRemoved(tempNode);\n }\n\n //=============================================================================\n // ID Set Functions\n //=============================================================================\n\n function isIdInConsideration(ctx, id) {\n return !ctx.deadIds.has(id);\n }\n\n function idIsWithinNode(ctx, id, targetNode) {\n let idSet = ctx.idMap.get(targetNode) || EMPTY_SET;\n return idSet.has(id);\n }\n\n function removeIdsFromConsideration(ctx, node) {\n let idSet = ctx.idMap.get(node) || EMPTY_SET;\n for (const id of idSet) {\n ctx.deadIds.add(id);\n }\n }\n\n function getIdIntersectionCount(ctx, node1, node2) {\n let sourceSet = ctx.idMap.get(node1) || EMPTY_SET;\n let matchCount = 0;\n for (const id of sourceSet) {\n // a potential match is an id in the source and potentialIdsSet, but\n // that has not already been merged into the DOM\n if (isIdInConsideration(ctx, id) && idIsWithinNode(ctx, id, node2)) {\n ++matchCount;\n }\n }\n return matchCount;\n }\n\n /**\n * A bottom up algorithm that finds all elements with ids inside of the node\n * argument and populates id sets for those nodes and all their parents, generating\n * a set of ids contained within all nodes for the entire hierarchy in the DOM\n *\n * @param node {Element}\n * @param {Map<Node, Set<String>>} idMap\n */\n function populateIdMapForNode(node, idMap) {\n let nodeParent = node.parentElement;\n // find all elements with an id property\n let idElements = node.querySelectorAll('[id]');\n for (const elt of idElements) {\n let current = elt;\n // walk up the parent hierarchy of that element, adding the id\n // of element to the parent's id set\n while (current !== nodeParent && current != null) {\n let idSet = idMap.get(current);\n // if the id set doesn't exist, create it and insert it in the map\n if (idSet == null) {\n idSet = new Set();\n idMap.set(current, idSet);\n }\n idSet.add(elt.id);\n current = current.parentElement;\n }\n }\n }\n\n /**\n * This function computes a map of nodes to all ids contained within that node (inclusive of the\n * node). This map can be used to ask if two nodes have intersecting sets of ids, which allows\n * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n * to contribute to a parent nodes matching.\n *\n * @param {Element} oldContent the old content that will be morphed\n * @param {Element} newContent the new content to morph to\n * @returns {Map<Node, Set<String>>} a map of nodes to id sets for the\n */\n function createIdMap(oldContent, newContent) {\n let idMap = new Map();\n populateIdMapForNode(oldContent, idMap);\n populateIdMapForNode(newContent, idMap);\n return idMap;\n }\n\n //=============================================================================\n // This is what ends up becoming the Idiomorph global object\n //=============================================================================\n return {\n morph,\n defaults\n }\n })();\n\nexport {Idiomorph};\n","import HotwireSpark from \"./index.js\"\n\nexport function log(...args) {\n if (HotwireSpark.config.loggingEnabled) {\n console.log(`[hotwire_spark]`, ...args)\n }\n}\n\n","/*\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","import { Application } from \"@hotwired/stimulus\"\nimport { log } from \"../logger.js\"\nimport { cacheBustedUrl, reloadHtmlDocument } from \"../helpers.js\"\n\nexport class StimulusReloader {\n static async reload(filePattern) {\n const document = await reloadHtmlDocument()\n return new StimulusReloader(document, filePattern).reload()\n }\n\n constructor(document, filePattern = /./) {\n this.document = document\n this.filePattern = filePattern\n this.application = window.Stimulus || Application.start()\n }\n\n async reload() {\n log(\"Reload Stimulus controllers...\")\n\n this.application.stop()\n\n await this.#reloadStimulusControllers()\n\n this.application.start()\n }\n\n async #reloadStimulusControllers() {\n await Promise.all(\n this.#stimulusControllerPaths.map(async moduleName => this.#reloadStimulusController(moduleName))\n )\n }\n\n get #stimulusControllerPaths() {\n return Object.keys(this.#stimulusPathsByModule).filter(path => path.endsWith(\"_controller\") && this.#shouldReloadController(path))\n }\n\n #shouldReloadController(path) {\n return this.filePattern.test(path)\n }\n\n get #stimulusPathsByModule() {\n this.pathsByModule = this.pathsByModule || this.#parseImportmapJson()\n return this.pathsByModule\n }\n\n #parseImportmapJson() {\n const importmapScript = this.document.querySelector(\"script[type=importmap]\")\n return JSON.parse(importmapScript.text).imports\n }\n\n async #reloadStimulusController(moduleName) {\n log(`\\t${moduleName}`)\n\n const controllerName = this.#extractControllerName(moduleName)\n const path = cacheBustedUrl(this.#pathForModuleName(moduleName))\n\n const module = await import(path)\n\n this.#registerController(controllerName, module)\n }\n\n #pathForModuleName(moduleName) {\n return this.#stimulusPathsByModule[moduleName]\n }\n\n #extractControllerName(path) {\n return path\n .replace(/^.*\\//, \"\")\n .replace(\"_controller\", \"\")\n .replace(/\\//g, \"--\")\n .replace(/_/g, \"-\")\n }\n\n #registerController(name, module) {\n this.application.unload(name)\n this.application.register(name, module.default)\n }\n}\n","import { Idiomorph } from \"idiomorph/dist/idiomorph.esm.js\"\nimport { log } from \"../logger.js\"\nimport { reloadHtmlDocument } from \"../helpers.js\"\nimport { StimulusReloader } from \"./stimulus_reloader.js\"\n\nexport class HtmlReloader {\n static async reload() {\n return new HtmlReloader().reload()\n }\n\n async reload() {\n const reloadedDocument = await this.#reloadHtml()\n await this.#reloadStimulus(reloadedDocument)\n }\n\n async #reloadHtml() {\n log(\"Reload html...\")\n\n const reloadedDocument = await reloadHtmlDocument()\n this.#updateBody(reloadedDocument.body)\n return reloadedDocument\n }\n\n async #reloadStimulus(reloadedDocument) {\n return new StimulusReloader(reloadedDocument).reload()\n }\n\n #updateBody(newBody) {\n Idiomorph.morph(document.body, newBody)\n }\n}\n","import { log } from \"../logger.js\"\nimport { cacheBustedUrl, reloadHtmlDocument } from \"../helpers.js\"\n\nexport class CssReloader {\n static async reload(...params) {\n return new CssReloader(...params).reload()\n }\n\n constructor(filePattern = /./) {\n this.filePattern = filePattern\n }\n\n async reload() {\n log(\"Reload css...\")\n await Promise.all(await this.#reloadAllLinks())\n }\n\n async #reloadAllLinks() {\n const newCssLinks = await this.#loadNewCssLinks();\n return newCssLinks.map(link => this.#reloadLinkIfNeeded(link))\n }\n\n async #loadNewCssLinks() {\n const reloadedDocument = await reloadHtmlDocument()\n return Array.from(reloadedDocument.head.querySelectorAll(\"link[rel='stylesheet']\"))\n }\n\n #reloadLinkIfNeeded(link) {\n console.debug(\"reload if needed\", link);\n if (this.#shouldReloadLink(link)) {\n return this.#reloadLink(link)\n } else {\n return Promise.resolve()\n }\n }\n\n #shouldReloadLink(link) {\n console.debug(\"CHECKING \", link.getAttribute(\"href\"), this.filePattern);\n return this.filePattern.test(link.getAttribute(\"href\"))\n }\n\n async #reloadLink(link) {\n return new Promise(resolve => {\n const href = link.getAttribute(\"href\")\n const newLink = this.#findExistingLinkFor(link) || this.#appendNewLink(link)\n\n newLink.setAttribute(\"href\", cacheBustedUrl(link.getAttribute(\"href\")))\n newLink.onload = () => {\n log(`\\t${href}`)\n resolve()\n }\n })\n }\n\n #findExistingLinkFor(link) {\n return this.#cssLinks.find(newLink => {\n return this.#withoutAssetDigest(link.href) === this.#withoutAssetDigest(newLink.href)\n })\n }\n\n get #cssLinks() {\n return Array.from(document.querySelectorAll(\"link[rel='stylesheet']\"))\n }\n\n #withoutAssetDigest(url) {\n return url.replace(/-[^-]+\\.css.*$/, \".css\")\n }\n\n #appendNewLink(link) {\n document.head.append(link)\n return link\n }\n}\n","import consumer from \"./consumer\"\nimport { nameFromFilePath } from \"../helpers.js\";\nimport { HtmlReloader } from \"../reloaders/html_reloader.js\";\nimport { CssReloader } from \"../reloaders/css_reloader.js\";\nimport { StimulusReloader } from \"../reloaders/stimulus_reloader.js\";\n\nconsumer.subscriptions.create({ channel: \"HotwireSpark::Channel\" }, {\n connected() {\n document.body.setAttribute(\"data-hotwire-spark-ready\", \"\")\n },\n\n async received(data) {\n try {\n await this.dispatchMessage(data)\n } catch(error) {\n console.log(`Error on ${data.action}`, error)\n }\n },\n\n dispatchMessage({ action, path }) {\n const fileName = nameFromFilePath(path)\n\n switch (action) {\n case \"reload_html\":\n return this.reloadHtml()\n case \"reload_css\":\n return this.reloadCss(fileName)\n case \"reload_stimulus\":\n return this.reloadStimulus(fileName)\n }\n },\n\n reloadHtml() {\n return HtmlReloader.reload()\n },\n\n reloadCss(path) {\n return CssReloader.reload(new RegExp(path))\n },\n\n reloadStimulus(path) {\n return StimulusReloader.reload(new RegExp(path))\n }\n})\n\n","import \"./channels/monitoring_channel.js\"\n\nconst HotwireSpark = {\n config: {\n loggingEnabled: true,\n }\n}\n\nexport default HotwireSpark\n"],"names":["adapters","logger","console","undefined","WebSocket","log","messages","this","enabled","push","Date","now","getTime","secondsSince","time","ConnectionMonitor","constructor","connection","visibilityDidChange","bind","reconnectAttempts","start","isRunning","startedAt","stoppedAt","startPolling","addEventListener","staleThreshold","stop","stopPolling","removeEventListener","recordMessage","pingedAt","recordConnect","disconnectedAt","recordDisconnect","poll","clearTimeout","pollTimeout","setTimeout","reconnectIfStale","getPollInterval","reconnectionBackoffRate","Math","pow","min","random","connectionIsStale","refreshedAt","disconnectedRecently","reopen","document","visibilityState","isOpen","INTERNAL","message_types","welcome","disconnect","ping","confirmation","rejection","disconnect_reasons","unauthorized","invalid_request","server_restart","remote","default_mount_path","protocols","supportedProtocols","slice","length","indexOf","Connection","consumer","open","subscriptions","monitor","disconnected","send","data","webSocket","JSON","stringify","isActive","getState","socketProtocols","subprotocols","uninstallEventHandlers","url","installEventHandlers","close","allowReconnect","error","reopenDelay","getProtocol","protocol","isState","triedToReconnect","isProtocolSupported","call","states","state","readyState","toLowerCase","eventName","events","handler","prototype","message","event","identifier","reason","reconnect","type","parse","reconnectAttempted","reload","confirmSubscription","notify","reconnected","reject","notifyAll","willAttemptReconnect","Subscription","params","mixin","object","properties","key","value","extend","perform","action","command","unsubscribe","remove","SubscriptionGuarantor","pendingSubscriptions","guarantee","subscription","startGuaranteeing","forget","filter","s","stopGuaranteeing","retrySubscribing","retryTimeout","subscribe","map","Subscriptions","guarantor","create","channelName","channel","add","ensureActiveConnection","findAll","sendCommand","callbackName","args","Consumer","_url","test","a","createElement","href","replace","createWebSocketURL","connect","addSubProtocol","subprotocol","name","element","head","querySelector","getAttribute","getConfig","createConsumer","urlWithParams","urlString","URL","window","location","origin","Object","entries","forEach","_ref","searchParams","set","toString","cacheBustedUrl","async","reloadHtmlDocument","currentUrl","hotwire_spark","response","fetch","ok","Error","status","fetchedHTML","text","DOMParser","parseFromString","Idiomorph","EMPTY_SET","Set","defaults","morphStyle","callbacks","beforeNodeAdded","noOp","afterNodeAdded","beforeNodeMorphed","afterNodeMorphed","beforeNodeRemoved","afterNodeRemoved","beforeAttributeUpdated","style","shouldPreserve","elt","shouldReAppend","shouldRemove","afterHeadMorphed","morphNormalizedContent","oldNode","normalizedNewContent","ctx","block","oldHead","newHead","promises","handleHeadElement","Promise","all","then","assign","ignore","morphChildren","children","bestMatch","newContent","currentElement","firstChild","bestElement","score","newScore","scoreElement","nextSibling","findBestNodeMatch","previousSibling","morphedNode","morphOldNodeTo","stack","added","node","pop","parentElement","insertBefore","insertSiblings","ignoreValueOfActiveElement","possibleActiveElement","ignoreActiveValue","activeElement","ignoreActive","isSoftMatch","HTMLHeadElement","from","to","nodeType","fromAttributes","attributes","toAttributes","fromAttribute","ignoreAttribute","setAttribute","i","toAttribute","hasAttribute","removeAttribute","nodeValue","HTMLInputElement","fromValue","toValue","syncBooleanAttribute","HTMLOptionElement","HTMLTextAreaElement","syncInputValue","syncNodeFrom","replaceChild","newParent","oldParent","newChild","nextNewChild","insertionPoint","appendChild","removeIdsFromConsideration","isIdSetMatch","idSetMatch","findIdSetMatch","removeNodesBetween","softMatch","findSoftMatch","tempNode","removeNode","attr","updateType","attributeName","ignoreUpdate","newHeadTag","currentHead","removed","preserved","nodesToAppend","headMergeStyle","srcToNewHeadNodes","Map","newHeadChild","outerHTML","currentHeadElt","inNewContent","has","isReAppended","isPreserved","delete","values","newNode","newElt","createRange","createContextualFragment","src","resolve","promise","_resolve","removedElement","removeChild","kept","node1","node2","tagName","id","getIdIntersectionCount","startInclusive","endExclusive","newChildPotentialIdCount","potentialMatch","otherMatchCount","potentialSoftMatch","siblingSoftMatchCount","isIdInConsideration","deadIds","idIsWithinNode","targetNode","idMap","get","idSet","sourceSet","matchCount","populateIdMapForNode","nodeParent","idElements","querySelectorAll","current","createIdMap","oldContent","morph","config","Document","documentElement","parser","contentWithSvgsRemoved","match","content","generatedByIdiomorph","htmlElement","body","parseContent","normalizedContent","Node","dummyParent","append","normalizeContent","finalConfig","mergeDefaults","target","createMorphContext","HotwireSpark","loggingEnabled","_len","arguments","Array","_key","EventListener","eventTarget","eventOptions","unorderedBindings","bindingConnected","binding","bindingDisconnected","handleEvent","extendedEvent","stopImmediatePropagation","immediatePropagationStopped","extendEvent","bindings","hasBindings","size","sort","left","right","leftIndex","index","rightIndex","Dispatcher","application","eventListenerMaps","started","eventListeners","eventListener","reduce","listeners","concat","fetchEventListenerForBinding","clearEventListeners","clearEventListenersForBinding","handleError","detail","removeMappedEventListenerFor","eventListenerMap","fetchEventListenerMapForEventTarget","cacheKey","fetchEventListener","createEventListener","parts","keys","join","defaultActionDescriptorFilters","stopPropagation","prevent","preventDefault","self","descriptorPattern","parseEventTarget","eventTargetName","camelize","_","char","toUpperCase","namespaceCamelize","allModifiers","Action","descriptor","schema","defaultEventNames","getDefaultEventNameForElement","methodName","keyFilter","forToken","token","descriptorString","matches","trim","includes","split","options","parseActionDescriptorString","eventFilter","shouldIgnoreKeyboardEvent","filters","keyFilterDissatisfied","standardFilter","keyMappings","property","hasOwnProperty","shouldIgnoreMouseEvent","pattern","RegExp","typecast","meta","ctrl","alt","shift","modifier","metaKey","ctrlKey","altKey","shiftKey","button","form","details","input","e","select","textarea","o_O","Binding","context","actionEvent","prepareActionEvent","willBeInvokedByEvent","applyEventModifiers","invokeWithEvent","method","controller","actionDescriptorFilters","passes","currentTarget","logDebugActivity","KeyboardEvent","MouseEvent","Element","contains","scope","containsElement","ElementObserver","delegate","mutationObserverInit","childList","subtree","elements","mutationObserver","MutationObserver","mutations","processMutations","observe","refresh","pause","callback","takeRecords","matchElementsInTree","removeElement","addElement","mutation","processMutation","processAttributeChange","processRemovedNodes","removedNodes","processAddedNodes","addedNodes","elementAttributeChanged","matchElement","nodes","elementFromNode","processTree","elementIsActive","tree","processor","ELEMENT_NODE","isConnected","elementMatched","elementUnmatched","AttributeObserver","elementObserver","selector","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","Multimap","valuesByKey","prune","del","hasKey","hasValue","some","getValuesForKey","getKeysForValue","_values","SelectorObserver","_selector","matchesByElement","selectorMatchElement","selectorMatched","selectors","selectorUnmatched","_attributeName","matchedBefore","StringMapObserver","stringMap","attributeOldValue","knownAttributeNames","refreshAttribute","oldValue","getStringMapKeyForAttribute","stringMapKeyAdded","stringMapValueChanged","stringMapKeyRemoved","currentAttributeNames","recordedAttributeNames","attribute","TokenListObserver","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","unmatchedTokens","matchedTokens","refreshTokensForElement","tokensUnmatched","tokens","tokenMatched","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","max","zip","findIndex","previousToken","currentToken","tokenString","parseTokenString","ValueListObserver","tokenListObserver","parseResultsByToken","WeakMap","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","connectAction","disconnectAction","clear","ValueObserver","receiver","stringMapObserver","valueDescriptorMap","invokeChangedCallbacksForDefaultValues","invokeChangedCallback","writer","defaultValue","valueDescriptorNameMap","valueDescriptors","rawValue","rawOldValue","changedMethodName","changedMethod","reader","TypeError","descriptors","hasMethodName","charAt","TargetObserver","targetsByName","disconnectAllTargets","connectTarget","disconnectTarget","_a","targetConnected","targetDisconnected","readInheritableStaticArrayValues","propertyName","ancestors","getPrototypeOf","reverse","getAncestorsForConstructor","definition","isArray","getOwnStaticArrayValues","OutletObserver","outletsByName","outletElementsByName","selectorObserverMap","attributeObserverMap","outletDefinitions","outletName","setupSelectorObserverForOutlet","setupAttributeObserverForOutlet","dependentContexts","observer","disconnectAllOutlets","stopSelectorObservers","stopAttributeObservers","outlet","getOutlet","connectOutlet","getOutletFromMap","disconnectOutlet","hasOutlet","hasOutletController","controllerAttribute","_element","getOutletNameFromOutletAttributeName","updateSelectorObserverForOutlet","outletConnected","outletDisconnected","selectorObserver","attributeNameForOutletName","outlets","getSelectorForOutletName","outletAttributeForScope","find","outletDependencies","dependencies","router","modules","module","controllerConstructor","dependentControllerIdentifiers","identifiers","contexts","getControllerForElementAndIdentifier","Context","functionName","bindingObserver","dispatcher","valueObserver","targetObserver","outletObserver","initialize","invokeControllerMethod","bless","shadowConstructor","shadowProperties","getOwnKeys","shadowingDescriptor","getOwnPropertyDescriptor","getShadowedDescriptor","getShadowProperties","defineProperties","shadow","blessings","blessedProperties","blessing","getBlessedProperties","getOwnPropertySymbols","getOwnPropertyNames","extendWithReflect","extended","Reflect","construct","setPrototypeOf","b","testReflectExtension","Module","blessDefinition","contextsByScope","connectedContexts","connectContextForScope","fetchContextForScope","disconnectContextForScope","ClassMap","getDataKey","getAll","getAttributeName","getAttributeNameForKey","DataMap","Guide","warnedKeysByObject","warn","warnedKeys","attributeValueContainsToken","TargetSet","targetName","targetNames","findTarget","findLegacyTarget","targets","findAllTargets","findAllLegacyTargets","getSelectorForTargetName","findElement","findAllElements","targetAttributeForScope","getLegacySelectorForTargetName","deprecate","targetDescriptor","targetAttribute","revisedAttributeName","guide","OutletSet","controllerElement","outletNames","findOutlet","findAllOutlets","queryElements","matchesElement","Scope","classes","closest","controllerSelector","documentScope","isDocumentScope","ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","parseValueForElementAndIdentifier","scopesByIdentifier","fetchScopesByIdentifierForElement","createScopeForElementAndIdentifier","referenceCount","scopeConnected","scopeDisconnected","Router","scopeObserver","modulesByIdentifier","loadDefinition","unloadIdentifier","connectModule","afterLoad","disconnectModule","getContextForElementAndIdentifier","proposeToConnectScopeForElementAndIdentifier","defaultSchema","enter","tab","esc","space","up","down","home","end","page_up","page_down","objectFromEntries","c","n","array","memo","k","v","Application","debug","logFormattedMessage","register","load","registerActionOption","rest","shouldLoad","unload","controllers","onerror","groupCollapsed","groupEnd","StimulusReloader","filePattern","Stimulus","reloadStimulusControllers","stimulusControllerPaths","reloadStimulusController","moduleName","stimulusPathsByModule","path","endsWith","shouldReloadController","pathsByModule","parseImportmapJson","importmapScript","imports","controllerName","extractControllerName","pathForModuleName","import","registerController","default","HtmlReloader","reloadedDocument","reloadHtml","reloadStimulus","updateBody","newBody","CssReloader","reloadAllLinks","loadNewCssLinks","link","reloadLinkIfNeeded","shouldReloadLink","reloadLink","newLink","findExistingLinkFor","appendNewLink","onload","cssLinks","withoutAssetDigest","connected","received","dispatchMessage","fileName","nameFromFilePath","reloadCss"],"mappings":"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","x_google_ignoreList":[0,3,5]}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
|
10
|
+
* files in this directory. Styles in this file should be added after the last require_* statement.
|
11
|
+
* It is generally better to create a new file per style scope.
|
12
|
+
*
|
13
|
+
*= require_tree .
|
14
|
+
*= require_self
|
15
|
+
*/
|