{
  "version": 3,
  "sources": ["../../../node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@rails/actioncable/src/index.js", "../../javascript/controllers/notifications_controller.js", "../../../node_modules/clipboard/dist/clipboard.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.js", "../../javascript/controllers/acquisition_source_controller.js", "../../javascript/controllers/articles_notifications_controller.js", "../../javascript/controllers/attribution_controller.js", "../../javascript/controllers/background_job_controller.js", "../../javascript/controllers/beta_alert_controller.js", "../../javascript/controllers/character_counter_controller.js", "../../javascript/controllers/chart_controller.js", "../../javascript/controllers/chat_controller.js", "../../javascript/controllers/clarify_controller.js", "../../javascript/controllers/comment_form_controller.js", "../../javascript/controllers/delete_confirm_controller.js", "../../javascript/controllers/description_check_type_controller.js", "../../javascript/controllers/device_form_controller.js", "../../javascript/controllers/dynamic_dropdown_controller.js", "../../javascript/controllers/file_size_validator_controller.js", "../../javascript/controllers/filter_component_controller.js", "../../javascript/controllers/flatpickr_controller.js", "../../javascript/controllers/form_change_controller.js", "../../javascript/controllers/form_controller.js", "../../javascript/controllers/form_file_group_controller.js", "../../javascript/controllers/hello_controller.js", "../../javascript/controllers/highlight_controller.js", "../../javascript/controllers/integration_mapping_form_controller.js", "../../javascript/controllers/ipc_controller.js", "../../javascript/controllers/issue_form_controller.js", "../../javascript/controllers/issue_strength_gauge_controller.js", "../../javascript/controllers/issue_table_row_controller.js", "../../javascript/controllers/issue_tags_form_controller.js", "../../javascript/controllers/link_choice_controller.js", "../../javascript/controllers/link_controller.js", "../../javascript/controllers/new_survey_question_form_controller.js", "../../javascript/controllers/index.js", "../../javascript/controllers/overlay_issue_form_controller.js", "../../javascript/controllers/projects_controller.js", "../../javascript/controllers/radio_text_field_controller.js", "../../javascript/controllers/screenshot_controller.js", "../../javascript/controllers/screenshot_editor_controller.js", "../../javascript/controllers/search_controller.js", "../../javascript/controllers/sentiment_analysis_charts_controller.js", "../../javascript/controllers/sentiments_controller.js", "../../javascript/controllers/source_type_controller.js", "../../javascript/controllers/steps_to_reproduce_form_controller.js", "../../javascript/controllers/theme_controller.js", "../../javascript/controllers/tooltip2_controller.js", "../../javascript/controllers/tooltip_controller.js", "../../javascript/controllers/upload_controller.js", "../../javascript/controllers/video_controller.js", "../../javascript/controllers/voter_controller.js", "../../javascript/controllers/watch_controller.js", "../../javascript/controllers/webhook_test_controller.js", "../../../node_modules/marked/lib/marked.esm.js", "../../javascript/controllers/support_knowledge_controller.js", "../../javascript/controllers/gibberish_detection_controller.js", "../../javascript/controllers/sidebar_collapsible_controller.js", "../../javascript/custom/videojs_reload.js", "../../javascript/custom/timezone.js", "../../javascript/custom/recent_issues.js", "../../javascript/application.js"],
  "sourcesContent": ["export default {\n  logger: self.console,\n  WebSocket: self.WebSocket\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n//   ActionCable.logger.enabled = true\n//\n//   Example:\n//\n//   import * as ActionCable from '@rails/actioncable'\n//\n//   ActionCable.logger.enabled = true\n//   ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now())\n      adapters.logger.log(\"[ActionCable]\", ...messages)\n    }\n  },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this)\n    this.connection = connection\n    this.reconnectAttempts = 0\n  }\n\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now()\n      delete this.stoppedAt\n      this.startPolling()\n      addEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n    }\n  }\n\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now()\n      this.stopPolling()\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(\"ConnectionMonitor stopped\")\n    }\n  }\n\n  isRunning() {\n    return this.startedAt && !this.stoppedAt\n  }\n\n  recordPing() {\n    this.pingedAt = now()\n  }\n\n  recordConnect() {\n    this.reconnectAttempts = 0\n    this.recordPing()\n    delete this.disconnectedAt\n    logger.log(\"ConnectionMonitor recorded connect\")\n  }\n\n  recordDisconnect() {\n    this.disconnectedAt = now()\n    logger.log(\"ConnectionMonitor recorded disconnect\")\n  }\n\n  // Private\n\n  startPolling() {\n    this.stopPolling()\n    this.poll()\n  }\n\n  stopPolling() {\n    clearTimeout(this.pollTimeout)\n  }\n\n  poll() {\n    this.pollTimeout = setTimeout(() => {\n      this.reconnectIfStale()\n      this.poll()\n    }\n    , this.getPollInterval())\n  }\n\n  getPollInterval() {\n    const { staleThreshold, reconnectionBackoffRate } = this.constructor\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n    const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n    const jitter = jitterMax * Math.random()\n    return staleThreshold * 1000 * backoff * (1 + jitter)\n  }\n\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n      this.reconnectAttempts++\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n      } else {\n        logger.log(\"ConnectionMonitor reopening\")\n        this.connection.reopen()\n      }\n    }\n  }\n\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt\n  }\n\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n  }\n\n  disconnectedRecently() {\n    return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n  }\n\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout(() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n          this.connection.reopen()\n        }\n      }\n      , 200)\n    }\n  }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\n  \"message_types\": {\n    \"welcome\": \"welcome\",\n    \"disconnect\": \"disconnect\",\n    \"ping\": \"ping\",\n    \"confirmation\": \"confirm_subscription\",\n    \"rejection\": \"reject_subscription\"\n  },\n  \"disconnect_reasons\": {\n    \"unauthorized\": \"unauthorized\",\n    \"invalid_request\": \"invalid_request\",\n    \"server_restart\": \"server_restart\"\n  },\n  \"default_mount_path\": \"/cable\",\n  \"protocols\": [\n    \"actioncable-v1-json\",\n    \"actioncable-unsupported\"\n  ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this)\n    this.consumer = consumer\n    this.subscriptions = this.consumer.subscriptions\n    this.monitor = new ConnectionMonitor(this)\n    this.disconnected = true\n  }\n\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data))\n      return true\n    } else {\n      return false\n    }\n  }\n\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n      return false\n    } else {\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`)\n      if (this.webSocket) { this.uninstallEventHandlers() }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, protocols)\n      this.installEventHandlers()\n      this.monitor.start()\n      return true\n    }\n  }\n\n  close({allowReconnect} = {allowReconnect: true}) {\n    if (!allowReconnect) { this.monitor.stop() }\n    // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n    if (this.isOpen()) {\n      return this.webSocket.close()\n    }\n  }\n\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n    if (this.isActive()) {\n      try {\n        return this.close()\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error)\n      }\n      finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n        setTimeout(this.open, this.constructor.reopenDelay)\n      }\n    } else {\n      return this.open()\n    }\n  }\n\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol\n    }\n  }\n\n  isOpen() {\n    return this.isState(\"open\")\n  }\n\n  isActive() {\n    return this.isState(\"open\", \"connecting\")\n  }\n\n  // Private\n\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n  }\n\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0\n  }\n\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase()\n        }\n      }\n    }\n    return null\n  }\n\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this)\n      this.webSocket[`on${eventName}`] = handler\n    }\n  }\n\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {}\n    }\n  }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) { return }\n    const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n    switch (type) {\n      case message_types.welcome:\n        this.monitor.recordConnect()\n        return this.subscriptions.reload()\n      case message_types.disconnect:\n        logger.log(`Disconnecting. Reason: ${reason}`)\n        return this.close({allowReconnect: reconnect})\n      case message_types.ping:\n        return this.monitor.recordPing()\n      case message_types.confirmation:\n        this.subscriptions.confirmSubscription(identifier)\n        return this.subscriptions.notify(identifier, \"connected\")\n      case message_types.rejection:\n        return this.subscriptions.reject(identifier)\n      default:\n        return this.subscriptions.notify(identifier, \"received\", message)\n    }\n  },\n\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n    this.disconnected = false\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n      return this.close({allowReconnect: false})\n    }\n  },\n\n  close(event) {\n    logger.log(\"WebSocket onclose event\")\n    if (this.disconnected) { return }\n    this.disconnected = true\n    this.monitor.recordDisconnect()\n    return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n  },\n\n  error() {\n    logger.log(\"WebSocket onerror event\")\n  }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n//     connected() {\n//       // Called once the subscription has been successfully completed\n//     },\n//\n//     disconnected({ willAttemptReconnect: boolean }) {\n//       // Called when the client has disconnected with the server.\n//       // The object will have an `willAttemptReconnect` property which\n//       // says whether the client has the intention of attempting\n//       // to reconnect.\n//     },\n//\n//     appear() {\n//       this.perform('appear', {appearing_on: this.appearingOn()})\n//     },\n//\n//     away() {\n//       this.perform('away')\n//     },\n//\n//     appearingOn() {\n//       $('main').data('appearing-on')\n//     }\n//   })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n//   class AppearanceChannel < ApplicationActionCable::Channel\n//     def subscribed\n//       current_user.appear\n//     end\n//\n//     def unsubscribed\n//       current_user.disappear\n//     end\n//\n//     def appear(data)\n//       current_user.appear on: data['appearing_on']\n//     end\n//\n//     def away\n//       current_user.away\n//     end\n//   end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key]\n      object[key] = value\n    }\n  }\n  return object\n}\n\nexport default class Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer\n    this.identifier = JSON.stringify(params)\n    extend(this, mixin)\n  }\n\n  // Perform a channel action with the optional data passed as an attribute\n  perform(action, data = {}) {\n    data.action = action\n    return this.send(data)\n  }\n\n  send(data) {\n    return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n  }\n\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this)\n  }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions\n    this.pendingSubscriptions = []\n  }\n\n  guarantee(subscription) {\n    if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n      this.pendingSubscriptions.push(subscription) \n    }\n    else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n    }\n    this.startGuaranteeing()\n  }\n\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n    this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n  }\n\n  startGuaranteeing() {\n    this.stopGuaranteeing()\n    this.retrySubscribing()\n  }\n  \n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout)\n  }\n\n  retrySubscribing() {\n    this.retryTimeout = setTimeout(() => {\n      if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n        this.pendingSubscriptions.map((subscription) => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n          this.subscriptions.subscribe(subscription)\n        })\n      }\n    }\n    , 500)\n  }\n}\n\nexport default SubscriptionGuarantor", "import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer\n    this.guarantor = new SubscriptionGuarantor(this)\n    this.subscriptions = []\n  }\n\n  create(channelName, mixin) {\n    const channel = channelName\n    const params = typeof channel === \"object\" ? channel : {channel}\n    const subscription = new Subscription(this.consumer, params, mixin)\n    return this.add(subscription)\n  }\n\n  // Private\n\n  add(subscription) {\n    this.subscriptions.push(subscription)\n    this.consumer.ensureActiveConnection()\n    this.notify(subscription, \"initialized\")\n    this.subscribe(subscription)\n    return subscription\n  }\n\n  remove(subscription) {\n    this.forget(subscription)\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\")\n    }\n    return subscription\n  }\n\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription) => {\n      this.forget(subscription)\n      this.notify(subscription, \"rejected\")\n      return subscription\n    })\n  }\n\n  forget(subscription) {\n    this.guarantor.forget(subscription)\n    this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n    return subscription\n  }\n\n  findAll(identifier) {\n    return this.subscriptions.filter((s) => s.identifier === identifier)\n  }\n\n  reload() {\n    return this.subscriptions.map((subscription) =>\n      this.subscribe(subscription))\n  }\n\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription) =>\n      this.notify(subscription, callbackName, ...args))\n  }\n\n  notify(subscription, callbackName, ...args) {\n    let subscriptions\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription)\n    } else {\n      subscriptions = [subscription]\n    }\n\n    return subscriptions.map((subscription) =>\n      (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n  }\n\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription)\n    }\n  }\n\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`)\n    this.findAll(identifier).map((subscription) =>\n      this.guarantor.forget(subscription))\n  }\n\n  sendCommand(subscription, command) {\n    const {identifier} = subscription\n    return this.consumer.send({command, identifier})\n  }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n//   App.cable.disconnect()\n//\n// and to restart the connection:\n//\n//   App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n  constructor(url) {\n    this._url = url\n    this.subscriptions = new Subscriptions(this)\n    this.connection = new Connection(this)\n  }\n\n  get url() {\n    return createWebSocketURL(this._url)\n  }\n\n  send(data) {\n    return this.connection.send(data)\n  }\n\n  connect() {\n    return this.connection.open()\n  }\n\n  disconnect() {\n    return this.connection.close({allowReconnect: false})\n  }\n\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open()\n    }\n  }\n}\n\nexport function createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url()\n  }\n\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\")\n    a.href = url\n    // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n    a.href = a.href\n    a.protocol = a.protocol.replace(\"http\", \"ws\")\n    return a.href\n  } else {\n    return url\n  }\n}\n", "import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n  Connection,\n  ConnectionMonitor,\n  Consumer,\n  INTERNAL,\n  Subscription,\n  Subscriptions,\n  SubscriptionGuarantor,\n  adapters,\n  createWebSocketURL,\n  logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url)\n}\n\nexport function getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n  if (element) {\n    return element.getAttribute(\"content\")\n  }\n}\n", " ", "/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT \u00A9 Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"default\": function() { return /* binding */ clipboard; }\n});\n\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(279);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(370);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(817);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n;// CONCATENATED MODULE: ./src/common/command.js\n/**\n * Executes a given operation type.\n * @param {String} type\n * @return {Boolean}\n */\nfunction command(type) {\n  try {\n    return document.execCommand(type);\n  } catch (err) {\n    return false;\n  }\n}\n;// CONCATENATED MODULE: ./src/actions/cut.js\n\n\n/**\n * Cut action wrapper.\n * @param {String|HTMLElement} target\n * @return {String}\n */\n\nvar ClipboardActionCut = function ClipboardActionCut(target) {\n  var selectedText = select_default()(target);\n  command('cut');\n  return selectedText;\n};\n\n/* harmony default export */ var actions_cut = (ClipboardActionCut);\n;// CONCATENATED MODULE: ./src/common/create-fake-element.js\n/**\n * Creates a fake textarea element with a value.\n * @param {String} value\n * @return {HTMLElement}\n */\nfunction createFakeElement(value) {\n  var isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n  var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS\n\n  fakeElement.style.fontSize = '12pt'; // Reset box model\n\n  fakeElement.style.border = '0';\n  fakeElement.style.padding = '0';\n  fakeElement.style.margin = '0'; // Move element out of screen horizontally\n\n  fakeElement.style.position = 'absolute';\n  fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically\n\n  var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n  fakeElement.style.top = \"\".concat(yPosition, \"px\");\n  fakeElement.setAttribute('readonly', '');\n  fakeElement.value = value;\n  return fakeElement;\n}\n;// CONCATENATED MODULE: ./src/actions/copy.js\n\n\n\n/**\n * Create fake copy action wrapper using a fake element.\n * @param {String} target\n * @param {Object} options\n * @return {String}\n */\n\nvar fakeCopyAction = function fakeCopyAction(value, options) {\n  var fakeElement = createFakeElement(value);\n  options.container.appendChild(fakeElement);\n  var selectedText = select_default()(fakeElement);\n  command('copy');\n  fakeElement.remove();\n  return selectedText;\n};\n/**\n * Copy action wrapper.\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @return {String}\n */\n\n\nvar ClipboardActionCopy = function ClipboardActionCopy(target) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n    container: document.body\n  };\n  var selectedText = '';\n\n  if (typeof target === 'string') {\n    selectedText = fakeCopyAction(target, options);\n  } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {\n    // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n    selectedText = fakeCopyAction(target.value, options);\n  } else {\n    selectedText = select_default()(target);\n    command('copy');\n  }\n\n  return selectedText;\n};\n\n/* harmony default export */ var actions_copy = (ClipboardActionCopy);\n;// CONCATENATED MODULE: ./src/actions/default.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n/**\n * Inner function which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n * @param {Object} options\n */\n\nvar ClipboardActionDefault = function ClipboardActionDefault() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  // Defines base properties passed from constructor.\n  var _options$action = options.action,\n      action = _options$action === void 0 ? 'copy' : _options$action,\n      container = options.container,\n      target = options.target,\n      text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.\n\n  if (action !== 'copy' && action !== 'cut') {\n    throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n  } // Sets the `target` property using an element that will be have its content copied.\n\n\n  if (target !== undefined) {\n    if (target && _typeof(target) === 'object' && target.nodeType === 1) {\n      if (action === 'copy' && target.hasAttribute('disabled')) {\n        throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n      }\n\n      if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n        throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n      }\n    } else {\n      throw new Error('Invalid \"target\" value, use a valid Element');\n    }\n  } // Define selection strategy based on `text` property.\n\n\n  if (text) {\n    return actions_copy(text, {\n      container: container\n    });\n  } // Defines which selection strategy based on `target` property.\n\n\n  if (target) {\n    return action === 'cut' ? actions_cut(target) : actions_copy(target, {\n      container: container\n    });\n  }\n};\n\n/* harmony default export */ var actions_default = (ClipboardActionDefault);\n;// CONCATENATED MODULE: ./src/clipboard.js\nfunction clipboard_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return clipboard_typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\nfunction getAttributeValue(suffix, element) {\n  var attribute = \"data-clipboard-\".concat(suffix);\n\n  if (!element.hasAttribute(attribute)) {\n    return;\n  }\n\n  return element.getAttribute(attribute);\n}\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\n\nvar Clipboard = /*#__PURE__*/function (_Emitter) {\n  _inherits(Clipboard, _Emitter);\n\n  var _super = _createSuper(Clipboard);\n\n  /**\n   * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n   * @param {Object} options\n   */\n  function Clipboard(trigger, options) {\n    var _this;\n\n    _classCallCheck(this, Clipboard);\n\n    _this = _super.call(this);\n\n    _this.resolveOptions(options);\n\n    _this.listenClick(trigger);\n\n    return _this;\n  }\n  /**\n   * Defines if attributes would be resolved using internal setter functions\n   * or custom functions that were passed in the constructor.\n   * @param {Object} options\n   */\n\n\n  _createClass(Clipboard, [{\n    key: \"resolveOptions\",\n    value: function resolveOptions() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n      this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n      this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n      this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n    }\n    /**\n     * Adds a click event listener to the passed trigger.\n     * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n     */\n\n  }, {\n    key: \"listenClick\",\n    value: function listenClick(trigger) {\n      var _this2 = this;\n\n      this.listener = listen_default()(trigger, 'click', function (e) {\n        return _this2.onClick(e);\n      });\n    }\n    /**\n     * Defines a new `ClipboardAction` on each click event.\n     * @param {Event} e\n     */\n\n  }, {\n    key: \"onClick\",\n    value: function onClick(e) {\n      var trigger = e.delegateTarget || e.currentTarget;\n      var action = this.action(trigger) || 'copy';\n      var text = actions_default({\n        action: action,\n        container: this.container,\n        target: this.target(trigger),\n        text: this.text(trigger)\n      }); // Fires an event based on the copy operation result.\n\n      this.emit(text ? 'success' : 'error', {\n        action: action,\n        text: text,\n        trigger: trigger,\n        clearSelection: function clearSelection() {\n          if (trigger) {\n            trigger.focus();\n          }\n\n          window.getSelection().removeAllRanges();\n        }\n      });\n    }\n    /**\n     * Default `action` lookup function.\n     * @param {Element} trigger\n     */\n\n  }, {\n    key: \"defaultAction\",\n    value: function defaultAction(trigger) {\n      return getAttributeValue('action', trigger);\n    }\n    /**\n     * Default `target` lookup function.\n     * @param {Element} trigger\n     */\n\n  }, {\n    key: \"defaultTarget\",\n    value: function defaultTarget(trigger) {\n      var selector = getAttributeValue('target', trigger);\n\n      if (selector) {\n        return document.querySelector(selector);\n      }\n    }\n    /**\n     * Allow fire programmatically a copy action\n     * @param {String|HTMLElement} target\n     * @param {Object} options\n     * @returns Text copied.\n     */\n\n  }, {\n    key: \"defaultText\",\n\n    /**\n     * Default `text` lookup function.\n     * @param {Element} trigger\n     */\n    value: function defaultText(trigger) {\n      return getAttributeValue('text', trigger);\n    }\n    /**\n     * Destroy lifecycle.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.listener.destroy();\n    }\n  }], [{\n    key: \"copy\",\n    value: function copy(target) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n        container: document.body\n      };\n      return actions_copy(target, options);\n    }\n    /**\n     * Allow fire programmatically a cut action\n     * @param {String|HTMLElement} target\n     * @returns Text cutted.\n     */\n\n  }, {\n    key: \"cut\",\n    value: function cut(target) {\n      return actions_cut(target);\n    }\n    /**\n     * Returns the support of the given action, or all actions if no action is\n     * given.\n     * @param {String} [action]\n     */\n\n  }, {\n    key: \"isSupported\",\n    value: function isSupported() {\n      var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n      var actions = typeof action === 'string' ? [action] : action;\n      var support = !!document.queryCommandSupported;\n      actions.forEach(function (action) {\n        support = support && !!document.queryCommandSupported(action);\n      });\n      return support;\n    }\n  }]);\n\n  return Clipboard;\n}((tiny_emitter_default()));\n\n/* harmony default export */ var clipboard = (Clipboard);\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n    var proto = Element.prototype;\n\n    proto.matches = proto.matchesSelector ||\n                    proto.mozMatchesSelector ||\n                    proto.msMatchesSelector ||\n                    proto.oMatchesSelector ||\n                    proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n    while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n        if (typeof element.matches === 'function' &&\n            element.matches(selector)) {\n          return element;\n        }\n        element = element.parentNode;\n    }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar closest = __webpack_require__(828);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n    var listenerFn = listener.apply(this, arguments);\n\n    element.addEventListener(type, listenerFn, useCapture);\n\n    return {\n        destroy: function() {\n            element.removeEventListener(type, listenerFn, useCapture);\n        }\n    }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n    // Handle the regular Element usage\n    if (typeof elements.addEventListener === 'function') {\n        return _delegate.apply(null, arguments);\n    }\n\n    // Handle Element-less usage, it defaults to global delegation\n    if (typeof type === 'function') {\n        // Use `document` as the first parameter, then apply arguments\n        // This is a short way to .unshift `arguments` without running into deoptimizations\n        return _delegate.bind(null, document).apply(null, arguments);\n    }\n\n    // Handle Selector-based usage\n    if (typeof elements === 'string') {\n        elements = document.querySelectorAll(elements);\n    }\n\n    // Handle Array-like based usage\n    return Array.prototype.map.call(elements, function (element) {\n        return _delegate(element, selector, type, callback, useCapture);\n    });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n    return function(e) {\n        e.delegateTarget = closest(e.target, selector);\n\n        if (e.delegateTarget) {\n            callback.call(element, e);\n        }\n    }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ 879:\n/***/ (function(__unused_webpack_module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n    return value !== undefined\n        && value instanceof HTMLElement\n        && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n    var type = Object.prototype.toString.call(value);\n\n    return value !== undefined\n        && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n        && ('length' in value)\n        && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n    return typeof value === 'string'\n        || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n    var type = Object.prototype.toString.call(value);\n\n    return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar is = __webpack_require__(879);\nvar delegate = __webpack_require__(438);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n    if (!target && !type && !callback) {\n        throw new Error('Missing required arguments');\n    }\n\n    if (!is.string(type)) {\n        throw new TypeError('Second argument must be a String');\n    }\n\n    if (!is.fn(callback)) {\n        throw new TypeError('Third argument must be a Function');\n    }\n\n    if (is.node(target)) {\n        return listenNode(target, type, callback);\n    }\n    else if (is.nodeList(target)) {\n        return listenNodeList(target, type, callback);\n    }\n    else if (is.string(target)) {\n        return listenSelector(target, type, callback);\n    }\n    else {\n        throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n    }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n    node.addEventListener(type, callback);\n\n    return {\n        destroy: function() {\n            node.removeEventListener(type, callback);\n        }\n    }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n    Array.prototype.forEach.call(nodeList, function(node) {\n        node.addEventListener(type, callback);\n    });\n\n    return {\n        destroy: function() {\n            Array.prototype.forEach.call(nodeList, function(node) {\n                node.removeEventListener(type, callback);\n            });\n        }\n    }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n    return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ 817:\n/***/ (function(module) {\n\nfunction select(element) {\n    var selectedText;\n\n    if (element.nodeName === 'SELECT') {\n        element.focus();\n\n        selectedText = element.value;\n    }\n    else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n        var isReadOnly = element.hasAttribute('readonly');\n\n        if (!isReadOnly) {\n            element.setAttribute('readonly', '');\n        }\n\n        element.select();\n        element.setSelectionRange(0, element.value.length);\n\n        if (!isReadOnly) {\n            element.removeAttribute('readonly');\n        }\n\n        selectedText = element.value;\n    }\n    else {\n        if (element.hasAttribute('contenteditable')) {\n            element.focus();\n        }\n\n        var selection = window.getSelection();\n        var range = document.createRange();\n\n        range.selectNodeContents(element);\n        selection.removeAllRanges();\n        selection.addRange(range);\n\n        selectedText = selection.toString();\n    }\n\n    return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ 279:\n/***/ (function(module) {\n\nfunction E () {\n  // Keep this empty so it's easier to inherit from\n  // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n  on: function (name, callback, ctx) {\n    var e = this.e || (this.e = {});\n\n    (e[name] || (e[name] = [])).push({\n      fn: callback,\n      ctx: ctx\n    });\n\n    return this;\n  },\n\n  once: function (name, callback, ctx) {\n    var self = this;\n    function listener () {\n      self.off(name, listener);\n      callback.apply(ctx, arguments);\n    };\n\n    listener._ = callback\n    return this.on(name, listener, ctx);\n  },\n\n  emit: function (name) {\n    var data = [].slice.call(arguments, 1);\n    var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n    var i = 0;\n    var len = evtArr.length;\n\n    for (i; i < len; i++) {\n      evtArr[i].fn.apply(evtArr[i].ctx, data);\n    }\n\n    return this;\n  },\n\n  off: function (name, callback) {\n    var e = this.e || (this.e = {});\n    var evts = e[name];\n    var liveEvents = [];\n\n    if (evts && callback) {\n      for (var i = 0, len = evts.length; i < len; i++) {\n        if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n          liveEvents.push(evts[i]);\n      }\n    }\n\n    // Remove event from queue to prevent memory leak\n    // Suggested by https://github.com/lazd\n    // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n    (liveEvents.length)\n      ? e[name] = liveEvents\n      : delete e[name];\n\n    return this;\n  }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(686);\n/******/ })()\n.default;\n});", "/*\nTurbo 7.3.0\nCopyright \u00A9 2023 37signals LLC\n */\n(function () {\n    if (window.Reflect === undefined ||\n        window.customElements === undefined ||\n        window.customElements.polyfillWrapFlushCallback) {\n        return;\n    }\n    const BuiltInHTMLElement = HTMLElement;\n    const wrapperForTheName = {\n        HTMLElement: function HTMLElement() {\n            return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n        },\n    };\n    window.HTMLElement = wrapperForTheName[\"HTMLElement\"];\n    HTMLElement.prototype = BuiltInHTMLElement.prototype;\n    HTMLElement.prototype.constructor = HTMLElement;\n    Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n\n/**\n * The MIT License (MIT)\n * \n * Copyright (c) 2019 Javan Makhmali\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function(prototype) {\n  if (typeof prototype.requestSubmit == \"function\") return\n\n  prototype.requestSubmit = function(submitter) {\n    if (submitter) {\n      validateSubmitter(submitter, this);\n      submitter.click();\n    } else {\n      submitter = document.createElement(\"input\");\n      submitter.type = \"submit\";\n      submitter.hidden = true;\n      this.appendChild(submitter);\n      submitter.click();\n      this.removeChild(submitter);\n    }\n  };\n\n  function validateSubmitter(submitter, form) {\n    submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n    submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n    submitter.form == form || raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n  }\n\n  function raise(errorConstructor, message, name) {\n    throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n  }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\nfunction findSubmitterFromClickTarget(target) {\n    const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n    const candidate = element ? element.closest(\"input, button\") : null;\n    return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\nfunction clickCaptured(event) {\n    const submitter = findSubmitterFromClickTarget(event.target);\n    if (submitter && submitter.form) {\n        submittersByForm.set(submitter.form, submitter);\n    }\n}\n(function () {\n    if (\"submitter\" in Event.prototype)\n        return;\n    let prototype = window.Event.prototype;\n    if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n        prototype = window.SubmitEvent.prototype;\n    }\n    else if (\"SubmitEvent\" in window) {\n        return;\n    }\n    addEventListener(\"click\", clickCaptured, true);\n    Object.defineProperty(prototype, \"submitter\", {\n        get() {\n            if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n                return submittersByForm.get(this.target);\n            }\n        },\n    });\n})();\n\nvar FrameLoadingStyle;\n(function (FrameLoadingStyle) {\n    FrameLoadingStyle[\"eager\"] = \"eager\";\n    FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\nclass FrameElement extends HTMLElement {\n    static get observedAttributes() {\n        return [\"disabled\", \"complete\", \"loading\", \"src\"];\n    }\n    constructor() {\n        super();\n        this.loaded = Promise.resolve();\n        this.delegate = new FrameElement.delegateConstructor(this);\n    }\n    connectedCallback() {\n        this.delegate.connect();\n    }\n    disconnectedCallback() {\n        this.delegate.disconnect();\n    }\n    reload() {\n        return this.delegate.sourceURLReloaded();\n    }\n    attributeChangedCallback(name) {\n        if (name == \"loading\") {\n            this.delegate.loadingStyleChanged();\n        }\n        else if (name == \"complete\") {\n            this.delegate.completeChanged();\n        }\n        else if (name == \"src\") {\n            this.delegate.sourceURLChanged();\n        }\n        else {\n            this.delegate.disabledChanged();\n        }\n    }\n    get src() {\n        return this.getAttribute(\"src\");\n    }\n    set src(value) {\n        if (value) {\n            this.setAttribute(\"src\", value);\n        }\n        else {\n            this.removeAttribute(\"src\");\n        }\n    }\n    get loading() {\n        return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n    }\n    set loading(value) {\n        if (value) {\n            this.setAttribute(\"loading\", value);\n        }\n        else {\n            this.removeAttribute(\"loading\");\n        }\n    }\n    get disabled() {\n        return this.hasAttribute(\"disabled\");\n    }\n    set disabled(value) {\n        if (value) {\n            this.setAttribute(\"disabled\", \"\");\n        }\n        else {\n            this.removeAttribute(\"disabled\");\n        }\n    }\n    get autoscroll() {\n        return this.hasAttribute(\"autoscroll\");\n    }\n    set autoscroll(value) {\n        if (value) {\n            this.setAttribute(\"autoscroll\", \"\");\n        }\n        else {\n            this.removeAttribute(\"autoscroll\");\n        }\n    }\n    get complete() {\n        return !this.delegate.isLoading;\n    }\n    get isActive() {\n        return this.ownerDocument === document && !this.isPreview;\n    }\n    get isPreview() {\n        var _a, _b;\n        return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\n    }\n}\nfunction frameLoadingStyleFromString(style) {\n    switch (style.toLowerCase()) {\n        case \"lazy\":\n            return FrameLoadingStyle.lazy;\n        default:\n            return FrameLoadingStyle.eager;\n    }\n}\n\nfunction expandURL(locatable) {\n    return new URL(locatable.toString(), document.baseURI);\n}\nfunction getAnchor(url) {\n    let anchorMatch;\n    if (url.hash) {\n        return url.hash.slice(1);\n    }\n    else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n        return anchorMatch[1];\n    }\n}\nfunction getAction(form, submitter) {\n    const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formaction\")) || form.getAttribute(\"action\") || form.action;\n    return expandURL(action);\n}\nfunction getExtension(url) {\n    return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\nfunction isHTML(url) {\n    return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/);\n}\nfunction isPrefixedBy(baseURL, url) {\n    const prefix = getPrefix(url);\n    return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\nfunction locationIsVisitable(location, rootLocation) {\n    return isPrefixedBy(location, rootLocation) && isHTML(location);\n}\nfunction getRequestURL(url) {\n    const anchor = getAnchor(url);\n    return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href;\n}\nfunction toCacheKey(url) {\n    return getRequestURL(url);\n}\nfunction urlsAreEqual(left, right) {\n    return expandURL(left).href == expandURL(right).href;\n}\nfunction getPathComponents(url) {\n    return url.pathname.split(\"/\").slice(1);\n}\nfunction getLastPathComponent(url) {\n    return getPathComponents(url).slice(-1)[0];\n}\nfunction getPrefix(url) {\n    return addTrailingSlash(url.origin + url.pathname);\n}\nfunction addTrailingSlash(value) {\n    return value.endsWith(\"/\") ? value : value + \"/\";\n}\n\nclass FetchResponse {\n    constructor(response) {\n        this.response = response;\n    }\n    get succeeded() {\n        return this.response.ok;\n    }\n    get failed() {\n        return !this.succeeded;\n    }\n    get clientError() {\n        return this.statusCode >= 400 && this.statusCode <= 499;\n    }\n    get serverError() {\n        return this.statusCode >= 500 && this.statusCode <= 599;\n    }\n    get redirected() {\n        return this.response.redirected;\n    }\n    get location() {\n        return expandURL(this.response.url);\n    }\n    get isHTML() {\n        return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n    }\n    get statusCode() {\n        return this.response.status;\n    }\n    get contentType() {\n        return this.header(\"Content-Type\");\n    }\n    get responseText() {\n        return this.response.clone().text();\n    }\n    get responseHTML() {\n        if (this.isHTML) {\n            return this.response.clone().text();\n        }\n        else {\n            return Promise.resolve(undefined);\n        }\n    }\n    header(name) {\n        return this.response.headers.get(name);\n    }\n}\n\nfunction activateScriptElement(element) {\n    if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n        return element;\n    }\n    else {\n        const createdScriptElement = document.createElement(\"script\");\n        const cspNonce = getMetaContent(\"csp-nonce\");\n        if (cspNonce) {\n            createdScriptElement.nonce = cspNonce;\n        }\n        createdScriptElement.textContent = element.textContent;\n        createdScriptElement.async = false;\n        copyElementAttributes(createdScriptElement, element);\n        return createdScriptElement;\n    }\n}\nfunction copyElementAttributes(destinationElement, sourceElement) {\n    for (const { name, value } of sourceElement.attributes) {\n        destinationElement.setAttribute(name, value);\n    }\n}\nfunction createDocumentFragment(html) {\n    const template = document.createElement(\"template\");\n    template.innerHTML = html;\n    return template.content;\n}\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n    const event = new CustomEvent(eventName, {\n        cancelable,\n        bubbles: true,\n        composed: true,\n        detail,\n    });\n    if (target && target.isConnected) {\n        target.dispatchEvent(event);\n    }\n    else {\n        document.documentElement.dispatchEvent(event);\n    }\n    return event;\n}\nfunction nextAnimationFrame() {\n    return new Promise((resolve) => requestAnimationFrame(() => resolve()));\n}\nfunction nextEventLoopTick() {\n    return new Promise((resolve) => setTimeout(() => resolve(), 0));\n}\nfunction nextMicrotask() {\n    return Promise.resolve();\n}\nfunction parseHTMLDocument(html = \"\") {\n    return new DOMParser().parseFromString(html, \"text/html\");\n}\nfunction unindent(strings, ...values) {\n    const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n    const match = lines[0].match(/^\\s+/);\n    const indent = match ? match[0].length : 0;\n    return lines.map((line) => line.slice(indent)).join(\"\\n\");\n}\nfunction interpolate(strings, values) {\n    return strings.reduce((result, string, i) => {\n        const value = values[i] == undefined ? \"\" : values[i];\n        return result + string + value;\n    }, \"\");\n}\nfunction uuid() {\n    return Array.from({ length: 36 })\n        .map((_, i) => {\n        if (i == 8 || i == 13 || i == 18 || i == 23) {\n            return \"-\";\n        }\n        else if (i == 14) {\n            return \"4\";\n        }\n        else if (i == 19) {\n            return (Math.floor(Math.random() * 4) + 8).toString(16);\n        }\n        else {\n            return Math.floor(Math.random() * 15).toString(16);\n        }\n    })\n        .join(\"\");\n}\nfunction getAttribute(attributeName, ...elements) {\n    for (const value of elements.map((element) => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {\n        if (typeof value == \"string\")\n            return value;\n    }\n    return null;\n}\nfunction hasAttribute(attributeName, ...elements) {\n    return elements.some((element) => element && element.hasAttribute(attributeName));\n}\nfunction markAsBusy(...elements) {\n    for (const element of elements) {\n        if (element.localName == \"turbo-frame\") {\n            element.setAttribute(\"busy\", \"\");\n        }\n        element.setAttribute(\"aria-busy\", \"true\");\n    }\n}\nfunction clearBusyState(...elements) {\n    for (const element of elements) {\n        if (element.localName == \"turbo-frame\") {\n            element.removeAttribute(\"busy\");\n        }\n        element.removeAttribute(\"aria-busy\");\n    }\n}\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n    return new Promise((resolve) => {\n        const onComplete = () => {\n            element.removeEventListener(\"error\", onComplete);\n            element.removeEventListener(\"load\", onComplete);\n            resolve();\n        };\n        element.addEventListener(\"load\", onComplete, { once: true });\n        element.addEventListener(\"error\", onComplete, { once: true });\n        setTimeout(resolve, timeoutInMilliseconds);\n    });\n}\nfunction getHistoryMethodForAction(action) {\n    switch (action) {\n        case \"replace\":\n            return history.replaceState;\n        case \"advance\":\n        case \"restore\":\n            return history.pushState;\n    }\n}\nfunction isAction(action) {\n    return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\nfunction getVisitAction(...elements) {\n    const action = getAttribute(\"data-turbo-action\", ...elements);\n    return isAction(action) ? action : null;\n}\nfunction getMetaElement(name) {\n    return document.querySelector(`meta[name=\"${name}\"]`);\n}\nfunction getMetaContent(name) {\n    const element = getMetaElement(name);\n    return element && element.content;\n}\nfunction setMetaContent(name, content) {\n    let element = getMetaElement(name);\n    if (!element) {\n        element = document.createElement(\"meta\");\n        element.setAttribute(\"name\", name);\n        document.head.appendChild(element);\n    }\n    element.setAttribute(\"content\", content);\n    return element;\n}\nfunction findClosestRecursively(element, selector) {\n    var _a;\n    if (element instanceof Element) {\n        return (element.closest(selector) ||\n            findClosestRecursively(element.assignedSlot || ((_a = element.getRootNode()) === null || _a === void 0 ? void 0 : _a.host), selector));\n    }\n}\n\nvar FetchMethod;\n(function (FetchMethod) {\n    FetchMethod[FetchMethod[\"get\"] = 0] = \"get\";\n    FetchMethod[FetchMethod[\"post\"] = 1] = \"post\";\n    FetchMethod[FetchMethod[\"put\"] = 2] = \"put\";\n    FetchMethod[FetchMethod[\"patch\"] = 3] = \"patch\";\n    FetchMethod[FetchMethod[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\nfunction fetchMethodFromString(method) {\n    switch (method.toLowerCase()) {\n        case \"get\":\n            return FetchMethod.get;\n        case \"post\":\n            return FetchMethod.post;\n        case \"put\":\n            return FetchMethod.put;\n        case \"patch\":\n            return FetchMethod.patch;\n        case \"delete\":\n            return FetchMethod.delete;\n    }\n}\nclass FetchRequest {\n    constructor(delegate, method, location, body = new URLSearchParams(), target = null) {\n        this.abortController = new AbortController();\n        this.resolveRequestPromise = (_value) => { };\n        this.delegate = delegate;\n        this.method = method;\n        this.headers = this.defaultHeaders;\n        this.body = body;\n        this.url = location;\n        this.target = target;\n    }\n    get location() {\n        return this.url;\n    }\n    get params() {\n        return this.url.searchParams;\n    }\n    get entries() {\n        return this.body ? Array.from(this.body.entries()) : [];\n    }\n    cancel() {\n        this.abortController.abort();\n    }\n    async perform() {\n        const { fetchOptions } = this;\n        this.delegate.prepareRequest(this);\n        await this.allowRequestToBeIntercepted(fetchOptions);\n        try {\n            this.delegate.requestStarted(this);\n            const response = await fetch(this.url.href, fetchOptions);\n            return await this.receive(response);\n        }\n        catch (error) {\n            if (error.name !== \"AbortError\") {\n                if (this.willDelegateErrorHandling(error)) {\n                    this.delegate.requestErrored(this, error);\n                }\n                throw error;\n            }\n        }\n        finally {\n            this.delegate.requestFinished(this);\n        }\n    }\n    async receive(response) {\n        const fetchResponse = new FetchResponse(response);\n        const event = dispatch(\"turbo:before-fetch-response\", {\n            cancelable: true,\n            detail: { fetchResponse },\n            target: this.target,\n        });\n        if (event.defaultPrevented) {\n            this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n        }\n        else if (fetchResponse.succeeded) {\n            this.delegate.requestSucceededWithResponse(this, fetchResponse);\n        }\n        else {\n            this.delegate.requestFailedWithResponse(this, fetchResponse);\n        }\n        return fetchResponse;\n    }\n    get fetchOptions() {\n        var _a;\n        return {\n            method: FetchMethod[this.method].toUpperCase(),\n            credentials: \"same-origin\",\n            headers: this.headers,\n            redirect: \"follow\",\n            body: this.isSafe ? null : this.body,\n            signal: this.abortSignal,\n            referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href,\n        };\n    }\n    get defaultHeaders() {\n        return {\n            Accept: \"text/html, application/xhtml+xml\",\n        };\n    }\n    get isSafe() {\n        return this.method === FetchMethod.get;\n    }\n    get abortSignal() {\n        return this.abortController.signal;\n    }\n    acceptResponseType(mimeType) {\n        this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n    }\n    async allowRequestToBeIntercepted(fetchOptions) {\n        const requestInterception = new Promise((resolve) => (this.resolveRequestPromise = resolve));\n        const event = dispatch(\"turbo:before-fetch-request\", {\n            cancelable: true,\n            detail: {\n                fetchOptions,\n                url: this.url,\n                resume: this.resolveRequestPromise,\n            },\n            target: this.target,\n        });\n        if (event.defaultPrevented)\n            await requestInterception;\n    }\n    willDelegateErrorHandling(error) {\n        const event = dispatch(\"turbo:fetch-request-error\", {\n            target: this.target,\n            cancelable: true,\n            detail: { request: this, error: error },\n        });\n        return !event.defaultPrevented;\n    }\n}\n\nclass AppearanceObserver {\n    constructor(delegate, element) {\n        this.started = false;\n        this.intersect = (entries) => {\n            const lastEntry = entries.slice(-1)[0];\n            if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n                this.delegate.elementAppearedInViewport(this.element);\n            }\n        };\n        this.delegate = delegate;\n        this.element = element;\n        this.intersectionObserver = new IntersectionObserver(this.intersect);\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.intersectionObserver.observe(this.element);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.intersectionObserver.unobserve(this.element);\n        }\n    }\n}\n\nclass StreamMessage {\n    static wrap(message) {\n        if (typeof message == \"string\") {\n            return new this(createDocumentFragment(message));\n        }\n        else {\n            return message;\n        }\n    }\n    constructor(fragment) {\n        this.fragment = importStreamElements(fragment);\n    }\n}\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\nfunction importStreamElements(fragment) {\n    for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n        const streamElement = document.importNode(element, true);\n        for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n            inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n        }\n        element.replaceWith(streamElement);\n    }\n    return fragment;\n}\n\nvar FormSubmissionState;\n(function (FormSubmissionState) {\n    FormSubmissionState[FormSubmissionState[\"initialized\"] = 0] = \"initialized\";\n    FormSubmissionState[FormSubmissionState[\"requesting\"] = 1] = \"requesting\";\n    FormSubmissionState[FormSubmissionState[\"waiting\"] = 2] = \"waiting\";\n    FormSubmissionState[FormSubmissionState[\"receiving\"] = 3] = \"receiving\";\n    FormSubmissionState[FormSubmissionState[\"stopping\"] = 4] = \"stopping\";\n    FormSubmissionState[FormSubmissionState[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\nvar FormEnctype;\n(function (FormEnctype) {\n    FormEnctype[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n    FormEnctype[\"multipart\"] = \"multipart/form-data\";\n    FormEnctype[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\nfunction formEnctypeFromString(encoding) {\n    switch (encoding.toLowerCase()) {\n        case FormEnctype.multipart:\n            return FormEnctype.multipart;\n        case FormEnctype.plain:\n            return FormEnctype.plain;\n        default:\n            return FormEnctype.urlEncoded;\n    }\n}\nclass FormSubmission {\n    static confirmMethod(message, _element, _submitter) {\n        return Promise.resolve(confirm(message));\n    }\n    constructor(delegate, formElement, submitter, mustRedirect = false) {\n        this.state = FormSubmissionState.initialized;\n        this.delegate = delegate;\n        this.formElement = formElement;\n        this.submitter = submitter;\n        this.formData = buildFormData(formElement, submitter);\n        this.location = expandURL(this.action);\n        if (this.method == FetchMethod.get) {\n            mergeFormDataEntries(this.location, [...this.body.entries()]);\n        }\n        this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n        this.mustRedirect = mustRedirect;\n    }\n    get method() {\n        var _a;\n        const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n        return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n    }\n    get action() {\n        var _a;\n        const formElementAction = typeof this.formElement.action === \"string\" ? this.formElement.action : null;\n        if ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"formaction\")) {\n            return this.submitter.getAttribute(\"formaction\") || \"\";\n        }\n        else {\n            return this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n        }\n    }\n    get body() {\n        if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n            return new URLSearchParams(this.stringFormData);\n        }\n        else {\n            return this.formData;\n        }\n    }\n    get enctype() {\n        var _a;\n        return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n    }\n    get isSafe() {\n        return this.fetchRequest.isSafe;\n    }\n    get stringFormData() {\n        return [...this.formData].reduce((entries, [name, value]) => {\n            return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n        }, []);\n    }\n    async start() {\n        const { initialized, requesting } = FormSubmissionState;\n        const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n        if (typeof confirmationMessage === \"string\") {\n            const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\n            if (!answer) {\n                return;\n            }\n        }\n        if (this.state == initialized) {\n            this.state = requesting;\n            return this.fetchRequest.perform();\n        }\n    }\n    stop() {\n        const { stopping, stopped } = FormSubmissionState;\n        if (this.state != stopping && this.state != stopped) {\n            this.state = stopping;\n            this.fetchRequest.cancel();\n            return true;\n        }\n    }\n    prepareRequest(request) {\n        if (!request.isSafe) {\n            const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n            if (token) {\n                request.headers[\"X-CSRF-Token\"] = token;\n            }\n        }\n        if (this.requestAcceptsTurboStreamResponse(request)) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\n    }\n    requestStarted(_request) {\n        var _a;\n        this.state = FormSubmissionState.waiting;\n        (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute(\"disabled\", \"\");\n        this.setSubmitsWith();\n        dispatch(\"turbo:submit-start\", {\n            target: this.formElement,\n            detail: { formSubmission: this },\n        });\n        this.delegate.formSubmissionStarted(this);\n    }\n    requestPreventedHandlingResponse(request, response) {\n        this.result = { success: response.succeeded, fetchResponse: response };\n    }\n    requestSucceededWithResponse(request, response) {\n        if (response.clientError || response.serverError) {\n            this.delegate.formSubmissionFailedWithResponse(this, response);\n        }\n        else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n            const error = new Error(\"Form responses must redirect to another location\");\n            this.delegate.formSubmissionErrored(this, error);\n        }\n        else {\n            this.state = FormSubmissionState.receiving;\n            this.result = { success: true, fetchResponse: response };\n            this.delegate.formSubmissionSucceededWithResponse(this, response);\n        }\n    }\n    requestFailedWithResponse(request, response) {\n        this.result = { success: false, fetchResponse: response };\n        this.delegate.formSubmissionFailedWithResponse(this, response);\n    }\n    requestErrored(request, error) {\n        this.result = { success: false, error };\n        this.delegate.formSubmissionErrored(this, error);\n    }\n    requestFinished(_request) {\n        var _a;\n        this.state = FormSubmissionState.stopped;\n        (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute(\"disabled\");\n        this.resetSubmitterText();\n        dispatch(\"turbo:submit-end\", {\n            target: this.formElement,\n            detail: Object.assign({ formSubmission: this }, this.result),\n        });\n        this.delegate.formSubmissionFinished(this);\n    }\n    setSubmitsWith() {\n        if (!this.submitter || !this.submitsWith)\n            return;\n        if (this.submitter.matches(\"button\")) {\n            this.originalSubmitText = this.submitter.innerHTML;\n            this.submitter.innerHTML = this.submitsWith;\n        }\n        else if (this.submitter.matches(\"input\")) {\n            const input = this.submitter;\n            this.originalSubmitText = input.value;\n            input.value = this.submitsWith;\n        }\n    }\n    resetSubmitterText() {\n        if (!this.submitter || !this.originalSubmitText)\n            return;\n        if (this.submitter.matches(\"button\")) {\n            this.submitter.innerHTML = this.originalSubmitText;\n        }\n        else if (this.submitter.matches(\"input\")) {\n            const input = this.submitter;\n            input.value = this.originalSubmitText;\n        }\n    }\n    requestMustRedirect(request) {\n        return !request.isSafe && this.mustRedirect;\n    }\n    requestAcceptsTurboStreamResponse(request) {\n        return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement);\n    }\n    get submitsWith() {\n        var _a;\n        return (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"data-turbo-submits-with\");\n    }\n}\nfunction buildFormData(formElement, submitter) {\n    const formData = new FormData(formElement);\n    const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n    const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"value\");\n    if (name) {\n        formData.append(name, value || \"\");\n    }\n    return formData;\n}\nfunction getCookieValue(cookieName) {\n    if (cookieName != null) {\n        const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n        const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n        if (cookie) {\n            const value = cookie.split(\"=\").slice(1).join(\"=\");\n            return value ? decodeURIComponent(value) : undefined;\n        }\n    }\n}\nfunction responseSucceededWithoutRedirect(response) {\n    return response.statusCode == 200 && !response.redirected;\n}\nfunction mergeFormDataEntries(url, entries) {\n    const searchParams = new URLSearchParams();\n    for (const [name, value] of entries) {\n        if (value instanceof File)\n            continue;\n        searchParams.append(name, value);\n    }\n    url.search = searchParams.toString();\n    return url;\n}\n\nclass Snapshot {\n    constructor(element) {\n        this.element = element;\n    }\n    get activeElement() {\n        return this.element.ownerDocument.activeElement;\n    }\n    get children() {\n        return [...this.element.children];\n    }\n    hasAnchor(anchor) {\n        return this.getElementForAnchor(anchor) != null;\n    }\n    getElementForAnchor(anchor) {\n        return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null;\n    }\n    get isConnected() {\n        return this.element.isConnected;\n    }\n    get firstAutofocusableElement() {\n        const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n        for (const element of this.element.querySelectorAll(\"[autofocus]\")) {\n            if (element.closest(inertDisabledOrHidden) == null)\n                return element;\n            else\n                continue;\n        }\n        return null;\n    }\n    get permanentElements() {\n        return queryPermanentElementsAll(this.element);\n    }\n    getPermanentElementById(id) {\n        return getPermanentElementById(this.element, id);\n    }\n    getPermanentElementMapForSnapshot(snapshot) {\n        const permanentElementMap = {};\n        for (const currentPermanentElement of this.permanentElements) {\n            const { id } = currentPermanentElement;\n            const newPermanentElement = snapshot.getPermanentElementById(id);\n            if (newPermanentElement) {\n                permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n            }\n        }\n        return permanentElementMap;\n    }\n}\nfunction getPermanentElementById(node, id) {\n    return node.querySelector(`#${id}[data-turbo-permanent]`);\n}\nfunction queryPermanentElementsAll(node) {\n    return node.querySelectorAll(\"[id][data-turbo-permanent]\");\n}\n\nclass FormSubmitObserver {\n    constructor(delegate, eventTarget) {\n        this.started = false;\n        this.submitCaptured = () => {\n            this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n            this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n        };\n        this.submitBubbled = ((event) => {\n            if (!event.defaultPrevented) {\n                const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n                const submitter = event.submitter || undefined;\n                if (form &&\n                    submissionDoesNotDismissDialog(form, submitter) &&\n                    submissionDoesNotTargetIFrame(form, submitter) &&\n                    this.delegate.willSubmitForm(form, submitter)) {\n                    event.preventDefault();\n                    event.stopImmediatePropagation();\n                    this.delegate.formSubmitted(form, submitter);\n                }\n            }\n        });\n        this.delegate = delegate;\n        this.eventTarget = eventTarget;\n    }\n    start() {\n        if (!this.started) {\n            this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n            this.started = false;\n        }\n    }\n}\nfunction submissionDoesNotDismissDialog(form, submitter) {\n    const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n    return method != \"dialog\";\n}\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n    if ((submitter === null || submitter === void 0 ? void 0 : submitter.hasAttribute(\"formtarget\")) || form.hasAttribute(\"target\")) {\n        const target = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formtarget\")) || form.target;\n        for (const element of document.getElementsByName(target)) {\n            if (element instanceof HTMLIFrameElement)\n                return false;\n        }\n        return true;\n    }\n    else {\n        return true;\n    }\n}\n\nclass View {\n    constructor(delegate, element) {\n        this.resolveRenderPromise = (_value) => { };\n        this.resolveInterceptionPromise = (_value) => { };\n        this.delegate = delegate;\n        this.element = element;\n    }\n    scrollToAnchor(anchor) {\n        const element = this.snapshot.getElementForAnchor(anchor);\n        if (element) {\n            this.scrollToElement(element);\n            this.focusElement(element);\n        }\n        else {\n            this.scrollToPosition({ x: 0, y: 0 });\n        }\n    }\n    scrollToAnchorFromLocation(location) {\n        this.scrollToAnchor(getAnchor(location));\n    }\n    scrollToElement(element) {\n        element.scrollIntoView();\n    }\n    focusElement(element) {\n        if (element instanceof HTMLElement) {\n            if (element.hasAttribute(\"tabindex\")) {\n                element.focus();\n            }\n            else {\n                element.setAttribute(\"tabindex\", \"-1\");\n                element.focus();\n                element.removeAttribute(\"tabindex\");\n            }\n        }\n    }\n    scrollToPosition({ x, y }) {\n        this.scrollRoot.scrollTo(x, y);\n    }\n    scrollToTop() {\n        this.scrollToPosition({ x: 0, y: 0 });\n    }\n    get scrollRoot() {\n        return window;\n    }\n    async render(renderer) {\n        const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;\n        if (shouldRender) {\n            try {\n                this.renderPromise = new Promise((resolve) => (this.resolveRenderPromise = resolve));\n                this.renderer = renderer;\n                await this.prepareToRenderSnapshot(renderer);\n                const renderInterception = new Promise((resolve) => (this.resolveInterceptionPromise = resolve));\n                const options = { resume: this.resolveInterceptionPromise, render: this.renderer.renderElement };\n                const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n                if (!immediateRender)\n                    await renderInterception;\n                await this.renderSnapshot(renderer);\n                this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n                this.delegate.preloadOnLoadLinksForView(this.element);\n                this.finishRenderingSnapshot(renderer);\n            }\n            finally {\n                delete this.renderer;\n                this.resolveRenderPromise(undefined);\n                delete this.renderPromise;\n            }\n        }\n        else {\n            this.invalidate(renderer.reloadReason);\n        }\n    }\n    invalidate(reason) {\n        this.delegate.viewInvalidated(reason);\n    }\n    async prepareToRenderSnapshot(renderer) {\n        this.markAsPreview(renderer.isPreview);\n        await renderer.prepareToRender();\n    }\n    markAsPreview(isPreview) {\n        if (isPreview) {\n            this.element.setAttribute(\"data-turbo-preview\", \"\");\n        }\n        else {\n            this.element.removeAttribute(\"data-turbo-preview\");\n        }\n    }\n    async renderSnapshot(renderer) {\n        await renderer.render();\n    }\n    finishRenderingSnapshot(renderer) {\n        renderer.finishRendering();\n    }\n}\n\nclass FrameView extends View {\n    missing() {\n        this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n    }\n    get snapshot() {\n        return new Snapshot(this.element);\n    }\n}\n\nclass LinkInterceptor {\n    constructor(delegate, element) {\n        this.clickBubbled = (event) => {\n            if (this.respondsToEventTarget(event.target)) {\n                this.clickEvent = event;\n            }\n            else {\n                delete this.clickEvent;\n            }\n        };\n        this.linkClicked = ((event) => {\n            if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n                if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n                    this.clickEvent.preventDefault();\n                    event.preventDefault();\n                    this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n                }\n            }\n            delete this.clickEvent;\n        });\n        this.willVisit = ((_event) => {\n            delete this.clickEvent;\n        });\n        this.delegate = delegate;\n        this.element = element;\n    }\n    start() {\n        this.element.addEventListener(\"click\", this.clickBubbled);\n        document.addEventListener(\"turbo:click\", this.linkClicked);\n        document.addEventListener(\"turbo:before-visit\", this.willVisit);\n    }\n    stop() {\n        this.element.removeEventListener(\"click\", this.clickBubbled);\n        document.removeEventListener(\"turbo:click\", this.linkClicked);\n        document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n    }\n    respondsToEventTarget(target) {\n        const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n        return element && element.closest(\"turbo-frame, html\") == this.element;\n    }\n}\n\nclass LinkClickObserver {\n    constructor(delegate, eventTarget) {\n        this.started = false;\n        this.clickCaptured = () => {\n            this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n            this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n        };\n        this.clickBubbled = (event) => {\n            if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n                const target = (event.composedPath && event.composedPath()[0]) || event.target;\n                const link = this.findLinkFromClickTarget(target);\n                if (link && doesNotTargetIFrame(link)) {\n                    const location = this.getLocationForLink(link);\n                    if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n                        event.preventDefault();\n                        this.delegate.followedLinkToLocation(link, location);\n                    }\n                }\n            }\n        };\n        this.delegate = delegate;\n        this.eventTarget = eventTarget;\n    }\n    start() {\n        if (!this.started) {\n            this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n            this.started = false;\n        }\n    }\n    clickEventIsSignificant(event) {\n        return !((event.target && event.target.isContentEditable) ||\n            event.defaultPrevented ||\n            event.which > 1 ||\n            event.altKey ||\n            event.ctrlKey ||\n            event.metaKey ||\n            event.shiftKey);\n    }\n    findLinkFromClickTarget(target) {\n        return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\");\n    }\n    getLocationForLink(link) {\n        return expandURL(link.getAttribute(\"href\") || \"\");\n    }\n}\nfunction doesNotTargetIFrame(anchor) {\n    if (anchor.hasAttribute(\"target\")) {\n        for (const element of document.getElementsByName(anchor.target)) {\n            if (element instanceof HTMLIFrameElement)\n                return false;\n        }\n        return true;\n    }\n    else {\n        return true;\n    }\n}\n\nclass FormLinkClickObserver {\n    constructor(delegate, element) {\n        this.delegate = delegate;\n        this.linkInterceptor = new LinkClickObserver(this, element);\n    }\n    start() {\n        this.linkInterceptor.start();\n    }\n    stop() {\n        this.linkInterceptor.stop();\n    }\n    willFollowLinkToLocation(link, location, originalEvent) {\n        return (this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n            link.hasAttribute(\"data-turbo-method\"));\n    }\n    followedLinkToLocation(link, location) {\n        const form = document.createElement(\"form\");\n        const type = \"hidden\";\n        for (const [name, value] of location.searchParams) {\n            form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n        }\n        const action = Object.assign(location, { search: \"\" });\n        form.setAttribute(\"data-turbo\", \"true\");\n        form.setAttribute(\"action\", action.href);\n        form.setAttribute(\"hidden\", \"\");\n        const method = link.getAttribute(\"data-turbo-method\");\n        if (method)\n            form.setAttribute(\"method\", method);\n        const turboFrame = link.getAttribute(\"data-turbo-frame\");\n        if (turboFrame)\n            form.setAttribute(\"data-turbo-frame\", turboFrame);\n        const turboAction = getVisitAction(link);\n        if (turboAction)\n            form.setAttribute(\"data-turbo-action\", turboAction);\n        const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n        if (turboConfirm)\n            form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n        const turboStream = link.hasAttribute(\"data-turbo-stream\");\n        if (turboStream)\n            form.setAttribute(\"data-turbo-stream\", \"\");\n        this.delegate.submittedFormLinkToLocation(link, location, form);\n        document.body.appendChild(form);\n        form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n        requestAnimationFrame(() => form.requestSubmit());\n    }\n}\n\nclass Bardo {\n    static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n        const bardo = new this(delegate, permanentElementMap);\n        bardo.enter();\n        await callback();\n        bardo.leave();\n    }\n    constructor(delegate, permanentElementMap) {\n        this.delegate = delegate;\n        this.permanentElementMap = permanentElementMap;\n    }\n    enter() {\n        for (const id in this.permanentElementMap) {\n            const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n            this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n            this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n        }\n    }\n    leave() {\n        for (const id in this.permanentElementMap) {\n            const [currentPermanentElement] = this.permanentElementMap[id];\n            this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n            this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n            this.delegate.leavingBardo(currentPermanentElement);\n        }\n    }\n    replaceNewPermanentElementWithPlaceholder(permanentElement) {\n        const placeholder = createPlaceholderForPermanentElement(permanentElement);\n        permanentElement.replaceWith(placeholder);\n    }\n    replaceCurrentPermanentElementWithClone(permanentElement) {\n        const clone = permanentElement.cloneNode(true);\n        permanentElement.replaceWith(clone);\n    }\n    replacePlaceholderWithPermanentElement(permanentElement) {\n        const placeholder = this.getPlaceholderById(permanentElement.id);\n        placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n    }\n    getPlaceholderById(id) {\n        return this.placeholders.find((element) => element.content == id);\n    }\n    get placeholders() {\n        return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")];\n    }\n}\nfunction createPlaceholderForPermanentElement(permanentElement) {\n    const element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n    element.setAttribute(\"content\", permanentElement.id);\n    return element;\n}\n\nclass Renderer {\n    constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n        this.activeElement = null;\n        this.currentSnapshot = currentSnapshot;\n        this.newSnapshot = newSnapshot;\n        this.isPreview = isPreview;\n        this.willRender = willRender;\n        this.renderElement = renderElement;\n        this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n    }\n    get shouldRender() {\n        return true;\n    }\n    get reloadReason() {\n        return;\n    }\n    prepareToRender() {\n        return;\n    }\n    finishRendering() {\n        if (this.resolvingFunctions) {\n            this.resolvingFunctions.resolve();\n            delete this.resolvingFunctions;\n        }\n    }\n    async preservingPermanentElements(callback) {\n        await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n    }\n    focusFirstAutofocusableElement() {\n        const element = this.connectedSnapshot.firstAutofocusableElement;\n        if (elementIsFocusable(element)) {\n            element.focus();\n        }\n    }\n    enteringBardo(currentPermanentElement) {\n        if (this.activeElement)\n            return;\n        if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n            this.activeElement = this.currentSnapshot.activeElement;\n        }\n    }\n    leavingBardo(currentPermanentElement) {\n        if (currentPermanentElement.contains(this.activeElement) && this.activeElement instanceof HTMLElement) {\n            this.activeElement.focus();\n            this.activeElement = null;\n        }\n    }\n    get connectedSnapshot() {\n        return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n    }\n    get currentElement() {\n        return this.currentSnapshot.element;\n    }\n    get newElement() {\n        return this.newSnapshot.element;\n    }\n    get permanentElementMap() {\n        return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n    }\n}\nfunction elementIsFocusable(element) {\n    return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\n    static renderElement(currentElement, newElement) {\n        var _a;\n        const destinationRange = document.createRange();\n        destinationRange.selectNodeContents(currentElement);\n        destinationRange.deleteContents();\n        const frameElement = newElement;\n        const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n        if (sourceRange) {\n            sourceRange.selectNodeContents(frameElement);\n            currentElement.appendChild(sourceRange.extractContents());\n        }\n    }\n    constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n        super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n        this.delegate = delegate;\n    }\n    get shouldRender() {\n        return true;\n    }\n    async render() {\n        await nextAnimationFrame();\n        this.preservingPermanentElements(() => {\n            this.loadFrameElement();\n        });\n        this.scrollFrameIntoView();\n        await nextAnimationFrame();\n        this.focusFirstAutofocusableElement();\n        await nextAnimationFrame();\n        this.activateScriptElements();\n    }\n    loadFrameElement() {\n        this.delegate.willRenderFrame(this.currentElement, this.newElement);\n        this.renderElement(this.currentElement, this.newElement);\n    }\n    scrollFrameIntoView() {\n        if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n            const element = this.currentElement.firstElementChild;\n            const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n            const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n            if (element) {\n                element.scrollIntoView({ block, behavior });\n                return true;\n            }\n        }\n        return false;\n    }\n    activateScriptElements() {\n        for (const inertScriptElement of this.newScriptElements) {\n            const activatedScriptElement = activateScriptElement(inertScriptElement);\n            inertScriptElement.replaceWith(activatedScriptElement);\n        }\n    }\n    get newScriptElements() {\n        return this.currentElement.querySelectorAll(\"script\");\n    }\n}\nfunction readScrollLogicalPosition(value, defaultValue) {\n    if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n        return value;\n    }\n    else {\n        return defaultValue;\n    }\n}\nfunction readScrollBehavior(value, defaultValue) {\n    if (value == \"auto\" || value == \"smooth\") {\n        return value;\n    }\n    else {\n        return defaultValue;\n    }\n}\n\nclass ProgressBar {\n    static get defaultCSS() {\n        return unindent `\n      .turbo-progress-bar {\n        position: fixed;\n        display: block;\n        top: 0;\n        left: 0;\n        height: 3px;\n        background: #0076ff;\n        z-index: 2147483647;\n        transition:\n          width ${ProgressBar.animationDuration}ms ease-out,\n          opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n        transform: translate3d(0, 0, 0);\n      }\n    `;\n    }\n    constructor() {\n        this.hiding = false;\n        this.value = 0;\n        this.visible = false;\n        this.trickle = () => {\n            this.setValue(this.value + Math.random() / 100);\n        };\n        this.stylesheetElement = this.createStylesheetElement();\n        this.progressElement = this.createProgressElement();\n        this.installStylesheetElement();\n        this.setValue(0);\n    }\n    show() {\n        if (!this.visible) {\n            this.visible = true;\n            this.installProgressElement();\n            this.startTrickling();\n        }\n    }\n    hide() {\n        if (this.visible && !this.hiding) {\n            this.hiding = true;\n            this.fadeProgressElement(() => {\n                this.uninstallProgressElement();\n                this.stopTrickling();\n                this.visible = false;\n                this.hiding = false;\n            });\n        }\n    }\n    setValue(value) {\n        this.value = value;\n        this.refresh();\n    }\n    installStylesheetElement() {\n        document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n    }\n    installProgressElement() {\n        this.progressElement.style.width = \"0\";\n        this.progressElement.style.opacity = \"1\";\n        document.documentElement.insertBefore(this.progressElement, document.body);\n        this.refresh();\n    }\n    fadeProgressElement(callback) {\n        this.progressElement.style.opacity = \"0\";\n        setTimeout(callback, ProgressBar.animationDuration * 1.5);\n    }\n    uninstallProgressElement() {\n        if (this.progressElement.parentNode) {\n            document.documentElement.removeChild(this.progressElement);\n        }\n    }\n    startTrickling() {\n        if (!this.trickleInterval) {\n            this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n        }\n    }\n    stopTrickling() {\n        window.clearInterval(this.trickleInterval);\n        delete this.trickleInterval;\n    }\n    refresh() {\n        requestAnimationFrame(() => {\n            this.progressElement.style.width = `${10 + this.value * 90}%`;\n        });\n    }\n    createStylesheetElement() {\n        const element = document.createElement(\"style\");\n        element.type = \"text/css\";\n        element.textContent = ProgressBar.defaultCSS;\n        if (this.cspNonce) {\n            element.nonce = this.cspNonce;\n        }\n        return element;\n    }\n    createProgressElement() {\n        const element = document.createElement(\"div\");\n        element.className = \"turbo-progress-bar\";\n        return element;\n    }\n    get cspNonce() {\n        return getMetaContent(\"csp-nonce\");\n    }\n}\nProgressBar.animationDuration = 300;\n\nclass HeadSnapshot extends Snapshot {\n    constructor() {\n        super(...arguments);\n        this.detailsByOuterHTML = this.children\n            .filter((element) => !elementIsNoscript(element))\n            .map((element) => elementWithoutNonce(element))\n            .reduce((result, element) => {\n            const { outerHTML } = element;\n            const details = outerHTML in result\n                ? result[outerHTML]\n                : {\n                    type: elementType(element),\n                    tracked: elementIsTracked(element),\n                    elements: [],\n                };\n            return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });\n        }, {});\n    }\n    get trackedElementSignature() {\n        return Object.keys(this.detailsByOuterHTML)\n            .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n            .join(\"\");\n    }\n    getScriptElementsNotInSnapshot(snapshot) {\n        return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n    }\n    getStylesheetElementsNotInSnapshot(snapshot) {\n        return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\n    }\n    getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n        return Object.keys(this.detailsByOuterHTML)\n            .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n            .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n            .filter(({ type }) => type == matchedType)\n            .map(({ elements: [element] }) => element);\n    }\n    get provisionalElements() {\n        return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n            const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n            if (type == null && !tracked) {\n                return [...result, ...elements];\n            }\n            else if (elements.length > 1) {\n                return [...result, ...elements.slice(1)];\n            }\n            else {\n                return result;\n            }\n        }, []);\n    }\n    getMetaValue(name) {\n        const element = this.findMetaElementByName(name);\n        return element ? element.getAttribute(\"content\") : null;\n    }\n    findMetaElementByName(name) {\n        return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n            const { elements: [element], } = this.detailsByOuterHTML[outerHTML];\n            return elementIsMetaElementWithName(element, name) ? element : result;\n        }, undefined);\n    }\n}\nfunction elementType(element) {\n    if (elementIsScript(element)) {\n        return \"script\";\n    }\n    else if (elementIsStylesheet(element)) {\n        return \"stylesheet\";\n    }\n}\nfunction elementIsTracked(element) {\n    return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\nfunction elementIsScript(element) {\n    const tagName = element.localName;\n    return tagName == \"script\";\n}\nfunction elementIsNoscript(element) {\n    const tagName = element.localName;\n    return tagName == \"noscript\";\n}\nfunction elementIsStylesheet(element) {\n    const tagName = element.localName;\n    return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\");\n}\nfunction elementIsMetaElementWithName(element, name) {\n    const tagName = element.localName;\n    return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\nfunction elementWithoutNonce(element) {\n    if (element.hasAttribute(\"nonce\")) {\n        element.setAttribute(\"nonce\", \"\");\n    }\n    return element;\n}\n\nclass PageSnapshot extends Snapshot {\n    static fromHTMLString(html = \"\") {\n        return this.fromDocument(parseHTMLDocument(html));\n    }\n    static fromElement(element) {\n        return this.fromDocument(element.ownerDocument);\n    }\n    static fromDocument({ head, body }) {\n        return new this(body, new HeadSnapshot(head));\n    }\n    constructor(element, headSnapshot) {\n        super(element);\n        this.headSnapshot = headSnapshot;\n    }\n    clone() {\n        const clonedElement = this.element.cloneNode(true);\n        const selectElements = this.element.querySelectorAll(\"select\");\n        const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n        for (const [index, source] of selectElements.entries()) {\n            const clone = clonedSelectElements[index];\n            for (const option of clone.selectedOptions)\n                option.selected = false;\n            for (const option of source.selectedOptions)\n                clone.options[option.index].selected = true;\n        }\n        for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n            clonedPasswordInput.value = \"\";\n        }\n        return new PageSnapshot(clonedElement, this.headSnapshot);\n    }\n    get headElement() {\n        return this.headSnapshot.element;\n    }\n    get rootLocation() {\n        var _a;\n        const root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n        return expandURL(root);\n    }\n    get cacheControlValue() {\n        return this.getSetting(\"cache-control\");\n    }\n    get isPreviewable() {\n        return this.cacheControlValue != \"no-preview\";\n    }\n    get isCacheable() {\n        return this.cacheControlValue != \"no-cache\";\n    }\n    get isVisitable() {\n        return this.getSetting(\"visit-control\") != \"reload\";\n    }\n    getSetting(name) {\n        return this.headSnapshot.getMetaValue(`turbo-${name}`);\n    }\n}\n\nvar TimingMetric;\n(function (TimingMetric) {\n    TimingMetric[\"visitStart\"] = \"visitStart\";\n    TimingMetric[\"requestStart\"] = \"requestStart\";\n    TimingMetric[\"requestEnd\"] = \"requestEnd\";\n    TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\nvar VisitState;\n(function (VisitState) {\n    VisitState[\"initialized\"] = \"initialized\";\n    VisitState[\"started\"] = \"started\";\n    VisitState[\"canceled\"] = \"canceled\";\n    VisitState[\"failed\"] = \"failed\";\n    VisitState[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\nconst defaultOptions = {\n    action: \"advance\",\n    historyChanged: false,\n    visitCachedSnapshot: () => { },\n    willRender: true,\n    updateHistory: true,\n    shouldCacheSnapshot: true,\n    acceptsStreamResponse: false,\n};\nvar SystemStatusCode;\n(function (SystemStatusCode) {\n    SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n    SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n    SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\nclass Visit {\n    constructor(delegate, location, restorationIdentifier, options = {}) {\n        this.identifier = uuid();\n        this.timingMetrics = {};\n        this.followedRedirect = false;\n        this.historyChanged = false;\n        this.scrolled = false;\n        this.shouldCacheSnapshot = true;\n        this.acceptsStreamResponse = false;\n        this.snapshotCached = false;\n        this.state = VisitState.initialized;\n        this.delegate = delegate;\n        this.location = location;\n        this.restorationIdentifier = restorationIdentifier || uuid();\n        const { action, historyChanged, referrer, snapshot, snapshotHTML, response, visitCachedSnapshot, willRender, updateHistory, shouldCacheSnapshot, acceptsStreamResponse, } = Object.assign(Object.assign({}, defaultOptions), options);\n        this.action = action;\n        this.historyChanged = historyChanged;\n        this.referrer = referrer;\n        this.snapshot = snapshot;\n        this.snapshotHTML = snapshotHTML;\n        this.response = response;\n        this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n        this.visitCachedSnapshot = visitCachedSnapshot;\n        this.willRender = willRender;\n        this.updateHistory = updateHistory;\n        this.scrolled = !willRender;\n        this.shouldCacheSnapshot = shouldCacheSnapshot;\n        this.acceptsStreamResponse = acceptsStreamResponse;\n    }\n    get adapter() {\n        return this.delegate.adapter;\n    }\n    get view() {\n        return this.delegate.view;\n    }\n    get history() {\n        return this.delegate.history;\n    }\n    get restorationData() {\n        return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n    }\n    get silent() {\n        return this.isSamePage;\n    }\n    start() {\n        if (this.state == VisitState.initialized) {\n            this.recordTimingMetric(TimingMetric.visitStart);\n            this.state = VisitState.started;\n            this.adapter.visitStarted(this);\n            this.delegate.visitStarted(this);\n        }\n    }\n    cancel() {\n        if (this.state == VisitState.started) {\n            if (this.request) {\n                this.request.cancel();\n            }\n            this.cancelRender();\n            this.state = VisitState.canceled;\n        }\n    }\n    complete() {\n        if (this.state == VisitState.started) {\n            this.recordTimingMetric(TimingMetric.visitEnd);\n            this.state = VisitState.completed;\n            this.followRedirect();\n            if (!this.followedRedirect) {\n                this.adapter.visitCompleted(this);\n                this.delegate.visitCompleted(this);\n            }\n        }\n    }\n    fail() {\n        if (this.state == VisitState.started) {\n            this.state = VisitState.failed;\n            this.adapter.visitFailed(this);\n        }\n    }\n    changeHistory() {\n        var _a;\n        if (!this.historyChanged && this.updateHistory) {\n            const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n            const method = getHistoryMethodForAction(actionForHistory);\n            this.history.update(method, this.location, this.restorationIdentifier);\n            this.historyChanged = true;\n        }\n    }\n    issueRequest() {\n        if (this.hasPreloadedResponse()) {\n            this.simulateRequest();\n        }\n        else if (this.shouldIssueRequest() && !this.request) {\n            this.request = new FetchRequest(this, FetchMethod.get, this.location);\n            this.request.perform();\n        }\n    }\n    simulateRequest() {\n        if (this.response) {\n            this.startRequest();\n            this.recordResponse();\n            this.finishRequest();\n        }\n    }\n    startRequest() {\n        this.recordTimingMetric(TimingMetric.requestStart);\n        this.adapter.visitRequestStarted(this);\n    }\n    recordResponse(response = this.response) {\n        this.response = response;\n        if (response) {\n            const { statusCode } = response;\n            if (isSuccessful(statusCode)) {\n                this.adapter.visitRequestCompleted(this);\n            }\n            else {\n                this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n            }\n        }\n    }\n    finishRequest() {\n        this.recordTimingMetric(TimingMetric.requestEnd);\n        this.adapter.visitRequestFinished(this);\n    }\n    loadResponse() {\n        if (this.response) {\n            const { statusCode, responseHTML } = this.response;\n            this.render(async () => {\n                if (this.shouldCacheSnapshot)\n                    this.cacheSnapshot();\n                if (this.view.renderPromise)\n                    await this.view.renderPromise;\n                if (isSuccessful(statusCode) && responseHTML != null) {\n                    await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender, this);\n                    this.performScroll();\n                    this.adapter.visitRendered(this);\n                    this.complete();\n                }\n                else {\n                    await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n                    this.adapter.visitRendered(this);\n                    this.fail();\n                }\n            });\n        }\n    }\n    getCachedSnapshot() {\n        const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n        if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n            if (this.action == \"restore\" || snapshot.isPreviewable) {\n                return snapshot;\n            }\n        }\n    }\n    getPreloadedSnapshot() {\n        if (this.snapshotHTML) {\n            return PageSnapshot.fromHTMLString(this.snapshotHTML);\n        }\n    }\n    hasCachedSnapshot() {\n        return this.getCachedSnapshot() != null;\n    }\n    loadCachedSnapshot() {\n        const snapshot = this.getCachedSnapshot();\n        if (snapshot) {\n            const isPreview = this.shouldIssueRequest();\n            this.render(async () => {\n                this.cacheSnapshot();\n                if (this.isSamePage) {\n                    this.adapter.visitRendered(this);\n                }\n                else {\n                    if (this.view.renderPromise)\n                        await this.view.renderPromise;\n                    await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n                    this.performScroll();\n                    this.adapter.visitRendered(this);\n                    if (!isPreview) {\n                        this.complete();\n                    }\n                }\n            });\n        }\n    }\n    followRedirect() {\n        var _a;\n        if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.redirected)) {\n            this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n                action: \"replace\",\n                response: this.response,\n                shouldCacheSnapshot: false,\n                willRender: false,\n            });\n            this.followedRedirect = true;\n        }\n    }\n    goToSamePageAnchor() {\n        if (this.isSamePage) {\n            this.render(async () => {\n                this.cacheSnapshot();\n                this.performScroll();\n                this.changeHistory();\n                this.adapter.visitRendered(this);\n            });\n        }\n    }\n    prepareRequest(request) {\n        if (this.acceptsStreamResponse) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\n    }\n    requestStarted() {\n        this.startRequest();\n    }\n    requestPreventedHandlingResponse(_request, _response) { }\n    async requestSucceededWithResponse(request, response) {\n        const responseHTML = await response.responseHTML;\n        const { redirected, statusCode } = response;\n        if (responseHTML == undefined) {\n            this.recordResponse({\n                statusCode: SystemStatusCode.contentTypeMismatch,\n                redirected,\n            });\n        }\n        else {\n            this.redirectedToLocation = response.redirected ? response.location : undefined;\n            this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n        }\n    }\n    async requestFailedWithResponse(request, response) {\n        const responseHTML = await response.responseHTML;\n        const { redirected, statusCode } = response;\n        if (responseHTML == undefined) {\n            this.recordResponse({\n                statusCode: SystemStatusCode.contentTypeMismatch,\n                redirected,\n            });\n        }\n        else {\n            this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n        }\n    }\n    requestErrored(_request, _error) {\n        this.recordResponse({\n            statusCode: SystemStatusCode.networkFailure,\n            redirected: false,\n        });\n    }\n    requestFinished() {\n        this.finishRequest();\n    }\n    performScroll() {\n        if (!this.scrolled && !this.view.forceReloaded) {\n            if (this.action == \"restore\") {\n                this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n            }\n            else {\n                this.scrollToAnchor() || this.view.scrollToTop();\n            }\n            if (this.isSamePage) {\n                this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n            }\n            this.scrolled = true;\n        }\n    }\n    scrollToRestoredPosition() {\n        const { scrollPosition } = this.restorationData;\n        if (scrollPosition) {\n            this.view.scrollToPosition(scrollPosition);\n            return true;\n        }\n    }\n    scrollToAnchor() {\n        const anchor = getAnchor(this.location);\n        if (anchor != null) {\n            this.view.scrollToAnchor(anchor);\n            return true;\n        }\n    }\n    recordTimingMetric(metric) {\n        this.timingMetrics[metric] = new Date().getTime();\n    }\n    getTimingMetrics() {\n        return Object.assign({}, this.timingMetrics);\n    }\n    getHistoryMethodForAction(action) {\n        switch (action) {\n            case \"replace\":\n                return history.replaceState;\n            case \"advance\":\n            case \"restore\":\n                return history.pushState;\n        }\n    }\n    hasPreloadedResponse() {\n        return typeof this.response == \"object\";\n    }\n    shouldIssueRequest() {\n        if (this.isSamePage) {\n            return false;\n        }\n        else if (this.action == \"restore\") {\n            return !this.hasCachedSnapshot();\n        }\n        else {\n            return this.willRender;\n        }\n    }\n    cacheSnapshot() {\n        if (!this.snapshotCached) {\n            this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n            this.snapshotCached = true;\n        }\n    }\n    async render(callback) {\n        this.cancelRender();\n        await new Promise((resolve) => {\n            this.frame = requestAnimationFrame(() => resolve());\n        });\n        await callback();\n        delete this.frame;\n    }\n    cancelRender() {\n        if (this.frame) {\n            cancelAnimationFrame(this.frame);\n            delete this.frame;\n        }\n    }\n}\nfunction isSuccessful(statusCode) {\n    return statusCode >= 200 && statusCode < 300;\n}\n\nclass BrowserAdapter {\n    constructor(session) {\n        this.progressBar = new ProgressBar();\n        this.showProgressBar = () => {\n            this.progressBar.show();\n        };\n        this.session = session;\n    }\n    visitProposedToLocation(location, options) {\n        this.navigator.startVisit(location, (options === null || options === void 0 ? void 0 : options.restorationIdentifier) || uuid(), options);\n    }\n    visitStarted(visit) {\n        this.location = visit.location;\n        visit.loadCachedSnapshot();\n        visit.issueRequest();\n        visit.goToSamePageAnchor();\n    }\n    visitRequestStarted(visit) {\n        this.progressBar.setValue(0);\n        if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n            this.showVisitProgressBarAfterDelay();\n        }\n        else {\n            this.showProgressBar();\n        }\n    }\n    visitRequestCompleted(visit) {\n        visit.loadResponse();\n    }\n    visitRequestFailedWithStatusCode(visit, statusCode) {\n        switch (statusCode) {\n            case SystemStatusCode.networkFailure:\n            case SystemStatusCode.timeoutFailure:\n            case SystemStatusCode.contentTypeMismatch:\n                return this.reload({\n                    reason: \"request_failed\",\n                    context: {\n                        statusCode,\n                    },\n                });\n            default:\n                return visit.loadResponse();\n        }\n    }\n    visitRequestFinished(_visit) {\n        this.progressBar.setValue(1);\n        this.hideVisitProgressBar();\n    }\n    visitCompleted(_visit) { }\n    pageInvalidated(reason) {\n        this.reload(reason);\n    }\n    visitFailed(_visit) { }\n    visitRendered(_visit) { }\n    formSubmissionStarted(_formSubmission) {\n        this.progressBar.setValue(0);\n        this.showFormProgressBarAfterDelay();\n    }\n    formSubmissionFinished(_formSubmission) {\n        this.progressBar.setValue(1);\n        this.hideFormProgressBar();\n    }\n    showVisitProgressBarAfterDelay() {\n        this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n    hideVisitProgressBar() {\n        this.progressBar.hide();\n        if (this.visitProgressBarTimeout != null) {\n            window.clearTimeout(this.visitProgressBarTimeout);\n            delete this.visitProgressBarTimeout;\n        }\n    }\n    showFormProgressBarAfterDelay() {\n        if (this.formProgressBarTimeout == null) {\n            this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n        }\n    }\n    hideFormProgressBar() {\n        this.progressBar.hide();\n        if (this.formProgressBarTimeout != null) {\n            window.clearTimeout(this.formProgressBarTimeout);\n            delete this.formProgressBarTimeout;\n        }\n    }\n    reload(reason) {\n        var _a;\n        dispatch(\"turbo:reload\", { detail: reason });\n        window.location.href = ((_a = this.location) === null || _a === void 0 ? void 0 : _a.toString()) || window.location.href;\n    }\n    get navigator() {\n        return this.session.navigator;\n    }\n}\n\nclass CacheObserver {\n    constructor() {\n        this.selector = \"[data-turbo-temporary]\";\n        this.deprecatedSelector = \"[data-turbo-cache=false]\";\n        this.started = false;\n        this.removeTemporaryElements = ((_event) => {\n            for (const element of this.temporaryElements) {\n                element.remove();\n            }\n        });\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n        }\n    }\n    get temporaryElements() {\n        return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation];\n    }\n    get temporaryElementsWithDeprecation() {\n        const elements = document.querySelectorAll(this.deprecatedSelector);\n        if (elements.length) {\n            console.warn(`The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`);\n        }\n        return [...elements];\n    }\n}\n\nclass FrameRedirector {\n    constructor(session, element) {\n        this.session = session;\n        this.element = element;\n        this.linkInterceptor = new LinkInterceptor(this, element);\n        this.formSubmitObserver = new FormSubmitObserver(this, element);\n    }\n    start() {\n        this.linkInterceptor.start();\n        this.formSubmitObserver.start();\n    }\n    stop() {\n        this.linkInterceptor.stop();\n        this.formSubmitObserver.stop();\n    }\n    shouldInterceptLinkClick(element, _location, _event) {\n        return this.shouldRedirect(element);\n    }\n    linkClickIntercepted(element, url, event) {\n        const frame = this.findFrameElement(element);\n        if (frame) {\n            frame.delegate.linkClickIntercepted(element, url, event);\n        }\n    }\n    willSubmitForm(element, submitter) {\n        return (element.closest(\"turbo-frame\") == null &&\n            this.shouldSubmit(element, submitter) &&\n            this.shouldRedirect(element, submitter));\n    }\n    formSubmitted(element, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        if (frame) {\n            frame.delegate.formSubmitted(element, submitter);\n        }\n    }\n    shouldSubmit(form, submitter) {\n        var _a;\n        const action = getAction(form, submitter);\n        const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n        const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\");\n        return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);\n    }\n    shouldRedirect(element, submitter) {\n        const isNavigatable = element instanceof HTMLFormElement\n            ? this.session.submissionIsNavigatable(element, submitter)\n            : this.session.elementIsNavigatable(element);\n        if (isNavigatable) {\n            const frame = this.findFrameElement(element, submitter);\n            return frame ? frame != element.closest(\"turbo-frame\") : false;\n        }\n        else {\n            return false;\n        }\n    }\n    findFrameElement(element, submitter) {\n        const id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\");\n        if (id && id != \"_top\") {\n            const frame = this.element.querySelector(`#${id}:not([disabled])`);\n            if (frame instanceof FrameElement) {\n                return frame;\n            }\n        }\n    }\n}\n\nclass History {\n    constructor(delegate) {\n        this.restorationIdentifier = uuid();\n        this.restorationData = {};\n        this.started = false;\n        this.pageLoaded = false;\n        this.onPopState = (event) => {\n            if (this.shouldHandlePopState()) {\n                const { turbo } = event.state || {};\n                if (turbo) {\n                    this.location = new URL(window.location.href);\n                    const { restorationIdentifier } = turbo;\n                    this.restorationIdentifier = restorationIdentifier;\n                    this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);\n                }\n            }\n        };\n        this.onPageLoad = async (_event) => {\n            await nextMicrotask();\n            this.pageLoaded = true;\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"popstate\", this.onPopState, false);\n            addEventListener(\"load\", this.onPageLoad, false);\n            this.started = true;\n            this.replace(new URL(window.location.href));\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"popstate\", this.onPopState, false);\n            removeEventListener(\"load\", this.onPageLoad, false);\n            this.started = false;\n        }\n    }\n    push(location, restorationIdentifier) {\n        this.update(history.pushState, location, restorationIdentifier);\n    }\n    replace(location, restorationIdentifier) {\n        this.update(history.replaceState, location, restorationIdentifier);\n    }\n    update(method, location, restorationIdentifier = uuid()) {\n        const state = { turbo: { restorationIdentifier } };\n        method.call(history, state, \"\", location.href);\n        this.location = location;\n        this.restorationIdentifier = restorationIdentifier;\n    }\n    getRestorationDataForIdentifier(restorationIdentifier) {\n        return this.restorationData[restorationIdentifier] || {};\n    }\n    updateRestorationData(additionalData) {\n        const { restorationIdentifier } = this;\n        const restorationData = this.restorationData[restorationIdentifier];\n        this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n    }\n    assumeControlOfScrollRestoration() {\n        var _a;\n        if (!this.previousScrollRestoration) {\n            this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n            history.scrollRestoration = \"manual\";\n        }\n    }\n    relinquishControlOfScrollRestoration() {\n        if (this.previousScrollRestoration) {\n            history.scrollRestoration = this.previousScrollRestoration;\n            delete this.previousScrollRestoration;\n        }\n    }\n    shouldHandlePopState() {\n        return this.pageIsLoaded();\n    }\n    pageIsLoaded() {\n        return this.pageLoaded || document.readyState == \"complete\";\n    }\n}\n\nclass Navigator {\n    constructor(delegate) {\n        this.delegate = delegate;\n    }\n    proposeVisit(location, options = {}) {\n        if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n            if (locationIsVisitable(location, this.view.snapshot.rootLocation)) {\n                this.delegate.visitProposedToLocation(location, options);\n            }\n            else {\n                window.location.href = location.toString();\n            }\n        }\n    }\n    startVisit(locatable, restorationIdentifier, options = {}) {\n        this.stop();\n        this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({ referrer: this.location }, options));\n        this.currentVisit.start();\n    }\n    submitForm(form, submitter) {\n        this.stop();\n        this.formSubmission = new FormSubmission(this, form, submitter, true);\n        this.formSubmission.start();\n    }\n    stop() {\n        if (this.formSubmission) {\n            this.formSubmission.stop();\n            delete this.formSubmission;\n        }\n        if (this.currentVisit) {\n            this.currentVisit.cancel();\n            delete this.currentVisit;\n        }\n    }\n    get adapter() {\n        return this.delegate.adapter;\n    }\n    get view() {\n        return this.delegate.view;\n    }\n    get history() {\n        return this.delegate.history;\n    }\n    formSubmissionStarted(formSubmission) {\n        if (typeof this.adapter.formSubmissionStarted === \"function\") {\n            this.adapter.formSubmissionStarted(formSubmission);\n        }\n    }\n    async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n        if (formSubmission == this.formSubmission) {\n            const responseHTML = await fetchResponse.responseHTML;\n            if (responseHTML) {\n                const shouldCacheSnapshot = formSubmission.isSafe;\n                if (!shouldCacheSnapshot) {\n                    this.view.clearSnapshotCache();\n                }\n                const { statusCode, redirected } = fetchResponse;\n                const action = this.getActionForFormSubmission(formSubmission);\n                const visitOptions = {\n                    action,\n                    shouldCacheSnapshot,\n                    response: { statusCode, responseHTML, redirected },\n                };\n                this.proposeVisit(fetchResponse.location, visitOptions);\n            }\n        }\n    }\n    async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n        const responseHTML = await fetchResponse.responseHTML;\n        if (responseHTML) {\n            const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n            if (fetchResponse.serverError) {\n                await this.view.renderError(snapshot, this.currentVisit);\n            }\n            else {\n                await this.view.renderPage(snapshot, false, true, this.currentVisit);\n            }\n            this.view.scrollToTop();\n            this.view.clearSnapshotCache();\n        }\n    }\n    formSubmissionErrored(formSubmission, error) {\n        console.error(error);\n    }\n    formSubmissionFinished(formSubmission) {\n        if (typeof this.adapter.formSubmissionFinished === \"function\") {\n            this.adapter.formSubmissionFinished(formSubmission);\n        }\n    }\n    visitStarted(visit) {\n        this.delegate.visitStarted(visit);\n    }\n    visitCompleted(visit) {\n        this.delegate.visitCompleted(visit);\n    }\n    locationWithActionIsSamePage(location, action) {\n        const anchor = getAnchor(location);\n        const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n        const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n        return (action !== \"replace\" &&\n            getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n            (isRestorationToTop || (anchor != null && anchor !== currentAnchor)));\n    }\n    visitScrolledToSamePageLocation(oldURL, newURL) {\n        this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n    }\n    get location() {\n        return this.history.location;\n    }\n    get restorationIdentifier() {\n        return this.history.restorationIdentifier;\n    }\n    getActionForFormSubmission({ submitter, formElement }) {\n        return getVisitAction(submitter, formElement) || \"advance\";\n    }\n}\n\nvar PageStage;\n(function (PageStage) {\n    PageStage[PageStage[\"initial\"] = 0] = \"initial\";\n    PageStage[PageStage[\"loading\"] = 1] = \"loading\";\n    PageStage[PageStage[\"interactive\"] = 2] = \"interactive\";\n    PageStage[PageStage[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\nclass PageObserver {\n    constructor(delegate) {\n        this.stage = PageStage.initial;\n        this.started = false;\n        this.interpretReadyState = () => {\n            const { readyState } = this;\n            if (readyState == \"interactive\") {\n                this.pageIsInteractive();\n            }\n            else if (readyState == \"complete\") {\n                this.pageIsComplete();\n            }\n        };\n        this.pageWillUnload = () => {\n            this.delegate.pageWillUnload();\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            if (this.stage == PageStage.initial) {\n                this.stage = PageStage.loading;\n            }\n            document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n            addEventListener(\"pagehide\", this.pageWillUnload, false);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n            removeEventListener(\"pagehide\", this.pageWillUnload, false);\n            this.started = false;\n        }\n    }\n    pageIsInteractive() {\n        if (this.stage == PageStage.loading) {\n            this.stage = PageStage.interactive;\n            this.delegate.pageBecameInteractive();\n        }\n    }\n    pageIsComplete() {\n        this.pageIsInteractive();\n        if (this.stage == PageStage.interactive) {\n            this.stage = PageStage.complete;\n            this.delegate.pageLoaded();\n        }\n    }\n    get readyState() {\n        return document.readyState;\n    }\n}\n\nclass ScrollObserver {\n    constructor(delegate) {\n        this.started = false;\n        this.onScroll = () => {\n            this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"scroll\", this.onScroll, false);\n            this.onScroll();\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"scroll\", this.onScroll, false);\n            this.started = false;\n        }\n    }\n    updatePosition(position) {\n        this.delegate.scrollPositionChanged(position);\n    }\n}\n\nclass StreamMessageRenderer {\n    render({ fragment }) {\n        Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => document.documentElement.appendChild(fragment));\n    }\n    enteringBardo(currentPermanentElement, newPermanentElement) {\n        newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n    }\n    leavingBardo() { }\n}\nfunction getPermanentElementMapForFragment(fragment) {\n    const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n    const permanentElementMap = {};\n    for (const permanentElementInDocument of permanentElementsInDocument) {\n        const { id } = permanentElementInDocument;\n        for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n            const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n            if (elementInStream) {\n                permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n            }\n        }\n    }\n    return permanentElementMap;\n}\n\nclass StreamObserver {\n    constructor(delegate) {\n        this.sources = new Set();\n        this.started = false;\n        this.inspectFetchResponse = ((event) => {\n            const response = fetchResponseFromEvent(event);\n            if (response && fetchResponseIsStream(response)) {\n                event.preventDefault();\n                this.receiveMessageResponse(response);\n            }\n        });\n        this.receiveMessageEvent = (event) => {\n            if (this.started && typeof event.data == \"string\") {\n                this.receiveMessageHTML(event.data);\n            }\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n        }\n    }\n    connectStreamSource(source) {\n        if (!this.streamSourceIsConnected(source)) {\n            this.sources.add(source);\n            source.addEventListener(\"message\", this.receiveMessageEvent, false);\n        }\n    }\n    disconnectStreamSource(source) {\n        if (this.streamSourceIsConnected(source)) {\n            this.sources.delete(source);\n            source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n        }\n    }\n    streamSourceIsConnected(source) {\n        return this.sources.has(source);\n    }\n    async receiveMessageResponse(response) {\n        const html = await response.responseHTML;\n        if (html) {\n            this.receiveMessageHTML(html);\n        }\n    }\n    receiveMessageHTML(html) {\n        this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n    }\n}\nfunction fetchResponseFromEvent(event) {\n    var _a;\n    const fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n    if (fetchResponse instanceof FetchResponse) {\n        return fetchResponse;\n    }\n}\nfunction fetchResponseIsStream(response) {\n    var _a;\n    const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n    return contentType.startsWith(StreamMessage.contentType);\n}\n\nclass ErrorRenderer extends Renderer {\n    static renderElement(currentElement, newElement) {\n        const { documentElement, body } = document;\n        documentElement.replaceChild(newElement, body);\n    }\n    async render() {\n        this.replaceHeadAndBody();\n        this.activateScriptElements();\n    }\n    replaceHeadAndBody() {\n        const { documentElement, head } = document;\n        documentElement.replaceChild(this.newHead, head);\n        this.renderElement(this.currentElement, this.newElement);\n    }\n    activateScriptElements() {\n        for (const replaceableElement of this.scriptElements) {\n            const parentNode = replaceableElement.parentNode;\n            if (parentNode) {\n                const element = activateScriptElement(replaceableElement);\n                parentNode.replaceChild(element, replaceableElement);\n            }\n        }\n    }\n    get newHead() {\n        return this.newSnapshot.headSnapshot.element;\n    }\n    get scriptElements() {\n        return document.documentElement.querySelectorAll(\"script\");\n    }\n}\n\nclass PageRenderer extends Renderer {\n    static renderElement(currentElement, newElement) {\n        if (document.body && newElement instanceof HTMLBodyElement) {\n            document.body.replaceWith(newElement);\n        }\n        else {\n            document.documentElement.appendChild(newElement);\n        }\n    }\n    get shouldRender() {\n        return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n    }\n    get reloadReason() {\n        if (!this.newSnapshot.isVisitable) {\n            return {\n                reason: \"turbo_visit_control_is_reload\",\n            };\n        }\n        if (!this.trackedElementsAreIdentical) {\n            return {\n                reason: \"tracked_element_mismatch\",\n            };\n        }\n    }\n    async prepareToRender() {\n        await this.mergeHead();\n    }\n    async render() {\n        if (this.willRender) {\n            await this.replaceBody();\n        }\n    }\n    finishRendering() {\n        super.finishRendering();\n        if (!this.isPreview) {\n            this.focusFirstAutofocusableElement();\n        }\n    }\n    get currentHeadSnapshot() {\n        return this.currentSnapshot.headSnapshot;\n    }\n    get newHeadSnapshot() {\n        return this.newSnapshot.headSnapshot;\n    }\n    get newElement() {\n        return this.newSnapshot.element;\n    }\n    async mergeHead() {\n        const mergedHeadElements = this.mergeProvisionalElements();\n        const newStylesheetElements = this.copyNewHeadStylesheetElements();\n        this.copyNewHeadScriptElements();\n        await mergedHeadElements;\n        await newStylesheetElements;\n    }\n    async replaceBody() {\n        await this.preservingPermanentElements(async () => {\n            this.activateNewBody();\n            await this.assignNewBody();\n        });\n    }\n    get trackedElementsAreIdentical() {\n        return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n    }\n    async copyNewHeadStylesheetElements() {\n        const loadingElements = [];\n        for (const element of this.newHeadStylesheetElements) {\n            loadingElements.push(waitForLoad(element));\n            document.head.appendChild(element);\n        }\n        await Promise.all(loadingElements);\n    }\n    copyNewHeadScriptElements() {\n        for (const element of this.newHeadScriptElements) {\n            document.head.appendChild(activateScriptElement(element));\n        }\n    }\n    async mergeProvisionalElements() {\n        const newHeadElements = [...this.newHeadProvisionalElements];\n        for (const element of this.currentHeadProvisionalElements) {\n            if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n                document.head.removeChild(element);\n            }\n        }\n        for (const element of newHeadElements) {\n            document.head.appendChild(element);\n        }\n    }\n    isCurrentElementInElementList(element, elementList) {\n        for (const [index, newElement] of elementList.entries()) {\n            if (element.tagName == \"TITLE\") {\n                if (newElement.tagName != \"TITLE\") {\n                    continue;\n                }\n                if (element.innerHTML == newElement.innerHTML) {\n                    elementList.splice(index, 1);\n                    return true;\n                }\n            }\n            if (newElement.isEqualNode(element)) {\n                elementList.splice(index, 1);\n                return true;\n            }\n        }\n        return false;\n    }\n    removeCurrentHeadProvisionalElements() {\n        for (const element of this.currentHeadProvisionalElements) {\n            document.head.removeChild(element);\n        }\n    }\n    copyNewHeadProvisionalElements() {\n        for (const element of this.newHeadProvisionalElements) {\n            document.head.appendChild(element);\n        }\n    }\n    activateNewBody() {\n        document.adoptNode(this.newElement);\n        this.activateNewBodyScriptElements();\n    }\n    activateNewBodyScriptElements() {\n        for (const inertScriptElement of this.newBodyScriptElements) {\n            const activatedScriptElement = activateScriptElement(inertScriptElement);\n            inertScriptElement.replaceWith(activatedScriptElement);\n        }\n    }\n    async assignNewBody() {\n        await this.renderElement(this.currentElement, this.newElement);\n    }\n    get newHeadStylesheetElements() {\n        return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n    }\n    get newHeadScriptElements() {\n        return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n    }\n    get currentHeadProvisionalElements() {\n        return this.currentHeadSnapshot.provisionalElements;\n    }\n    get newHeadProvisionalElements() {\n        return this.newHeadSnapshot.provisionalElements;\n    }\n    get newBodyScriptElements() {\n        return this.newElement.querySelectorAll(\"script\");\n    }\n}\n\nclass SnapshotCache {\n    constructor(size) {\n        this.keys = [];\n        this.snapshots = {};\n        this.size = size;\n    }\n    has(location) {\n        return toCacheKey(location) in this.snapshots;\n    }\n    get(location) {\n        if (this.has(location)) {\n            const snapshot = this.read(location);\n            this.touch(location);\n            return snapshot;\n        }\n    }\n    put(location, snapshot) {\n        this.write(location, snapshot);\n        this.touch(location);\n        return snapshot;\n    }\n    clear() {\n        this.snapshots = {};\n    }\n    read(location) {\n        return this.snapshots[toCacheKey(location)];\n    }\n    write(location, snapshot) {\n        this.snapshots[toCacheKey(location)] = snapshot;\n    }\n    touch(location) {\n        const key = toCacheKey(location);\n        const index = this.keys.indexOf(key);\n        if (index > -1)\n            this.keys.splice(index, 1);\n        this.keys.unshift(key);\n        this.trim();\n    }\n    trim() {\n        for (const key of this.keys.splice(this.size)) {\n            delete this.snapshots[key];\n        }\n    }\n}\n\nclass PageView extends View {\n    constructor() {\n        super(...arguments);\n        this.snapshotCache = new SnapshotCache(10);\n        this.lastRenderedLocation = new URL(location.href);\n        this.forceReloaded = false;\n    }\n    renderPage(snapshot, isPreview = false, willRender = true, visit) {\n        const renderer = new PageRenderer(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n        if (!renderer.shouldRender) {\n            this.forceReloaded = true;\n        }\n        else {\n            visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n        }\n        return this.render(renderer);\n    }\n    renderError(snapshot, visit) {\n        visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n        const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n        return this.render(renderer);\n    }\n    clearSnapshotCache() {\n        this.snapshotCache.clear();\n    }\n    async cacheSnapshot(snapshot = this.snapshot) {\n        if (snapshot.isCacheable) {\n            this.delegate.viewWillCacheSnapshot();\n            const { lastRenderedLocation: location } = this;\n            await nextEventLoopTick();\n            const cachedSnapshot = snapshot.clone();\n            this.snapshotCache.put(location, cachedSnapshot);\n            return cachedSnapshot;\n        }\n    }\n    getCachedSnapshotForLocation(location) {\n        return this.snapshotCache.get(location);\n    }\n    get snapshot() {\n        return PageSnapshot.fromElement(this.element);\n    }\n}\n\nclass Preloader {\n    constructor(delegate) {\n        this.selector = \"a[data-turbo-preload]\";\n        this.delegate = delegate;\n    }\n    get snapshotCache() {\n        return this.delegate.navigator.view.snapshotCache;\n    }\n    start() {\n        if (document.readyState === \"loading\") {\n            return document.addEventListener(\"DOMContentLoaded\", () => {\n                this.preloadOnLoadLinksForView(document.body);\n            });\n        }\n        else {\n            this.preloadOnLoadLinksForView(document.body);\n        }\n    }\n    preloadOnLoadLinksForView(element) {\n        for (const link of element.querySelectorAll(this.selector)) {\n            this.preloadURL(link);\n        }\n    }\n    async preloadURL(link) {\n        const location = new URL(link.href);\n        if (this.snapshotCache.has(location)) {\n            return;\n        }\n        try {\n            const response = await fetch(location.toString(), { headers: { \"VND.PREFETCH\": \"true\", Accept: \"text/html\" } });\n            const responseText = await response.text();\n            const snapshot = PageSnapshot.fromHTMLString(responseText);\n            this.snapshotCache.put(location, snapshot);\n        }\n        catch (_) {\n        }\n    }\n}\n\nclass Session {\n    constructor() {\n        this.navigator = new Navigator(this);\n        this.history = new History(this);\n        this.preloader = new Preloader(this);\n        this.view = new PageView(this, document.documentElement);\n        this.adapter = new BrowserAdapter(this);\n        this.pageObserver = new PageObserver(this);\n        this.cacheObserver = new CacheObserver();\n        this.linkClickObserver = new LinkClickObserver(this, window);\n        this.formSubmitObserver = new FormSubmitObserver(this, document);\n        this.scrollObserver = new ScrollObserver(this);\n        this.streamObserver = new StreamObserver(this);\n        this.formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement);\n        this.frameRedirector = new FrameRedirector(this, document.documentElement);\n        this.streamMessageRenderer = new StreamMessageRenderer();\n        this.drive = true;\n        this.enabled = true;\n        this.progressBarDelay = 500;\n        this.started = false;\n        this.formMode = \"on\";\n    }\n    start() {\n        if (!this.started) {\n            this.pageObserver.start();\n            this.cacheObserver.start();\n            this.formLinkClickObserver.start();\n            this.linkClickObserver.start();\n            this.formSubmitObserver.start();\n            this.scrollObserver.start();\n            this.streamObserver.start();\n            this.frameRedirector.start();\n            this.history.start();\n            this.preloader.start();\n            this.started = true;\n            this.enabled = true;\n        }\n    }\n    disable() {\n        this.enabled = false;\n    }\n    stop() {\n        if (this.started) {\n            this.pageObserver.stop();\n            this.cacheObserver.stop();\n            this.formLinkClickObserver.stop();\n            this.linkClickObserver.stop();\n            this.formSubmitObserver.stop();\n            this.scrollObserver.stop();\n            this.streamObserver.stop();\n            this.frameRedirector.stop();\n            this.history.stop();\n            this.started = false;\n        }\n    }\n    registerAdapter(adapter) {\n        this.adapter = adapter;\n    }\n    visit(location, options = {}) {\n        const frameElement = options.frame ? document.getElementById(options.frame) : null;\n        if (frameElement instanceof FrameElement) {\n            frameElement.src = location.toString();\n            frameElement.loaded;\n        }\n        else {\n            this.navigator.proposeVisit(expandURL(location), options);\n        }\n    }\n    connectStreamSource(source) {\n        this.streamObserver.connectStreamSource(source);\n    }\n    disconnectStreamSource(source) {\n        this.streamObserver.disconnectStreamSource(source);\n    }\n    renderStreamMessage(message) {\n        this.streamMessageRenderer.render(StreamMessage.wrap(message));\n    }\n    clearCache() {\n        this.view.clearSnapshotCache();\n    }\n    setProgressBarDelay(delay) {\n        this.progressBarDelay = delay;\n    }\n    setFormMode(mode) {\n        this.formMode = mode;\n    }\n    get location() {\n        return this.history.location;\n    }\n    get restorationIdentifier() {\n        return this.history.restorationIdentifier;\n    }\n    historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {\n        if (this.enabled) {\n            this.navigator.startVisit(location, restorationIdentifier, {\n                action: \"restore\",\n                historyChanged: true,\n            });\n        }\n        else {\n            this.adapter.pageInvalidated({\n                reason: \"turbo_disabled\",\n            });\n        }\n    }\n    scrollPositionChanged(position) {\n        this.history.updateRestorationData({ scrollPosition: position });\n    }\n    willSubmitFormLinkToLocation(link, location) {\n        return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation);\n    }\n    submittedFormLinkToLocation() { }\n    willFollowLinkToLocation(link, location, event) {\n        return (this.elementIsNavigatable(link) &&\n            locationIsVisitable(location, this.snapshot.rootLocation) &&\n            this.applicationAllowsFollowingLinkToLocation(link, location, event));\n    }\n    followedLinkToLocation(link, location) {\n        const action = this.getActionForLink(link);\n        const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n        this.visit(location.href, { action, acceptsStreamResponse });\n    }\n    allowsVisitingLocationWithAction(location, action) {\n        return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location);\n    }\n    visitProposedToLocation(location, options) {\n        extendURLWithDeprecatedProperties(location);\n        this.adapter.visitProposedToLocation(location, options);\n    }\n    visitStarted(visit) {\n        if (!visit.acceptsStreamResponse) {\n            markAsBusy(document.documentElement);\n        }\n        extendURLWithDeprecatedProperties(visit.location);\n        if (!visit.silent) {\n            this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n        }\n    }\n    visitCompleted(visit) {\n        clearBusyState(document.documentElement);\n        this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n    }\n    locationWithActionIsSamePage(location, action) {\n        return this.navigator.locationWithActionIsSamePage(location, action);\n    }\n    visitScrolledToSamePageLocation(oldURL, newURL) {\n        this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n    }\n    willSubmitForm(form, submitter) {\n        const action = getAction(form, submitter);\n        return (this.submissionIsNavigatable(form, submitter) &&\n            locationIsVisitable(expandURL(action), this.snapshot.rootLocation));\n    }\n    formSubmitted(form, submitter) {\n        this.navigator.submitForm(form, submitter);\n    }\n    pageBecameInteractive() {\n        this.view.lastRenderedLocation = this.location;\n        this.notifyApplicationAfterPageLoad();\n    }\n    pageLoaded() {\n        this.history.assumeControlOfScrollRestoration();\n    }\n    pageWillUnload() {\n        this.history.relinquishControlOfScrollRestoration();\n    }\n    receivedMessageFromStream(message) {\n        this.renderStreamMessage(message);\n    }\n    viewWillCacheSnapshot() {\n        var _a;\n        if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n            this.notifyApplicationBeforeCachingSnapshot();\n        }\n    }\n    allowsImmediateRender({ element }, options) {\n        const event = this.notifyApplicationBeforeRender(element, options);\n        const { defaultPrevented, detail: { render }, } = event;\n        if (this.view.renderer && render) {\n            this.view.renderer.renderElement = render;\n        }\n        return !defaultPrevented;\n    }\n    viewRenderedSnapshot(_snapshot, _isPreview) {\n        this.view.lastRenderedLocation = this.history.location;\n        this.notifyApplicationAfterRender();\n    }\n    preloadOnLoadLinksForView(element) {\n        this.preloader.preloadOnLoadLinksForView(element);\n    }\n    viewInvalidated(reason) {\n        this.adapter.pageInvalidated(reason);\n    }\n    frameLoaded(frame) {\n        this.notifyApplicationAfterFrameLoad(frame);\n    }\n    frameRendered(fetchResponse, frame) {\n        this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n    }\n    applicationAllowsFollowingLinkToLocation(link, location, ev) {\n        const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n        return !event.defaultPrevented;\n    }\n    applicationAllowsVisitingLocation(location) {\n        const event = this.notifyApplicationBeforeVisitingLocation(location);\n        return !event.defaultPrevented;\n    }\n    notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n        return dispatch(\"turbo:click\", {\n            target: link,\n            detail: { url: location.href, originalEvent: event },\n            cancelable: true,\n        });\n    }\n    notifyApplicationBeforeVisitingLocation(location) {\n        return dispatch(\"turbo:before-visit\", {\n            detail: { url: location.href },\n            cancelable: true,\n        });\n    }\n    notifyApplicationAfterVisitingLocation(location, action) {\n        return dispatch(\"turbo:visit\", { detail: { url: location.href, action } });\n    }\n    notifyApplicationBeforeCachingSnapshot() {\n        return dispatch(\"turbo:before-cache\");\n    }\n    notifyApplicationBeforeRender(newBody, options) {\n        return dispatch(\"turbo:before-render\", {\n            detail: Object.assign({ newBody }, options),\n            cancelable: true,\n        });\n    }\n    notifyApplicationAfterRender() {\n        return dispatch(\"turbo:render\");\n    }\n    notifyApplicationAfterPageLoad(timing = {}) {\n        return dispatch(\"turbo:load\", {\n            detail: { url: this.location.href, timing },\n        });\n    }\n    notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n        dispatchEvent(new HashChangeEvent(\"hashchange\", {\n            oldURL: oldURL.toString(),\n            newURL: newURL.toString(),\n        }));\n    }\n    notifyApplicationAfterFrameLoad(frame) {\n        return dispatch(\"turbo:frame-load\", { target: frame });\n    }\n    notifyApplicationAfterFrameRender(fetchResponse, frame) {\n        return dispatch(\"turbo:frame-render\", {\n            detail: { fetchResponse },\n            target: frame,\n            cancelable: true,\n        });\n    }\n    submissionIsNavigatable(form, submitter) {\n        if (this.formMode == \"off\") {\n            return false;\n        }\n        else {\n            const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n            if (this.formMode == \"optin\") {\n                return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null;\n            }\n            else {\n                return submitterIsNavigatable && this.elementIsNavigatable(form);\n            }\n        }\n    }\n    elementIsNavigatable(element) {\n        const container = findClosestRecursively(element, \"[data-turbo]\");\n        const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n        if (this.drive || withinFrame) {\n            if (container) {\n                return container.getAttribute(\"data-turbo\") != \"false\";\n            }\n            else {\n                return true;\n            }\n        }\n        else {\n            if (container) {\n                return container.getAttribute(\"data-turbo\") == \"true\";\n            }\n            else {\n                return false;\n            }\n        }\n    }\n    getActionForLink(link) {\n        return getVisitAction(link) || \"advance\";\n    }\n    get snapshot() {\n        return this.view.snapshot;\n    }\n}\nfunction extendURLWithDeprecatedProperties(url) {\n    Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\nconst deprecatedLocationPropertyDescriptors = {\n    absoluteURL: {\n        get() {\n            return this.toString();\n        },\n    },\n};\n\nclass Cache {\n    constructor(session) {\n        this.session = session;\n    }\n    clear() {\n        this.session.clearCache();\n    }\n    resetCacheControl() {\n        this.setCacheControl(\"\");\n    }\n    exemptPageFromCache() {\n        this.setCacheControl(\"no-cache\");\n    }\n    exemptPageFromPreview() {\n        this.setCacheControl(\"no-preview\");\n    }\n    setCacheControl(value) {\n        setMetaContent(\"turbo-cache-control\", value);\n    }\n}\n\nconst StreamActions = {\n    after() {\n        this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e.nextSibling); });\n    },\n    append() {\n        this.removeDuplicateTargetChildren();\n        this.targetElements.forEach((e) => e.append(this.templateContent));\n    },\n    before() {\n        this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e); });\n    },\n    prepend() {\n        this.removeDuplicateTargetChildren();\n        this.targetElements.forEach((e) => e.prepend(this.templateContent));\n    },\n    remove() {\n        this.targetElements.forEach((e) => e.remove());\n    },\n    replace() {\n        this.targetElements.forEach((e) => e.replaceWith(this.templateContent));\n    },\n    update() {\n        this.targetElements.forEach((targetElement) => {\n            targetElement.innerHTML = \"\";\n            targetElement.append(this.templateContent);\n        });\n    },\n};\n\nconst session = new Session();\nconst cache = new Cache(session);\nconst { navigator: navigator$1 } = session;\nfunction start() {\n    session.start();\n}\nfunction registerAdapter(adapter) {\n    session.registerAdapter(adapter);\n}\nfunction visit(location, options) {\n    session.visit(location, options);\n}\nfunction connectStreamSource(source) {\n    session.connectStreamSource(source);\n}\nfunction disconnectStreamSource(source) {\n    session.disconnectStreamSource(source);\n}\nfunction renderStreamMessage(message) {\n    session.renderStreamMessage(message);\n}\nfunction clearCache() {\n    console.warn(\"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\");\n    session.clearCache();\n}\nfunction setProgressBarDelay(delay) {\n    session.setProgressBarDelay(delay);\n}\nfunction setConfirmMethod(confirmMethod) {\n    FormSubmission.confirmMethod = confirmMethod;\n}\nfunction setFormMode(mode) {\n    session.setFormMode(mode);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    navigator: navigator$1,\n    session: session,\n    cache: cache,\n    PageRenderer: PageRenderer,\n    PageSnapshot: PageSnapshot,\n    FrameRenderer: FrameRenderer,\n    start: start,\n    registerAdapter: registerAdapter,\n    visit: visit,\n    connectStreamSource: connectStreamSource,\n    disconnectStreamSource: disconnectStreamSource,\n    renderStreamMessage: renderStreamMessage,\n    clearCache: clearCache,\n    setProgressBarDelay: setProgressBarDelay,\n    setConfirmMethod: setConfirmMethod,\n    setFormMode: setFormMode,\n    StreamActions: StreamActions\n});\n\nclass TurboFrameMissingError extends Error {\n}\n\nclass FrameController {\n    constructor(element) {\n        this.fetchResponseLoaded = (_fetchResponse) => { };\n        this.currentFetchRequest = null;\n        this.resolveVisitPromise = () => { };\n        this.connected = false;\n        this.hasBeenLoaded = false;\n        this.ignoredAttributes = new Set();\n        this.action = null;\n        this.visitCachedSnapshot = ({ element }) => {\n            const frame = element.querySelector(\"#\" + this.element.id);\n            if (frame && this.previousFrameElement) {\n                frame.replaceChildren(...this.previousFrameElement.children);\n            }\n            delete this.previousFrameElement;\n        };\n        this.element = element;\n        this.view = new FrameView(this, this.element);\n        this.appearanceObserver = new AppearanceObserver(this, this.element);\n        this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n        this.linkInterceptor = new LinkInterceptor(this, this.element);\n        this.restorationIdentifier = uuid();\n        this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n    }\n    connect() {\n        if (!this.connected) {\n            this.connected = true;\n            if (this.loadingStyle == FrameLoadingStyle.lazy) {\n                this.appearanceObserver.start();\n            }\n            else {\n                this.loadSourceURL();\n            }\n            this.formLinkClickObserver.start();\n            this.linkInterceptor.start();\n            this.formSubmitObserver.start();\n        }\n    }\n    disconnect() {\n        if (this.connected) {\n            this.connected = false;\n            this.appearanceObserver.stop();\n            this.formLinkClickObserver.stop();\n            this.linkInterceptor.stop();\n            this.formSubmitObserver.stop();\n        }\n    }\n    disabledChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.eager) {\n            this.loadSourceURL();\n        }\n    }\n    sourceURLChanged() {\n        if (this.isIgnoringChangesTo(\"src\"))\n            return;\n        if (this.element.isConnected) {\n            this.complete = false;\n        }\n        if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n            this.loadSourceURL();\n        }\n    }\n    sourceURLReloaded() {\n        const { src } = this.element;\n        this.ignoringChangesToAttribute(\"complete\", () => {\n            this.element.removeAttribute(\"complete\");\n        });\n        this.element.src = null;\n        this.element.src = src;\n        return this.element.loaded;\n    }\n    completeChanged() {\n        if (this.isIgnoringChangesTo(\"complete\"))\n            return;\n        this.loadSourceURL();\n    }\n    loadingStyleChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.lazy) {\n            this.appearanceObserver.start();\n        }\n        else {\n            this.appearanceObserver.stop();\n            this.loadSourceURL();\n        }\n    }\n    async loadSourceURL() {\n        if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n            this.element.loaded = this.visit(expandURL(this.sourceURL));\n            this.appearanceObserver.stop();\n            await this.element.loaded;\n            this.hasBeenLoaded = true;\n        }\n    }\n    async loadResponse(fetchResponse) {\n        if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n            this.sourceURL = fetchResponse.response.url;\n        }\n        try {\n            const html = await fetchResponse.responseHTML;\n            if (html) {\n                const document = parseHTMLDocument(html);\n                const pageSnapshot = PageSnapshot.fromDocument(document);\n                if (pageSnapshot.isVisitable) {\n                    await this.loadFrameResponse(fetchResponse, document);\n                }\n                else {\n                    await this.handleUnvisitableFrameResponse(fetchResponse);\n                }\n            }\n        }\n        finally {\n            this.fetchResponseLoaded = () => { };\n        }\n    }\n    elementAppearedInViewport(element) {\n        this.proposeVisitIfNavigatedWithAction(element, element);\n        this.loadSourceURL();\n    }\n    willSubmitFormLinkToLocation(link) {\n        return this.shouldInterceptNavigation(link);\n    }\n    submittedFormLinkToLocation(link, _location, form) {\n        const frame = this.findFrameElement(link);\n        if (frame)\n            form.setAttribute(\"data-turbo-frame\", frame.id);\n    }\n    shouldInterceptLinkClick(element, _location, _event) {\n        return this.shouldInterceptNavigation(element);\n    }\n    linkClickIntercepted(element, location) {\n        this.navigateFrame(element, location);\n    }\n    willSubmitForm(element, submitter) {\n        return element.closest(\"turbo-frame\") == this.element && this.shouldInterceptNavigation(element, submitter);\n    }\n    formSubmitted(element, submitter) {\n        if (this.formSubmission) {\n            this.formSubmission.stop();\n        }\n        this.formSubmission = new FormSubmission(this, element, submitter);\n        const { fetchRequest } = this.formSubmission;\n        this.prepareRequest(fetchRequest);\n        this.formSubmission.start();\n    }\n    prepareRequest(request) {\n        var _a;\n        request.headers[\"Turbo-Frame\"] = this.id;\n        if ((_a = this.currentNavigationElement) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"data-turbo-stream\")) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\n    }\n    requestStarted(_request) {\n        markAsBusy(this.element);\n    }\n    requestPreventedHandlingResponse(_request, _response) {\n        this.resolveVisitPromise();\n    }\n    async requestSucceededWithResponse(request, response) {\n        await this.loadResponse(response);\n        this.resolveVisitPromise();\n    }\n    async requestFailedWithResponse(request, response) {\n        await this.loadResponse(response);\n        this.resolveVisitPromise();\n    }\n    requestErrored(request, error) {\n        console.error(error);\n        this.resolveVisitPromise();\n    }\n    requestFinished(_request) {\n        clearBusyState(this.element);\n    }\n    formSubmissionStarted({ formElement }) {\n        markAsBusy(formElement, this.findFrameElement(formElement));\n    }\n    formSubmissionSucceededWithResponse(formSubmission, response) {\n        const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n        frame.delegate.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n        frame.delegate.loadResponse(response);\n        if (!formSubmission.isSafe) {\n            session.clearCache();\n        }\n    }\n    formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n        this.element.delegate.loadResponse(fetchResponse);\n        session.clearCache();\n    }\n    formSubmissionErrored(formSubmission, error) {\n        console.error(error);\n    }\n    formSubmissionFinished({ formElement }) {\n        clearBusyState(formElement, this.findFrameElement(formElement));\n    }\n    allowsImmediateRender({ element: newFrame }, options) {\n        const event = dispatch(\"turbo:before-frame-render\", {\n            target: this.element,\n            detail: Object.assign({ newFrame }, options),\n            cancelable: true,\n        });\n        const { defaultPrevented, detail: { render }, } = event;\n        if (this.view.renderer && render) {\n            this.view.renderer.renderElement = render;\n        }\n        return !defaultPrevented;\n    }\n    viewRenderedSnapshot(_snapshot, _isPreview) { }\n    preloadOnLoadLinksForView(element) {\n        session.preloadOnLoadLinksForView(element);\n    }\n    viewInvalidated() { }\n    willRenderFrame(currentElement, _newElement) {\n        this.previousFrameElement = currentElement.cloneNode(true);\n    }\n    async loadFrameResponse(fetchResponse, document) {\n        const newFrameElement = await this.extractForeignFrameElement(document.body);\n        if (newFrameElement) {\n            const snapshot = new Snapshot(newFrameElement);\n            const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n            if (this.view.renderPromise)\n                await this.view.renderPromise;\n            this.changeHistory();\n            await this.view.render(renderer);\n            this.complete = true;\n            session.frameRendered(fetchResponse, this.element);\n            session.frameLoaded(this.element);\n            this.fetchResponseLoaded(fetchResponse);\n        }\n        else if (this.willHandleFrameMissingFromResponse(fetchResponse)) {\n            this.handleFrameMissingFromResponse(fetchResponse);\n        }\n    }\n    async visit(url) {\n        var _a;\n        const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n        (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();\n        this.currentFetchRequest = request;\n        return new Promise((resolve) => {\n            this.resolveVisitPromise = () => {\n                this.resolveVisitPromise = () => { };\n                this.currentFetchRequest = null;\n                resolve();\n            };\n            request.perform();\n        });\n    }\n    navigateFrame(element, url, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        frame.delegate.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n        this.withCurrentNavigationElement(element, () => {\n            frame.src = url;\n        });\n    }\n    proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n        this.action = getVisitAction(submitter, element, frame);\n        if (this.action) {\n            const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n            const { visitCachedSnapshot } = frame.delegate;\n            frame.delegate.fetchResponseLoaded = (fetchResponse) => {\n                if (frame.src) {\n                    const { statusCode, redirected } = fetchResponse;\n                    const responseHTML = frame.ownerDocument.documentElement.outerHTML;\n                    const response = { statusCode, redirected, responseHTML };\n                    const options = {\n                        response,\n                        visitCachedSnapshot,\n                        willRender: false,\n                        updateHistory: false,\n                        restorationIdentifier: this.restorationIdentifier,\n                        snapshot: pageSnapshot,\n                    };\n                    if (this.action)\n                        options.action = this.action;\n                    session.visit(frame.src, options);\n                }\n            };\n        }\n    }\n    changeHistory() {\n        if (this.action) {\n            const method = getHistoryMethodForAction(this.action);\n            session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n        }\n    }\n    async handleUnvisitableFrameResponse(fetchResponse) {\n        console.warn(`The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`);\n        await this.visitResponse(fetchResponse.response);\n    }\n    willHandleFrameMissingFromResponse(fetchResponse) {\n        this.element.setAttribute(\"complete\", \"\");\n        const response = fetchResponse.response;\n        const visit = async (url, options = {}) => {\n            if (url instanceof Response) {\n                this.visitResponse(url);\n            }\n            else {\n                session.visit(url, options);\n            }\n        };\n        const event = dispatch(\"turbo:frame-missing\", {\n            target: this.element,\n            detail: { response, visit },\n            cancelable: true,\n        });\n        return !event.defaultPrevented;\n    }\n    handleFrameMissingFromResponse(fetchResponse) {\n        this.view.missing();\n        this.throwFrameMissingError(fetchResponse);\n    }\n    throwFrameMissingError(fetchResponse) {\n        const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n        throw new TurboFrameMissingError(message);\n    }\n    async visitResponse(response) {\n        const wrapped = new FetchResponse(response);\n        const responseHTML = await wrapped.responseHTML;\n        const { location, redirected, statusCode } = wrapped;\n        return session.visit(location, { response: { redirected, statusCode, responseHTML } });\n    }\n    findFrameElement(element, submitter) {\n        var _a;\n        const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n        return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n    }\n    async extractForeignFrameElement(container) {\n        let element;\n        const id = CSS.escape(this.id);\n        try {\n            element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n            if (element) {\n                return element;\n            }\n            element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n            if (element) {\n                await element.loaded;\n                return await this.extractForeignFrameElement(element);\n            }\n        }\n        catch (error) {\n            console.error(error);\n            return new FrameElement();\n        }\n        return null;\n    }\n    formActionIsVisitable(form, submitter) {\n        const action = getAction(form, submitter);\n        return locationIsVisitable(expandURL(action), this.rootLocation);\n    }\n    shouldInterceptNavigation(element, submitter) {\n        const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n        if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {\n            return false;\n        }\n        if (!this.enabled || id == \"_top\") {\n            return false;\n        }\n        if (id) {\n            const frameElement = getFrameElementById(id);\n            if (frameElement) {\n                return !frameElement.disabled;\n            }\n        }\n        if (!session.elementIsNavigatable(element)) {\n            return false;\n        }\n        if (submitter && !session.elementIsNavigatable(submitter)) {\n            return false;\n        }\n        return true;\n    }\n    get id() {\n        return this.element.id;\n    }\n    get enabled() {\n        return !this.element.disabled;\n    }\n    get sourceURL() {\n        if (this.element.src) {\n            return this.element.src;\n        }\n    }\n    set sourceURL(sourceURL) {\n        this.ignoringChangesToAttribute(\"src\", () => {\n            this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n        });\n    }\n    get loadingStyle() {\n        return this.element.loading;\n    }\n    get isLoading() {\n        return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n    }\n    get complete() {\n        return this.element.hasAttribute(\"complete\");\n    }\n    set complete(value) {\n        this.ignoringChangesToAttribute(\"complete\", () => {\n            if (value) {\n                this.element.setAttribute(\"complete\", \"\");\n            }\n            else {\n                this.element.removeAttribute(\"complete\");\n            }\n        });\n    }\n    get isActive() {\n        return this.element.isActive && this.connected;\n    }\n    get rootLocation() {\n        var _a;\n        const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n        const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\";\n        return expandURL(root);\n    }\n    isIgnoringChangesTo(attributeName) {\n        return this.ignoredAttributes.has(attributeName);\n    }\n    ignoringChangesToAttribute(attributeName, callback) {\n        this.ignoredAttributes.add(attributeName);\n        callback();\n        this.ignoredAttributes.delete(attributeName);\n    }\n    withCurrentNavigationElement(element, callback) {\n        this.currentNavigationElement = element;\n        callback();\n        delete this.currentNavigationElement;\n    }\n}\nfunction getFrameElementById(id) {\n    if (id != null) {\n        const element = document.getElementById(id);\n        if (element instanceof FrameElement) {\n            return element;\n        }\n    }\n}\nfunction activateElement(element, currentURL) {\n    if (element) {\n        const src = element.getAttribute(\"src\");\n        if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n            throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`);\n        }\n        if (element.ownerDocument !== document) {\n            element = document.importNode(element, true);\n        }\n        if (element instanceof FrameElement) {\n            element.connectedCallback();\n            element.disconnectedCallback();\n            return element;\n        }\n    }\n}\n\nclass StreamElement extends HTMLElement {\n    static async renderElement(newElement) {\n        await newElement.performAction();\n    }\n    async connectedCallback() {\n        try {\n            await this.render();\n        }\n        catch (error) {\n            console.error(error);\n        }\n        finally {\n            this.disconnect();\n        }\n    }\n    async render() {\n        var _a;\n        return ((_a = this.renderPromise) !== null && _a !== void 0 ? _a : (this.renderPromise = (async () => {\n            const event = this.beforeRenderEvent;\n            if (this.dispatchEvent(event)) {\n                await nextAnimationFrame();\n                await event.detail.render(this);\n            }\n        })()));\n    }\n    disconnect() {\n        try {\n            this.remove();\n        }\n        catch (_a) { }\n    }\n    removeDuplicateTargetChildren() {\n        this.duplicateChildren.forEach((c) => c.remove());\n    }\n    get duplicateChildren() {\n        var _a;\n        const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n        const newChildrenIds = [...(((_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children) || [])].filter((c) => !!c.id).map((c) => c.id);\n        return existingChildren.filter((c) => newChildrenIds.includes(c.id));\n    }\n    get performAction() {\n        if (this.action) {\n            const actionFunction = StreamActions[this.action];\n            if (actionFunction) {\n                return actionFunction;\n            }\n            this.raise(\"unknown action\");\n        }\n        this.raise(\"action attribute is missing\");\n    }\n    get targetElements() {\n        if (this.target) {\n            return this.targetElementsById;\n        }\n        else if (this.targets) {\n            return this.targetElementsByQuery;\n        }\n        else {\n            this.raise(\"target or targets attribute is missing\");\n        }\n    }\n    get templateContent() {\n        return this.templateElement.content.cloneNode(true);\n    }\n    get templateElement() {\n        if (this.firstElementChild === null) {\n            const template = this.ownerDocument.createElement(\"template\");\n            this.appendChild(template);\n            return template;\n        }\n        else if (this.firstElementChild instanceof HTMLTemplateElement) {\n            return this.firstElementChild;\n        }\n        this.raise(\"first child element must be a <template> element\");\n    }\n    get action() {\n        return this.getAttribute(\"action\");\n    }\n    get target() {\n        return this.getAttribute(\"target\");\n    }\n    get targets() {\n        return this.getAttribute(\"targets\");\n    }\n    raise(message) {\n        throw new Error(`${this.description}: ${message}`);\n    }\n    get description() {\n        var _a, _b;\n        return (_b = ((_a = this.outerHTML.match(/<[^>]+>/)) !== null && _a !== void 0 ? _a : [])[0]) !== null && _b !== void 0 ? _b : \"<turbo-stream>\";\n    }\n    get beforeRenderEvent() {\n        return new CustomEvent(\"turbo:before-stream-render\", {\n            bubbles: true,\n            cancelable: true,\n            detail: { newStream: this, render: StreamElement.renderElement },\n        });\n    }\n    get targetElementsById() {\n        var _a;\n        const element = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.getElementById(this.target);\n        if (element !== null) {\n            return [element];\n        }\n        else {\n            return [];\n        }\n    }\n    get targetElementsByQuery() {\n        var _a;\n        const elements = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.targets);\n        if (elements.length !== 0) {\n            return Array.prototype.slice.call(elements);\n        }\n        else {\n            return [];\n        }\n    }\n}\n\nclass StreamSourceElement extends HTMLElement {\n    constructor() {\n        super(...arguments);\n        this.streamSource = null;\n    }\n    connectedCallback() {\n        this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n        connectStreamSource(this.streamSource);\n    }\n    disconnectedCallback() {\n        if (this.streamSource) {\n            disconnectStreamSource(this.streamSource);\n        }\n    }\n    get src() {\n        return this.getAttribute(\"src\") || \"\";\n    }\n}\n\nFrameElement.delegateConstructor = FrameController;\nif (customElements.get(\"turbo-frame\") === undefined) {\n    customElements.define(\"turbo-frame\", FrameElement);\n}\nif (customElements.get(\"turbo-stream\") === undefined) {\n    customElements.define(\"turbo-stream\", StreamElement);\n}\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n    customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n    let element = document.currentScript;\n    if (!element)\n        return;\n    if (element.hasAttribute(\"data-turbo-suppress-warning\"))\n        return;\n    element = element.parentElement;\n    while (element) {\n        if (element == document.body) {\n            return console.warn(unindent `\n        You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n        Load your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n        For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n        \u2014\u2014\n        Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n      `, element.outerHTML);\n        }\n        element = element.parentElement;\n    }\n})();\n\nwindow.Turbo = Turbo;\nstart();\n\nexport { FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, connectStreamSource, disconnectStreamSource, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n", "let consumer\n\nexport async function getConsumer() {\n  return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n  return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n  const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n  return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n  const { subscriptions } = await getConsumer()\n  return subscriptions.create(channel, mixin)\n}\n", "// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n    if (!obj || typeof obj !== 'object') return obj;\n    if (obj instanceof Date || obj instanceof RegExp) return obj;\n    if (Array.isArray(obj)) return obj.map(walk);\n    return Object.keys(obj).reduce(function (acc, key) {\n        var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n            return '_' + x.toLowerCase();\n        });\n        acc[camel] = walk(obj[key]);\n        return acc;\n    }, {});\n};", "import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n  async connectedCallback() {\n    connectStreamSource(this)\n    this.subscription = await subscribeTo(this.channel, {\n      received: this.dispatchMessageEvent.bind(this),\n      connected: this.subscriptionConnected.bind(this),\n      disconnected: this.subscriptionDisconnected.bind(this)\n    })\n  }\n\n  disconnectedCallback() {\n    disconnectStreamSource(this)\n    if (this.subscription) this.subscription.unsubscribe()\n  }\n\n  dispatchMessageEvent(data) {\n    const event = new MessageEvent(\"message\", { data })\n    return this.dispatchEvent(event)\n  }\n\n  subscriptionConnected() {\n    this.setAttribute(\"connected\", \"\")\n  }\n\n  subscriptionDisconnected() {\n    this.removeAttribute(\"connected\")\n  }\n\n  get channel() {\n    const channel = this.getAttribute(\"channel\")\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n    return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n  }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n  customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n", "export function encodeMethodIntoRequestBody(event) {\n  if (event.target instanceof HTMLFormElement) {\n    const { target: form, detail: { fetchOptions } } = event\n\n    form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n      const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n      const method = determineFetchMethod(submitter, body, form)\n\n      if (!/get/i.test(method)) {\n        if (/post/i.test(method)) {\n          body.delete(\"_method\")\n        } else {\n          body.set(\"_method\", method)\n        }\n\n        fetchOptions.method = \"post\"\n      }\n    }, { once: true })\n  }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n  const formMethod = determineFormMethod(submitter)\n  const overrideMethod = body.get(\"_method\")\n  const method = form.getAttribute(\"method\") || \"get\"\n\n  if (typeof formMethod == \"string\") {\n    return formMethod\n  } else if (typeof overrideMethod == \"string\") {\n    return overrideMethod\n  } else {\n    return method\n  }\n}\n\nfunction determineFormMethod(submitter) {\n  if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n    if (submitter.hasAttribute(\"formmethod\")) {\n      return submitter.formMethod\n    } else {\n      return null\n    }\n  } else {\n    return null\n  }\n}\n\nfunction isBodyInit(body) {\n  return body instanceof FormData || body instanceof URLSearchParams\n}\n", "import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2022 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    hasBindings() {\n        return this.unorderedBindings.size > 0;\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            },\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map();\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach((eventListener) => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding, clearEventListeners = false) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n        if (clearEventListeners)\n            this.clearEventListenersForBinding(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    clearEventListenersForBinding(binding) {\n        const eventListener = this.fetchEventListenerForBinding(binding);\n        if (!eventListener.hasBindings()) {\n            eventListener.disconnect();\n            this.removeMappedEventListenerFor(binding);\n        }\n    }\n    removeMappedEventListenerFor(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        eventListenerMap.delete(cacheKey);\n        if (eventListenerMap.size == 0)\n            this.eventListenerMaps.delete(eventTarget);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map();\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions)\n            .sort()\n            .forEach((key) => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst defaultActionDescriptorFilters = {\n    stop({ event, value }) {\n        if (value)\n            event.stopPropagation();\n        return true;\n    },\n    prevent({ event, value }) {\n        if (value)\n            event.preventDefault();\n        return true;\n    },\n    self({ event, value, element }) {\n        if (value) {\n            return element === event.target;\n        }\n        else {\n            return true;\n        }\n    },\n};\nconst descriptorPattern = /^(?:(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    let eventName = matches[1];\n    let keyFilter = matches[2];\n    if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n        eventName += `.${keyFilter}`;\n        keyFilter = \"\";\n    }\n    return {\n        eventTarget: parseEventTarget(matches[3]),\n        eventName,\n        eventOptions: matches[6] ? parseEventOptions(matches[6]) : {},\n        identifier: matches[4],\n        methodName: matches[5],\n        keyFilter,\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions\n        .split(\":\")\n        .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n    return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nclass Action {\n    constructor(element, index, descriptor, schema) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n        this.keyFilter = descriptor.keyFilter || \"\";\n        this.schema = schema;\n    }\n    static forToken(token, schema) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n    }\n    toString() {\n        const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n        const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n    }\n    isFilterTarget(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filteres = this.keyFilter.split(\"+\");\n        const modifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\n        const [meta, ctrl, alt, shift] = modifiers.map((modifier) => filteres.includes(modifier));\n        if (event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift) {\n            return true;\n        }\n        const standardFilter = filteres.filter((key) => !modifiers.includes(key))[0];\n        if (!standardFilter) {\n            return false;\n        }\n        if (!Object.prototype.hasOwnProperty.call(this.keyMappings, standardFilter)) {\n            error(`contains unknown key filter: ${this.keyFilter}`);\n        }\n        return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n    }\n    get params() {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n        for (const { name, value } of Array.from(this.element.attributes)) {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                params[camelize(key)] = typecast(value);\n            }\n        }\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n    get keyMappings() {\n        return this.schema.keyMappings;\n    }\n}\nconst defaultEventNames = {\n    a: () => \"click\",\n    button: () => \"click\",\n    form: () => \"submit\",\n    details: () => \"toggle\",\n    input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n    select: () => \"change\",\n    textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(event)) {\n            this.invokeWithEvent(event);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    applyEventModifiers(event) {\n        const { element } = this.action;\n        const { actionDescriptorFilters } = this.context.application;\n        let passes = true;\n        for (const [name, value] of Object.entries(this.eventOptions)) {\n            if (name in actionDescriptorFilters) {\n                const filter = actionDescriptorFilters[name];\n                passes = passes && filter({ name, value, event, element });\n            }\n            else {\n                continue;\n            }\n        }\n        return passes;\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            const { params } = this.action;\n            const actionEvent = Object.assign(event, { params });\n            this.method.call(this.controller, actionEvent);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (event instanceof KeyboardEvent && this.action.isFilterTarget(event)) {\n            return false;\n        }\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(node, attributeName) {\n        const element = node;\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some((set) => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([_key, values]) => values.has(value))\n            .map(([key, _values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map();\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass SelectorObserver {\n    constructor(element, selector, delegate, details = {}) {\n        this.selector = selector;\n        this.details = details;\n        this.elementObserver = new ElementObserver(element, this);\n        this.delegate = delegate;\n        this.matchesByElement = new Multimap();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    matchElement(element) {\n        const matches = element.matches(this.selector);\n        if (this.delegate.selectorMatchElement) {\n            return matches && this.delegate.selectorMatchElement(element, this.details);\n        }\n        return matches;\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector)).filter((match) => this.matchElement(match));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        this.selectorMatched(element);\n    }\n    elementUnmatched(element) {\n        this.selectorUnmatched(element);\n    }\n    elementAttributeChanged(element, _attributeName) {\n        const matches = this.matchElement(element);\n        const matchedBefore = this.matchesByElement.has(this.selector, element);\n        if (!matches && matchedBefore) {\n            this.selectorUnmatched(element);\n        }\n    }\n    selectorMatched(element) {\n        if (this.delegate.selectorMatched) {\n            this.delegate.selectorMatched(element, this.selector, this.details);\n            this.matchesByElement.add(this.selector, element);\n        }\n    }\n    selectorUnmatched(element) {\n        this.delegate.selectorUnmatched(element, this.selector, this.details);\n        this.matchesByElement.delete(this.selector, element);\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map((attribute) => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap();\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach((token) => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach((token) => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString\n        .trim()\n        .split(/\\s+/)\n        .filter((content) => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap();\n        this.valuesByTokenByElement = new WeakMap();\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map();\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map();\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token, this.schema);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n    }\n    start() {\n        this.stringMapObserver.start();\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            try {\n                const value = descriptor.reader(rawValue);\n                let oldValue = rawOldValue;\n                if (rawOldValue) {\n                    oldValue = descriptor.reader(rawOldValue);\n                }\n                changedMethod.call(this.receiver, value, oldValue);\n            }\n            catch (error) {\n                if (error instanceof TypeError) {\n                    error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n                }\n                throw error;\n            }\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach((key) => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap();\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n        return values;\n    }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.outletsByName = new Multimap();\n        this.outletElementsByName = new Multimap();\n        this.selectorObserverMap = new Map();\n    }\n    start() {\n        if (this.selectorObserverMap.size === 0) {\n            this.outletDefinitions.forEach((outletName) => {\n                const selector = this.selector(outletName);\n                const details = { outletName };\n                if (selector) {\n                    this.selectorObserverMap.set(outletName, new SelectorObserver(document.body, selector, this, details));\n                }\n            });\n            this.selectorObserverMap.forEach((observer) => observer.start());\n        }\n        this.dependentContexts.forEach((context) => context.refresh());\n    }\n    stop() {\n        if (this.selectorObserverMap.size > 0) {\n            this.disconnectAllOutlets();\n            this.selectorObserverMap.forEach((observer) => observer.stop());\n            this.selectorObserverMap.clear();\n        }\n    }\n    refresh() {\n        this.selectorObserverMap.forEach((observer) => observer.refresh());\n    }\n    selectorMatched(element, _selector, { outletName }) {\n        const outlet = this.getOutlet(element, outletName);\n        if (outlet) {\n            this.connectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorUnmatched(element, _selector, { outletName }) {\n        const outlet = this.getOutletFromMap(element, outletName);\n        if (outlet) {\n            this.disconnectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorMatchElement(element, { outletName }) {\n        return (this.hasOutlet(element, outletName) &&\n            element.matches(`[${this.context.application.schema.controllerAttribute}~=${outletName}]`));\n    }\n    connectOutlet(outlet, element, outletName) {\n        var _a;\n        if (!this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.add(outletName, outlet);\n            this.outletElementsByName.add(outletName, element);\n            (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n        }\n    }\n    disconnectOutlet(outlet, element, outletName) {\n        var _a;\n        if (this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.delete(outletName, outlet);\n            this.outletElementsByName.delete(outletName, element);\n            (_a = this.selectorObserverMap\n                .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n        }\n    }\n    disconnectAllOutlets() {\n        for (const outletName of this.outletElementsByName.keys) {\n            for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n                for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n                    this.disconnectOutlet(outlet, element, outletName);\n                }\n            }\n        }\n    }\n    selector(outletName) {\n        return this.scope.outlets.getSelectorForOutletName(outletName);\n    }\n    get outletDependencies() {\n        const dependencies = new Multimap();\n        this.router.modules.forEach((module) => {\n            const constructor = module.definition.controllerConstructor;\n            const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n            outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n        });\n        return dependencies;\n    }\n    get outletDefinitions() {\n        return this.outletDependencies.getKeysForValue(this.identifier);\n    }\n    get dependentControllerIdentifiers() {\n        return this.outletDependencies.getValuesForKey(this.identifier);\n    }\n    get dependentContexts() {\n        const identifiers = this.dependentControllerIdentifiers;\n        return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n    }\n    hasOutlet(element, outletName) {\n        return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n    }\n    getOutlet(element, outletName) {\n        return this.application.getControllerForElementAndIdentifier(element, outletName);\n    }\n    getOutletFromMap(element, outletName) {\n        return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get router() {\n        return this.application.router;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        this.outletObserver = new OutletObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        this.outletObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    refresh() {\n        this.outletObserver.refresh();\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.outletObserver.stop();\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    outletConnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n    }\n    outletDisconnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended },\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () {\n            this.a.call(this);\n        };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b();\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor),\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap();\n        this.connectedContexts = new Set();\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap();\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set();\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName),\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass OutletSet {\n    constructor(scope, controllerElement) {\n        this.scope = scope;\n        this.controllerElement = controllerElement;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(outletName) {\n        return this.find(outletName) != null;\n    }\n    find(...outletNames) {\n        return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n    }\n    findAll(...outletNames) {\n        return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n    }\n    getSelectorForOutletName(outletName) {\n        const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n        return this.controllerElement.getAttribute(attributeName);\n    }\n    findOutlet(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        if (selector)\n            return this.findElement(selector, outletName);\n    }\n    findAllOutlets(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        return selector ? this.findAllElements(selector, outletName) : [];\n    }\n    findElement(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n    }\n    findAllElements(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName));\n    }\n    matchesElement(element, selector, outletName) {\n        const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n        return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n        this.outlets = new OutletSet(this.documentScope, element);\n    }\n    findElement(selector) {\n        return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...(this.element.matches(selector) ? [this.element] : []),\n            ...this.queryElements(selector).filter(this.containsElement),\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n    get isDocumentScope() {\n        return this.element === document.documentElement;\n    }\n    get documentScope() {\n        return this.isDocumentScope\n            ? this\n            : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap();\n        this.scopeReferenceCounts = new WeakMap();\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map();\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap();\n        this.modulesByIdentifier = new Map();\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n        const afterLoad = definition.controllerConstructor.afterLoad;\n        if (afterLoad) {\n            afterLoad(definition.identifier, this.application);\n        }\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find((context) => context.element == element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n    outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n    keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n    return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n        this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n    }\n    static start(element, schema) {\n        const application = new this(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        this.load({ identifier, controllerConstructor });\n    }\n    registerActionOption(name, filter) {\n        this.actionDescriptorFilters[name] = filter;\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach((definition) => {\n            if (definition.controllerConstructor.shouldLoad) {\n                this.router.loadDefinition(definition);\n            }\n        });\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map((context) => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise((resolve) => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            },\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            },\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            },\n        },\n    };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n    const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n    return outlets.reduce((properties, outletDefinition) => {\n        return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n    }, {});\n}\nfunction propertiesForOutletDefinition(name) {\n    const camelizedName = namespaceCamelize(name);\n    return {\n        [`${camelizedName}Outlet`]: {\n            get() {\n                const outlet = this.outlets.find(name);\n                if (outlet) {\n                    const outletController = this.application.getControllerForElementAndIdentifier(outlet, name);\n                    if (outletController) {\n                        return outletController;\n                    }\n                    else {\n                        throw new Error(`Missing \"data-controller=${name}\" attribute on outlet element for \"${this.identifier}\" controller`);\n                    }\n                }\n                throw new Error(`Missing outlet element \"${name}\" for \"${this.identifier}\" controller`);\n            },\n        },\n        [`${camelizedName}Outlets`]: {\n            get() {\n                const outlets = this.outlets.findAll(name);\n                if (outlets.length > 0) {\n                    return outlets\n                        .map((outlet) => {\n                        const controller = this.application.getControllerForElementAndIdentifier(outlet, name);\n                        if (controller) {\n                            return controller;\n                        }\n                        else {\n                            console.warn(`The provided outlet element is missing the outlet controller \"${name}\" for \"${this.identifier}\"`, outlet);\n                        }\n                    })\n                        .filter((controller) => controller);\n                }\n                return [];\n            },\n        },\n        [`${camelizedName}OutletElement`]: {\n            get() {\n                const outlet = this.outlets.find(name);\n                if (outlet) {\n                    return outlet;\n                }\n                else {\n                    throw new Error(`Missing outlet element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            },\n        },\n        [`${camelizedName}OutletElements`]: {\n            get() {\n                return this.outlets.findAll(name);\n            },\n        },\n        [`has${capitalize(camelizedName)}Outlet`]: {\n            get() {\n                return this.outlets.has(name);\n            },\n        },\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            },\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            },\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            },\n        },\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            },\n        },\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            },\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            },\n        },\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n    return valueDescriptorForTokenAndTypeDefinition({\n        controller,\n        token,\n        typeDefinition,\n    });\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array:\n            return \"array\";\n        case Boolean:\n            return \"boolean\";\n        case Number:\n            return \"number\";\n        case Object:\n            return \"object\";\n        case String:\n            return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\":\n            return \"boolean\";\n        case \"number\":\n            return \"number\";\n        case \"string\":\n            return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n    const typeFromObject = parseValueTypeConstant(payload.typeObject.type);\n    if (!typeFromObject)\n        return;\n    const defaultValueType = parseValueTypeDefault(payload.typeObject.default);\n    if (typeFromObject !== defaultValueType) {\n        const propertyPath = payload.controller ? `${payload.controller}.${payload.token}` : payload.token;\n        throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${payload.typeObject.default}\" is of type \"${defaultValueType}\".`);\n    }\n    return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n    const typeFromObject = parseValueTypeObject({\n        controller: payload.controller,\n        token: payload.token,\n        typeObject: payload.typeDefinition,\n    });\n    const typeFromDefaultValue = parseValueTypeDefault(payload.typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(payload.typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    const propertyPath = payload.controller ? `${payload.controller}.${payload.typeDefinition}` : payload.token;\n    throw new Error(`Unknown value type \"${propertyPath}\" for \"${payload.token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const defaultValue = typeDefinition.default;\n    if (defaultValue !== undefined)\n        return defaultValue;\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n    const key = `${dasherize(payload.token)}-value`;\n    const type = parseValueTypeDefinition(payload);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() {\n            return defaultValueForDefinition(payload.typeDefinition);\n        },\n        get hasCustomDefaultValue() {\n            return parseValueTypeDefault(payload.typeDefinition) !== undefined;\n        },\n        reader: readers[type],\n        writer: writers[type] || writers.default,\n    };\n}\nconst defaultValuesByType = {\n    get array() {\n        return [];\n    },\n    boolean: false,\n    number: 0,\n    get object() {\n        return {};\n    },\n    string: \"\",\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n    },\n    number(value) {\n        return Number(value);\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    },\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON,\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    static afterLoad(_identifier, _application) {\n        return;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get outlets() {\n        return this.scope.outlets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [\n    ClassPropertiesBlessing,\n    TargetPropertiesBlessing,\n    ValuePropertiesBlessing,\n    OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import { Application } from \"@hotwired/stimulus\"\n\nconst application = Application.start()\n\n// Configure Stimulus development experience\napplication.debug = false\nwindow.Stimulus   = application\n\nexport { application }", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"modal\", \"form\"]\n\n  connect() {\n    // Show modal when controller connects\n    this.showModal()\n  }\n\n  disconnect() {\n    // Clean up when controller disconnects\n    this.hideModal()\n  }\n\n  showModal() {\n    // Initialize and show the Bootstrap modal\n    this.modal = new bootstrap.Modal(this.modalTarget, {\n      backdrop: 'static',\n      keyboard: false\n    })\n    this.modal.show()\n  }\n\n  hideModal() {\n    // Hide the modal if it exists\n    if (this.modal) {\n      this.modal.hide()\n    }\n  }\n\n  // Called after Turbo form submission completes\n  hideModalAfterSubmit(event) {\n    // Check if the response was successful\n    if (event.detail.success) {\n      this.hideModal()\n      // Remove the modal from the DOM after it's hidden\n      this.modalTarget.addEventListener('hidden.bs.modal', () => {\n        this.element.remove()\n      })\n    } else {\n      // Handle errors - could display a message here\n      alert('Please check your form for errors.')\n    }\n  }\n\n  // Fallback for when Turbo is disabled\n  submitForm(event) {\n    event.preventDefault()\n    \n    const formData = new FormData(this.formTarget)\n    \n    fetch(this.formTarget.action, {\n      method: 'POST',\n      body: formData,\n      headers: {\n        'X-Requested-With': 'XMLHttpRequest',\n        'Accept': 'application/json',\n        'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]').content\n      },\n      credentials: 'same-origin'\n    })\n    .then(response => {\n      if (!response.ok) {\n        throw new Error('Network response was not ok')\n      }\n      return response.json()\n    })\n    .then(data => {\n      if (data.success) {\n        this.hideModal()\n        // Remove the modal from the DOM after it's hidden\n        this.modalTarget.addEventListener('hidden.bs.modal', () => {\n          this.element.remove()\n        })\n      }\n    })\n    .catch(error => {\n      console.error('Error:', error)\n      alert('Something went wrong. Please try again.')\n    })\n  }\n} ", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"articles-notifications\"\nexport default class extends Controller {\n    static targets = [ \"toggleLink\" ]\n  connect() {\n  }\n\n  markAllAsRead() {\n      if (this.toggleLinkTarget.classList.contains(\"notification-indicator\")) {\n          this.toggleLinkTarget.classList.remove(\"notification-indicator\")\n\n          fetch(\"/profiles/me/mark_all_news_read\", {\n              method: \"PATCH\",\n              headers: {\n                  \"X-CSRF-Token\": document.querySelector(\"meta[name=csrf-token]\").content\n              }\n          })\n      }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"attribution\"\nexport default class extends Controller {\n  static targets = [ \"up\", \"upTransparent\", \"upOpaque\" ]\n\n  connect() {\n    this.attributionHref = this.data.get(\"attribution-href\")\n  }\n\n  toggleUp(event) {\n    event.preventDefault()\n\n    let del = !this.upOpaqueTarget.classList.contains(\"hidden\")\n    this.upTransparentTarget.classList.toggle(\"hidden\")\n    this.upOpaqueTarget.classList.toggle(\"hidden\")\n    // this.downTransparentTarget.classList.remove(\"hidden\")\n    // this.downOpaqueTarget.classList.add(\"hidden\")\n\n    this.updateAttribution(\"positive\", del)\n  }\n\n  // toggleDown(event) {\n  //   event.preventDefault()\n  //\n  //   let del = !this.downOpaqueTarget.classList.contains(\"hidden\")\n  //   this.upTransparentTarget.classList.remove(\"hidden\")\n  //   this.upOpaqueTarget.classList.add(\"hidden\")\n  //   this.downTransparentTarget.classList.toggle(\"hidden\")\n  //   this.downOpaqueTarget.classList.toggle(\"hidden\")\n  //\n  //   this.updateAttribution(\"negative\", del)\n  // }\n\n  updateAttribution(direction, del) {\n    const url = this.data.get(\"url\")\n    const csrfToken = this.data.get(\"csrf-token\")\n    const data = new FormData()\n    data.append(\"attribution[attribution_type]\", direction)\n    data.append(\"attribution[user_id]\", this.data.get(\"user-id\"))\n    data.append(\"attribution[comment_id]\", this.data.get(\"comment-id\"))\n    data.append(\"authenticity_token\", csrfToken)\n    data.append(\"delete\", del ? \"true\" : \"false\")\n\n    fetch(url, {\n      method: \"POST\",\n      headers: {\n        \"X-CSRF-Token\": csrfToken,\n        \"Accept\": \"application/json\",\n      },\n      body: data\n    })\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"background-job\"\nexport default class extends Controller {\n  static targets = [\"errorContainer\"]\n  static values = {\n    message: String,\n    pollInterval: { type: Number, default: 2000 },\n    redirectUrl: String\n  }\n\n  connect() {\n    this.form = this.element\n    this.csrfToken = document.querySelector('meta[name=\"csrf-token\"]').getAttribute('content')\n    this.form.addEventListener('submit', this.submit.bind(this))\n  }\n\n  submit(event) {\n    event.preventDefault()\n\n    // Clear previous errors\n    if (this.hasErrorContainerTarget) {\n      this.errorContainerTarget.innerHTML = ''\n    }\n\n    const url = this.form.action\n    const method = this.form.method || 'post'\n    const formData = new FormData(this.form)\n\n    fetch(url, {\n      method: method.toUpperCase(),\n      body: formData,\n      headers: {\n        'Accept': 'application/json',\n        'X-CSRF-Token': this.csrfToken\n      }\n    })\n      .then(response => {\n        if (response.ok) {\n          return response.json()\n        } else {\n          return response.json().then(json => {\n            throw json\n          })\n        }\n      })\n      .then(data => {\n        const jobId = data.job_id\n        this.showDialog()\n        this.pollJobStatus(jobId)\n      })\n      .catch(error => {\n        this.handleError(error)\n      })\n  }\n\n  pollJobStatus(jobId) {\n    const url = `/background_jobs/${jobId}`\n\n    this.pollIntervalId = setInterval(() => {\n      fetch(url, {\n        headers: {\n          'Accept': 'application/json',\n          'X-CSRF-Token': this.csrfToken\n        }\n      })\n        .then(response => response.json())\n        .then(data => {\n          const status = data.status\n          const progress = data.progress\n\n          // Optionally update the dialog with progress\n          // this.updateProgress(progress)\n\n          if (status === 'completed') {\n            this.closeDialog()\n            clearInterval(this.pollIntervalId)\n            this.navigateToRedirectUrl()\n          } else if (status === 'failed') {\n            this.closeDialog()\n            clearInterval(this.pollIntervalId)\n            this.handleError({ error: data.message })\n          }\n        })\n        .catch(error => {\n          console.error('Error fetching job status:', error)\n        })\n    }, this.pollIntervalValue)\n  }\n\n  showDialog() {\n    const message = this.messageValue || 'Please wait while we process your request...'\n\n    // Create the modal HTML\n    this.modal = document.createElement('div')\n    this.modal.classList.add('modal', 'fade', 'show')\n    this.modal.style.display = 'block'\n    this.modal.innerHTML = `\n      <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n          <div class=\"modal-body text-center\">\n            <p>${message}</p>\n            <div class=\"spinner-border\" role=\"status\">\n              <span class=\"visually-hidden\">Loading...</span>\n            </div>\n          </div>\n        </div>\n      </div>\n    `\n    document.body.appendChild(this.modal)\n  }\n\n  closeDialog() {\n    if (this.modal) {\n      document.body.removeChild(this.modal)\n      this.modal = null\n    }\n  }\n\n  handleError(error) {\n    if (this.hasErrorContainerTarget) {\n      this.errorContainerTarget.innerHTML = `<div class=\"alert alert-danger\">${error.error || 'An error occurred'}</div>`\n    } else {\n      alert(error.error || 'An error occurred')\n    }\n  }\n\n  navigateToRedirectUrl() {\n    if (this.hasRedirectUrlValue) {\n      window.location.href = this.redirectUrlValue\n    } else {\n      // Default behavior if no redirect URL is specified\n      // For example, reload the current page\n      window.location.reload()\n    }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  static targets = [\"alert\"];\n  static identifier = \"beta-alert\";\n\n  connect() {\n    if (!this.cookieExists(\"alertClosed\")) {\n      this.alertTarget.style.display = \"block\";\n    } else {\n      this.alertTarget.style.display = \"none\";\n    }\n\n    const closeButton = this.element.querySelector('[data-beta-alert-close=\"true\"]');\n    if (closeButton) {\n      closeButton.addEventListener(\"click\", () => {\n        this.close();\n      });\n    }\n  }\n\n  close() {\n    this.setSessionCookie(\"alertClosed\");\n    this.alertTarget.style.display = \"none\";\n  }\n\n  setSessionCookie(name) {\n    document.cookie = name + \"=true;path=/;SameSite=Lax\";\n  }\n\n  cookieExists(name) {\n    const allCookies = document.cookie.split(\"; \");\n    for (let i = 0; i < allCookies.length; i++) {\n      if (allCookies[i].split(\"=\")[0] === name) {\n        return true;\n      }\n    }\n    return false;\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"input\"]\n  static values = {\n    limit: { type: Number, default: 100 },\n    min: { type: Number, default: 0 }\n  }\n\n  connect() {\n    this.createCounter()\n    this.updateCounter()\n    \n    setTimeout(() => this.updateCounter(), 50)\n    \n    this.element.addEventListener(\"input\", () => this.updateCounter())\n    \n    if (typeof bootstrap !== 'undefined') {\n      new bootstrap.Tooltip(this.counterElement)\n    }\n  }\n\n  disconnect() {\n    if (this.counterElement) {\n      if (typeof bootstrap !== 'undefined') {\n        const tooltip = bootstrap.Tooltip.getInstance(this.counterElement)\n        if (tooltip) {\n          tooltip.dispose()\n        }\n      }\n      this.counterElement.remove()\n    }\n  }\n\n  createCounter() {\n    this.counterElement = document.createElement(\"div\")\n    this.counterElement.classList.add(\"position-absolute\", \"bottom-0\", \"end-0\", \"pb-1\", \"pe-2\", \"small\", \"font-monospace\", \"pe-none\")\n    this.counterElement.setAttribute(\"data-bs-toggle\", \"tooltip\")\n    this.counterElement.setAttribute(\"data-bs-placement\", \"top\")\n    this.element.parentElement.classList.add(\"position-relative\")\n    this.element.parentElement.appendChild(this.counterElement)\n  }\n\n  updateCounter() {\n    const currentLength = this.inputTarget.value.length\n    const remaining = this.limitValue - currentLength\n    const belowMinimum = currentLength < this.minValue && this.minValue > 0\n\n    if (belowMinimum) {\n      this.counterElement.textContent = `${currentLength}/${this.minValue}`\n      const needed = this.minValue - currentLength\n      this.counterElement.setAttribute(\"title\", `${needed} more character${needed !== 1 ? 's' : ''} required`)\n    } else {\n      this.counterElement.textContent = remaining\n      this.counterElement.setAttribute(\"title\", `${remaining} characters remaining`)\n    }\n    \n    this.counterElement.classList.remove(\"text-danger\", \"text-warning\", \"text-success\", \"text-body\", \"opacity-75\", \"opacity-90\", \"opacity-100\")\n    this.inputTarget.classList.remove(\"border-danger\")\n    \n    if (belowMinimum) {\n      this.counterElement.classList.add(\"text-danger\", \"opacity-100\")\n      this.inputTarget.classList.add(\"border-danger\")\n    } else if (remaining < 0) {\n      this.counterElement.classList.add(\"text-danger\", \"opacity-100\")\n    } else if (remaining < this.limitValue * 0.1) {\n      this.counterElement.classList.add(\"text-warning\", \"opacity-90\")\n    } else if (this.minValue > 0 && currentLength >= this.minValue) {\n      this.counterElement.classList.add(\"text-success\", \"opacity-90\")\n    } else {\n      this.counterElement.classList.add(\"text-body\", \"opacity-75\")\n    }\n    \n    if (typeof bootstrap !== 'undefined') {\n      const tooltip = bootstrap.Tooltip.getInstance(this.counterElement)\n      if (tooltip) {\n        tooltip.dispose()\n        new bootstrap.Tooltip(this.counterElement)\n      }\n    }\n  }\n} ", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"chart\"]\n  static values = { options: String }\n\n  connect() {\n    if (!this.optionsValue) return;\n\n    this.chart = echarts.init(this.element);\n    this.chart.setOption(JSON.parse(this.optionsValue));\n\n    window.addEventListener('resize', this.resize);\n  }\n\n  disconnect() {\n    window.removeEventListener('resize', this.resize);\n    this.chart.dispose();\n  }\n\n  resize = () => {\n    this.chart.resize();\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"messages\", \"newMessage\"]\n  static values = { projectId: Number, userId: Number }\n\n  connect() {\n    this.refreshInterval = setInterval(() => {\n      this.refreshMessages()\n    }, 1500) // every 5 seconds\n  }\n\n  disconnect() {\n    clearInterval(this.refreshInterval)\n  }\n\n  checkEnterKey(event) {\n    if (event.keyCode === 13 && !event.shiftKey) {\n      event.preventDefault()\n      this.send(event)\n    }\n  }\n\n  send(event) {\n    event.preventDefault()\n\n    let projectId = this.projectIdValue\n    let userId = this.userIdValue\n\n    fetch(`/projects/${this.projectIdValue}/chat_messages`, {\n      method: 'POST',\n      body: JSON.stringify({\n        project_id: projectId,\n        message: this.newMessageTarget.value,\n        user_id: userId\n      }),\n      headers: {\n        'Content-Type': 'application/json',\n        'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]').content\n      },\n    })\n        .then(response => response.json())\n        .then(data => {\n          this.newMessageTarget.value = '';\n          this.refreshMessages();\n          // Scroll to bottom after sending a message.\n          this.messagesTarget.scrollTop = this.messagesTarget.scrollHeight;\n        })\n  }\n\n  refreshMessages() {\n    const isScrolledToBottom = this.messagesTarget.scrollHeight - this.messagesTarget.clientHeight <= this.messagesTarget.scrollTop + 1;\n\n    fetch(`/projects/${this.projectIdValue}/chat_messages.json?user_id=${this.userIdValue}`)\n        .then(response => response.json())\n        .then(data => {\n          this.messagesTarget.innerHTML = data.map(message => `\n        <div class=\"mb-2\">\n          <div class=\"text-muted small\">\n            ${new Date(message.created_at).toLocaleString()} <!-- This may need to be adjusted depending on your date format -->\n          </div>\n          <div>\n            <strong class=\"text-primary\">${message.sender.email}</strong>: <span class=\"ml-1\">${message.message}</span>\n          </div>\n        </div>\n      `).join('');\n\n          // Scroll to bottom if it was already scrolled to the bottom before updating the messages.\n          if (isScrolledToBottom) {\n            this.messagesTarget.scrollTop = this.messagesTarget.scrollHeight;\n          }\n        })\n  }\n\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"frame\"]\n  static values = { endpoint: String, csrfToken: String }\n\n  connect() {\n    // Optional: Initialize anything if needed\n  }\n\n  clarify(event) {\n    event.preventDefault()\n\n    // Show the progress indicator in the Turbo Frame\n    this.frameTarget.innerHTML = `\n      <div class=\"d-flex align-items-center\">\n        <strong>Loading...</strong>\n        <div class=\"spinner-border ms-auto\" role=\"status\" aria-hidden=\"true\"></div>\n      </div>\n    `\n\n    // Start a 20-second timeout\n    const timeoutId = setTimeout(() => {\n      this.frameTarget.innerHTML = `\n        <div class=\"mt-2\">\n          <p>Request timed out. Please try again.</p>\n          <button type=\"button\" data-action=\"clarify#clarify\" class=\"btn btn-warning\">\n            Try Again\n          </button>\n        </div>\n      `\n    }, 20000) // 20,000 milliseconds = 20 seconds\n\n    console.log(this.endpoint());\n\n    // Send the POST request to the clarify endpoint\n    fetch(this.endpoint(), {\n      method: \"POST\",\n      headers: {\n        \"Accept\": \"text/vnd.turbo-stream.html\",\n        \"X-CSRF-Token\": this.csrfTokenValue\n      },\n      credentials: \"same-origin\"\n    })\n      .then(response => {\n        if (!response.ok) {\n          throw new Error(`Network response was not ok (${response.status})`)\n        }\n        return response.text()\n      })\n      .then(html => {\n        clearTimeout(timeoutId)\n        Turbo.renderStreamMessage(html);\n      })\n      .catch(error => {\n        clearTimeout(timeoutId)\n        console.error(\"Clarify request failed:\", error)\n        this.frameTarget.innerHTML = `\n          <div class=\"mt-2\">\n            <p>Something went wrong. Please try again.</p>\n            <button type=\"button\" data-action=\"clarify#clarify\" class=\"btn btn-warning\">\n              Try Again\n            </button>\n          </div>\n        `\n      })\n  }\n\n  endpoint() {\n    return this.endpointValue\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"comment-form\"\nexport default class extends Controller {\n  static targets = ['form', 'body', 'fileField', 'editor', 'dynamicDropdown', 'fileFieldContainer'];\n\n  // values\n  static values = {\n    mentionablePeople: Array,\n    originalText: { type: String, default: '' }\n  }\n\n  connect() {\n    // listen for file field changes to not exceed data-max-file-size in bytes to set on that field\n    this.fileFieldTarget.addEventListener('change', this.validateFileSize.bind(this));\n\n    this.quill = new Quill(this.editorTarget, {\n      // theme: 'snow',\n      modules: {\n        toolbar: false,\n        keyboard: {\n          bindings: {\n            'list autofill': false,\n            'ordered list autofill': false\n          }\n        }\n      }\n    });\n\n    // Initialize with original text if available\n    if (this.originalTextValue) {\n      this.quill.setText(this.originalTextValue);\n      this.validateAndFormatAllMentions();\n    }\n\n    // focus the editor if clicked on editorTarget\n    this.editorTarget.addEventListener('click', () => {\n      this.quill.focus();\n    });\n\n    this.quill.on('text-change', (delta, oldDelta, source) => {\n      if (source === 'user') {\n        let cursorPosition = this.quill.getSelection().index;\n\n        // handle case when there's only one character in the editor and cursor position is 0.\n        // In cases like this one it should be set to 1.\n        // I don't know, it could be a bug\n        if (cursorPosition === 0 && this.quill.getText().length === 2) {\n          cursorPosition = 1;\n        }\n\n        const textBeforeCursor = this.quill.getText(0, cursorPosition);\n\n        // Check if the last character is \"@\" or string starts with \"@\"\n        if (textBeforeCursor.slice(-1) === \"@\" || /@\\S*$/.test(textBeforeCursor)) {\n\n          // Here, you would invoke your function\n          let match = textBeforeCursor.match(/@\\S*$/);\n          const mentionText = match !== null ? match[0] : \"\";\n          this.handleMentioning(mentionText, cursorPosition);\n        } else {\n          this.hideMentionsDropdown();\n        }\n\n        // Now, validate and format all mentions in the document\n        this.validateAndFormatAllMentions();\n      }\n\n      this.copyRawTextFromEditorToBody();\n    });\n  }\n\n  toggleFileField(event) {\n    const removeAttachment = event.target.checked;\n    \n    // If removing the attachment, hide the file field as it's not needed\n    // Otherwise, show it in case user wants to replace instead\n    if(this.hasFileFieldContainerTarget) {\n      if (removeAttachment) {\n        this.fileFieldContainerTarget.style.display = 'none';\n      } else {\n        this.fileFieldContainerTarget.style.display = 'block';\n      }\n    }\n  }\n\n  copyRawTextFromEditorToBody() {\n    let rawText = this.quill.getText();\n\n    // all the valid mentions should be replaced with ${mention:user_id}\n    this.mentionablePeopleValue.forEach((person) => {\n      rawText = rawText.split(`@${person.mention_string}`).join(`\\${betahub_mention:${person.id}}`);\n    });\n\n    // body is a textarea element\n    this.bodyTarget.value = rawText;\n  }\n\n  mentionItemSelected({ detail: { id } }) {\n    let mentionItem = this.mentionablePeopleValue.find(person => person.id == id);\n\n    // Get the current cursor position\n    let cursorPosition = this.quill.getSelection().index;\n\n    // Calculate the start position of the mention\n    let mentionStart = cursorPosition - this.currentMentionText.length;\n\n    // Delete the entered part of the mention\n    this.quill.deleteText(mentionStart, this.currentMentionText.length);\n\n    // Insert the new text\n    this.quill.insertText(mentionStart, `@${mentionItem.name} `);\n    this.validateAndFormatAllMentions();\n\n    this.hideMentionsDropdown();\n  }\n\n  handleMentioning(mentionText, cursorPosition) {\n    this.currentMentionText = mentionText;\n\n    // Here, calculate the cursor's screen position. This is a bit tricky\n    // and might involve some DOM manipulation or using the Quill Bounds.\n    const bounds = this.quill.getBounds(cursorPosition);\n\n    // Assuming you have a way to translate Quill's bounds to screen coordinates\n    const screenCoordinates = this.getScreenCoordinatesFromQuillBounds(bounds);\n\n    // Execute your function with mention text and screen coordinates\n    this.showMentionsDropdown(screenCoordinates, mentionText, { at: cursorPosition });\n  }\n\n  getScreenCoordinatesFromQuillBounds(bounds) {\n    // This is an example. You'll need to adjust this based on your actual UI layout.\n    const containerRect = this.editorTarget.getBoundingClientRect();\n\n    return {\n      x: containerRect.left + bounds.left,\n      y: containerRect.top + bounds.top\n    };\n  }\n\n  showMentionsDropdown(screenCoordinates, mentionText, { at }) {\n    let itemsArray = this.mentionItems(mentionText);\n\n    if (itemsArray.length === 0) {\n      this.hideMentionsDropdown();\n      return;\n    }\n\n    this.dynamicDropdown().setItems({ items: itemsArray });\n    this.dynamicDropdown().show(this.editorTarget.childNodes[0]);\n    this.dynamicDropdown().setPosition({ x: screenCoordinates.x, y: screenCoordinates.y + 20 });\n  }\n\n  mentionItems(mentionText) {\n    let itemsArray = []\n    if (!mentionText) {\n      return itemsArray;\n    }\n\n    if (mentionText.startsWith('@')) {\n      mentionText = mentionText.slice(1);\n    }\n\n    this.mentionablePeopleValue.forEach((person) => {\n      if (mentionText === \"\" || person.name.toLowerCase().startsWith(mentionText.toLowerCase())) {\n        itemsArray.push({id: person.id, html: person.name})\n      }\n    });\n\n    return itemsArray;\n  }\n\n  hideMentionsDropdown() {\n    this.dynamicDropdown().hide();\n  }\n\n\n  removeAllMentionFormatting() {\n    let textLength = this.quill.getLength();\n    const text = this.quill.getText();\n\n    // If the text ends with a newline, adjust the length to exclude it\n    if (text.slice(-1) === '\\n') {\n      textLength--;\n    }\n\n    this.quill.removeFormat(0, textLength);\n  }\n\n  validateAndFormatAllMentions() {\n    this.removeAllMentionFormatting();\n\n    const text = this.quill.getText();\n    const formatRegex = /@\\S+/g;\n    let match;\n\n    while ((match = formatRegex.exec(text)) !== null) {\n      const mention = match[0];\n      const isValid = this.checkMentionValidity(mention);\n\n      if (isValid) {\n        this.applyMentionFormatting(match.index, mention.length, true);\n      }\n    }\n  }\n\n  applyMentionFormatting(index, length, isValid) {\n    const formatName = 'color'; // Or use a custom style/class name\n    const formatValue = isValid ? 'rgb(44, 123, 229)' : 'black'; // Choose colors or add/remove your formatting based on validity\n    this.quill.formatText(index, length, { [formatName]: formatValue }, 'silent');\n  };\n\n  checkMentionValidity(mention) {\n    return this.mentionablePeopleValue.some(person => person.mention_string === mention.slice(1));\n  };\n\n  clearForm(event) {\n    console.log(event);\n\n    if (event.detail.success) {\n      this.quill.setText('');\n      this.fileFieldTarget.value = '';\n      this.bodyTarget.value = '';\n    }\n  }\n\n  validateFileSize(event) {\n    const maxFileSize = this.fileFieldTarget.dataset.maxFileSize;\n    const file = this.fileFieldTarget.files[0];\n    if (file.size > maxFileSize) {\n      alert('File size exceeds the maximum allowed size');\n      this.fileFieldTarget.value = '';\n    }\n  }\n\n  dynamicDropdown() {\n    return this.application.getControllerForElementAndIdentifier(this.dynamicDropdownTarget, 'dynamic-dropdown');\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"delete-confirm\"\nexport default class extends Controller {\n  static targets = [\"input\", \"submit\"]\n\n  connect() {\n    this.validate() // Ensure the button state is correct on load\n  }\n\n  validate() {\n    const inputValue = this.inputTarget.value.trim().toLowerCase()\n    if (inputValue === 'delete') {\n      this.submitTarget.disabled = false\n    } else {\n      this.submitTarget.disabled = true\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"description-check-type\"\nexport default class extends Controller {\n  static targets = [ \"range\", \"display\", \"value\" ]\n\n  connect() {\n    this.updateDisplay()\n  }\n\n  updateDisplay() {\n    let value = this.rangeTarget.value\n    let text, description, realValue\n\n    switch(value) {\n      case '0':\n        realValue = 'no_check';\n        text = 'No Checks';\n        description = \"All descriptions are accepted without any restrictions or checks. \" +\n            \"Ideal for quick submissions where detail is not the primary concern. \" +\n            \"<p class=\\\"text-warning\\\"><b>Warning</b>: Vague descriptions can lead to halucinated bug titles and incorrect tags/priority classification.</p>\";\n        break;\n      case '1':\n        realValue = 'character_limit';\n        text = 'Minimum Characters Limit';\n        description = \"Descriptions must be at least 50 characters long. \" +\n            \"This ensures a basic level of detail in submissions, \" +\n            \"helping to provide enough context for effective bug analysis.\";\n        break;\n      case '2':\n        realValue = 'loose_ai_check';\n        text = 'Loose AI Check';\n        description = \"Submissions are reviewed by AI for basic quality. Descriptions falling \" +\n            \"short of standards are flagged for improvement. Reporters can then choose \" +\n            \"to revise their description, enhancing the clarity and usefulness of bug reports.\";\n        break;\n      case '3':\n        realValue = 'strict_ai_check';\n        text = 'Strict AI Check';\n        description = \"An advanced AI review is applied to each description. Submissions not meeting \" +\n            \"the quality standards are rejected, with feedback provided for improvement. \" +\n            \"This ensures high-quality, detailed reports that greatly aid in bug resolution. \" +\n            \"<p class=\\\"text-warning\\\"><b>Warning</b>: This stringent check might be frustrating for some users.</p>\";\n        break;\n    }\n\n    this.displayTarget.innerHTML = `<h5 class=\"fs-0\">${text}</h5> <div>${description}</div>`\n    this.valueTarget.value = realValue\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"device-form\"\nexport default class extends Controller {\n  async updateCpuModels(event) {\n    const cpuBrand = event.target.value\n    let url = `/devices/update_cpu_models?cpu_brand=${cpuBrand}`\n\n    this.update(url)\n  }\n\n  async updateGpuModels(event) {\n    const cpuBrand = event.target.value\n    let url = `/devices/update_gpu_models?gpu_brand=${cpuBrand}`\n\n    this.update(url)\n  }\n\n  async updateMobileModels(event) {\n    const mobileBrand = event.target.value\n    let url = `/devices/update_mobile_models?mobile_brand=${mobileBrand}`\n\n    this.update(url)\n  }\n\n  async update(url) {\n    const response = await fetch(url, {\n      headers: { \"Accept\": \"text/vnd.turbo-stream.html\" },\n      credentials: \"same-origin\"\n    });\n\n    if (response.ok) {\n      const turboStream = await response.text();\n      Turbo.renderStreamMessage(turboStream);\n\n      requestAnimationFrame(() => {\n        document.querySelectorAll('.js-choice').forEach((element) => {\n          new Choices(element, { placeholder: true, searchResultLimit: 12 });\n        });\n      });\n    } else {\n      console.error(`Error fetching Turbo Stream: ${response.status}`);\n    }\n  }\n}", "import {Controller} from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"dynamic-dropdown\"\nexport default class extends Controller {\n  // targets\n  static targets = ['bootstrapDropdownMenu']\n\n  connect() {\n    this.element.style.position = 'fixed';\n  }\n\n  setupEvents(target) {\n    target.addEventListener('keydown', (event) => {\n        // ignore all events if not visible\n        if (!this.isVisible()) {\n          return;\n        }\n\n        if (event.key === 'ArrowDown') {\n          this.selectNextOrFirstElement();\n          event.preventDefault();\n        } else if (event.key === 'ArrowUp') {\n          this.selectPreviousOrLastElement();\n          event.preventDefault();\n        }\n\n        // on enter, get the selected (if any) element id and dispatch the event\n        else if (event.key === 'Enter') {\n          if (this.selectedElementIndex !== null) {\n            const elementId = this.elementId(this.selectedElementIndex);\n            this.dispatchItemSelected(elementId)\n          }\n\n          event.preventDefault();\n          event.stopPropagation();\n        }\n      }, true // no bubbling, otherwise I won't be able to capture 'Enter' key\n    )\n  }\n\n  dispatchItemSelected(eventOrId) {\n    let id;\n    if (eventOrId instanceof Event) {\n      id = eventOrId.target.dataset.itemId;\n      eventOrId.preventDefault();\n    } else {\n      id = eventOrId;\n    }\n\n    this.dispatch('itemSelected', {detail: {id}});\n  }\n\n  show(target) {\n    if (!this.eventsSetup) {\n      this.setupEvents(target);\n      this.eventsSetup = true;\n    }\n\n    this.element.style.display = 'block'\n\n    // show the dropdown\n    this.bootstrapDropdownMenuTarget.classList.add('show')\n\n    // select the first element\n    this.selectElement(0)\n  }\n\n  hide() {\n    this.element.style.display = 'none'\n\n    // hide the dropdown\n    this.bootstrapDropdownMenuTarget.classList.remove('show')\n  }\n\n  // this method clears all the elements and adds all the items\n  // each item should include html and id\n  setItems({items}) {\n    this.bootstrapDropdownMenuTarget.innerHTML = ''\n\n    items.forEach(({id, html}) => {\n      const element = document.createElement('li')\n      element.innerHTML = `<a class=\"dropdown-item\" href=\"#\" data-item-id=\"${id}\" data-action=\"click->dynamic-dropdown#dispatchItemSelected\">${html}</a>`\n      this.bootstrapDropdownMenuTarget.appendChild(element);\n    });\n  }\n\n  setPosition({x, y}) {\n    this.element.style.left = `${x}px`\n    this.element.style.top = `${y}px`\n  }\n\n  isVisible() {\n    return this.bootstrapDropdownMenuTarget.classList.contains('show')\n  }\n\n  selectElement(index) {\n    const elements = this.bootstrapDropdownMenuTarget.querySelectorAll('a');\n    elements.forEach((element, i) => {\n      if (i === index) {\n        element.classList.add('highlighted');\n        // element.focus();\n      } else {\n        element.classList.remove('highlighted');\n      }\n    });\n\n    this.selectedElementIndex = index;\n  }\n\n  selectNextOrFirstElement() {\n    const elementsCount = this.elementsCount();\n    if (this.selectedElementIndex === null || this.selectedElementIndex === elementsCount - 1) {\n      this.selectElement(0);\n    } else {\n      this.selectElement(this.selectedElementIndex + 1);\n    }\n  }\n\n  selectPreviousOrLastElement() {\n    const elementsCount = this.elementsCount();\n    if (this.selectedElementIndex === null || this.selectedElementIndex === 0) {\n      this.selectElement(elementsCount - 1);\n    } else {\n      this.selectElement(this.selectedElementIndex - 1);\n    }\n  }\n\n  elementsCount() {\n    return this.bootstrapDropdownMenuTarget.querySelectorAll('a').length;\n  }\n\n  elementId(index) {\n    return this.bootstrapDropdownMenuTarget.querySelectorAll('a')[index].dataset.itemId;\n  }\n}\n", "// file_size_validator_controller.js\nimport { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"input\"]\n  static values = {\n    maxSize: Number\n  }\n\n  connect() {\n\n    console.log(this)\n    if (!this.hasMaxSizeValue) {\n      console.warn(\"Max file size is not set\")\n    }\n  }\n\n  validate() {\n    const file = this.element.files[0]\n    if (!file) return\n\n    const fileSize = file.size\n    const maxSize = this.maxSizeValue\n\n    if (fileSize > maxSize) {\n      this.element.value = ''\n      const maxSizeMB = Math.round(maxSize / (1024 * 1024) * 100) / 100\n      alert(`File size exceeds the limit of ${maxSizeMB} MB`)\n    }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"filterList\", \"filterTemplate\", \"form\", \"submitButton\"]\n  static values = {\n    filters: Object,\n    defaults: Object,\n    mode: String,\n    frameId: String,\n    frameUrl: String,\n    visibleFilters: { type: Array, default: [] }\n  }\n\n  connect() {\n    // Get visible filters from URL params or defaults\n    const urlParams = new URLSearchParams(window.location.search);\n    const visibleFiltersParam = urlParams.get('filters');\n    \n    if (visibleFiltersParam) {\n      this.visibleFiltersValue = visibleFiltersParam.split(',');\n    } else if (this.hasDefaultsValue) {\n      this.visibleFiltersValue = Object.keys(this.defaultsValue);\n    }\n\n    // Set up form submission handler\n    if (this.hasFormTarget) {\n      this.formTarget.addEventListener('submit', this.handleFormSubmit.bind(this));\n    }\n\n    this.setupVisibleFilters();\n  }\n\n  // Prevent default form submission and use our custom logic\n  handleFormSubmit(event) {\n    event.preventDefault();\n    this.applyFilters();\n  }\n\n  setupVisibleFilters() {\n    // Clear existing filters\n    this.filterListTarget.innerHTML = '';\n    \n    // Add filters in the specified order\n    this.visibleFiltersValue.forEach(filterName => {\n      const filterValue = this.hasDefaultsValue ? this.defaultsValue[filterName] : null;\n      this.addFilterWithValue(filterName, filterValue);\n    });\n  }\n\n  addFilter(event) {\n    const filterName = event.currentTarget.dataset.filterName;\n    \n    // Add to visible filters if not already present\n    if (!this.visibleFiltersValue.includes(filterName)) {\n      this.visibleFiltersValue = [...this.visibleFiltersValue, filterName];\n      this.addFilterWithValue(filterName);\n    }\n  }\n\n  addFilterWithValue(filterName, value = null) {\n    const filter = this.filtersValue.filters.find(f => f.name === filterName);\n    if (!filter) return;\n\n    // Clone the template\n    const template = this.filterTemplateTarget.cloneNode(true);\n    template.classList.remove('d-none');\n    template.removeAttribute('data-filter-component-target');\n    template.dataset.filterName = filterName;\n\n    // Set filter label\n    const labelElement = template.querySelector('.filter-label');\n    if (labelElement) {\n      labelElement.textContent = filter.label;\n    }\n\n    // Set filter name attribute\n    const selectElement = template.querySelector('select');\n    if (selectElement) {\n      selectElement.name = filter.name;\n      selectElement.id = filter.name;\n      \n      // Clear existing options\n      selectElement.innerHTML = '';\n      \n      // // Add default \"Any\" option\n      // const anyOption = document.createElement('option');\n      // anyOption.value = '';\n      // anyOption.textContent = 'Any';\n      // selectElement.appendChild(anyOption);\n      \n      // Add filter options\n      filter.values.forEach(option => {\n        const optionElement = document.createElement('option');\n        optionElement.value = option.value;\n        optionElement.textContent = option.label;\n        \n        // Select the option if it matches the default value\n        if (value && option.value.toString() === value.toString()) {\n          optionElement.selected = true;\n        }\n        \n        selectElement.appendChild(optionElement);\n      });\n      \n      // Add event listener to trigger filtering when the value changes\n      selectElement.addEventListener('change', () => this.markDirty());\n    }\n\n    // Add remove button functionality\n    const removeButton = template.querySelector('.filter-remove');\n    if (removeButton) {\n      removeButton.addEventListener('click', () => {\n        const filterName = template.dataset.filterName;\n        this.visibleFiltersValue = this.visibleFiltersValue.filter(f => f !== filterName);\n        template.remove();\n        this.markDirty();\n      });\n    }\n\n    // Add the filter to the list\n    this.filterListTarget.appendChild(template);\n  }\n\n  // changed the class of the button to show that there are filters to apply\n  markDirty() {\n    const submitButton = this.submitButtonTarget;\n    if (submitButton) {\n      submitButton.classList.remove('btn-outline-secondary');\n      submitButton.classList.add('btn-outline-success');\n    }\n  }\n\n  applyFilters() {\n    if (this.modeValue === 'form') {\n      // Add visible filters to form before submitting\n      const form = this.formTarget;\n      \n      // Remove any existing filters input to avoid duplicates\n      const existingFiltersInput = form.querySelector('input[name=\"filters\"]');\n      if (existingFiltersInput) {\n        existingFiltersInput.remove();\n      }\n      \n      const filtersInput = document.createElement('input');\n      filtersInput.type = 'hidden';\n      filtersInput.name = 'filters';\n      filtersInput.value = this.visibleFiltersValue.join(',');\n      form.appendChild(filtersInput);\n      \n      console.log('Submitting with filters:', filtersInput.value);\n      form.submit();\n    } else if (this.modeValue === 'turbo' && this.hasFrameIdValue && this.hasFrameUrlValue) {\n      const frame = document.getElementById(this.frameIdValue);\n      if (frame) {\n        const filterParams = this.getFilterParams();\n        const url = new URL(this.frameUrlValue, window.location.origin);\n        \n        // Add filter params to URL\n        filterParams.forEach((value, key) => {\n          if (value) {\n            url.searchParams.append(key, value);\n          }\n        });\n\n        // Add visible filters to URL\n        url.searchParams.append('filters', this.visibleFiltersValue.join(','));\n\n        frame.setAttribute('src', url.toString());\n      }\n    }\n  }\n\n  getFilterParams() {\n    const params = new URLSearchParams();\n    \n    // Get all active filters\n    const filterSelects = this.filterListTarget.querySelectorAll('select');\n    filterSelects.forEach(select => {\n      if (select.value) {\n        params.append(select.name, select.value);\n      }\n    });\n    \n    return params;\n  }\n\n  removeFilter(event) {\n    console.log('removeFilter', event);\n    const filterElement = event.target.closest('.filter-item');\n    if (filterElement) {\n      const filterName = filterElement.dataset.filterName;\n      this.visibleFiltersValue = this.visibleFiltersValue.filter(f => f !== filterName);\n      filterElement.remove();\n    }\n    this.markDirty();\n  }\n\n  // Called from tab links to update the status form with current filters before submitting\n  updateStatusForm() {\n    // Find the status form by id\n    const statusForm = document.getElementById('status_form');\n    if (!statusForm) return;\n    \n    // Remove any existing filters input\n    const existingFiltersInput = statusForm.querySelector('input[name=\"filters\"]');\n    if (existingFiltersInput) {\n      existingFiltersInput.remove();\n    }\n    \n    // Add current filters to the status form\n    const filtersInput = document.createElement('input');\n    filtersInput.type = 'hidden';\n    filtersInput.name = 'filters';\n    filtersInput.value = this.visibleFiltersValue.join(',');\n    statusForm.appendChild(filtersInput);\n  }\n} ", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"flatpickr\"\nexport default class extends Controller {\n  static values = { options: Object }\n  connect() {\n    this.fpInstance = flatpickr(this.element, this.optionsValue)\n  }\n\n  disconnect() {\n    this.fpInstance.destroy()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n/**\n * Form Change Detection Controller\n * \n * A Stimulus controller that detects changes in forms and warns users before leaving\n * the page with unsaved changes. Works with both standard browser navigation and\n * Turbo navigation.\n * \n * Features:\n * - Detects changes in all form fields (inputs, textareas, selects, checkboxes, etc.)\n * - Works with multiple forms on the same page\n * - Handles both standard browser navigation and Turbo navigation\n * - Supports dynamic form content\n * - Cleans up event listeners when disconnected\n * \n * Usage:\n * \n * 1. Basic form:\n * ```erb\n * <%= form_with model: @model, data: { controller: \"form-change\" } do |f| %>\n *   <!-- Your form fields here -->\n * <% end %>\n * ```\n * \n * 2. Form with multiple targets:\n * ```erb\n * <%= form_with model: @model, \n *               data: { \n *                 controller: \"form-change\",\n *                 form_change_target: \"form\" \n *               } do |f| %>\n *   <!-- Your form fields here -->\n * <% end %>\n * ```\n * \n * 3. Form with state reset after submission:\n * ```erb\n * <%= form_with model: @model, \n *               data: { \n *                 controller: \"form-change\",\n *                 action: \"turbo:submit-end->form-change#resetFormState\"\n *               } do |f| %>\n *   <!-- Your form fields here -->\n * <% end %>\n * ```\n * \n * How it works:\n * 1. On connect:\n *    - Stores initial form state\n *    - Sets up change detection listeners\n *    - Adds navigation warning handlers\n * \n * 2. On form changes:\n *    - Compares current form state with initial state\n *    - Updates form's change status\n * \n * 3. Before navigation:\n *    - Checks for unsaved changes\n *    - Shows warning if changes detected\n *    - Allows user to cancel navigation\n */\n\n// Connects to data-controller=\"form-change\"\nexport default class extends Controller {\n  static targets = [\"form\", \"notification\"]\n  static values = {\n    debounceMs: { type: Number, default: 300 }, // Debounce delay in milliseconds\n    forceChanged: { type: Boolean, default: false }, // Force the changed state\n    skipAnimation: { type: Boolean, default: false } // Skip animation when showing notification\n  }\n\n  initialize() {\n    // Create a debounced version of handleFormChange\n    this.debouncedHandleFormChange = this.debounce((form) => {\n      this.handleFormChange(form)\n    }, this.debounceMsValue)\n  }\n\n  connect() {\n    // console.log(\"Form Change Controller connected\", window.location.href)\n    \n    // If no form targets specified, use the element itself if it's a form\n    if (this.formTargets.length === 0 && this.element.tagName === 'FORM') {\n      this.element.dataset.formChangeTarget = 'form'\n    }\n\n    // Store initial form state when the controller connects\n    this.storeInitialState()\n\n    // Add event listeners for form changes\n    this.addChangeListeners()\n\n    // Store bound handlers as instance properties\n    this.boundBeforeUnload = this.handleBeforeUnload.bind(this);\n    this.boundTurboBeforeVisit = this.handleTurboBeforeVisit.bind(this);\n\n    window.addEventListener(\"beforeunload\", this.boundBeforeUnload);\n    document.addEventListener(\"turbo:before-visit\", this.boundTurboBeforeVisit);\n\n    // Hide notification initially\n    this.hideNotification()\n    \n    // Check if we should force the form to be in changed state\n    if (this.forceChangedValue) {\n      this.formTargets.forEach(form => {\n        form.dataset.hasChanges = \"true\"\n      })\n      this.showNotification()\n    }\n\n    // // Debug logging\n    // console.log(\"Initial form states:\", this.formTargets.map(form => ({\n    //   formId: form.id,\n    //   initialState: form.dataset.initialState\n    // })))\n  }\n\n  disconnect() {\n    // Clean up all event listeners and observers\n    this.formTargets.forEach(form => {\n      const events = [\n        'keyup', 'mouseup', 'change', 'paste', 'drop',\n        'quill-text-change', 'trix-change', 'input'\n      ]\n      \n      if (form.boundChangeHandler) {\n        events.forEach(eventType => {\n          form.removeEventListener(eventType, form.boundChangeHandler)\n        })\n      }\n    })\n\n    // Use stored handler references\n    window.removeEventListener(\"beforeunload\", this.boundBeforeUnload);\n    document.removeEventListener(\"turbo:before-visit\", this.boundTurboBeforeVisit);\n\n    // console.log(\"Form Change Controller disconnected\", window.location.href)\n  }\n\n  /**\n   * Stores the initial state of all form targets.\n   * Uses FormData to capture all form field values and stores them in the form's dataset.\n   */\n  storeInitialState() {\n    this.formTargets.forEach(form => {\n      const formData = this.getFormData(form)\n      console.log(\"Storing initial state for form:\", form.id, formData)\n      form.dataset.initialState = JSON.stringify(formData)\n      form.dataset.hasChanges = \"false\"\n    })\n  }\n\n  /**\n   * Sets up event listeners for form changes.\n   * Listens to both 'input' and 'change' events to catch all possible form modifications.\n   */\n  addChangeListeners() {\n    this.formTargets.forEach(form => {\n      // Create event handler for this form\n      const handleEvent = (event) => {\n        // For mouse events, only trigger if it's a click on a checkbox, radio, or select\n        if (event.type === 'mouseup') {\n          const target = event.target\n          if (!['checkbox', 'radio', 'select-one', 'select-multiple'].includes(target.type)) {\n            return\n          }\n        }\n        \n        this.debouncedHandleFormChange(form)\n      }\n\n      // Store the handler reference for cleanup\n      form.boundChangeHandler = handleEvent\n\n      // Listen for all relevant events that might indicate a form change\n      const events = [\n        // Keyboard events\n        'keyup',\n        // Mouse events\n        'mouseup',\n        // Form events\n        'change',\n        'paste',\n        'drop',\n        // Custom events that might modify form\n        'quill-text-change',  // If you're using Quill editor\n        'trix-change',        // If you're using Trix editor\n        'input'               // Catch-all for other changes\n      ]\n\n      events.forEach(eventType => {\n        form.addEventListener(eventType, handleEvent, { passive: true })\n      })\n    })\n  }\n\n  /**\n   * Handles form change events.\n   * Compares current form state with initial state and updates change status.\n   * @param {HTMLFormElement} form - The form element that changed\n   */\n  handleFormChange(form) {\n    const currentState = this.getFormData(form)\n    const initialState = JSON.parse(form.dataset.initialState)\n    \n    // Compare current state with initial state\n    const hasChanges = this.hasFormChanges(currentState, initialState)\n    form.dataset.hasChanges = hasChanges.toString()\n\n    // Show/hide notification based on changes\n    if (hasChanges) {\n      this.showNotification()\n    } else {\n      this.hideNotification()\n    }\n  }\n\n  /**\n   * Extracts form data into a structured object.\n   * Handles multiple values for the same key (e.g., checkboxes).\n   * @param {HTMLFormElement} form - The form to extract data from\n   * @returns {Object} - Structured form data\n   */\n  getFormData(form) {\n    const formData = new FormData(form)\n    const data = {}\n\n    for (const [key, value] of formData.entries()) {\n      // if key ends with [] then it's an array, create or append to it\n      if (key.endsWith('[]')) {\n        const arrayKey = key.slice(0, -2)\n        if (!data[arrayKey]) {\n          data[arrayKey] = []\n        }\n        data[arrayKey].push(value)\n      } else {\n        data[key] = value\n      }\n    }\n\n    return data\n  }\n\n  getElementValue(element) {\n    if (element.type === 'checkbox') {\n      return element.checked\n    } else if (element.type === 'radio') {\n      return element.checked ? element.value : undefined\n    } else if (element.type === 'file') {\n      return element.files.length > 0 ? Array.from(element.files).map(f => f.name) : undefined\n    } else if (element.type === 'select-multiple') {\n      return Array.from(element.selectedOptions).map(o => o.value)\n    } else {\n      return element.value\n    }\n  }\n\n  setNestedValue(obj, path, value) {\n    // Handle Rails-style nested params (e.g., \"game_fact[description]\")\n    const matches = path.match(/^([^\\[]+)(.*)/)\n    if (!matches) return\n\n    const key = matches[1]\n    const rest = matches[2]\n\n    if (!rest) {\n      obj[key] = value\n      return\n    }\n\n    // Handle nested array notation (e.g., \"[0][name]\")\n    const arrayMatches = rest.match(/^\\[(\\d*)\\](.*)/)\n    if (arrayMatches) {\n      const index = arrayMatches[1]\n      const remaining = arrayMatches[2]\n      \n      if (!obj[key]) obj[key] = []\n      if (!obj[key][index]) obj[key][index] = {}\n      \n      if (remaining) {\n        this.setNestedValue(obj[key][index], remaining.substring(1), value)\n      } else {\n        obj[key][index] = value\n      }\n      return\n    }\n\n    // Handle nested object notation (e.g., \"[name]\")\n    const objectMatches = rest.match(/^\\[([^\\]]+)\\](.*)/)\n    if (objectMatches) {\n      const nestedKey = objectMatches[1]\n      const remaining = objectMatches[2]\n      \n      if (!obj[key]) obj[key] = {}\n      \n      if (remaining) {\n        this.setNestedValue(obj[key], nestedKey + remaining, value)\n      } else {\n        obj[key][nestedKey] = value\n      }\n    }\n  }\n\n  /**\n   * Compares current and initial form states.\n   * @param {Object} currentState - Current form state\n   * @param {Object} initialState - Initial form state\n   * @returns {boolean} - True if states are different\n   */\n  hasFormChanges(currentState, initialState) {\n    try {\n      const currentJson = JSON.stringify(this.sortObject(currentState))\n      const initialJson = JSON.stringify(this.sortObject(initialState))\n      \n      const hasChanges = currentJson !== initialJson\n      // console.log(\"Form change detection:\", {\n      //   hasChanges,\n      //   current: currentState,\n      //   initial: initialState\n      // })\n      \n      return hasChanges\n    } catch (error) {\n      console.error(\"Error comparing form states:\", error)\n      return false\n    }\n  }\n\n  sortObject(obj) {\n    // Recursively sort object keys to ensure consistent comparison\n    if (obj === null || typeof obj !== 'object') return obj\n    \n    if (Array.isArray(obj)) {\n      return obj.map(this.sortObject.bind(this)).sort()\n    }\n    \n    return Object.keys(obj).sort().reduce((sorted, key) => {\n      sorted[key] = this.sortObject(obj[key])\n      return sorted\n    }, {})\n  }\n\n  /**\n   * Handles browser's beforeunload event.\n   * Shows native browser warning if there are unsaved changes.\n   * @param {BeforeUnloadEvent} event - The beforeunload event\n   */\n  handleBeforeUnload(event) {\n    if (this.hasUnsavedChanges()) {\n      // Standard message (browsers may show their own message instead)\n      event.preventDefault()\n      event.returnValue = \"You have unsaved changes. Are you sure you want to leave?\"\n      return event.returnValue\n    }\n  }\n\n  /**\n   * Handles Turbo navigation events.\n   * Shows custom confirmation dialog if there are unsaved changes.\n   * @param {CustomEvent} event - The turbo:before-visit event\n   */\n  handleTurboBeforeVisit(event) {\n    if (this.hasUnsavedChanges()) {\n      // console.trace(\"Form has unsaved changes\", window.location.href)\n      if (!confirm(\"You have unsaved changes. Are you sure you want to leave?\")) {\n        event.preventDefault()\n      }\n    }\n  }\n\n  /**\n   * Checks if any form has unsaved changes.\n   * @returns {boolean} - True if any form has changes\n   */\n  hasUnsavedChanges() {\n    return this.formTargets.some(form => form.dataset.hasChanges === \"true\")\n  }\n\n  /**\n   * Shows the notification with animation\n   */\n  showNotification() {\n    if (this.hasNotificationTarget) {\n      // Use requestAnimationFrame to ensure the animation triggers\n      requestAnimationFrame(() => {\n        if (this.skipAnimationValue) {\n          // Apply the visible class without animation\n          this.notificationTarget.style.transition = \"none\"\n          this.notificationTarget.classList.add('is-visible')\n          \n          // Reset the transition after a small delay to allow for future animations\n          setTimeout(() => {\n            this.notificationTarget.style.transition = \"\"\n          }, 50)\n        } else {\n          // Show with animation\n          this.notificationTarget.classList.add('is-visible')\n        }\n      })\n    }\n  }\n\n  /**\n   * Hides the notification with animation\n   */\n  hideNotification() {\n    if (this.hasNotificationTarget) {\n      this.notificationTarget.classList.remove('is-visible')\n    }\n  }\n\n  /**\n   * Resets form state after successful submission.\n   * Updates the initial state to match current state.\n   * @param {Event} event - The form submission event\n   */\n  resetFormState(event) {\n    const form = event.target.closest(\"form\")\n    if (form) {\n      form.dataset.initialState = JSON.stringify(this.getFormData(form))\n      form.dataset.hasChanges = \"false\"\n      this.hideNotification()\n    }\n  }\n\n  /**\n   * Creates a debounced version of a function\n   * @param {Function} func - The function to debounce\n   * @param {number} wait - The debounce delay in milliseconds\n   * @returns {Function} - The debounced function\n   */\n  debounce(func, wait) {\n    let timeout\n    return (...args) => {\n      clearTimeout(timeout)\n      timeout = setTimeout(() => func.apply(this, args), wait)\n    }\n  }\n} ", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"form\"\nexport default class extends Controller {\n  submitForm(event) {\n    event.preventDefault();\n    const form = event.target.form;\n    Turbo.navigator.submitForm(form);\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"template\", \"form\"]\n\n  connect() {\n    this.sizeLimit = this.data.get('sizeLimit') || 8; // in MB\n    this.maxFiles = this.data.get('maxFiles') || 5;\n\n    // Convert sizeLimit to bytes for comparison\n    this.sizeLimit = this.sizeLimit * 1024 * 1024;\n\n    this.appendNewFileInput();\n  }\n\n  updateFileInputs() {\n    // Find all file input elements in the form\n    const fileInputs = this.formTarget.querySelectorAll('input[type=\"file\"]')\n    fileInputs.forEach((input, index) => {\n      if (input.files.length > 0 || index === fileInputs.length - 1) {\n        input.removeEventListener('change', this.handleFileInputChange.bind(this))\n        input.addEventListener('change', this.handleFileInputChange.bind(this))\n      }\n    })\n  }\n\n  handleFileInputChange(event) {\n    const fileInput = event.target;\n    const file = event.target.files[0];\n\n    // Check file size\n    if (file.size > this.sizeLimit) {\n      const fileSizeMB = (file.size / (1024 * 1024)).toFixed(2); // size in MB\n      alert(`The file size of ${fileSizeMB}MB exceeds the limit of ${this.sizeLimit / (1024 * 1024)}MB`);\n\n      // Reset the file input\n      fileInput.value = '';\n      return;\n    }\n\n    const fileInputs = this.formTarget.querySelectorAll('input[type=\"file\"]')\n    const allFilled = Array.from(fileInputs).every(input => input.files.length > 0)\n\n    // Only append a new file input if the maximum number of files is not reached\n    if (allFilled && fileInputs.length < this.maxFiles) {\n      this.appendNewFileInput();\n    }\n  }\n\n  appendNewFileInput() {\n    // Clone the template\n    const clone = this.templateTarget.content.cloneNode(true)\n    const input = clone.querySelector('input')\n\n    // Find the current number of file inputs to set the name appropriately\n    const fileInputs = this.formTarget.querySelectorAll('input[type=\"file\"]')\n    // const newIndex = fileInputs.length\n\n    // Update the name attribute of the new input to reflect its index\n    input.name = `feature_request[files][]`\n\n    // Append the cloned template to the form\n    this.formTarget.appendChild(clone)\n\n    // Update event listeners for file inputs\n    this.updateFileInputs()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  connect() {\n    this.element.textContent = \"Hello World!\"\n  }\n}\n", "// app/javascript/controllers/highlight_controller.js\nimport { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"defaultTarget\"]\n\n  connect() {\n    // Listen for custom events to trigger highlight\n    this.element.addEventListener(\"trigger-highlight\", () => {\n      this.highlight()\n    })\n\n    // highlight if anchor is the same as this.element id\n    if (window.location.hash === `#${this.element.id}`) {\n      this.highlight()\n    }\n  }\n\n  highlight() {\n    this.element.classList.add(\"highlight\")\n    // Remove the highlight class after animation completes\n    this.element.addEventListener(\"animationend\", () => {\n      this.element.classList.remove(\"highlight\")\n    }, { once: true })\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"integration-mapping-form\"\nexport default class extends Controller {\n  static targets = [\n    \"mappingType\",\n    \"enumSelect\",\n    \"mappingEntry\", // a container for the mapping entry inside a form\n  ]\n\n  static values = {\n    targetEndpoint: String, // endpoint where to submit the mappings\n    targetMethod: String, // method to use when submitting the mappings\n  }\n\n  connect() {\n    this.mappingTypeTargets.forEach((mappingType) => {\n      mappingType.addEventListener(\"change\", this.mappingTypeChange.bind(this))\n\n      const event = new Event('change', {\n        bubbles: true,\n        cancelable: true,\n      });\n\n      mappingType.dispatchEvent(event);\n    });\n\n    this.enumSelectTargets.forEach((enumSelect) => {\n      enumSelect.addEventListener(\"change\", this.enumSelectChange.bind(this))\n\n      const event = new Event('change', {\n        bubbles: true,\n        cancelable: true,\n      });\n\n      enumSelect.dispatchEvent(event);\n    });\n  }\n\n  mappingTypeChange(event) {\n    let fieldId = event.target.dataset.fieldId\n\n    let fields = document.querySelectorAll(`.mapping-collection[data-field-id=\"${fieldId}\"] .mapping-value`)\n    fields.forEach((field) => {\n      let mappingType = field.dataset.mappingType\n\n      if (mappingType === event.target.value) {\n        field.style.display = \"block\"\n        this.toggleInputs(field, false)\n      } else {\n        field.style.display = \"none\"\n        this.toggleInputs(field, true)\n      }\n    });\n  }\n\n  enumSelectChange(event) {\n    let fieldId = event.target.dataset.fieldId\n    let selectedEnumId = event.target.value\n\n    let enumValuesContainers = document.querySelectorAll(`.enum-values[data-field-id=\"${fieldId}\"]`)\n    enumValuesContainers.forEach((container) => {\n      if (container.dataset.selectFieldId === selectedEnumId) {\n        container.style.display = \"block\"\n        this.toggleInputs(container, false)\n      } else {\n        container.style.display = \"none\"\n        this.toggleInputs(container, true)\n      }\n    });\n  }\n\n  toggleInputs(element, shouldDisable) {\n    let inputs = element.querySelectorAll('input, select, textarea, button')\n    inputs.forEach((input) => {\n      input.disabled = shouldDisable\n    })\n  }\n\n  update(event) {\n    event.preventDefault();\n    let mappings = this.buildMappingsJson();\n    let mappings_json = { issue: mappings }\n\n    fetch(this.targetEndpointValue, {\n      method: this.targetMethodValue || 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]').content,\n        'Accept': 'application/json'\n      },\n      body: JSON.stringify(mappings_json)\n    })\n    .then(response => {\n      if (response.ok) {\n        // Handle success\n        console.log(\"Mappings submitted successfully.\");\n\n        // Reload page with success message, pass as query param\n        window.location.href = window\n          .location\n          .toString()\n          .replace\n          (window.location.search, \"?success=true\");\n      } else {\n        // Handle server errors\n        console.error(\"Failed to submit mappings:\", response.statusText);\n      }\n    })\n    .catch(error => {\n      // Handle network errors\n      console.error(\"Error during submission:\", error);\n    });\n  }\n\n  // Builds mappings json in mappings json format from the form.\n  // The way we do that this way instead of submitting the form is because the complexity of the form.\n  // It's so big, it would be hard to manage the form data in the controller.\n  // Therefore, it's easier to set a valid structure in the form and then build the json from the form.\n  buildMappingsJson() {\n    let json = {\"mappings\": []}\n\n    let mappings = this.fetchAllMappings()\n    mappings.forEach((mapping) => {\n      console.log(mapping);\n      json[\"mappings\"].push(mapping)\n    });\n\n    return json;\n  }\n\n  fetchAllMappings() {\n    let mappings = []\n    let mappingContainers = this.mappingEntryTargets\n    mappingContainers.forEach((container) => {\n      let remoteField = container.querySelector('.remote-field')\n      if (!remoteField) {\n        // log error\n        console.log(\"Remote field not found for container: \", container);\n        return;\n      }\n\n      let mappingType = container.querySelector('.mapping-type')\n      if (!mappingType) {\n        // log error\n        console.log(\"Mapping type not found for container: \", container);\n        return;\n      }\n\n      let mapping = {\n        remote: {\n          id: remoteField.dataset.fieldId,\n          name: remoteField.dataset.fieldName,\n          local_type: remoteField.dataset.localFieldType,\n          native_type: remoteField.dataset.nativeFieldType,\n        },\n      }\n\n      switch (mappingType.value) {\n        case \"field\":\n          let remoteFieldIdSelect = container.querySelector('.local-field-id-select')\n          if (!remoteFieldIdSelect) {\n            // log error\n            console.log(\"Local field id select not found for container: \", container);\n            return;\n          }\n\n          mapping.local = {\n            id: remoteFieldIdSelect.options[remoteFieldIdSelect.selectedIndex].dataset.fieldId,\n            name: remoteFieldIdSelect.options[remoteFieldIdSelect.selectedIndex].dataset.fieldName,\n            type: remoteFieldIdSelect.options[remoteFieldIdSelect.selectedIndex].dataset.fieldType\n          }\n          break;\n        case \"not_mapped\": // do nothing\n          break;\n        case \"constant\":\n          let constantValue = container.querySelector('.constant-value')\n          if (!constantValue) {\n            // log error\n            console.log(\"Constant value not found for container: \", container);\n            throw new Error(\"Constant value not found\")\n          }\n\n          mapping.constant_value = constantValue.value\n          break;\n        case \"dynamic\":\n          let dynamicValue = container.querySelector('.dynamic-value')\n          if (!dynamicValue) {\n            // log error\n            console.log(\"Dynamic value not found for container: \", container);\n            throw new Error(\"Dynamic value not found\")\n          }\n\n          mapping.dynamic_expression = dynamicValue.value\n          break;\n        default:\n          console.error(\"Invalid mapping type: \", mappingType.value)\n          throw new Error(\"Invalid mapping type\")\n      }\n\n      switch (mapping.remote.local_type) {\n        case \"enum\":\n          let values = []\n\n          let enumValues = container.querySelectorAll('.enum-value')\n          enumValues.forEach((enumValue) => {\n            let value = {}\n            value.local = {id: enumValue.dataset.valueId, name: enumValue.dataset.valueName}\n\n            let remoteSelect = enumValue.querySelector('.remote-value-id-select')\n            if (!remoteSelect) {\n              // log error\n              console.log(\"Remote value id select not found for container: \", enumValue);\n              return;\n            }\n\n            value.remote = {\n              id: remoteSelect.options[remoteSelect.selectedIndex].dataset.valueId,\n              name: remoteSelect.options[remoteSelect.selectedIndex].dataset.valueName,\n            }\n\n            values.push(value)\n          })\n\n          mapping.values = values\n          break;\n        case \"date\": // do nothing\n          break;\n        case \"string\": // do nothing\n          break;\n        default:\n          console.error(\"Invalid remote field type: \", mapping.remote.local_type, \"for field: \", remoteField)\n          throw new Error(\"Invalid remote field type\")\n      }\n\n      mappings.push(mapping)\n\n    })\n\n    return mappings;\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n    static targets = [ \"lastMinuteCaptureCheckbox\" ]\n\n    connect() {\n        this.element.addEventListener('closeOverlay', this.closeOverlay.bind(this));\n    }\n\n    disconnect() {\n        this.element.removeEventListener('closeOverlay', this.closeOverlay.bind(this));\n    }\n\n    discardIssue({ params }) {\n        console.log(\"IPC: Discarding issue\", params)\n\n        const csrfToken = this.data.get(\"csrf-token\")\n\n        fetch(params.url, {\n            method: \"DELETE\",\n            headers: {\n                \"X-CSRF-Token\": csrfToken,\n            }\n        }).then(this.closeOverlay)\n    }\n\n    closeOverlay() {\n        console.log(\"IPC: Closing overlay\")\n        ipc.closeOverlay()\n    }\n\n    sendLastMinuteCaptureCheckboxValue() {\n        console.log(\"IPC: Sending last minute capture checkbox value\")\n        const isChecked = this.lastMinuteCaptureCheckboxTarget.checked\n\n        ipc.sendLastMinuteCaptureCheckboxValue(isChecked)\n    }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"issue-form\"\nexport default class extends Controller {\n\n  // description - one text field, can change dynamically\n  // stepsToReproduce - multiple text fields, the number can change dynamically\n  static targets = [\"description\", \"stepsToReproduce\", \"suggestions\", \"similarIssues\"]\n  static values = { issueId: Number, findSimilarEndpoint: String, developerView: Boolean }\n\n  weights = {\n      description: 0.4,\n      stepsToReproduce: 0.3,\n      screenshot: 0.08,\n      videoClip: 0.1,\n      logFile: 0.12\n    };\n\n  connect() {\n    if (!this.developerViewValue) {\n      this.calculateIssueStrength = this.calculateIssueStrength.bind(this);\n\n      // Listen to changes in description\n      this.descriptionTarget.addEventListener(\"input\", this.calculateIssueStrength);\n      this.observeStepsToReproduce();\n\n      this.calculateIssueStrength();\n\n      // listen for issue-strength-gauge-ready event\n      document.body.addEventListener(\"issue-strength-gauge-ready\", this.calculateIssueStrength);\n\n      // find similar issues on description blur\n      this.descriptionTarget.addEventListener(\"blur\", () => this.findSimilarIssues());\n    }\n\n    // local storage issue saving\n\n    this.saveToLocalStorage = this.saveToLocalStorage.bind(this);\n    this.restoreFromLocalStorage = this.restoreFromLocalStorage.bind(this);\n    this.useLocalStorage = true\n\n    // Save values to local storage when they change\n    this.descriptionTarget.addEventListener(\"input\", this.saveToLocalStorage);\n    this.stepsToReproduceTargets.forEach((step) =>\n        step.addEventListener(\"input\", this.saveToLocalStorage)\n    );\n\n    // Restore values from local storage when received document.body steps-ready event\n    document.body.addEventListener(\"steps-ready\", this.restoreFromLocalStorage);\n  }\n\n  async findSimilarIssues() {\n    const description = this.descriptionTarget.value;\n\n    // don't search for similar issues if description is empty\n    if (description === \"\") {\n      this.similarIssuesTarget.innerHTML = \"\";\n      return;\n    }\n\n    // don't search for similar issues if description is too short\n    if (description.length < 20) {\n      this.updateMessage(\"Description is too short.\", \"text-600\");\n      return;\n    }\n\n    this.updateMessage(\"Searching for similar issues...\", \"text-600\");\n\n    try {\n      const response = await fetch(this.findSimilarEndpointValue, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"Accept\": \"application/json\"\n        },\n        body: JSON.stringify({ description: description })\n      });\n\n      if (response.ok) {\n        const data = await response.json();\n        this.showSimilarIssues(data.issues);\n      } else {\n        this.updateMessage(\"Error: Failed to fetch similar issues.\", \"text-600\");\n      }\n    } catch (error) {\n      this.updateMessage(\"Error: Failed to fetch similar issues.\", \"text-600\");\n      console.error(error);\n    }\n  }\n\n  showSimilarIssues(issues) {\n    const topIssues = issues.slice(0, 3);\n\n    let html = \"\";\n\n    if (topIssues.length > 0) {\n      html += \"<h6>Similar issues</h6>\"\n      html += topIssues.map(issue => `\n        <div class=\"similar-issue\">\n          <a href=\"${issue.url}\">${issue.title}</a>\n          <span>(${issue.score * 100}%)</span>\n        </div>\n      `).join('');\n    } else {\n      html += '<div class=\"text-600\">No similar issues found.</div>';\n    }\n\n    this.similarIssuesTarget.innerHTML = html;\n  }\n\n  updateMessage(message, className) {\n    this.similarIssuesTarget.innerHTML = `<div class=\"${className}\">${message}</div>`;\n  }\n\n\n  observeStepsToReproduce() {\n    const stepsContainer = this.element.querySelector(\"#steps-container\");\n\n    const observer = new MutationObserver((mutationsList) => {\n      for (const mutation of mutationsList) {\n        if (mutation.type === \"childList\") {\n          this.stepsToReproduceTargets.forEach((step) => {\n            if (!step._inputEventListenerAttached) {\n              step.addEventListener(\"input\", this.calculateIssueStrength);\n\n              if (this.useLocalStorage) {\n                step.addEventListener(\"input\", this.saveToLocalStorage);\n              }\n              step._inputEventListenerAttached = true;\n            }\n          });\n        }\n      }\n    });\n\n    observer.observe(stepsContainer, {\n      childList: true,\n      subtree: true\n    });\n  }\n\n  calculateIssueStrength() {\n    const description = this.descriptionTarget.value;\n    const stepsToReproduce = this.stepsToReproduceTargets\n        .map((step) => step.value)\n        .filter((step) => step !== \"\")\n        .join(\"\\n\");\n\n    const descriptionScore = this.normalizeTextLength(description.length, 20, 150);\n    const stepsScore = this.normalizeStepCount(stepsToReproduce.split(\"\\n\").length, 1, 4);\n    const screenshotScore = this.hasScreenshot() ? 1 : 0;\n    const videoClipScore = this.hasVideoClip() ? 1 : 0;\n    const logFileScore = this.hasLogFile() ? 1 : 0;\n\n    const submissionStrength =\n        this.weights.description * descriptionScore +\n        this.weights.stepsToReproduce * stepsScore +\n        this.weights.screenshot * screenshotScore +\n        this.weights.videoClip * videoClipScore +\n        this.weights.logFile * logFileScore;\n\n    let val = {\n      submissionStrength,\n      fieldScores: {\n        description: descriptionScore,\n        stepsToReproduce: stepsScore,\n        screenshot: screenshotScore,\n        videoClip: videoClipScore,\n        logFile: logFileScore,\n      },\n      fieldMaxScores: {\n        description: 1,\n        stepsToReproduce: 1,\n        screenshot: 1,\n        videoClip: 1,\n        logFile: 1,\n      },\n    };\n    this.updateIssueStrength(val);\n  }\n\n  getTopSuggestions(fieldScores, fieldMaxScores, weights) {\n    const suggestions = [\n      {\n        text: \"Write a more detailed description\",\n        points: (fieldMaxScores.description - fieldScores.description) * weights.description * 100,\n        field: \"description\",\n      },\n      {\n        text: \"Provide more steps to reproduce\",\n        points: (fieldMaxScores.stepsToReproduce - fieldScores.stepsToReproduce) * weights.stepsToReproduce * 100,\n        field: \"stepsToReproduce\",\n      },\n      {\n        text: \"Provide a screenshot\",\n        points: (fieldMaxScores.screenshot - fieldScores.screenshot) * weights.screenshot * 100,\n        field: \"screenshot\",\n      },\n      {\n        text: \"Provide a video clip\",\n        points: (fieldMaxScores.videoClip - fieldScores.videoClip) * weights.videoClip * 100,\n        field: \"videoClip\",\n      },\n      {\n        text: \"Provide a log file\",\n        points: (fieldMaxScores.logFile - fieldScores.logFile) * weights.logFile * 100,\n        field: \"logFile\",\n      },\n    ];\n\n    // Sort suggestions by points in descending order\n    suggestions.sort((a, b) => b.points - a.points);\n\n    // Return top two suggestions\n    return suggestions.slice(0, 2);\n  }\n\n\n  normalizeTextLength(length, minLength, maxLength) {\n    return Math.max(0, Math.min(1, (length - minLength) / (maxLength - minLength)));\n  }\n\n  normalizeStepCount(stepCount, minSteps, maxSteps) {\n    return Math.max(0, Math.min(1, (stepCount - minSteps) / (maxSteps - minSteps)));\n  }\n\n  updateIssueStrength(value) {\n    const { submissionStrength, fieldScores, fieldMaxScores } = value;\n\n    // ...\n    // Update the strength gauge\n    const ev = new CustomEvent(\"issue-strength-change\", { detail: { value: submissionStrength * 100 } });\n    document.body.dispatchEvent(ev);\n\n    const topSuggestions = this.getTopSuggestions(fieldScores, fieldMaxScores, this.weights);\n\n    // Clear the existing suggestions\n    this.suggestionsTarget.innerHTML = \"\";\n\n    // Create and insert the new suggestions list\n    const list = document.createElement(\"ul\");\n    topSuggestions.forEach((suggestion) => {\n      const listItem = document.createElement(\"li\");\n      listItem.textContent = `${suggestion.text} (+${suggestion.points.toFixed(0)})`;\n      list.appendChild(listItem);\n    });\n    this.suggestionsTarget.appendChild(list);\n\n    // Display the top suggestions\n    // Replace the following line with your code to display the suggestions on your webpage\n    // console.log(\"Top suggestions:\", topSuggestions.map((s) => `${s.text} (+${s.points.toFixed(0)})`));\n  }\n\n\n  // this won't change dynamically, so we don't need to use targets\n  hasScreenshot() {\n    // find children (on any depth) by '.sel-has-screenshot' selector, if any, return true\n    // if no children, return false\n\n    if (this.element.querySelector(\".sel-has-screenshot\")) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  // this won't change dynamically, so we don't need to use targets\n  hasVideoClip() {\n    // find children (on any depth) by '.sel-has-video-clip' selector, if any, return true\n    // if no children, return false\n\n    if (this.element.querySelector(\".sel-has-video-clip\")) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  // this won't change dynamically, so we don't need to use targets\n  hasLogFile() {\n    // find children (on any depth) by '.sel-has-log-file' selector, if any, return true\n    // if no children, return false\n\n    if (this.element.querySelector(\".sel-has-log-file\")) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  saveToLocalStorage() {\n    const issueId = this.issueIdValue;\n    localStorage.setItem(`issueFormDescription_${issueId}`, JSON.stringify({\n      originalValue: this.descriptionTarget.dataset.originalValue,\n      userValue: this.descriptionTarget.value\n    }));\n\n    const stepsData = this.stepsToReproduceTargets.map((step) => ({\n      originalValue: step.dataset.originalValue,\n      userValue: step.value\n    }));\n    localStorage.setItem(`issueFormSteps_${issueId}`, JSON.stringify(stepsData));\n  }\n\n  restoreFromLocalStorage() {\n    const issueId = this.issueIdValue;\n    const descriptionData = JSON.parse(localStorage.getItem(`issueFormDescription_${issueId}`));\n    if (\n        descriptionData &&\n        descriptionData.originalValue === this.descriptionTarget.dataset.originalValue\n    ) {\n      this.descriptionTarget.value = descriptionData.userValue;\n    }\n\n    const stepsData = JSON.parse(localStorage.getItem(`issueFormSteps_${issueId}`));\n    if (stepsData && Array.isArray(stepsData)) {\n      stepsData.forEach((stepData, index) => {\n        if (\n            index < this.stepsToReproduceTargets.length &&\n            stepData.originalValue === this.stepsToReproduceTargets[index].dataset.originalValue\n        ) {\n          this.stepsToReproduceTargets[index].value = stepData.userValue;\n        } else if (stepData.userValue) {\n          const ev = new CustomEvent(\"steps-add-step\");\n          document.body.dispatchEvent(ev);\n\n          // Wait for the new step to be added before setting its value\n          requestAnimationFrame(() => {\n            this.stepsToReproduceTargets[index].value = stepData.userValue;\n          });\n        }\n      });\n\n      // Check if the last step is not empty and add a new step\n      const lastStep = this.stepsToReproduceTargets[this.stepsToReproduceTargets.length - 1];\n      if (lastStep.value.trim() !== \"\") {\n        const ev = new CustomEvent(\"steps-add-step\");\n        document.body.dispatchEvent(ev);\n      }\n    }\n\n    if (!this.developerViewValue) { // not a developer view\n      // need to wait for the new step to be added before recalculating\n      requestAnimationFrame(() => {\n        this.calculateIssueStrength();\n      });\n    }\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"issue-strength-gauge\"\nexport default class extends Controller {\n  static targets = [\"gauge\"];\n\n  connect() {\n    this.initializeChart();\n\n    // Binding the function and storing the reference\n    this.boundHandleStrengthChange = this.handleStrengthChange.bind(this);\n    this.boundHandleResize = this.handleResize.bind(this);\n\n    // When the issue-strength-change event is dispatched, update the gauge\n    document.body.addEventListener(\"issue-strength-change\", this.boundHandleStrengthChange);\n    \n    // Add resize event listener to refresh the chart when window size changes\n    window.addEventListener(\"resize\", this.boundHandleResize);\n\n    // Set up ResizeObserver to handle container size changes\n    if (window.ResizeObserver) {\n      this.resizeObserver = new ResizeObserver(this.boundHandleResize);\n      this.resizeObserver.observe(this.gaugeTarget);\n    }\n\n    // Refresh chart when DOM is fully loaded\n    if (document.readyState === 'complete') {\n      setTimeout(this.boundHandleResize, 100);\n    } else {\n      window.addEventListener('load', () => setTimeout(this.boundHandleResize, 100));\n    }\n\n    // Listen for turbo:render events in case of Turbo Drive navigation\n    document.addEventListener('turbo:render', this.boundHandleResize);\n\n    // invoke event that the gauge is ready\n    document.body.dispatchEvent(new CustomEvent(\"issue-strength-gauge-ready\"));\n  }\n\n  disconnect() {\n    // Removing the event listeners\n    document.body.removeEventListener(\"issue-strength-change\", this.boundHandleStrengthChange);\n    window.removeEventListener(\"resize\", this.boundHandleResize);\n    document.removeEventListener('turbo:render', this.boundHandleResize);\n    \n    // Clean up ResizeObserver if it exists\n    if (this.resizeObserver) {\n      this.resizeObserver.disconnect();\n    }\n    \n    // Dispose of chart to prevent memory leaks\n    if (this.chart) {\n      this.chart.dispose();\n      this.chart = null;\n    }\n  }\n\n  handleResize() {\n    if (this.chart) {\n      this.chart.resize();\n    }\n  }\n\n  initializeChart() {\n    let el = this.gaugeTarget;\n\n    // remove the inner div, recreate it, and append it to the element\n    // this little trick is a workaround for turbo navigating back to a page\n    el.innerHTML = '';\n    const innerDiv = document.createElement('div');\n    innerDiv.setAttribute('style', 'min-height: 300px;');\n    el.appendChild(innerDiv);\n\n    // Get options from data attribute\n    var userOptions = utils.getData(innerDiv, 'options');\n    this.chart = window.echarts.init(innerDiv);\n\n    var getDefaultOptions = function getDefaultOptions() {\n      return {\n        series: [{\n          radius: '100%',\n          type: 'gauge',\n          center: ['50%', '70%'],\n          startAngle: 180,\n          endAngle: 0,\n          min: 0,\n          max: 1,\n          splitNumber: 8,\n          axisLine: {\n            lineStyle: {\n              width: 6,\n              color: [[0.25, utils.getColor('danger')], [0.5, utils.getColor('warning')], [0.75, utils.getColor('info')], [1, utils.getColor('success')]]\n            }\n          },\n          pointer: {\n            icon: 'path://M12.8,0.7l12,40.1H0.7L12.8,0.7z',\n            length: '12%',\n            width: 20,\n            offsetCenter: [0, '-60%'],\n            itemStyle: {\n              color: 'auto'\n            }\n          },\n          axisTick: {\n            length: 12,\n            lineStyle: {\n              color: 'auto',\n              width: 2\n            }\n          },\n          splitLine: {\n            length: 20,\n            lineStyle: {\n              color: 'auto',\n              width: 5\n            }\n          },\n          axisLabel: {\n            color: utils.getGrays()['600'],\n            distance: -60,\n            formatter: function formatter(value) {\n              if (value === 0.875) {\n                return 'Best';\n              }\n\n              if (value === 0.625) {\n                return 'Good';\n              }\n\n              if (value === 0.375) {\n                return 'Well';\n              }\n\n              if (value === 0.125) {\n                return 'Bad';\n              }\n\n              return '';\n            }\n          },\n          title: {\n            offsetCenter: [0, '-20%'],\n            color: utils.getGrays()['600']\n          },\n          detail: {\n            offsetCenter: [0, '0%'],\n            valueAnimation: true,\n            formatter: function formatter(value) {\n              return Math.round(value * 100);\n            },\n            color: 'auto'\n          },\n          data: [{\n            value: 0.0,\n            name: 'Grade'\n          }]\n        }]\n      };\n    };\n\n    echartSetOption(this.chart, userOptions, getDefaultOptions);\n  }\n\n  handleStrengthChange(event) {\n    this.chart.setOption({\n        series: [{\n        data: [{\n            value: event.detail.value / 100\n        }]\n        }]\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Turbo } from \"@hotwired/turbo-rails\";\n\n// Connects to data-controller=\"issue-table-row\"\n// It's being set on <tr> element\nexport default class extends Controller {\n\n  static values = {\n    id: Number,\n    issueUrl: String,\n    issuesFrameUrl: String\n  }\n\n  updateStatus(event) {\n    let status = event.currentTarget.getAttribute('data-status');\n\n    const url = this.issueUrlValue;\n    const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n    fetch(url, {\n      method: 'PATCH',\n      headers: {\n        'X-CSRF-Token': token,\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ issue: { status: status } })\n    })\n      .then(response => response.json())\n      .then(data => {\n        console.log(data);\n      });\n\n    this.removeFromTheTable();\n    event.preventDefault();\n  }\n\n  updatePriority(event) {\n    let priority = event.currentTarget.getAttribute('data-priority');\n\n    console.log(this.issueFrameUrlValue)\n    const url = this.issueUrlValue;\n    const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n    fetch(url, {\n      method: 'PATCH',\n      headers: {\n        'X-CSRF-Token': token,\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({ issue: { priority: priority } })\n    })\n      .then(response => response.json())\n      .then(data => {\n        Turbo.visit(this.issuesFrameUrlValue, { frame: 'issues_table' });\n      });\n\n    // this reloads the turboframe with src attribute set\n    // document.getElementById('issues_table').reload();\n\n    event.preventDefault();\n  }\n\n  deleteIssue(event) {\n    // first ask using prompt dialog if user is sure\n    let result = confirm(\"Are you sure you want to delete this issue?\");\n\n    if (result) {\n      const url = this.issueUrlValue;\n      const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n      fetch(url, {\n          method: 'DELETE',\n          headers: {\n          'X-CSRF-Token': token,\n          'Content-Type': 'application/json'\n          }\n      })\n          .then(response => response.json())\n          .then(data => {\n            console.log(data);\n          });\n\n      this.removeFromTheTable();\n    }\n\n    event.preventDefault();\n  }\n\n  removeFromTheTable() {\n    this.element.classList.add('fadeAndCollapse');\n    setTimeout(() => {\n      this.element.classList.add('collapsing');\n      // Wait for the animation to finish before removing the element.\n      // This duration should match the longer of the two transitions defined in CSS.\n      setTimeout(() => {\n        this.element.remove();\n      }, 500); // Adjust time based on your transition\n    }, 10); // Short delay to ensure the class is added\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"issue-tags-form\"\nexport default class extends Controller {\n  static targets = [\"list\"];\n  static values = { issueTags: String, projectIssueTags: String };\n\n  connect() {\n    this.issueTags = JSON.parse(this.issueTagsValue);\n    const projectIssueTags = JSON.parse(this.projectIssueTagsValue);\n    this.allTags = projectIssueTags.map((tag) => {\n      tag.subtags = projectIssueTags.filter(\n        (subtag) => subtag.parent_tag_id === tag.id\n      );\n      return tag;\n    });\n\n    this._redrawTagBadges();\n  }\n\n  _redrawTagBadges() {\n    this.listTarget.innerHTML = \"\";\n    this.issueTags.forEach((tag) => {\n      const tagData = this.allTags.find((t) => t.id === tag.id);\n      if (!tagData || tagData.parent_tag_id !== null) return;\n      const subtags = tagData.subtags.filter((subtag) =>\n        this.issueTags.some((issueTag) => issueTag.id === subtag.id)\n      );\n      this.listTarget.insertAdjacentHTML(\n        \"beforeend\",\n        this._createTagBadge(tagData, subtags)\n      );\n    });\n\n    const remainingTags = this.allTags.filter(\n      (tag) =>\n        !this.issueTags.some((issueTag) => issueTag.id === tag.id) &&\n        !tag.parent_tag_id\n    );\n    this.listTarget.insertAdjacentHTML(\n      \"beforeend\",\n      remainingTags.length > 0\n        ? `\n            <li>\n              <select class=\"form-select-sm form-select\" data-action=\"change->issue-tags-form#addTag\">\n                <option value=\"\" selected disabled>Add tag</option>\n                ${remainingTags.map(\n                  (\n                    tag\n                  ) => `<option value=\"${tag.id}\" data-color=\"${tag.color}\" style=\"background-color: ${tag.color}; color: #333;\">${tag.name}</option>\n                    `\n                )}\n              </select>\n            </li>\n          `\n        : \"\"\n    );\n  }\n\n  _createTagBadge(tag, childrenTags = []) {\n    const remainingSubtags = tag.subtags.filter(\n      (subtag) => !childrenTags.some((childTag) => childTag.id === subtag.id)\n    );\n\n    return `\n      <li class=\"d-flex justify-content-between align-items-center gap-2\">\n        <span class=\"issue-tag ${\n          childrenTags.length > 0 ? \"issue-tag-parent\" : \"\"\n        } prevent-hiding\" style=\"--tag-color: ${tag.color};\" data-id=\"${tag.id}\">\n          ${tag.name}\n          <i class=\"fas fa-times cursor-pointer\" data-action=\"click->issue-tags-form#removeTag\"></i>\n          ${childrenTags?.map(\n              (childTag) => `\n              <span class=\"issue-tag\" style=\"--tag-color: ${childTag.color}\" data-id=\"${childTag.id}\">\n                ${childTag.name}\n                <i class=\"fas fa-times cursor-pointer\" data-action=\"click->issue-tags-form#removeTag\"></i>\n                <input type=\"hidden\" name=\"issue[tag_ids][]\" value=\"${childTag.id}\">\n              </span>\n            `\n          ).join('')}\n          <input type=\"hidden\" name=\"issue[tag_ids][]\" value=\"${tag.id}\">\n        </span>\n\n        ${\n          remainingSubtags.length > 0\n            ? `\n            <select class=\"form-select-sm form-select\" style=\"width: 150px; max-height: 30px;\" data-action=\"change->issue-tags-form#addTag\">\n              <option value=\"\" selected disabled>Add subtag</option>\n              ${remainingSubtags.map(\n                (\n                  subtag\n                ) => `<option value=\"${subtag.id}\" data-color=\"${subtag.color}\" style=\"background-color: ${subtag.color}; color: #333;\">${subtag.name}</option>\n                  `\n              )}\n            </select>\n            `\n            : \"\"\n        }\n        \n      </li>\n    `;\n  }\n\n  addTag(e) {\n    const tagId = Number(e.target.value);\n    const tagData = this.allTags.find((tag) => tag.id === tagId);\n    if (!tagData) return;\n\n    this.issueTags.push({ ...tagData });\n    this._redrawTagBadges();\n\n    e.preventDefault();\n  }\n\n  removeTag(e) {\n    const tagId = Number(e.target.closest(\".issue-tag\").dataset.id);\n    const tagData = this.allTags.find((tag) => tag.id === tagId);\n    if (!tagData) return;\n\n    this.issueTags = this.issueTags.filter((tag) => {\n      const isSubtag = this.issueTags.some(\n        (parentTag) =>\n          parentTag.id === tag.parent_tag_id && parentTag.id === tagId\n      );\n      return tag.id !== tagId && !isSubtag;\n    });\n    this._redrawTagBadges();\n\n    e.preventDefault();\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"link-choice\"\nexport default class extends Controller {\n  static targets = [\"previousRadio\", \"previousLink\", \"currentRadio\", \"currentLink\", \"enabledCheckbox\"];\n\n  connect() {\n    this.toggleLink();\n  }\n\n  toggleLink() {\n    if (this.hasPreviousLinkTarget) {\n      this.previousLinkTarget.disabled = !this.previousRadioTarget.checked;\n\n      this.enabledCheckboxTarget.disabled = this.previousRadioTarget.checked;\n      this.currentLinkTarget.disabled = this.previousRadioTarget.checked || !this.enabledCheckboxTarget.checked;\n    } else {\n      this.currentLinkTarget.disabled = !this.enabledCheckboxTarget.checked;\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"link\"\nexport default class extends Controller {\n\n  static values = { url: String }\n  connect() {\n  }\n\n  fetchTurboFrame(event) {\n    const response = fetch(this.urlValue, {\n      headers: { \"Accept\": \"text/vnd.turbo-stream.html\" },\n      credentials: \"same-origin\"\n    }).then (response => response.text())\n    .then(html => Turbo.renderStreamMessage(html));\n\n    event.preventDefault();\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"new-survey-question-form\"\nexport default class extends Controller {\n\n  static targets = [ \"submitButton\", \"questionTypeSelect\" ]\n\n  connect() {\n    // if questionTypeSelect changes to single_choice or multiple_choice, change submitButton text to \"Next\"\n    // otherwise, change submitButton text to \"Create\"\n\n    let originalActionUrl = this.element.action\n\n    this.questionTypeSelectTarget.addEventListener('change', (event) => {\n      console.log(event.target.value)\n      if (event.target.value == \"single_choice\" || event.target.value == \"multiple_choice\") {\n        this.submitButtonTarget.innerText = \"Next\"\n        this.submitButtonTarget.value = \"Next\"\n        this.element.action = this.data.get(\"next-action-url\")\n        this.element.method = \"get\"\n      } else {\n        this.submitButtonTarget.innerText = \"Create\"\n        this.submitButtonTarget.value = \"Create\"\n        this.element.action = originalActionUrl\n        this.element.method = \"post\"\n      }\n    })\n\n  }\n}\n", "// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\nimport { application } from \"./application\"\n\nimport AcquisitionSourceController from \"./acquisition_source_controller\"\napplication.register(\"acquisition-source\", AcquisitionSourceController)\n\nimport ArticlesNotificationsController from \"./articles_notifications_controller\"\napplication.register(\"articles-notifications\", ArticlesNotificationsController)\n\nimport AttributionController from \"./attribution_controller\"\napplication.register(\"attribution\", AttributionController)\n\nimport BackgroundJobController from \"./background_job_controller\"\napplication.register(\"background-job\", BackgroundJobController)\n\nimport BetaAlertController from \"./beta_alert_controller\"\napplication.register(\"beta-alert\", BetaAlertController)\n\nimport CharacterCounterController from \"./character_counter_controller\"\napplication.register(\"character-counter\", CharacterCounterController)\n\nimport ChartController from \"./chart_controller\"\napplication.register(\"chart\", ChartController)\n\nimport ChatController from \"./chat_controller\"\napplication.register(\"chat\", ChatController)\n\nimport ClarifyController from \"./clarify_controller\"\napplication.register(\"clarify\", ClarifyController)\n\nimport CommentFormController from \"./comment_form_controller\"\napplication.register(\"comment-form\", CommentFormController)\n\nimport DeleteConfirmController from \"./delete_confirm_controller\"\napplication.register(\"delete-confirm\", DeleteConfirmController)\n\nimport DescriptionCheckTypeController from \"./description_check_type_controller\"\napplication.register(\"description-check-type\", DescriptionCheckTypeController)\n\nimport DeviceFormController from \"./device_form_controller\"\napplication.register(\"device-form\", DeviceFormController)\n\nimport DynamicDropdownController from \"./dynamic_dropdown_controller\"\napplication.register(\"dynamic-dropdown\", DynamicDropdownController)\n\nimport FileSizeValidatorController from \"./file_size_validator_controller\"\napplication.register(\"file-size-validator\", FileSizeValidatorController)\n\nimport FilterComponentController from \"./filter_component_controller\"\napplication.register(\"filter-component\", FilterComponentController)\n\nimport FlatpickrController from \"./flatpickr_controller\"\napplication.register(\"flatpickr\", FlatpickrController)\n\nimport FormChangeController from \"./form_change_controller\"\napplication.register(\"form-change\", FormChangeController)\n\nimport FormController from \"./form_controller\"\napplication.register(\"form\", FormController)\n\nimport FormFileGroupController from \"./form_file_group_controller\"\napplication.register(\"form-file-group\", FormFileGroupController)\n\nimport HelloController from \"./hello_controller\"\napplication.register(\"hello\", HelloController)\n\nimport HighlightController from \"./highlight_controller\"\napplication.register(\"highlight\", HighlightController)\n\nimport IntegrationMappingFormController from \"./integration_mapping_form_controller\"\napplication.register(\"integration-mapping-form\", IntegrationMappingFormController)\n\nimport IpcController from \"./ipc_controller\"\napplication.register(\"ipc\", IpcController)\n\nimport IssueFormController from \"./issue_form_controller\"\napplication.register(\"issue-form\", IssueFormController)\n\nimport IssueStrengthGaugeController from \"./issue_strength_gauge_controller\"\napplication.register(\"issue-strength-gauge\", IssueStrengthGaugeController)\n\nimport IssueTableRowController from \"./issue_table_row_controller\"\napplication.register(\"issue-table-row\", IssueTableRowController)\n\nimport IssueTagsFormController from \"./issue_tags_form_controller\"\napplication.register(\"issue-tags-form\", IssueTagsFormController)\n\nimport LinkChoiceController from \"./link_choice_controller\"\napplication.register(\"link-choice\", LinkChoiceController)\n\nimport LinkController from \"./link_controller\"\napplication.register(\"link\", LinkController)\n\nimport NewSurveyQuestionFormController from \"./new_survey_question_form_controller\"\napplication.register(\"new-survey-question-form\", NewSurveyQuestionFormController)\n\nimport NotificationsController from \"./notifications_controller\"\napplication.register(\"notifications\", NotificationsController)\n\nimport OverlayIssueFormController from \"./overlay_issue_form_controller\"\napplication.register(\"overlay-issue-form\", OverlayIssueFormController)\n\nimport ProjectsController from \"./projects_controller\"\napplication.register(\"projects\", ProjectsController)\n\nimport RadioTextFieldController from \"./radio_text_field_controller\"\napplication.register(\"radio-text-field\", RadioTextFieldController)\n\nimport ScreenshotController from \"./screenshot_controller\"\napplication.register(\"screenshot\", ScreenshotController)\n\nimport ScreenshotEditorController from \"./screenshot_editor_controller\"\napplication.register(\"screenshot-editor\", ScreenshotEditorController)\n\nimport SearchController from \"./search_controller\"\napplication.register(\"search\", SearchController)\n\nimport SentimentAnalysisChartsController from \"./sentiment_analysis_charts_controller\"\napplication.register(\"sentiment-analysis-charts\", SentimentAnalysisChartsController)\n\nimport SentimentsController from \"./sentiments_controller\"\napplication.register(\"sentiments\", SentimentsController)\n\nimport SourceTypeController from \"./source_type_controller\"\napplication.register(\"source-type\", SourceTypeController)\n\nimport StepsToReproduceFormController from \"./steps_to_reproduce_form_controller\"\napplication.register(\"steps-to-reproduce-form\", StepsToReproduceFormController)\n\nimport ThemeController from \"./theme_controller\"\napplication.register(\"theme\", ThemeController)\n\nimport Tooltip2Controller from \"./tooltip2_controller\"\napplication.register(\"tooltip2\", Tooltip2Controller)\n\nimport TooltipController from \"./tooltip_controller\"\napplication.register(\"tooltip\", TooltipController)\n\nimport UploadController from \"./upload_controller\"\napplication.register(\"upload\", UploadController)\n\nimport VideoController from \"./video_controller\"\napplication.register(\"video\", VideoController)\n\nimport VoterController from \"./voter_controller\"\napplication.register(\"voter\", VoterController)\n\nimport WatchController from \"./watch_controller\"\napplication.register(\"watch\", WatchController)\n\nimport WebhookTestController from \"./webhook_test_controller\"\napplication.register(\"webhook-test\", WebhookTestController)\n\nimport SupportKnowledgeController from \"./support_knowledge_controller\"\napplication.register(\"support-knowledge\", SupportKnowledgeController)\n\nimport GibberishDetectionController from \"./gibberish_detection_controller\"\napplication.register(\"gibberish-detection\", GibberishDetectionController)\n\nimport SidebarCollapsibleController from \"./sidebar_collapsible_controller\"\napplication.register(\"sidebar-collapsible\", SidebarCollapsibleController)\n", "import { Controller } from \"@hotwired/stimulus\"\nimport IssueFormController from \"./issue_form_controller\"\n\n// Connects to data-controller=\"overlay-issue-form\"\nexport default class extends IssueFormController {\n  static targets = [\n    \"description\",\n    \"stepsToReproduce\",\n    \"stepsToReproduceLabel\",\n    \"modalMessage\",\n    \"warningModal\",\n    \"errorModal\",\n    \"attachScreenshotCheckbox\",\n    \"errorMessageContainer\",\n    \"errorMessage\",\n    \"errorMessageCloseButton\",\n    \"loadingScreenOverlay\",\n    \"loadingScreenOverlayMessage\",\n  ];\n\n  weights = {\n    description: 0.6,\n    stepsToReproduce: 0.4,\n  };\n\n  connect() {\n    // log this dom element\n    let form = this.element;\n    form.addEventListener(\"submit\", this.submitClicked.bind(this));\n\n    this.element.addEventListener('screenshotAnnotationDataReceived', this.handleScreenshotAnnotationData.bind(this));\n    this.errorMessageCloseButtonTarget.addEventListener('click', (event) => {\n      event.preventDefault();\n      this.errorMessageContainerTarget.classList.add('d-none');\n    });\n    document.addEventListener('submitAnyway', this.submitAnyway.bind(this));\n  }\n\n  disconnect() {\n    this.element.removeEventListener('screenshotAnnotationDataReceived', this.handleScreenshotAnnotationData.bind(this));\n    document.removeEventListener('submitAnyway', this.submitAnyway.bind(this));\n  }\n\n  getStepsToReproduce() {\n    return this.stepsToReproduceTargets\n        .map((step) => step.value)\n        .filter((step) => step !== \"\");\n  }\n\n  getDescriptionLength() {\n    return this.descriptionTarget.value.length;\n  }\n\n  checkDescription() {\n    const descriptionLength = this.getDescriptionLength();\n\n    if (descriptionLength == 0) {\n      return { error: \"Uh-oh! <b>It seems like you've left the description field empty</b>. Mind jotting down a few words to tell us about the issue?\" };\n    } else if (descriptionLength < 40) {\n      return { error: \"Whoops! <b>Your description is a bit on the brief side</b>. Could you expand it a bit more? More details can help us understand the issue better.\" };\n    } else if (descriptionLength < 100) {\n      return { warning: \"Hey there! While your description is clear, <b>adding a few more details could make it even better</b>. However, if you think you've covered everything important, feel free to ignore this message.\" };\n    }\n    return null;\n  }\n\n  checkSteps() {\n    const steps = this.getStepsToReproduce();\n\n    if (steps.length == 0) {\n      return { error: \"Uh-oh! <b>It looks like you've forgotten to provide steps to reproduce the issue.</b> Would you mind adding them in? This will help us diagnose the problem much quicker.\" };\n    } else if (steps.length < 3) {\n      return { warning: \"Hey! <b>We noticed that your steps to reproduce the issue are quite concise.</b> If there are any additional details that you think could be useful, do add them in. But if you believe everything's covered, feel free to proceed.\" };\n    }\n    return null;\n  }\n\n  submitClicked(event) {\n    event.preventDefault();\n\n    console.log(\"Submit clicked\")\n\n    const descriptionFeedback = this.checkDescription();\n    const stepsFeedback = this.checkSteps();\n\n    if (descriptionFeedback?.error || stepsFeedback?.error) {\n      if (descriptionFeedback?.error) {\n        return this.showDescriptionErrorPopover(descriptionFeedback.error);\n      }\n      if (stepsFeedback?.error) {\n        return this.showStepsErrorPopover(stepsFeedback.error);\n      }\n      return;\n    }\n\n    if (descriptionFeedback?.warning || stepsFeedback?.warning) {\n      if (descriptionFeedback?.warning) {\n        return this.showDescriptionWarningPopover(descriptionFeedback.warning);\n      }\n      if (stepsFeedback?.warning) {\n        return this.showStepsWarningPopover(stepsFeedback.warning);\n      }\n      return;\n    }\n\n    this.submitForm();\n  }\n\n  createPopover(target, content) {\n    // target.setAttribute(\"data-bs-content\", content);\n\n    const defaultAllowList = bootstrap.Popover.Default.allowList; // Get Bootstrap's default allow list\n    // Add `button` element and `class` attribute to the allow list\n    const myAllowList = {\n      ...defaultAllowList,\n      button: ['class'],\n    };\n\n    const popover = new bootstrap.Popover(target, {\n      trigger: 'manual',\n      placement: 'left',\n      html: true,\n      content: content,\n      sanitize: false,\n    });\n\n    const hidePopover = function() {\n      popover.hide();\n    }\n\n    setTimeout(() => {\n      document.addEventListener('click', function(event) {\n        const popoverNode = document.querySelector('.popover'); // the currently shown popover\n        if (popoverNode && !popoverNode.contains(event.target) && !target.contains(event.target)) {\n          hidePopover();\n        }\n      });\n\n      document.addEventListener('keydown', hidePopover);\n    }, 0);\n\n    popover.show();\n\n    // Return a function to remove event listeners when they are not needed anymore\n    return function removeEventListeners() {\n      document.removeEventListener('click', hidePopover);\n      document.removeEventListener('keydown', hidePopover);\n    }\n  }\n\n  showErrorPopover(target, message) {\n    this.createPopover(target, message);\n  }\n\n  showWarningPopover(target, message) {\n    let event = new CustomEvent(\"submitAnyway\", {\n      detail: {},\n      bubbles: true,\n      cancelable: true\n    });\n\n    this.createPopover(target, message + '<div class=\"text-end mt-3\"><button id=\"submitAnywayButton\" class=\"btn btn-warning btn-sm\">Submit Anyway</button></div>');\n    document.getElementById(\"submitAnywayButton\").addEventListener(\"click\", function() {\n        // Dispatch the event when the button is clicked\n        document.dispatchEvent(event);\n\n        // close the popover\n        bootstrap.Popover.getInstance(target).hide();\n    });\n\n  }\n\n  // Then use these in your existing methods:\n\n  showDescriptionErrorPopover(message) {\n    this.showErrorPopover(this.descriptionTarget, message);\n  }\n\n  showStepsErrorPopover(message) {\n    this.showErrorPopover(this.stepsToReproduceLabelTarget, message);\n  }\n\n  showDescriptionWarningPopover(message) {\n    this.showWarningPopover(this.descriptionTarget, message);\n  }\n\n  showStepsWarningPopover(message) {\n    this.showWarningPopover(this.stepsToReproduceLabelTarget, message);\n  }\n\n  submitAnyway() {\n    this.submitForm();\n  }\n\n  submitForm() {\n    this.showLoadingScreen();\n\n    const screenshotEditorElement = this.element.querySelector('[data-controller=\"screenshot-editor\"]');\n    const customEvent = new CustomEvent('getAnnotationData', {\n      bubbles: true, // so the event can bubble up\n      detail: {}     // data you might want to send, if any\n    });\n    screenshotEditorElement.dispatchEvent(customEvent);\n  }\n\n  showLoadingScreen() {\n    const bugSubmissionMessages = [\n      \"Hang tight! We're dispatching our best bug detectives.\",\n      \"Hold on, the bug exterminators are on their way!\",\n      \"Brewing some magic potions to fix those bugs.\",\n      \"Summoning the code wizards to tackle this bug.\",\n      \"Stay calm! Our digital elves are working on it.\"\n    ];\n\n    const randomMessage = bugSubmissionMessages[Math.floor(Math.random() * bugSubmissionMessages.length)];\n    this.loadingScreenOverlayMessageTarget.innerHTML = randomMessage;\n\n    this.loadingScreenOverlayTarget.classList.remove('d-none');\n\n    // add a timeout to hide the loading screen after 30 seconds\n    this.loadingScreenTimeout = setTimeout(() => {\n      this.hideLoadingScreen();\n      this.showErrorMessage(\"Uh-oh! Looks like something went wrong. Please try again later.\");\n    }, 30000);\n  }\n\n  hideLoadingScreen() {\n    this.loadingScreenOverlayTarget.classList.add('d-none');\n\n    // cancel timeout\n    clearTimeout(this.loadingScreenTimeout);\n  }\n\n  handleScreenshotAnnotationData(event) {\n    console.log(\"received screenshot annotation data\");\n    console.log(event)\n\n    let formData = new FormData(this.element);\n    if (this.attachScreenshotCheckboxTarget.checked) {\n      formData.append(\"screenshot[layer_a]\", event.detail.annotationData);\n    }\n\n    let csrfToken = document.querySelector(\"meta[name=csrf-token]\");\n    let headers = {\n        \"Accept\": \"application/json\",\n        \"X-Requested-With\": \"XMLHttpRequest\"\n    };\n\n    if (csrfToken) {\n        headers[\"X-CSRF-Token\"] = csrfToken;\n    }\n\n    fetch(this.element.action, {\n        method: this.element.method,\n        headers: headers,\n        body: formData\n    })\n    .then(response => response.json())\n    .then((data) => {\n      console.log(\"got data\")\n      console.log(data)\n      if (!data.error) {\n        const closeOverlayEvent = new CustomEvent('closeOverlay', {\n          bubbles: true,\n          detail: {}\n        });\n        // this.element.dispatchEvent(closeOverlayEvent);\n        console.log(\"IPC: Bug submitted\")\n        // call only if ipc is available\n        if (typeof ipc !== 'undefined') {\n          ipc.onBugReportSent()\n        }\n\n        // hide loading screen\n        this.hideLoadingScreen();\n\n        // display thankYouModal\n        // bootstrap.Modal.getOrCreateInstance(document.getElementById('submit-modal')).hide();\n        bootstrap.Modal.getOrCreateInstance(document.getElementById('thankYouModal')).show();\n\n        // on close, close overlay\n        document.getElementById('thankYouModal').addEventListener('hidden.bs.modal', function (event) {\n          console.log(\"Thank you modal closed\")\n          console.log(\"IPC: Closing overlay\")\n          // call only if ipc is available\n          if (typeof ipc !== 'undefined') {\n            ipc.closeOverlay()\n          }\n        });\n      } else {\n        this.hideLoadingScreen();\n          this.showErrorMessage(data.error);\n      }\n    })\n    .catch((error) => {\n      console.error('Error:', error);\n      this.showErrorMessage(error);\n    });\n  }\n\n  showErrorMessage(message) {\n    this.errorMessageContainerTarget.classList.remove('d-none');\n    this.errorMessageTarget.innerHTML = message;\n  }\n}\n", "import {Controller} from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n    connect() {\n        console.log(\"Projects controller connected\")\n    }\n\n    delete(event) {\n        let confirmed = confirm(\"Are you sure you want to delete this project?\")\n\n        if (!confirmed) {\n            event.preventDefault()\n        }\n    }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n    static targets = [ \"radio\", \"textField\" ]\n\n    copyValue() {\n        this.radioTarget.value = this.textFieldTarget.value\n    }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"screenshot\"\nexport default class extends Controller {\n  static targets = [ \"layerA\" ]\n\n  connect() {\n    // TODO: how to make it better?\n    var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"tooltip\"]'))\n    var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {\n      return new bootstrap.Tooltip(tooltipTriggerEl)\n    })\n  }\n\n\n  toggleLayerA(event) {\n    this.layerATarget.classList.toggle(\"hidden\")\n    event.preventDefault()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"drawing-tool\"\nexport default class extends Controller {\n  static targets = [\"canvas\", \"toolbar\", \"colorInput\", \"description\"]\n\n  static values = { patchPath: String, reloadPath: String, layerAUrl: String, backgroundImageUrl: String }\n\n  connect() {\n    this.ctx = this.canvasTarget.getContext('2d');\n    this.setupCanvas();\n    this.drawing = false;\n    this.currentTool = 'pencil';\n    this.currentColor = '#ff0000';\n    this.lineWidth = 5;\n    this.eraserWidth = 20;\n    this.changesSaved = true;\n\n    this.colorInputTarget.value = this.currentColor;\n\n    // ask the user if they want to leave the page if they have unsaved changes\n    this.boundBeforeUnload = this.beforeUnload.bind(this);\n    document.addEventListener(\"turbo:before-visit\", this.boundBeforeUnload)\n\n    this.element.addEventListener('getAnnotationData', this.handleGetAnnotationData.bind(this));\n  }\n\n  disconnect() {\n    this.element.removeEventListener('getAnnotationData', this.handleGetAnnotationData.bind(this));\n    document.removeEventListener(\"turbo:before-visit\", this.boundBeforeUnload)\n  }\n\n  beforeUnload(event) {\n    if (!this.changesSaved) {\n      if (!confirm(\"You have unsaved changes. Are you sure you want to leave?\")) {\n        event.preventDefault();\n      }\n    }\n  }\n\n  setupCanvas() {\n    const image = new Image();\n    image.onload = () => {\n      this.canvasTarget.width = image.width;\n      this.canvasTarget.height = image.height;\n\n      requestAnimationFrame(() => {\n        if (this.layerAUrlValue) {\n          this.load(this.layerAUrlValue);\n        }\n      });\n\n    };\n    image.src = this.backgroundImageUrlValue;\n  }\n\n  startDrawing(event) {\n    this.drawing = true;\n    this.draw(event);\n  }\n\n  stopDrawing() {\n    this.drawing = false;\n    this.ctx.beginPath();\n  }\n\n  draw(event) {\n    if (!this.drawing) return;\n    this.ctx.lineWidth = this.currentTool === 'eraser' ? this.eraserWidth : this.lineWidth;\n    this.ctx.lineCap = 'round';\n\n    if (this.currentTool === 'eraser') {\n      this.ctx.globalCompositeOperation = 'destination-out';\n    } else {\n      this.ctx.globalCompositeOperation = 'source-over';\n      this.ctx.strokeStyle = this.currentColor;\n    }\n\n    let rect = this.canvasTarget.getBoundingClientRect();\n\n    // Calculate scale factors for X and Y\n    let scaleX = this.canvasTarget.width / rect.width;\n    let scaleY = this.canvasTarget.height / rect.height;\n\n    // Adjust mouse coordinates based on scale factor\n    let x = (event.clientX - rect.left) * scaleX;\n    let y = (event.clientY - rect.top) * scaleY;\n\n    // return if x or y is outside of the canvas\n    if (x < 0 || x > this.canvasTarget.width || y < 0 || y > this.canvasTarget.height) return;\n\n    this.ctx.lineTo(x, y);\n    this.ctx.stroke();\n    this.ctx.beginPath();\n    this.ctx.moveTo(x, y);\n\n    this.changesSaved = false;\n  }\n\n  changeTool(event) {\n    this.currentTool = event.target.value;\n\n    // Remove 'active' class from all buttons\n    this.toolbarTarget.querySelectorAll('button').forEach(button => {\n      button.classList.remove('active');\n    });\n\n    // Add 'active' class to the selected button\n    event.target.classList.add('active');\n  }\n\n\n  changeColor(event) {\n    this.currentColor = event.target.value;\n  }\n\n  async save() {\n    const imageBlob = await new Promise(resolve => this.canvasTarget.toBlob(resolve, 'image/png'));\n    let formData = new FormData()\n    formData.append(\"screenshot[layer_a]\", imageBlob)\n\n    // check if description target exists\n    if (this.hasDescriptionTarget) {\n      formData.append(\"screenshot[description]\", this.descriptionTarget.value)\n    }\n\n    let xhr = new XMLHttpRequest()\n    const url = this.patchPathValue.split('?')\n    xhr.open(\"PATCH\", `${url[0]}.json?${url[1]}`, true)\n    xhr.onload = xhr.onerror = () => {\n      if (xhr.status === 200) {\n        console.log(\"success\")\n        this.changeSaved = true\n\n        // reload the page\n        window.location.href = this.reloadPathValue\n      } else {\n        console.log(\"error\")\n      }\n    }\n    xhr.send(formData)\n  }\n\n  async load(url) {\n    const image = new Image();\n    image.onload = () => this.ctx.drawImage(image, 0, 0);\n    image.src = url;\n  }\n\n  async handleGetAnnotationData(event) {\n    const imageBlob = await new Promise(resolve => this.canvasTarget.toBlob(resolve, 'image/png'));\n    this.passDataToIssueForm(imageBlob);\n  }\n\n  passDataToIssueForm(canvasData) {\n      const customEvent = new CustomEvent('screenshotAnnotationDataReceived', {\n          bubbles: true,\n          detail: { annotationData: canvasData }\n      });\n      this.element.dispatchEvent(customEvent);\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"search\"\nexport default class extends Controller {\n  static values = {\n    endpoint: String,\n    skipIds: Array\n  }\n\n  static targets = [\n    \"searchResults\",\n    \"issueIdField\",\n    \"submit\"\n  ]\n\n  connect() {\n    this.formAction = this.element.action;\n\n    // if search results are visible, hide them on any click outside the search box\n    document.addEventListener('click', (event) => {\n      if (!event.target.closest('.search-results') && !event.target.closest('.search')) {\n        this.hideSearchResults();\n      }\n    });\n\n    // Handle arrow keys to navigate search results\n    this.currentFocusIndex = -1;\n    document.addEventListener('keydown', (event) => this.handleKeydown(event));\n  }\n\n  handleKeydown(event) {\n    const resultDivs = Array.from(event.currentTarget.querySelectorAll('.search-results .list-group-item'));\n    if (resultDivs.length === 0) return;\n    \n    const searchInput = event.currentTarget.querySelector('[name=\"search_input\"]');\n\n    switch (event.key) {\n      case 'ArrowUp':\n        this.currentFocusIndex = this.currentFocusIndex === -1 ? resultDivs.length - 1 : (this.currentFocusIndex - 1 + resultDivs.length) % resultDivs.length;\n        break;\n      case 'ArrowDown':\n        this.currentFocusIndex = this.currentFocusIndex === -1 ? 0 : (this.currentFocusIndex + 1) % resultDivs.length;\n        break;\n      case 'Enter':\n        if (this.currentFocusIndex !== -1) {\n          resultDivs[this.currentFocusIndex].click();\n        }\n        return;\n      default:\n        this.currentFocusIndex = -1;\n        searchInput.focus();\n        return;\n    }\n\n    event.preventDefault();\n    if (this.currentFocusIndex !== -1) {\n      resultDivs[this.currentFocusIndex].focus();\n    }\n  }\n\n  submit(event) {\n    event.preventDefault();\n    const searchInputValue = event.currentTarget.querySelector('[name=\"search_input\"]').value;\n    const query = searchInputValue.trim();\n\n    if (query.startsWith('#') && !isNaN(query.substring(1))) {\n      window.location.href = `${this.endpointValue}?scoped_id=${encodeURIComponent(query.substring(1))}`;\n    } else if (!isNaN(query) && query.length > 0) {\n      window.location.href = `${this.endpointValue}?scoped_id=${encodeURIComponent(query)}`;\n    } else if (query.length >= 3) {\n      window.location.href = `${this.endpointValue}?query=${encodeURIComponent(query)}`;\n    }\n  }\n\n  areSearchResultsVisible() {\n    document.querySelectorAll('.search-results').forEach((element) => {\n      return element.style.display !== 'none';\n    });\n\n    return false\n  }\n\n  hideSearchResults() {\n    document.querySelectorAll('.search-results').forEach((element) => {\n      element.style.display = 'none';\n    });\n  }\n\n  updateFrame(event) {\n    clearTimeout(this.timeout);\n    this.timeout = setTimeout(() => {\n      const query = event.target.value.trim();\n      const url = `${this.endpointValue}?skip_ids=${this.skipIdsValue.join(',')}&partial=true`\n\n      if (query.startsWith('#') && !isNaN(query.substring(1))) {\n        this.searchResultsTarget.src = `${url}&scoped_id=${encodeURIComponent(query.substring(1))}`;\n      } else if (!isNaN(query) && query.length > 0) {\n        this.searchResultsTarget.src = `${url}&scoped_id=${encodeURIComponent(query)}`;\n      } else if (query.length >= 3) {\n        this.searchResultsTarget.src = `${url}&query=${encodeURIComponent(query)}`;\n      } else {\n        this.hideSearchResults()\n      }\n    }, 200); // Delay to prevent too frequent requests\n  }\n\n  selectIssue(event) {\n    const issueElement = event.target.closest('[data-issue-id]');\n\n    if (issueElement) {\n      // Read data-issue-id from the parent element\n      const issueId = issueElement.dataset.issueId;\n      this.issueIdFieldTarget.value = issueId;\n    } else {\n      console.error('Issue element not found');\n    }\n\n    if (this.formAction.includes('_issue_id_')) {\n      this.element.action = this.formAction.replace('_issue_id_', this.issueIdFieldTarget.value);\n    }\n\n    // this controller is connected to the form\n    this.element.submit();\n  }\n}\n\nwindow.selectIssue = function (issueId) {\n  document.getElementById('issue_id').value = issueId;\n  document.getElementById('issue_search_form').submit();\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"sentiment-analysis-charts\"\nexport default class extends Controller {\n\n  static targets = [ \"trendChart\", \"pieChart\", \"stackedChart\" ]\n\n  connect() {\n    this.initializeCharts();\n\n    document.addEventListener('turbo:load', () => {\n      this.initializeCharts();\n    });\n\n    document.addEventListener('turbo:frame-load', () => {\n      this.initializeCharts();\n    });\n  }\n\n  initializeCharts() {\n    this.trendChartTargets.forEach(el => {\n      this.initTrendChart(el);\n    });\n\n    this.stackedChartTargets.forEach(el => {\n      this.initStackedBarChart(el);\n    });\n\n    this.initPieChart();\n  }\n\n  initTrendChart(el) {\n    el.innerHTML = '';\n    const innerDiv = document.createElement('div');\n    innerDiv.setAttribute('style', `min-height: ${el.dataset.height}px;`);\n    el.appendChild(innerDiv);\n\n    let chart = echarts.init(innerDiv);\n\n    if (chart) {\n      let dates = JSON.parse(el.dataset.dates);\n      let values = JSON.parse(el.dataset.values);\n      let valueLabel = el.dataset.valuelabel;\n      let lineColor = el.dataset.linecolor;\n      let max = el.dataset.max;\n\n      let getDefaultOptions = function () {\n        return {\n          tooltip: {\n            trigger: 'axis',\n            padding: [7, 10],\n            backgroundColor: utils.getGrays()['100'],\n            borderColor: utils.getGrays()['300'],\n            textStyle: {color: utils.getGrays()['1100']},\n            borderWidth: 1,\n            transitionDuration: 0,\n            formatter: function (params) {\n              return params[0].axisValueLabel + '<br/>' +\n                valueLabel + ': ' + params[0].data.toFixed(1);\n            }\n          },\n          xAxis: {\n            type: 'category',\n            data: dates,\n            boundaryGap: false,\n            axisLine: {\n              lineStyle: {\n                color: utils.rgbaColor('#000', 0.01),\n                type: 'dashed'\n              }\n            },\n            axisLabel: {\n              color: utils.getColor('gray-400'),\n              formatter: function (value) {\n                return new Date(value).toLocaleDateString('en-US', {month: 'short', day: 'numeric'});\n              },\n              margin: 15\n            }\n          },\n          yAxis: {\n            type: 'value',\n            min: 0,\n            max: max,\n            splitLine: {\n              lineStyle: {\n                color: utils.getColor('gray-300'),\n                type: 'dashed'\n              }\n            },\n            axisLabel: {\n              show: true,\n              color: utils.getColor('gray-400'),\n              margin: 15,\n              formatter: function (value) {\n                return value.toFixed(0);\n              }\n            }\n          },\n          series: [{\n            type: 'line',\n            data: values,\n            smooth: true,\n            lineStyle: {color: utils.getColor(lineColor)},\n            itemStyle: {\n              borderColor: utils.getColor(lineColor),\n              borderWidth: 2\n            },\n            symbol: 'circle',\n            symbolSize: 10,\n            hoverAnimation: true,\n            areaStyle: {\n              color: {\n                type: 'linear',\n                x: 0,\n                y: 0,\n                x2: 0,\n                y2: 1,\n                colorStops: [{\n                  offset: 0,\n                  color: utils.rgbaColor(utils.getColor('primary'), 0.2)\n                }, {\n                  offset: 1,\n                  color: utils.rgbaColor(utils.getColor('primary'), 0)\n                }]\n              }\n            }\n          }],\n          grid: {\n            right: '3%',\n            left: '6%',\n            bottom: '10%',\n            top: '5%'\n          }\n        };\n      };\n\n      echartSetOption(chart, {}, getDefaultOptions);\n\n      // Resize chart on window resize\n      window.addEventListener('resize', function () {\n        chart.resize();\n      });\n    }\n  }\n\n  initStackedBarChart(el) {\n    el.innerHTML = '';\n\n    const innerDiv = document.createElement('div');\n    innerDiv.setAttribute('style', 'min-height: 400px;');\n    el.appendChild(innerDiv);\n\n    const chart = echarts.init(innerDiv);\n\n    if (chart) {\n      const dates = JSON.parse(el.dataset.dates);\n      const positive = JSON.parse(el.dataset.positive);\n      const negative = JSON.parse(el.dataset.negative);\n      const neutral = JSON.parse(el.dataset.neutral);\n      const toxic = JSON.parse(el.dataset.toxic);\n      const excited = JSON.parse(el.dataset.excited);\n      const frustrated = JSON.parse(el.dataset.frustrated);\n      const max = el.dataset.max ? parseFloat(el.dataset.max) : null;\n\n      const sentiments = [positive, negative, neutral, toxic, excited, frustrated];\n      const totalData = dates.map((_, i) => sentiments.reduce((sum, arr) => sum + arr[i], 0));\n\n      const normalizedData = sentiments.map(arr => arr.map((val, i) => totalData[i] > 0 ? val / totalData[i] : 0));\n\n      const series = [\n        { name: 'Positive', data: normalizedData[0], color: utils.getColor('primary') },\n        { name: 'Negative', data: normalizedData[1], color: utils.getColor('danger') },\n        { name: 'Neutral', data: normalizedData[2], color: utils.getColor('secondary') },\n        { name: 'Toxic', data: normalizedData[3], color: utils.getColor('warning') },\n        { name: 'Excited', data: normalizedData[4], color: utils.getColor('success') },\n        { name: 'Frustrated', data: normalizedData[5], color: utils.getColor('info') }\n      ].map(({ name, data, color }) => ({\n        name,\n        type: 'bar',\n        stack: 'total',\n        label: { show: true, formatter: (params) =>\n            (params.value * 100).toFixed(1) + '%' },\n        data,\n        emphasis: {\n          focus: 'series',\n        },\n        itemStyle: { color }\n      }));\n\n      const categoryWidth = chart.getWidth() / dates.length;\n      const barPadding = categoryWidth * 0.2;\n\n      // Define the chart options\n      const getDefaultOptions = () => ({\n        tooltip: {\n          trigger: 'axis',\n          axisPointer: {\n            type: 'shadow', // Use shadow to highlight the bar\n          },\n          padding: [7, 10],\n          backgroundColor: utils.getGrays()['100'],\n          borderColor: utils.getGrays()['300'],\n          textStyle: { color: utils.getGrays()['1100'] },\n          borderWidth: 1,\n          transitionDuration: 0,\n          formatter: (params) => {\n            let tooltip = `${params[0].name}<br/>`;\n            params.forEach(param => {\n              tooltip += `${param.seriesName}: ${(param.value * 100).toFixed(1)}%<br/>`;\n            });\n            return tooltip;\n          },\n        },\n        legend: {\n          data: ['Positive', 'Negative', 'Neutral', 'Toxic', 'Excited', 'Frustrated'],\n          textStyle: {\n            color: utils.getGrays()['900'],\n          },\n        },\n        grid: {\n          left: '3%',\n          right: '4%',\n          bottom: '10%',\n          top: '10%',\n          containLabel: true,\n        },\n        yAxis: {\n          type: 'value',\n          max: max, // Set maximum if provided\n          splitLine: {\n            lineStyle: {\n              color: utils.getColor('gray-300'),\n              type: 'dashed'\n            }\n          },\n          axisLabel: {\n            color: utils.getColor('gray-400'),\n            margin: 15,\n            formatter: (value) =>\n              (value * 100).toFixed(0) + '%',\n          },\n        },\n        xAxis: {\n          type: 'category',\n          data: dates,\n          axisLine: {\n            lineStyle: {\n              color: utils.rgbaColor('#000', 0.01),\n              type: 'dashed',\n            },\n          },\n          axisLabel: {\n            color: utils.getColor('gray-400'),\n            margin: 15,\n            formatter: function (value) {\n              return new Date(value).toLocaleDateString('en-US', {month: 'short', day: 'numeric'});\n            },\n          },\n        },\n        series,\n      });\n\n      // Set the options to the chart\n      chart.setOption(getDefaultOptions());\n\n      // Apply additional configurations if needed\n      // e.g., echartSetOption(chart, {}, getDefaultOptions);\n\n      // Handle window resize to make the chart responsive\n      window.addEventListener('resize', () => {\n        chart.resize();\n      });\n    }\n  }\n\n\n  initPieChart() {\n    let el = this.pieChartTarget;\n    el.innerHTML = '';\n    const innerDiv = document.createElement('div');\n    innerDiv.setAttribute('style', 'min-height: 300px;');\n    el.appendChild(innerDiv);\n\n    let chart = echarts.init(innerDiv);\n\n    if (chart) {\n      let series = JSON.parse(this.pieChartTarget.dataset.series);\n\n      // change .color with .itemStyle\n      series.forEach(function (item) {\n        item.itemStyle = {\n          color: item.color\n        };\n      });\n\n      let options = {\n        tooltip: {\n          trigger: 'item'\n        },\n        series: [\n          {\n            name: 'Categories',\n            type: 'pie',\n            radius: '80%',\n            label: {\n              color: '#9da9bb'\n            },\n            data: series,\n            emphasis: {\n              itemStyle: {\n                shadowBlur: 10,\n                shadowOffsetX: 0,\n                shadowColor: 'rgba(0, 0, 0, 0.5)'\n              }\n            }\n          }\n        ]\n      };\n\n      chart.setOption(options);\n\n      // Add click event listener\n      chart.on('click', function (params) {\n        // console.log(params);\n\n        const ev = new CustomEvent(\"sentiment-category-click\", { detail: { id: params.data.id } });\n        document.body.dispatchEvent(ev);\n      });\n\n      // Resize chart on window resize\n      window.addEventListener('resize', function () {\n        chart.resize();\n      });\n    }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"sentiments\"\nexport default class extends Controller {\n\n  static targets = [ \"form\", \"dateField\", \"channelsField\", \"wordField\", \"categoryField\", \"wordColor\"]\n  connect() {\n    // for all fields, submit the closes form on change\n    this.dateFieldTarget.addEventListener(\"change\", () => this.onDateChange())\n    this.channelsFieldTarget.addEventListener(\"change\", () => this.submitForm())\n    this.wordFieldTarget.addEventListener(\"change\", () => this.submitForm())\n\n    this.updateButtonColors()\n\n    // listen for turbo:frame-load\n    document.addEventListener(\"turbo:frame-render\", () => {\n      this.updateButtonColors()\n    })\n\n    this.boundHandleCategoryClick = this.handleCategoryClick.bind(this)\n    document.body.addEventListener(\"sentiment-category-click\", this.boundHandleCategoryClick)\n  }\n\n  disconnect() {\n    // disconnect events\n    document.body.removeEventListener(\"sentiment-category-click\", this.boundHandleCategoryClick)\n  }\n\n  onDateChange() {\n    // submit only if from-to date is selected\n    console.log(this.dateFieldTarget.value)\n    if (this.dateFieldTarget.value.includes(\" to \")) {\n      this.submitForm()\n    }\n  }\n\n  handleCategoryClick(event) {\n    this.categoryFieldTarget.value = event.detail.id\n    this.submitForm()\n  }\n\n  setButton(event) {\n    this.wordFieldTarget.value = event.target.dataset.word\n    this.submitForm()\n  }\n\n  clearWordFilter() {\n    this.wordFieldTarget.value = \"\"\n    this.submitForm()\n  }\n\n  clearCategoryFilter() {\n    this.categoryFieldTarget.value = \"\"\n    this.submitForm()\n  }\n\n  submitForm() {\n    this.formTarget.requestSubmit()\n  }\n\n  updateButtonColors() {\n    // for all button targets, find child .sentiment-color span, read data-score and set the color between\n    // falcon success for 5 and falcon danger for 0\n    this.wordColorTargets.forEach((span) => {\n      const score = span.dataset.score\n      const fiveColor = utils.hexToRgb(utils.getColor('success'));\n      const zeroColor = utils.hexToRgb(utils.getColor('danger'));\n\n      // mix the colors\n      const color = this.mixColors(fiveColor, zeroColor, score / 5.0)\n\n      // set text style\n      span.style.color = color\n    })\n  }\n\n  mixColors(color1, color2, weight) {\n    var p = weight;\n    var w = p * 2 - 1;\n    var w1 = (w/1+1) / 2;\n    var w2 = 1 - w1;\n    var rgb = [Math.round(color1[0] * w1 + color2[0] * w2),\n               Math.round(color1[1] * w1 + color2[1] * w2),\n               Math.round(color1[2] * w1 + color2[2] * w2)];\n    return 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')';\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"fileSection\", \"textSection\"]\n\n  connect() {\n    // Set initial state\n    this.toggle()\n  }\n\n  toggle() {\n    const sourceType = this.element.querySelector('input[name=\"source_type\"]:checked').value\n    \n    if (sourceType === \"file\") {\n      this.fileSectionTarget.style.display = \"block\"\n      this.textSectionTarget.style.display = \"none\"\n    } else {\n      this.fileSectionTarget.style.display = \"none\"\n      this.textSectionTarget.style.display = \"block\"\n    }\n  }\n} ", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  static targets = [\"container\", \"template\", \"promptLabel\"];\n\n  connect() {\n    this.setLastStepListener();\n\n    // Event delegation for dynamically added inputs\n    this.element.addEventListener('keydown', event => {\n\n      if (event.target.matches('[data-steps-to-reproduce-form-target=\"template\"] input') && event.key === 'Enter' || event.key === 'Tab') {\n        this.handleEnterKey(event);\n      }\n    });\n\n    const lastStep = this.templateTargets.slice(-1)[0];\n    const lastStepInput = lastStep.querySelector(\"input\");\n    if (lastStepInput.value !== \"\") {\n      this.addStep();\n    }\n\n    document.body.addEventListener(\"steps-add-step\", this.addStep.bind(this));\n\n    const event = new CustomEvent(\"steps-ready\");\n    document.body.dispatchEvent(event);\n  }\n\n  setLastStepListener() {\n    const lastStep = this.templateTargets.slice(-1)[0];\n    if (lastStep) {\n      lastStep.querySelector('.remove-button')?.remove(); // Remove the 'X' button from the last step\n      lastStep.addEventListener(\"input\", this.handleInput.bind(this));\n    }\n  }\n\n  handleInput(event) {\n    if (event.target.value !== \"\") {\n      const lastStep = this.templateTargets.slice(-1)[0];\n      const lastStepInput = lastStep.querySelector(\"input\");\n\n      if (event.target === lastStepInput) {\n        this.addStep();\n        this.setLastStepListener();\n      }\n\n      this.promptLabelTarget.classList.add(\"d-none\");\n    }\n  }\n\n  removeStep(event) {\n    event.target.closest('[data-steps-to-reproduce-form-target=\"container\"]').remove(); // remove the container\n    this.updateStepsLabel();\n  }\n\n  addStep() {\n    const stepNumber = this.templateTargets.length + 1;\n    const newContainer = this.containerTarget.cloneNode(true);\n    const newTemplate = newContainer.querySelector(\"[data-steps-to-reproduce-form-target='template']\");\n    const inputGroupText = newTemplate.querySelector(\".input-group-text\");\n    const textField = newTemplate.querySelector(\".form-control\");\n\n    // Add the 'X' button to all steps except the last one\n    if (stepNumber > 1) {\n      const removeButton = document.createElement('div');\n      removeButton.classList.add('input-group-append', 'remove-button');\n      removeButton.innerHTML = '<button class=\"btn btn-outline-secondary\" type=\"button\" tabindex=\"-1\"><i class=\"fas fa-times\" style=\"pointer-events: none;\"></i></button>';\n      removeButton.querySelector('button').addEventListener('click', this.removeStep.bind(this));\n      this.templateTargets.slice(-1)[0].appendChild(removeButton);\n    }\n\n    inputGroupText.textContent = `${stepNumber}.`;\n    textField.id = `step_${stepNumber}`;\n    textField.value = \"\";\n\n    this.element.appendChild(newContainer);\n    this.setLastStepListener();\n  }\n\n  updateStepsLabel() {\n    const templates = Array.from(this.templateTargets);\n    templates.forEach((template, index) => {\n      const inputGroupText = template.querySelector(\".input-group-text\");\n      inputGroupText.textContent = `${index + 1}.`;\n    });\n  }\n\n  setEnterKeyBehavior() {\n    this.templateTargets.forEach(template => {\n      const input = template.querySelector('input');\n      if (input) {\n        input.addEventListener('keydown', this.handleEnterKey.bind(this));\n      }\n    });\n  }\n\n  handleEnterKey(event) {\n    if (event.key === 'Enter') {\n\n      const nextInput = this.nextInput(event.target);\n      if (nextInput) {\n        nextInput.focus(); // Focus on the next step's input\n        event.preventDefault();\n      }\n    }\n  }\n\n  nextStep(el) {\n    let nextStep = el.closest('[data-steps-to-reproduce-form-target=\"container\"]');\n\n    do {\n      nextStep = nextStep.nextElementSibling;\n    } while (nextStep && !nextStep.matches('[data-steps-to-reproduce-form-target=\"container\"]'));\n\n    return nextStep;\n  }\n\n  nextInput(el) {\n    let nextStep = this.nextStep(el);\n    return nextStep?.querySelector('input');\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nconst THEME_LOCAL_STORAGE_KEY = \"playtesting-theme\"\n\n// Connects to data-controller=\"theme\"\nexport default class extends Controller {\n  static targets = [ \"checkbox\" ]\n\n  connect() {\n    const theme = this.getInfoFromLocalStorage()\n    this.checkboxTarget.checked = theme === \"dark\";\n    this.toggleTheme(theme)\n  }\n\n  getInfoFromLocalStorage() {\n    const theme = localStorage.getItem(THEME_LOCAL_STORAGE_KEY)\n    return (theme === undefined || theme === null) ? \"dark\" : theme\n  }\n\n  setInfoToLocalStorage(theme) {\n    localStorage.setItem(THEME_LOCAL_STORAGE_KEY, theme)\n  }\n\n  toggleTheme(theme) {\n    this.setInfoToLocalStorage(theme)\n    if (theme === \"dark\") {\n      document.documentElement.classList.add(\"dark\")\n    } else {\n      document.documentElement.classList.remove(\"dark\")\n    }\n  }\n\n  toggle(event) {\n    event.target.checked ? this.toggleTheme(\"dark\") : this.toggleTheme(\"light\")\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"tooltip2\"\nexport default class extends Controller {\n  static targets = [\"tooltip\"]\n\n  connect() {\n    this.timeout = null\n    this.tooltipTarget.addEventListener('mouseover', () => { this.positionTooltip(); this.startShowTimeout() })\n    this.tooltipTarget.addEventListener('mouseout', () => this.startHideTimeout())\n\n    // Initialize MutationObserver\n    this.observer = new MutationObserver(() => this.positionTooltip());\n    this.observer.observe(this.tooltipTarget, { attributes: true, childList: true, subtree: true });\n\n    // Listen for the 'hideTooltips' event\n    document.addEventListener('hideTooltips', () => this.hideTooltip());\n  }\n\n  disconnect() {\n    this.observer.disconnect();\n    document.removeEventListener('hideTooltips', () => this.hideTooltip());\n  }\n\n  mouseOver(event) {\n    if (!this.isVisible()) {\n      this.positionTooltip(event)\n      this.startShowTimeout()\n    }\n  }\n\n  mouseOut(event) {\n    this.startHideTimeout()\n  }\n\n  clearTimeout() {\n    clearTimeout(this.timeout)\n  }\n\n  startHideTimeout() {\n    this.clearTimeout()\n\n    this.timeout = setTimeout(() => {\n      this.hideTooltip()\n    }, 200) // Hide tooltip delayed\n  }\n\n  hideTooltip() {\n    this.tooltipTarget.style.display = 'none'\n  }\n\n  startShowTimeout() {\n    this.clearTimeout()\n\n    this.timeout = setTimeout(() => {\n      const hideEvent = new CustomEvent('hideTooltips');\n      document.dispatchEvent(hideEvent);\n\n      this.tooltipTarget.style.display = 'block'\n      this.positionTooltip()\n    }, 400) // Show tooltip after 0.5s\n  }\n\n  isVisible() {\n    return this.tooltipTarget.style.display !== 'none'\n  }\n\n  positionTooltip(event) {\n    let tooltip = this.tooltipTarget;\n    let x, y;\n\n    if (event) {\n      x = event.clientX;\n      y = event.clientY;\n      this.lastX = x;\n      this.lastY = y;\n    } else if (this.lastX && this.lastY) {\n      x = this.lastX;\n      y = this.lastY;\n    } else {\n      return; // If there's no event and no last position, we can't position the tooltip\n    }\n\n    let padding = 10; // Padding from cursor to tooltip\n\n    // Repositioning to avoid clipping\n    let screenW = window.innerWidth;\n    let screenH = window.innerHeight;\n    let tooltipWidth = tooltip.offsetWidth;\n    let tooltipHeight = tooltip.offsetHeight;\n\n    // Horizontal position\n    if (x + tooltipWidth/2 + padding > screenW) {\n      tooltip.style.left = (x - tooltipWidth - padding) + 'px';\n    } else if (x - tooltipWidth/2 - padding < 0) {\n      tooltip.style.left = padding + 'px';\n    } else {\n      tooltip.style.left = (x - tooltipWidth/2) + 'px';\n    }\n\n    // Vertical position\n    if (y + tooltipHeight + padding > screenH) {\n      tooltip.style.top = (y - tooltipHeight - padding) + 'px';\n    } else {\n      tooltip.style.top = (y + padding) + 'px';\n    }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"tooltip\"\nexport default class extends Controller {\n  connect() {\n    bootstrap.Tooltip.getInstance(this.element) || new bootstrap.Tooltip(this.element)\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"upload\"\nexport default class extends Controller {\n  static targets = ['dropzone', 'fileInput', 'previews', 'uploads'];\n  static values = { modelName: String, attributeName: String };\n  dropzone = null;\n\n  connect() {\n    const dropzoneElement = this.dropzoneTarget;\n    const fileInputElement = this.fileInputTarget;\n    const uploadsElement = this.uploadsTarget;\n    let formData = new FormData();\n    let dropzone = null;\n    let modelName = this.modelNameValue;\n    let attributeName = this.attributeNameValue;\n\n    dropzone = new Dropzone(this.dropzoneTarget, {\n      url: '#', // we do not want Dropzone to auto-upload files\n      autoProcessQueue: false,\n      addRemoveLinks: true,\n      clickable: true,\n      acceptedFiles: 'image/*', // or whatever file types you need\n      maxFilesize: 8, // in MB\n      previewsContainer: this.previewsTarget, // disable preview\n      init: function() {\n        this.on('dragenter', function() {\n          dropzoneElement.classList.add('dragover');\n        });\n\n        this.on('dragleave', function() {\n          dropzoneElement.classList.remove('dragover');\n        });\n\n        this.on('dragend', function() {\n          dropzoneElement.classList.remove('dragover');\n        });\n\n        this.on('addedfile', (file) => {\n          if (file.type.match(/image.*/)) {\n            // Create a DataTransfer object\n            let dataTransfer = new DataTransfer();\n\n            // Add the file to the DataTransfer object\n            dataTransfer.items.add(file);\n\n            // Create a hidden input for the file\n            const input = document.createElement('input');\n            input.type = 'file';\n            input.name = `${modelName}[${attributeName}][]`;\n            input.files = dataTransfer.files;\n            input.classList.add('d-none');\n\n            // Append the input to the uploads target\n            uploadsElement.appendChild(input);\n          }\n        });\n\n        this.on('removedfile', (file) => {\n          // Iterate over the inputs in the uploads container\n          for (const input of uploadsElement.children) {\n            // Check if the file attached to this input is the one that was removed\n            if (input.files[0].name === file.name) {\n              // Remove this input\n              uploadsElement.removeChild(input);\n              break;\n            }\n          }\n        });\n      },\n    });\n\n    this.dropzone = dropzone;\n  }\n\n  disconnect() {\n    if (this.dropzone) {\n      this.dropzone.destroy();\n      this.dropzone = null;\n    }\n  }\n\n  removeAttachment(event) {\n    event.preventDefault();\n\n    // Get the ID of the attachment to remove\n    const id = event.currentTarget.dataset.attachmentId;\n\n    // Create a hidden input to mark the attachment for removal\n    const input = document.createElement('input');\n    input.type = 'hidden';\n    input.name = `${this.modelNameValue}[remove_attachments][]`;\n    input.value = id;\n\n    // Append the input to the form\n    this.element.appendChild(input);\n\n    // Remove the preview element\n    event.currentTarget.parentNode.remove();\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"video\"\nexport default class extends Controller {\n  static values = {\n    id: Number,\n    projectId: Number,\n    issueId: String,\n    isProcessed: Boolean,\n    createdAt: String,\n    reloadInterval: Number\n  };\n\n  connect() {\n    if (!this.isProcessedValue) {\n      this.startReloading();\n    }\n  }\n\n  disconnect() {\n    this.stopReloading();\n  }\n\n  startReloading() {\n    this.updateReloadInterval();\n    this.timer = setInterval(() => {\n      this.reload();\n    }, this.reloadIntervalValue);\n  }\n\n  stopReloading() {\n    clearInterval(this.timer);\n  }\n\n  async reload() {\n    const response = await fetch(this.videoClipPartialURL(), {\n      method: \"GET\",\n      headers: {\n        \"Accept\": \"text/vnd.turbo-stream.html\"\n      }\n    });\n\n    if (response.ok) {\n      const responseBody = await response.text();\n      Turbo.renderStreamMessage(responseBody);\n\n      // wait for a frame\n      requestAnimationFrame(() => {\n        const players = document.getElementsByClassName(\"video-js\");\n        for (let player of players) {\n          // apply videojs scripts on player\n          videojs(player);\n        }\n      });\n    }\n  }\n\n  videoClipPartialURL() {\n    return `/projects/${this.projectIdValue}/issues/${this.issueIdValue}/video_clips/${this.idValue}/reload`;\n  }\n\n  updateReloadInterval() {\n    const elapsedTime = (new Date() - new Date(this.createdAtValue)) / 1000;\n\n    // this.reloadIntervalValue = 5000\n\n    if (elapsedTime <= 60) {\n      this.reloadIntervalValue = 5000;\n    } else if (elapsedTime <= 240) {\n      this.reloadIntervalValue = 10000;\n    } else if (elapsedTime <= 1800) {\n      this.reloadIntervalValue = 30000;\n    } else {\n      this.stopReloading();\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static values = { voted: Boolean, projectId: Number, featureRequestId: Number}\n  static targets = [\"count\"]\n\n  connect() {\n    this.updateVoteButton();\n  }\n\n  vote() {\n    event.preventDefault(); // Prevent default anchor behavior\n\n    const url = this.votedValue\n        ? `/projects/${this.projectIdValue}/feature_requests/${this.featureRequestIdValue}/unvote`\n        : `/projects/${this.projectIdValue}/feature_requests/${this.featureRequestIdValue}/vote`;\n\n    const method = this.votedValue ? \"DELETE\" : \"POST\";\n\n    fetch(url, {\n      method: method,\n      headers: {\n        'Accept': 'application/json',\n        'Content-Type': 'application/json',\n        'X-CSRF-Token': document.querySelector(\"[name='csrf-token']\").content // Ensure you have CSRF token for Rails\n      },\n      body: JSON.stringify({}) // No need to send body for these requests\n    }).then(response => response.json())\n        .then(data => {\n          this.votedValue = data.voted;\n          // set or remove voted class from countTarget\n          if (this.votedValue) {\n            this.countTarget.classList.add(\"voted\");\n          } else {\n            this.countTarget.classList.remove(\"voted\");\n          }\n\n          this.countTarget.textContent = data.votes;\n          this.updateVoteButton();\n        }).catch(error => console.error(\"Error:\", error));\n  }\n\n  updateVoteButton() {\n    const button = this.element.querySelector(\".vote-button\");\n    if (this.votedValue) {\n      button.classList.add(\"voted\");\n    } else {\n      button.classList.remove(\"voted\");\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  static values = {\n    watchableType: String,\n    watchableId: Number,\n    watching: Boolean\n  }\n\n  static targets = [\"button\"]\n\n  connect() {\n  }\n\n  async toggle() {\n    try {\n      if (this.watchingValue) {\n        await this.unwatch();\n      } else {\n        await this.watch();\n      }\n      this.watchingValue = !this.watchingValue; // Toggle state\n    } catch (error) {\n      console.error(\"Failed to toggle watch state:\", error);\n      alert(\"Something went wrong. Please try again.\");\n    }\n  }\n\n  async watch() {\n    const response = await fetch(\"/watched_items\", {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"X-CSRF-Token\": this.getCsrfToken()\n      },\n      body: JSON.stringify({\n        watchable_type: this.watchableTypeValue,\n        watchable_id: this.watchableIdValue\n      })\n    });\n\n    if (!response.ok) {\n      throw new Error(\"Failed to watch the entity.\");\n    }\n\n    this.reloadFrame();\n  }\n\n  reloadFrame() {\n    const turboFrame = document.getElementById(\"watchers\");\n    turboFrame.src = `/watchers?watchable_type=${this.watchableTypeValue}&watchable_id=${this.watchableIdValue}`;\n  }\n\n  async unwatch() {\n    const response = await fetch(\"/watched_items\", {\n      method: \"DELETE\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"X-CSRF-Token\": this.getCsrfToken()\n      },\n      body: JSON.stringify({\n        watchable_type: this.watchableTypeValue,\n        watchable_id: this.watchableIdValue\n      })\n    });\n\n    if (!response.ok) {\n      throw new Error(\"Failed to unwatch the entity.\");\n    }\n\n    this.reloadFrame();\n  }\n\n  getCsrfToken() {\n    return document.querySelector(\"meta[name='csrf-token']\").content;\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"form\", \"results\"]\n  static values = {\n    url: String\n  }\n\n  connect() {\n    // Optional: Log connection for debugging\n    console.log(\"Webhook test controller connected\")\n  }\n\n  async test(event) {\n    event.preventDefault()\n    \n    // Get the form data from the current edit form\n    const form = this.formTarget\n    \n    // Create a new FormData object from the form\n    const formData = new FormData(form)\n    // remove _method from the form data\n    formData.delete(\"_method\")\n\n    const response = await fetch(this.urlValue, {\n      method: \"POST\",\n      body: formData,\n      credentials: \"same-origin\",\n      headers: {\n        \"Accept\": \"text/vnd.turbo-stream.html, text/html\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n        \"X-CSRF-Token\": document.querySelector('meta[name=\"csrf-token\"]').getAttribute('content')\n      }\n    })\n    \n    if (response.ok) {\n      const turboStream = await response.text();\n      Turbo.renderStreamMessage(turboStream);\n\n      // wait a single frame, then scroll down to webhook-test-results\n      await new Promise(resolve => requestAnimationFrame(resolve));\n      document.getElementById('webhook-test-results').scrollIntoView({ behavior: 'smooth' });\n    }\n  }\n} ", "/**\n * marked v4.3.0 - a markdown parser\n * Copyright (c) 2011-2023, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction getDefaults() {\n  return {\n    async: false,\n    baseUrl: null,\n    breaks: false,\n    extensions: null,\n    gfm: true,\n    headerIds: true,\n    headerPrefix: '',\n    highlight: null,\n    hooks: null,\n    langPrefix: 'language-',\n    mangle: true,\n    pedantic: false,\n    renderer: null,\n    sanitize: false,\n    sanitizer: null,\n    silent: false,\n    smartypants: false,\n    tokenizer: null,\n    walkTokens: null,\n    xhtml: false\n  };\n}\n\nlet defaults = getDefaults();\n\nfunction changeDefaults(newDefaults) {\n  defaults = newDefaults;\n}\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = new RegExp(escapeTest.source, 'g');\nconst escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\nconst escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\nconst escapeReplacements = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;'\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n  if (encode) {\n    if (escapeTest.test(html)) {\n      return html.replace(escapeReplace, getEscapeReplacement);\n    }\n  } else {\n    if (escapeTestNoEncode.test(html)) {\n      return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n    }\n  }\n\n  return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\n/**\n * @param {string} html\n */\nfunction unescape(html) {\n  // explicitly match decimal, hex, and named HTML entities\n  return html.replace(unescapeTest, (_, n) => {\n    n = n.toLowerCase();\n    if (n === 'colon') return ':';\n    if (n.charAt(0) === '#') {\n      return n.charAt(1) === 'x'\n        ? String.fromCharCode(parseInt(n.substring(2), 16))\n        : String.fromCharCode(+n.substring(1));\n    }\n    return '';\n  });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\n\n/**\n * @param {string | RegExp} regex\n * @param {string} opt\n */\nfunction edit(regex, opt) {\n  regex = typeof regex === 'string' ? regex : regex.source;\n  opt = opt || '';\n  const obj = {\n    replace: (name, val) => {\n      val = val.source || val;\n      val = val.replace(caret, '$1');\n      regex = regex.replace(name, val);\n      return obj;\n    },\n    getRegex: () => {\n      return new RegExp(regex, opt);\n    }\n  };\n  return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\n\n/**\n * @param {boolean} sanitize\n * @param {string} base\n * @param {string} href\n */\nfunction cleanUrl(sanitize, base, href) {\n  if (sanitize) {\n    let prot;\n    try {\n      prot = decodeURIComponent(unescape(href))\n        .replace(nonWordAndColonTest, '')\n        .toLowerCase();\n    } catch (e) {\n      return null;\n    }\n    if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n      return null;\n    }\n  }\n  if (base && !originIndependentUrl.test(href)) {\n    href = resolveUrl(base, href);\n  }\n  try {\n    href = encodeURI(href).replace(/%25/g, '%');\n  } catch (e) {\n    return null;\n  }\n  return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\n/**\n * @param {string} base\n * @param {string} href\n */\nfunction resolveUrl(base, href) {\n  if (!baseUrls[' ' + base]) {\n    // we can ignore everything in base after the last slash of its path component,\n    // but we might need to add _that_\n    // https://tools.ietf.org/html/rfc3986#section-3\n    if (justDomain.test(base)) {\n      baseUrls[' ' + base] = base + '/';\n    } else {\n      baseUrls[' ' + base] = rtrim(base, '/', true);\n    }\n  }\n  base = baseUrls[' ' + base];\n  const relativeBase = base.indexOf(':') === -1;\n\n  if (href.substring(0, 2) === '//') {\n    if (relativeBase) {\n      return href;\n    }\n    return base.replace(protocol, '$1') + href;\n  } else if (href.charAt(0) === '/') {\n    if (relativeBase) {\n      return href;\n    }\n    return base.replace(domain, '$1') + href;\n  } else {\n    return base + href;\n  }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction splitCells(tableRow, count) {\n  // ensure that every cell-delimiting pipe has a space\n  // before it to distinguish it from an escaped pipe\n  const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n      let escaped = false,\n        curr = offset;\n      while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n      if (escaped) {\n        // odd number of slashes means | is escaped\n        // so we leave it alone\n        return '|';\n      } else {\n        // add space before unescaped |\n        return ' |';\n      }\n    }),\n    cells = row.split(/ \\|/);\n  let i = 0;\n\n  // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n  if (!cells[0].trim()) { cells.shift(); }\n  if (cells.length > 0 && !cells[cells.length - 1].trim()) { cells.pop(); }\n\n  if (cells.length > count) {\n    cells.splice(count);\n  } else {\n    while (cells.length < count) cells.push('');\n  }\n\n  for (; i < cells.length; i++) {\n    // leading or trailing whitespace is ignored per the gfm spec\n    cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n  }\n  return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param {string} str\n * @param {string} c\n * @param {boolean} invert Remove suffix of non-c chars instead. Default falsey.\n */\nfunction rtrim(str, c, invert) {\n  const l = str.length;\n  if (l === 0) {\n    return '';\n  }\n\n  // Length of suffix matching the invert condition.\n  let suffLen = 0;\n\n  // Step left until we fail to match the invert condition.\n  while (suffLen < l) {\n    const currChar = str.charAt(l - suffLen - 1);\n    if (currChar === c && !invert) {\n      suffLen++;\n    } else if (currChar !== c && invert) {\n      suffLen++;\n    } else {\n      break;\n    }\n  }\n\n  return str.slice(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n  if (str.indexOf(b[1]) === -1) {\n    return -1;\n  }\n  const l = str.length;\n  let level = 0,\n    i = 0;\n  for (; i < l; i++) {\n    if (str[i] === '\\\\') {\n      i++;\n    } else if (str[i] === b[0]) {\n      level++;\n    } else if (str[i] === b[1]) {\n      level--;\n      if (level < 0) {\n        return i;\n      }\n    }\n  }\n  return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n  if (opt && opt.sanitize && !opt.silent) {\n    console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n  }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\n/**\n * @param {string} pattern\n * @param {number} count\n */\nfunction repeatString(pattern, count) {\n  if (count < 1) {\n    return '';\n  }\n  let result = '';\n  while (count > 1) {\n    if (count & 1) {\n      result += pattern;\n    }\n    count >>= 1;\n    pattern += pattern;\n  }\n  return result + pattern;\n}\n\nfunction outputLink(cap, link, raw, lexer) {\n  const href = link.href;\n  const title = link.title ? escape(link.title) : null;\n  const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n  if (cap[0].charAt(0) !== '!') {\n    lexer.state.inLink = true;\n    const token = {\n      type: 'link',\n      raw,\n      href,\n      title,\n      text,\n      tokens: lexer.inlineTokens(text)\n    };\n    lexer.state.inLink = false;\n    return token;\n  }\n  return {\n    type: 'image',\n    raw,\n    href,\n    title,\n    text: escape(text)\n  };\n}\n\nfunction indentCodeCompensation(raw, text) {\n  const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n  if (matchIndentToCode === null) {\n    return text;\n  }\n\n  const indentToCode = matchIndentToCode[1];\n\n  return text\n    .split('\\n')\n    .map(node => {\n      const matchIndentInNode = node.match(/^\\s+/);\n      if (matchIndentInNode === null) {\n        return node;\n      }\n\n      const [indentInNode] = matchIndentInNode;\n\n      if (indentInNode.length >= indentToCode.length) {\n        return node.slice(indentToCode.length);\n      }\n\n      return node;\n    })\n    .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nclass Tokenizer {\n  constructor(options) {\n    this.options = options || defaults;\n  }\n\n  space(src) {\n    const cap = this.rules.block.newline.exec(src);\n    if (cap && cap[0].length > 0) {\n      return {\n        type: 'space',\n        raw: cap[0]\n      };\n    }\n  }\n\n  code(src) {\n    const cap = this.rules.block.code.exec(src);\n    if (cap) {\n      const text = cap[0].replace(/^ {1,4}/gm, '');\n      return {\n        type: 'code',\n        raw: cap[0],\n        codeBlockStyle: 'indented',\n        text: !this.options.pedantic\n          ? rtrim(text, '\\n')\n          : text\n      };\n    }\n  }\n\n  fences(src) {\n    const cap = this.rules.block.fences.exec(src);\n    if (cap) {\n      const raw = cap[0];\n      const text = indentCodeCompensation(raw, cap[3] || '');\n\n      return {\n        type: 'code',\n        raw,\n        lang: cap[2] ? cap[2].trim().replace(this.rules.inline._escapes, '$1') : cap[2],\n        text\n      };\n    }\n  }\n\n  heading(src) {\n    const cap = this.rules.block.heading.exec(src);\n    if (cap) {\n      let text = cap[2].trim();\n\n      // remove trailing #s\n      if (/#$/.test(text)) {\n        const trimmed = rtrim(text, '#');\n        if (this.options.pedantic) {\n          text = trimmed.trim();\n        } else if (!trimmed || / $/.test(trimmed)) {\n          // CommonMark requires space before trailing #s\n          text = trimmed.trim();\n        }\n      }\n\n      return {\n        type: 'heading',\n        raw: cap[0],\n        depth: cap[1].length,\n        text,\n        tokens: this.lexer.inline(text)\n      };\n    }\n  }\n\n  hr(src) {\n    const cap = this.rules.block.hr.exec(src);\n    if (cap) {\n      return {\n        type: 'hr',\n        raw: cap[0]\n      };\n    }\n  }\n\n  blockquote(src) {\n    const cap = this.rules.block.blockquote.exec(src);\n    if (cap) {\n      const text = cap[0].replace(/^ *>[ \\t]?/gm, '');\n      const top = this.lexer.state.top;\n      this.lexer.state.top = true;\n      const tokens = this.lexer.blockTokens(text);\n      this.lexer.state.top = top;\n      return {\n        type: 'blockquote',\n        raw: cap[0],\n        tokens,\n        text\n      };\n    }\n  }\n\n  list(src) {\n    let cap = this.rules.block.list.exec(src);\n    if (cap) {\n      let raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine,\n        line, nextLine, rawLine, itemContents, endEarly;\n\n      let bull = cap[1].trim();\n      const isordered = bull.length > 1;\n\n      const list = {\n        type: 'list',\n        raw: '',\n        ordered: isordered,\n        start: isordered ? +bull.slice(0, -1) : '',\n        loose: false,\n        items: []\n      };\n\n      bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n      if (this.options.pedantic) {\n        bull = isordered ? bull : '[*+-]';\n      }\n\n      // Get next list item\n      const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);\n\n      // Check if current bullet point can start a new List Item\n      while (src) {\n        endEarly = false;\n        if (!(cap = itemRegex.exec(src))) {\n          break;\n        }\n\n        if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n          break;\n        }\n\n        raw = cap[0];\n        src = src.substring(raw.length);\n\n        line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, (t) => ' '.repeat(3 * t.length));\n        nextLine = src.split('\\n', 1)[0];\n\n        if (this.options.pedantic) {\n          indent = 2;\n          itemContents = line.trimLeft();\n        } else {\n          indent = cap[2].search(/[^ ]/); // Find first non-space char\n          indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n          itemContents = line.slice(indent);\n          indent += cap[1].length;\n        }\n\n        blankLine = false;\n\n        if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line\n          raw += nextLine + '\\n';\n          src = src.substring(nextLine.length + 1);\n          endEarly = true;\n        }\n\n        if (!endEarly) {\n          const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`);\n          const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`);\n          const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`);\n          const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);\n\n          // Check if following lines should be included in List Item\n          while (src) {\n            rawLine = src.split('\\n', 1)[0];\n            nextLine = rawLine;\n\n            // Re-align to follow commonmark nesting rules\n            if (this.options.pedantic) {\n              nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, '  ');\n            }\n\n            // End list item if found code fences\n            if (fencesBeginRegex.test(nextLine)) {\n              break;\n            }\n\n            // End list item if found start of new heading\n            if (headingBeginRegex.test(nextLine)) {\n              break;\n            }\n\n            // End list item if found start of new bullet\n            if (nextBulletRegex.test(nextLine)) {\n              break;\n            }\n\n            // Horizontal rule found\n            if (hrRegex.test(src)) {\n              break;\n            }\n\n            if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible\n              itemContents += '\\n' + nextLine.slice(indent);\n            } else {\n              // not enough indentation\n              if (blankLine) {\n                break;\n              }\n\n              // paragraph continuation unless last line was a different block level element\n              if (line.search(/[^ ]/) >= 4) { // indented code block\n                break;\n              }\n              if (fencesBeginRegex.test(line)) {\n                break;\n              }\n              if (headingBeginRegex.test(line)) {\n                break;\n              }\n              if (hrRegex.test(line)) {\n                break;\n              }\n\n              itemContents += '\\n' + nextLine;\n            }\n\n            if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n              blankLine = true;\n            }\n\n            raw += rawLine + '\\n';\n            src = src.substring(rawLine.length + 1);\n            line = nextLine.slice(indent);\n          }\n        }\n\n        if (!list.loose) {\n          // If the previous item ended with a blank line, the list is loose\n          if (endsWithBlankLine) {\n            list.loose = true;\n          } else if (/\\n *\\n *$/.test(raw)) {\n            endsWithBlankLine = true;\n          }\n        }\n\n        // Check for task list items\n        if (this.options.gfm) {\n          istask = /^\\[[ xX]\\] /.exec(itemContents);\n          if (istask) {\n            ischecked = istask[0] !== '[ ] ';\n            itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n          }\n        }\n\n        list.items.push({\n          type: 'list_item',\n          raw,\n          task: !!istask,\n          checked: ischecked,\n          loose: false,\n          text: itemContents\n        });\n\n        list.raw += raw;\n      }\n\n      // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n      list.items[list.items.length - 1].raw = raw.trimRight();\n      list.items[list.items.length - 1].text = itemContents.trimRight();\n      list.raw = list.raw.trimRight();\n\n      const l = list.items.length;\n\n      // Item child tokens handled here at end because we needed to have the final item to trim it first\n      for (i = 0; i < l; i++) {\n        this.lexer.state.top = false;\n        list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n\n        if (!list.loose) {\n          // Check if list should be loose\n          const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n          const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\\n.*\\n/.test(t.raw));\n\n          list.loose = hasMultipleLineBreaks;\n        }\n      }\n\n      // Set all items to loose if list is loose\n      if (list.loose) {\n        for (i = 0; i < l; i++) {\n          list.items[i].loose = true;\n        }\n      }\n\n      return list;\n    }\n  }\n\n  html(src) {\n    const cap = this.rules.block.html.exec(src);\n    if (cap) {\n      const token = {\n        type: 'html',\n        raw: cap[0],\n        pre: !this.options.sanitizer\n          && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n        text: cap[0]\n      };\n      if (this.options.sanitize) {\n        const text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]);\n        token.type = 'paragraph';\n        token.text = text;\n        token.tokens = this.lexer.inline(text);\n      }\n      return token;\n    }\n  }\n\n  def(src) {\n    const cap = this.rules.block.def.exec(src);\n    if (cap) {\n      const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n      const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline._escapes, '$1') : '';\n      const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline._escapes, '$1') : cap[3];\n      return {\n        type: 'def',\n        tag,\n        raw: cap[0],\n        href,\n        title\n      };\n    }\n  }\n\n  table(src) {\n    const cap = this.rules.block.table.exec(src);\n    if (cap) {\n      const item = {\n        type: 'table',\n        header: splitCells(cap[1]).map(c => { return { text: c }; }),\n        align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n        rows: cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : []\n      };\n\n      if (item.header.length === item.align.length) {\n        item.raw = cap[0];\n\n        let l = item.align.length;\n        let i, j, k, row;\n        for (i = 0; i < l; i++) {\n          if (/^ *-+: *$/.test(item.align[i])) {\n            item.align[i] = 'right';\n          } else if (/^ *:-+: *$/.test(item.align[i])) {\n            item.align[i] = 'center';\n          } else if (/^ *:-+ *$/.test(item.align[i])) {\n            item.align[i] = 'left';\n          } else {\n            item.align[i] = null;\n          }\n        }\n\n        l = item.rows.length;\n        for (i = 0; i < l; i++) {\n          item.rows[i] = splitCells(item.rows[i], item.header.length).map(c => { return { text: c }; });\n        }\n\n        // parse child tokens inside headers and cells\n\n        // header child tokens\n        l = item.header.length;\n        for (j = 0; j < l; j++) {\n          item.header[j].tokens = this.lexer.inline(item.header[j].text);\n        }\n\n        // cell child tokens\n        l = item.rows.length;\n        for (j = 0; j < l; j++) {\n          row = item.rows[j];\n          for (k = 0; k < row.length; k++) {\n            row[k].tokens = this.lexer.inline(row[k].text);\n          }\n        }\n\n        return item;\n      }\n    }\n  }\n\n  lheading(src) {\n    const cap = this.rules.block.lheading.exec(src);\n    if (cap) {\n      return {\n        type: 'heading',\n        raw: cap[0],\n        depth: cap[2].charAt(0) === '=' ? 1 : 2,\n        text: cap[1],\n        tokens: this.lexer.inline(cap[1])\n      };\n    }\n  }\n\n  paragraph(src) {\n    const cap = this.rules.block.paragraph.exec(src);\n    if (cap) {\n      const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n        ? cap[1].slice(0, -1)\n        : cap[1];\n      return {\n        type: 'paragraph',\n        raw: cap[0],\n        text,\n        tokens: this.lexer.inline(text)\n      };\n    }\n  }\n\n  text(src) {\n    const cap = this.rules.block.text.exec(src);\n    if (cap) {\n      return {\n        type: 'text',\n        raw: cap[0],\n        text: cap[0],\n        tokens: this.lexer.inline(cap[0])\n      };\n    }\n  }\n\n  escape(src) {\n    const cap = this.rules.inline.escape.exec(src);\n    if (cap) {\n      return {\n        type: 'escape',\n        raw: cap[0],\n        text: escape(cap[1])\n      };\n    }\n  }\n\n  tag(src) {\n    const cap = this.rules.inline.tag.exec(src);\n    if (cap) {\n      if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {\n        this.lexer.state.inLink = true;\n      } else if (this.lexer.state.inLink && /^<\\/a>/i.test(cap[0])) {\n        this.lexer.state.inLink = false;\n      }\n      if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n        this.lexer.state.inRawBlock = true;\n      } else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n        this.lexer.state.inRawBlock = false;\n      }\n\n      return {\n        type: this.options.sanitize\n          ? 'text'\n          : 'html',\n        raw: cap[0],\n        inLink: this.lexer.state.inLink,\n        inRawBlock: this.lexer.state.inRawBlock,\n        text: this.options.sanitize\n          ? (this.options.sanitizer\n            ? this.options.sanitizer(cap[0])\n            : escape(cap[0]))\n          : cap[0]\n      };\n    }\n  }\n\n  link(src) {\n    const cap = this.rules.inline.link.exec(src);\n    if (cap) {\n      const trimmedUrl = cap[2].trim();\n      if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n        // commonmark requires matching angle brackets\n        if (!(/>$/.test(trimmedUrl))) {\n          return;\n        }\n\n        // ending angle bracket cannot be escaped\n        const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n        if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n          return;\n        }\n      } else {\n        // find closing parenthesis\n        const lastParenIndex = findClosingBracket(cap[2], '()');\n        if (lastParenIndex > -1) {\n          const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n          const linkLen = start + cap[1].length + lastParenIndex;\n          cap[2] = cap[2].substring(0, lastParenIndex);\n          cap[0] = cap[0].substring(0, linkLen).trim();\n          cap[3] = '';\n        }\n      }\n      let href = cap[2];\n      let title = '';\n      if (this.options.pedantic) {\n        // split pedantic href and title\n        const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n        if (link) {\n          href = link[1];\n          title = link[3];\n        }\n      } else {\n        title = cap[3] ? cap[3].slice(1, -1) : '';\n      }\n\n      href = href.trim();\n      if (/^</.test(href)) {\n        if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n          // pedantic allows starting angle bracket without ending angle bracket\n          href = href.slice(1);\n        } else {\n          href = href.slice(1, -1);\n        }\n      }\n      return outputLink(cap, {\n        href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n        title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n      }, cap[0], this.lexer);\n    }\n  }\n\n  reflink(src, links) {\n    let cap;\n    if ((cap = this.rules.inline.reflink.exec(src))\n        || (cap = this.rules.inline.nolink.exec(src))) {\n      let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n      link = links[link.toLowerCase()];\n      if (!link) {\n        const text = cap[0].charAt(0);\n        return {\n          type: 'text',\n          raw: text,\n          text\n        };\n      }\n      return outputLink(cap, link, cap[0], this.lexer);\n    }\n  }\n\n  emStrong(src, maskedSrc, prevChar = '') {\n    let match = this.rules.inline.emStrong.lDelim.exec(src);\n    if (!match) return;\n\n    // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n    if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u)) return;\n\n    const nextChar = match[1] || match[2] || '';\n\n    if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n      const lLength = match[0].length - 1;\n      let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n      const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n      endReg.lastIndex = 0;\n\n      // Clip maskedSrc to same section of string as src (move to lexer?)\n      maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n      while ((match = endReg.exec(maskedSrc)) != null) {\n        rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n        if (!rDelim) continue; // skip single * in __abc*abc__\n\n        rLength = rDelim.length;\n\n        if (match[3] || match[4]) { // found another Left Delim\n          delimTotal += rLength;\n          continue;\n        } else if (match[5] || match[6]) { // either Left or Right Delim\n          if (lLength % 3 && !((lLength + rLength) % 3)) {\n            midDelimTotal += rLength;\n            continue; // CommonMark Emphasis Rules 9-10\n          }\n        }\n\n        delimTotal -= rLength;\n\n        if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n        // Remove extra characters. *a*** -> *a*\n        rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n\n        const raw = src.slice(0, lLength + match.index + (match[0].length - rDelim.length) + rLength);\n\n        // Create `em` if smallest delimiter has odd char count. *a***\n        if (Math.min(lLength, rLength) % 2) {\n          const text = raw.slice(1, -1);\n          return {\n            type: 'em',\n            raw,\n            text,\n            tokens: this.lexer.inlineTokens(text)\n          };\n        }\n\n        // Create 'strong' if smallest delimiter has even char count. **a***\n        const text = raw.slice(2, -2);\n        return {\n          type: 'strong',\n          raw,\n          text,\n          tokens: this.lexer.inlineTokens(text)\n        };\n      }\n    }\n  }\n\n  codespan(src) {\n    const cap = this.rules.inline.code.exec(src);\n    if (cap) {\n      let text = cap[2].replace(/\\n/g, ' ');\n      const hasNonSpaceChars = /[^ ]/.test(text);\n      const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n      if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n        text = text.substring(1, text.length - 1);\n      }\n      text = escape(text, true);\n      return {\n        type: 'codespan',\n        raw: cap[0],\n        text\n      };\n    }\n  }\n\n  br(src) {\n    const cap = this.rules.inline.br.exec(src);\n    if (cap) {\n      return {\n        type: 'br',\n        raw: cap[0]\n      };\n    }\n  }\n\n  del(src) {\n    const cap = this.rules.inline.del.exec(src);\n    if (cap) {\n      return {\n        type: 'del',\n        raw: cap[0],\n        text: cap[2],\n        tokens: this.lexer.inlineTokens(cap[2])\n      };\n    }\n  }\n\n  autolink(src, mangle) {\n    const cap = this.rules.inline.autolink.exec(src);\n    if (cap) {\n      let text, href;\n      if (cap[2] === '@') {\n        text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);\n        href = 'mailto:' + text;\n      } else {\n        text = escape(cap[1]);\n        href = text;\n      }\n\n      return {\n        type: 'link',\n        raw: cap[0],\n        text,\n        href,\n        tokens: [\n          {\n            type: 'text',\n            raw: text,\n            text\n          }\n        ]\n      };\n    }\n  }\n\n  url(src, mangle) {\n    let cap;\n    if (cap = this.rules.inline.url.exec(src)) {\n      let text, href;\n      if (cap[2] === '@') {\n        text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);\n        href = 'mailto:' + text;\n      } else {\n        // do extended autolink path validation\n        let prevCapZero;\n        do {\n          prevCapZero = cap[0];\n          cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n        } while (prevCapZero !== cap[0]);\n        text = escape(cap[0]);\n        if (cap[1] === 'www.') {\n          href = 'http://' + cap[0];\n        } else {\n          href = cap[0];\n        }\n      }\n      return {\n        type: 'link',\n        raw: cap[0],\n        text,\n        href,\n        tokens: [\n          {\n            type: 'text',\n            raw: text,\n            text\n          }\n        ]\n      };\n    }\n  }\n\n  inlineText(src, smartypants) {\n    const cap = this.rules.inline.text.exec(src);\n    if (cap) {\n      let text;\n      if (this.lexer.state.inRawBlock) {\n        text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0];\n      } else {\n        text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n      }\n      return {\n        type: 'text',\n        raw: cap[0],\n        text\n      };\n    }\n  }\n}\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n  newline: /^(?: *(?:\\n|$))+/,\n  code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n  fences: /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,\n  hr: /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,\n  heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n  blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n  list: /^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/,\n  html: '^ {0,3}(?:' // optional indentation\n    + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n    + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n    + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n    + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n    + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n    + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n    + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n    + '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n    + ')',\n  def: /^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/,\n  table: noopTest,\n  lheading: /^((?:.|\\n(?!\\n))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n  // regex template, placeholders will be replaced according to different paragraph\n  // interruption rules of commonmark and the original markdown spec:\n  _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,\n  text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit(block.def)\n  .replace('label', block._label)\n  .replace('title', block._title)\n  .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.listItemStart = edit(/^( *)(bull) */)\n  .replace('bull', block.bullet)\n  .getRegex();\n\nblock.list = edit(block.list)\n  .replace(/bull/g, block.bullet)\n  .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n  .replace('def', '\\\\n+(?=' + block.def.source + ')')\n  .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n  + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n  + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n  + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n  + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n  + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit(block.html, 'i')\n  .replace('comment', block._comment)\n  .replace('tag', block._tag)\n  .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n  .getRegex();\n\nblock.paragraph = edit(block._paragraph)\n  .replace('hr', block.hr)\n  .replace('heading', ' {0,3}#{1,6} ')\n  .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n  .replace('|table', '')\n  .replace('blockquote', ' {0,3}>')\n  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n  .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n  .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n  .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n  .getRegex();\n\nblock.blockquote = edit(block.blockquote)\n  .replace('paragraph', block.paragraph)\n  .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = { ...block };\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = {\n  ...block.normal,\n  table: '^ *([^\\\\n ].*\\\\|.*)\\\\n' // Header\n    + ' {0,3}(?:\\\\| *)?(:?-+:? *(?:\\\\| *:?-+:? *)*)(?:\\\\| *)?' // Align\n    + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n};\n\nblock.gfm.table = edit(block.gfm.table)\n  .replace('hr', block.hr)\n  .replace('heading', ' {0,3}#{1,6} ')\n  .replace('blockquote', ' {0,3}>')\n  .replace('code', ' {4}[^\\\\n]')\n  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n  .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n  .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n  .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n  .getRegex();\n\nblock.gfm.paragraph = edit(block._paragraph)\n  .replace('hr', block.hr)\n  .replace('heading', ' {0,3}#{1,6} ')\n  .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n  .replace('table', block.gfm.table) // interrupt paragraphs with table\n  .replace('blockquote', ' {0,3}>')\n  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n  .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n  .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n  .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n  .getRegex();\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = {\n  ...block.normal,\n  html: edit(\n    '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n    + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n    + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n    .replace('comment', block._comment)\n    .replace(/tag/g, '(?!(?:'\n      + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n      + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n      + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n    .getRegex(),\n  def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n  heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n  fences: noopTest, // fences not supported\n  lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n  paragraph: edit(block.normal._paragraph)\n    .replace('hr', block.hr)\n    .replace('heading', ' *#{1,6} *[^\\n]')\n    .replace('lheading', block.lheading)\n    .replace('blockquote', ' {0,3}>')\n    .replace('|fences', '')\n    .replace('|list', '')\n    .replace('|html', '')\n    .getRegex()\n};\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n  escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n  autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n  url: noopTest,\n  tag: '^comment'\n    + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n    + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n    + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n    + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n    + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>', // CDATA section\n  link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n  reflink: /^!?\\[(label)\\]\\[(ref)\\]/,\n  nolink: /^!?\\[(ref)\\](?:\\[\\])?/,\n  reflinkSearch: 'reflink|nolink(?!\\\\()',\n  emStrong: {\n    lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n    //        (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left.  (5) and (6) can be either Left or Right.\n    //          () Skip orphan inside strong                                      () Consume to delim     (1) #***                (2) a***#, a***                             (3) #***a, ***a                 (4) ***#              (5) #***#                 (6) a***a\n    rDelimAst: /^(?:[^_*\\\\]|\\\\.)*?\\_\\_(?:[^_*\\\\]|\\\\.)*?\\*(?:[^_*\\\\]|\\\\.)*?(?=\\_\\_)|(?:[^*\\\\]|\\\\.)+(?=[^*])|[punct_](\\*+)(?=[\\s]|$)|(?:[^punct*_\\s\\\\]|\\\\.)(\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|(?:[^punct*_\\s\\\\]|\\\\.)(\\*+)(?=[^punct*_\\s])/,\n    rDelimUnd: /^(?:[^_*\\\\]|\\\\.)*?\\*\\*(?:[^_*\\\\]|\\\\.)*?\\_(?:[^_*\\\\]|\\\\.)*?(?=\\*\\*)|(?:[^_\\\\]|\\\\.)+(?=[^_])|[punct*](\\_+)(?=[\\s]|$)|(?:[^punct*_\\s\\\\]|\\\\.)(\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n  },\n  code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n  br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n  del: noopTest,\n  text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n  punctuation: /^([\\spunctuation])/\n};\n\n// list of punctuation marks from CommonMark spec\n// without * and _ to handle the different emphasis markers * and _\ninline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\n// lookbehind is not available on Safari as of version 16\n// inline.escapedEmSt = /(?<=(?:^|[^\\\\)(?:\\\\[^])*)\\\\[*_]/g;\ninline.escapedEmSt = /(?:^|[^\\\\])(?:\\\\\\\\)*\\\\[*_]/g;\n\ninline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.emStrong.lDelim = edit(inline.emStrong.lDelim)\n  .replace(/punct/g, inline._punctuation)\n  .getRegex();\n\ninline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g')\n  .replace(/punct/g, inline._punctuation)\n  .getRegex();\n\ninline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'g')\n  .replace(/punct/g, inline._punctuation)\n  .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit(inline.autolink)\n  .replace('scheme', inline._scheme)\n  .replace('email', inline._email)\n  .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit(inline.tag)\n  .replace('comment', inline._comment)\n  .replace('attribute', inline._attribute)\n  .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit(inline.link)\n  .replace('label', inline._label)\n  .replace('href', inline._href)\n  .replace('title', inline._title)\n  .getRegex();\n\ninline.reflink = edit(inline.reflink)\n  .replace('label', inline._label)\n  .replace('ref', block._label)\n  .getRegex();\n\ninline.nolink = edit(inline.nolink)\n  .replace('ref', block._label)\n  .getRegex();\n\ninline.reflinkSearch = edit(inline.reflinkSearch, 'g')\n  .replace('reflink', inline.reflink)\n  .replace('nolink', inline.nolink)\n  .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = { ...inline };\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = {\n  ...inline.normal,\n  strong: {\n    start: /^__|\\*\\*/,\n    middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n    endAst: /\\*\\*(?!\\*)/g,\n    endUnd: /__(?!_)/g\n  },\n  em: {\n    start: /^_|\\*/,\n    middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n    endAst: /\\*(?!\\*)/g,\n    endUnd: /_(?!_)/g\n  },\n  link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n    .replace('label', inline._label)\n    .getRegex(),\n  reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n    .replace('label', inline._label)\n    .getRegex()\n};\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = {\n  ...inline.normal,\n  escape: edit(inline.escape).replace('])', '~|])').getRegex(),\n  _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n  url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n  _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n  del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n  text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/\n};\n\ninline.gfm.url = edit(inline.gfm.url, 'i')\n  .replace('email', inline.gfm._extended_email)\n  .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = {\n  ...inline.gfm,\n  br: edit(inline.br).replace('{2,}', '*').getRegex(),\n  text: edit(inline.gfm.text)\n    .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n    .replace(/\\{2,\\}/g, '*')\n    .getRegex()\n};\n\n/**\n * smartypants text replacement\n * @param {string} text\n */\nfunction smartypants(text) {\n  return text\n    // em-dashes\n    .replace(/---/g, '\\u2014')\n    // en-dashes\n    .replace(/--/g, '\\u2013')\n    // opening singles\n    .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n    // closing singles & apostrophes\n    .replace(/'/g, '\\u2019')\n    // opening doubles\n    .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n    // closing doubles\n    .replace(/\"/g, '\\u201d')\n    // ellipses\n    .replace(/\\.{3}/g, '\\u2026');\n}\n\n/**\n * mangle email addresses\n * @param {string} text\n */\nfunction mangle(text) {\n  let out = '',\n    i,\n    ch;\n\n  const l = text.length;\n  for (i = 0; i < l; i++) {\n    ch = text.charCodeAt(i);\n    if (Math.random() > 0.5) {\n      ch = 'x' + ch.toString(16);\n    }\n    out += '&#' + ch + ';';\n  }\n\n  return out;\n}\n\n/**\n * Block Lexer\n */\nclass Lexer {\n  constructor(options) {\n    this.tokens = [];\n    this.tokens.links = Object.create(null);\n    this.options = options || defaults;\n    this.options.tokenizer = this.options.tokenizer || new Tokenizer();\n    this.tokenizer = this.options.tokenizer;\n    this.tokenizer.options = this.options;\n    this.tokenizer.lexer = this;\n    this.inlineQueue = [];\n    this.state = {\n      inLink: false,\n      inRawBlock: false,\n      top: true\n    };\n\n    const rules = {\n      block: block.normal,\n      inline: inline.normal\n    };\n\n    if (this.options.pedantic) {\n      rules.block = block.pedantic;\n      rules.inline = inline.pedantic;\n    } else if (this.options.gfm) {\n      rules.block = block.gfm;\n      if (this.options.breaks) {\n        rules.inline = inline.breaks;\n      } else {\n        rules.inline = inline.gfm;\n      }\n    }\n    this.tokenizer.rules = rules;\n  }\n\n  /**\n   * Expose Rules\n   */\n  static get rules() {\n    return {\n      block,\n      inline\n    };\n  }\n\n  /**\n   * Static Lex Method\n   */\n  static lex(src, options) {\n    const lexer = new Lexer(options);\n    return lexer.lex(src);\n  }\n\n  /**\n   * Static Lex Inline Method\n   */\n  static lexInline(src, options) {\n    const lexer = new Lexer(options);\n    return lexer.inlineTokens(src);\n  }\n\n  /**\n   * Preprocessing\n   */\n  lex(src) {\n    src = src\n      .replace(/\\r\\n|\\r/g, '\\n');\n\n    this.blockTokens(src, this.tokens);\n\n    let next;\n    while (next = this.inlineQueue.shift()) {\n      this.inlineTokens(next.src, next.tokens);\n    }\n\n    return this.tokens;\n  }\n\n  /**\n   * Lexing\n   */\n  blockTokens(src, tokens = []) {\n    if (this.options.pedantic) {\n      src = src.replace(/\\t/g, '    ').replace(/^ +$/gm, '');\n    } else {\n      src = src.replace(/^( *)(\\t+)/gm, (_, leading, tabs) => {\n        return leading + '    '.repeat(tabs.length);\n      });\n    }\n\n    let token, lastToken, cutSrc, lastParagraphClipped;\n\n    while (src) {\n      if (this.options.extensions\n        && this.options.extensions.block\n        && this.options.extensions.block.some((extTokenizer) => {\n          if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n            src = src.substring(token.raw.length);\n            tokens.push(token);\n            return true;\n          }\n          return false;\n        })) {\n        continue;\n      }\n\n      // newline\n      if (token = this.tokenizer.space(src)) {\n        src = src.substring(token.raw.length);\n        if (token.raw.length === 1 && tokens.length > 0) {\n          // if there's a single \\n as a spacer, it's terminating the last line,\n          // so move it there so that we don't get unecessary paragraph tags\n          tokens[tokens.length - 1].raw += '\\n';\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // code\n      if (token = this.tokenizer.code(src)) {\n        src = src.substring(token.raw.length);\n        lastToken = tokens[tokens.length - 1];\n        // An indented code block cannot interrupt a paragraph.\n        if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n          lastToken.raw += '\\n' + token.raw;\n          lastToken.text += '\\n' + token.text;\n          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // fences\n      if (token = this.tokenizer.fences(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // heading\n      if (token = this.tokenizer.heading(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // hr\n      if (token = this.tokenizer.hr(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // blockquote\n      if (token = this.tokenizer.blockquote(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // list\n      if (token = this.tokenizer.list(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // html\n      if (token = this.tokenizer.html(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // def\n      if (token = this.tokenizer.def(src)) {\n        src = src.substring(token.raw.length);\n        lastToken = tokens[tokens.length - 1];\n        if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n          lastToken.raw += '\\n' + token.raw;\n          lastToken.text += '\\n' + token.raw;\n          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n        } else if (!this.tokens.links[token.tag]) {\n          this.tokens.links[token.tag] = {\n            href: token.href,\n            title: token.title\n          };\n        }\n        continue;\n      }\n\n      // table (gfm)\n      if (token = this.tokenizer.table(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // lheading\n      if (token = this.tokenizer.lheading(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // top-level paragraph\n      // prevent paragraph consuming extensions by clipping 'src' to extension start\n      cutSrc = src;\n      if (this.options.extensions && this.options.extensions.startBlock) {\n        let startIndex = Infinity;\n        const tempSrc = src.slice(1);\n        let tempStart;\n        this.options.extensions.startBlock.forEach(function(getStartIndex) {\n          tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n          if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); }\n        });\n        if (startIndex < Infinity && startIndex >= 0) {\n          cutSrc = src.substring(0, startIndex + 1);\n        }\n      }\n      if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n        lastToken = tokens[tokens.length - 1];\n        if (lastParagraphClipped && lastToken.type === 'paragraph') {\n          lastToken.raw += '\\n' + token.raw;\n          lastToken.text += '\\n' + token.text;\n          this.inlineQueue.pop();\n          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        lastParagraphClipped = (cutSrc.length !== src.length);\n        src = src.substring(token.raw.length);\n        continue;\n      }\n\n      // text\n      if (token = this.tokenizer.text(src)) {\n        src = src.substring(token.raw.length);\n        lastToken = tokens[tokens.length - 1];\n        if (lastToken && lastToken.type === 'text') {\n          lastToken.raw += '\\n' + token.raw;\n          lastToken.text += '\\n' + token.text;\n          this.inlineQueue.pop();\n          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      if (src) {\n        const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n        if (this.options.silent) {\n          console.error(errMsg);\n          break;\n        } else {\n          throw new Error(errMsg);\n        }\n      }\n    }\n\n    this.state.top = true;\n    return tokens;\n  }\n\n  inline(src, tokens = []) {\n    this.inlineQueue.push({ src, tokens });\n    return tokens;\n  }\n\n  /**\n   * Lexing/Compiling\n   */\n  inlineTokens(src, tokens = []) {\n    let token, lastToken, cutSrc;\n\n    // String with links masked to avoid interference with em and strong\n    let maskedSrc = src;\n    let match;\n    let keepPrevChar, prevChar;\n\n    // Mask out reflinks\n    if (this.tokens.links) {\n      const links = Object.keys(this.tokens.links);\n      if (links.length > 0) {\n        while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n          if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n            maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n          }\n        }\n      }\n    }\n    // Mask out other blocks\n    while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n      maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n    }\n\n    // Mask out escaped em & strong delimiters\n    while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n      maskedSrc = maskedSrc.slice(0, match.index + match[0].length - 2) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n      this.tokenizer.rules.inline.escapedEmSt.lastIndex--;\n    }\n\n    while (src) {\n      if (!keepPrevChar) {\n        prevChar = '';\n      }\n      keepPrevChar = false;\n\n      // extensions\n      if (this.options.extensions\n        && this.options.extensions.inline\n        && this.options.extensions.inline.some((extTokenizer) => {\n          if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n            src = src.substring(token.raw.length);\n            tokens.push(token);\n            return true;\n          }\n          return false;\n        })) {\n        continue;\n      }\n\n      // escape\n      if (token = this.tokenizer.escape(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // tag\n      if (token = this.tokenizer.tag(src)) {\n        src = src.substring(token.raw.length);\n        lastToken = tokens[tokens.length - 1];\n        if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n          lastToken.raw += token.raw;\n          lastToken.text += token.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // link\n      if (token = this.tokenizer.link(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // reflink, nolink\n      if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n        src = src.substring(token.raw.length);\n        lastToken = tokens[tokens.length - 1];\n        if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n          lastToken.raw += token.raw;\n          lastToken.text += token.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // em & strong\n      if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // code\n      if (token = this.tokenizer.codespan(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // br\n      if (token = this.tokenizer.br(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // del (gfm)\n      if (token = this.tokenizer.del(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // autolink\n      if (token = this.tokenizer.autolink(src, mangle)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // url (gfm)\n      if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // text\n      // prevent inlineText consuming extensions by clipping 'src' to extension start\n      cutSrc = src;\n      if (this.options.extensions && this.options.extensions.startInline) {\n        let startIndex = Infinity;\n        const tempSrc = src.slice(1);\n        let tempStart;\n        this.options.extensions.startInline.forEach(function(getStartIndex) {\n          tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n          if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); }\n        });\n        if (startIndex < Infinity && startIndex >= 0) {\n          cutSrc = src.substring(0, startIndex + 1);\n        }\n      }\n      if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {\n        src = src.substring(token.raw.length);\n        if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n          prevChar = token.raw.slice(-1);\n        }\n        keepPrevChar = true;\n        lastToken = tokens[tokens.length - 1];\n        if (lastToken && lastToken.type === 'text') {\n          lastToken.raw += token.raw;\n          lastToken.text += token.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      if (src) {\n        const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n        if (this.options.silent) {\n          console.error(errMsg);\n          break;\n        } else {\n          throw new Error(errMsg);\n        }\n      }\n    }\n\n    return tokens;\n  }\n}\n\n/**\n * Renderer\n */\nclass Renderer {\n  constructor(options) {\n    this.options = options || defaults;\n  }\n\n  code(code, infostring, escaped) {\n    const lang = (infostring || '').match(/\\S*/)[0];\n    if (this.options.highlight) {\n      const out = this.options.highlight(code, lang);\n      if (out != null && out !== code) {\n        escaped = true;\n        code = out;\n      }\n    }\n\n    code = code.replace(/\\n$/, '') + '\\n';\n\n    if (!lang) {\n      return '<pre><code>'\n        + (escaped ? code : escape(code, true))\n        + '</code></pre>\\n';\n    }\n\n    return '<pre><code class=\"'\n      + this.options.langPrefix\n      + escape(lang)\n      + '\">'\n      + (escaped ? code : escape(code, true))\n      + '</code></pre>\\n';\n  }\n\n  /**\n   * @param {string} quote\n   */\n  blockquote(quote) {\n    return `<blockquote>\\n${quote}</blockquote>\\n`;\n  }\n\n  html(html) {\n    return html;\n  }\n\n  /**\n   * @param {string} text\n   * @param {string} level\n   * @param {string} raw\n   * @param {any} slugger\n   */\n  heading(text, level, raw, slugger) {\n    if (this.options.headerIds) {\n      const id = this.options.headerPrefix + slugger.slug(raw);\n      return `<h${level} id=\"${id}\">${text}</h${level}>\\n`;\n    }\n\n    // ignore IDs\n    return `<h${level}>${text}</h${level}>\\n`;\n  }\n\n  hr() {\n    return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n  }\n\n  list(body, ordered, start) {\n    const type = ordered ? 'ol' : 'ul',\n      startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n    return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n  }\n\n  /**\n   * @param {string} text\n   */\n  listitem(text) {\n    return `<li>${text}</li>\\n`;\n  }\n\n  checkbox(checked) {\n    return '<input '\n      + (checked ? 'checked=\"\" ' : '')\n      + 'disabled=\"\" type=\"checkbox\"'\n      + (this.options.xhtml ? ' /' : '')\n      + '> ';\n  }\n\n  /**\n   * @param {string} text\n   */\n  paragraph(text) {\n    return `<p>${text}</p>\\n`;\n  }\n\n  /**\n   * @param {string} header\n   * @param {string} body\n   */\n  table(header, body) {\n    if (body) body = `<tbody>${body}</tbody>`;\n\n    return '<table>\\n'\n      + '<thead>\\n'\n      + header\n      + '</thead>\\n'\n      + body\n      + '</table>\\n';\n  }\n\n  /**\n   * @param {string} content\n   */\n  tablerow(content) {\n    return `<tr>\\n${content}</tr>\\n`;\n  }\n\n  tablecell(content, flags) {\n    const type = flags.header ? 'th' : 'td';\n    const tag = flags.align\n      ? `<${type} align=\"${flags.align}\">`\n      : `<${type}>`;\n    return tag + content + `</${type}>\\n`;\n  }\n\n  /**\n   * span level renderer\n   * @param {string} text\n   */\n  strong(text) {\n    return `<strong>${text}</strong>`;\n  }\n\n  /**\n   * @param {string} text\n   */\n  em(text) {\n    return `<em>${text}</em>`;\n  }\n\n  /**\n   * @param {string} text\n   */\n  codespan(text) {\n    return `<code>${text}</code>`;\n  }\n\n  br() {\n    return this.options.xhtml ? '<br/>' : '<br>';\n  }\n\n  /**\n   * @param {string} text\n   */\n  del(text) {\n    return `<del>${text}</del>`;\n  }\n\n  /**\n   * @param {string} href\n   * @param {string} title\n   * @param {string} text\n   */\n  link(href, title, text) {\n    href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n    if (href === null) {\n      return text;\n    }\n    let out = '<a href=\"' + href + '\"';\n    if (title) {\n      out += ' title=\"' + title + '\"';\n    }\n    out += '>' + text + '</a>';\n    return out;\n  }\n\n  /**\n   * @param {string} href\n   * @param {string} title\n   * @param {string} text\n   */\n  image(href, title, text) {\n    href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n    if (href === null) {\n      return text;\n    }\n\n    let out = `<img src=\"${href}\" alt=\"${text}\"`;\n    if (title) {\n      out += ` title=\"${title}\"`;\n    }\n    out += this.options.xhtml ? '/>' : '>';\n    return out;\n  }\n\n  text(text) {\n    return text;\n  }\n}\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nclass TextRenderer {\n  // no need for block level renderers\n  strong(text) {\n    return text;\n  }\n\n  em(text) {\n    return text;\n  }\n\n  codespan(text) {\n    return text;\n  }\n\n  del(text) {\n    return text;\n  }\n\n  html(text) {\n    return text;\n  }\n\n  text(text) {\n    return text;\n  }\n\n  link(href, title, text) {\n    return '' + text;\n  }\n\n  image(href, title, text) {\n    return '' + text;\n  }\n\n  br() {\n    return '';\n  }\n}\n\n/**\n * Slugger generates header id\n */\nclass Slugger {\n  constructor() {\n    this.seen = {};\n  }\n\n  /**\n   * @param {string} value\n   */\n  serialize(value) {\n    return value\n      .toLowerCase()\n      .trim()\n      // remove html tags\n      .replace(/<[!\\/a-z].*?>/ig, '')\n      // remove unwanted chars\n      .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n      .replace(/\\s/g, '-');\n  }\n\n  /**\n   * Finds the next safe (unique) slug to use\n   * @param {string} originalSlug\n   * @param {boolean} isDryRun\n   */\n  getNextSafeSlug(originalSlug, isDryRun) {\n    let slug = originalSlug;\n    let occurenceAccumulator = 0;\n    if (this.seen.hasOwnProperty(slug)) {\n      occurenceAccumulator = this.seen[originalSlug];\n      do {\n        occurenceAccumulator++;\n        slug = originalSlug + '-' + occurenceAccumulator;\n      } while (this.seen.hasOwnProperty(slug));\n    }\n    if (!isDryRun) {\n      this.seen[originalSlug] = occurenceAccumulator;\n      this.seen[slug] = 0;\n    }\n    return slug;\n  }\n\n  /**\n   * Convert string to unique id\n   * @param {object} [options]\n   * @param {boolean} [options.dryrun] Generates the next unique slug without\n   * updating the internal accumulator.\n   */\n  slug(value, options = {}) {\n    const slug = this.serialize(value);\n    return this.getNextSafeSlug(slug, options.dryrun);\n  }\n}\n\n/**\n * Parsing & Compiling\n */\nclass Parser {\n  constructor(options) {\n    this.options = options || defaults;\n    this.options.renderer = this.options.renderer || new Renderer();\n    this.renderer = this.options.renderer;\n    this.renderer.options = this.options;\n    this.textRenderer = new TextRenderer();\n    this.slugger = new Slugger();\n  }\n\n  /**\n   * Static Parse Method\n   */\n  static parse(tokens, options) {\n    const parser = new Parser(options);\n    return parser.parse(tokens);\n  }\n\n  /**\n   * Static Parse Inline Method\n   */\n  static parseInline(tokens, options) {\n    const parser = new Parser(options);\n    return parser.parseInline(tokens);\n  }\n\n  /**\n   * Parse Loop\n   */\n  parse(tokens, top = true) {\n    let out = '',\n      i,\n      j,\n      k,\n      l2,\n      l3,\n      row,\n      cell,\n      header,\n      body,\n      token,\n      ordered,\n      start,\n      loose,\n      itemBody,\n      item,\n      checked,\n      task,\n      checkbox,\n      ret;\n\n    const l = tokens.length;\n    for (i = 0; i < l; i++) {\n      token = tokens[i];\n\n      // Run any renderer extensions\n      if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n        ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);\n        if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {\n          out += ret || '';\n          continue;\n        }\n      }\n\n      switch (token.type) {\n        case 'space': {\n          continue;\n        }\n        case 'hr': {\n          out += this.renderer.hr();\n          continue;\n        }\n        case 'heading': {\n          out += this.renderer.heading(\n            this.parseInline(token.tokens),\n            token.depth,\n            unescape(this.parseInline(token.tokens, this.textRenderer)),\n            this.slugger);\n          continue;\n        }\n        case 'code': {\n          out += this.renderer.code(token.text,\n            token.lang,\n            token.escaped);\n          continue;\n        }\n        case 'table': {\n          header = '';\n\n          // header\n          cell = '';\n          l2 = token.header.length;\n          for (j = 0; j < l2; j++) {\n            cell += this.renderer.tablecell(\n              this.parseInline(token.header[j].tokens),\n              { header: true, align: token.align[j] }\n            );\n          }\n          header += this.renderer.tablerow(cell);\n\n          body = '';\n          l2 = token.rows.length;\n          for (j = 0; j < l2; j++) {\n            row = token.rows[j];\n\n            cell = '';\n            l3 = row.length;\n            for (k = 0; k < l3; k++) {\n              cell += this.renderer.tablecell(\n                this.parseInline(row[k].tokens),\n                { header: false, align: token.align[k] }\n              );\n            }\n\n            body += this.renderer.tablerow(cell);\n          }\n          out += this.renderer.table(header, body);\n          continue;\n        }\n        case 'blockquote': {\n          body = this.parse(token.tokens);\n          out += this.renderer.blockquote(body);\n          continue;\n        }\n        case 'list': {\n          ordered = token.ordered;\n          start = token.start;\n          loose = token.loose;\n          l2 = token.items.length;\n\n          body = '';\n          for (j = 0; j < l2; j++) {\n            item = token.items[j];\n            checked = item.checked;\n            task = item.task;\n\n            itemBody = '';\n            if (item.task) {\n              checkbox = this.renderer.checkbox(checked);\n              if (loose) {\n                if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n                  item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n                  if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n                    item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n                  }\n                } else {\n                  item.tokens.unshift({\n                    type: 'text',\n                    text: checkbox\n                  });\n                }\n              } else {\n                itemBody += checkbox;\n              }\n            }\n\n            itemBody += this.parse(item.tokens, loose);\n            body += this.renderer.listitem(itemBody, task, checked);\n          }\n\n          out += this.renderer.list(body, ordered, start);\n          continue;\n        }\n        case 'html': {\n          // TODO parse inline content if parameter markdown=1\n          out += this.renderer.html(token.text);\n          continue;\n        }\n        case 'paragraph': {\n          out += this.renderer.paragraph(this.parseInline(token.tokens));\n          continue;\n        }\n        case 'text': {\n          body = token.tokens ? this.parseInline(token.tokens) : token.text;\n          while (i + 1 < l && tokens[i + 1].type === 'text') {\n            token = tokens[++i];\n            body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n          }\n          out += top ? this.renderer.paragraph(body) : body;\n          continue;\n        }\n\n        default: {\n          const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n          if (this.options.silent) {\n            console.error(errMsg);\n            return;\n          } else {\n            throw new Error(errMsg);\n          }\n        }\n      }\n    }\n\n    return out;\n  }\n\n  /**\n   * Parse Inline Tokens\n   */\n  parseInline(tokens, renderer) {\n    renderer = renderer || this.renderer;\n    let out = '',\n      i,\n      token,\n      ret;\n\n    const l = tokens.length;\n    for (i = 0; i < l; i++) {\n      token = tokens[i];\n\n      // Run any renderer extensions\n      if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n        ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);\n        if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {\n          out += ret || '';\n          continue;\n        }\n      }\n\n      switch (token.type) {\n        case 'escape': {\n          out += renderer.text(token.text);\n          break;\n        }\n        case 'html': {\n          out += renderer.html(token.text);\n          break;\n        }\n        case 'link': {\n          out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n          break;\n        }\n        case 'image': {\n          out += renderer.image(token.href, token.title, token.text);\n          break;\n        }\n        case 'strong': {\n          out += renderer.strong(this.parseInline(token.tokens, renderer));\n          break;\n        }\n        case 'em': {\n          out += renderer.em(this.parseInline(token.tokens, renderer));\n          break;\n        }\n        case 'codespan': {\n          out += renderer.codespan(token.text);\n          break;\n        }\n        case 'br': {\n          out += renderer.br();\n          break;\n        }\n        case 'del': {\n          out += renderer.del(this.parseInline(token.tokens, renderer));\n          break;\n        }\n        case 'text': {\n          out += renderer.text(token.text);\n          break;\n        }\n        default: {\n          const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n          if (this.options.silent) {\n            console.error(errMsg);\n            return;\n          } else {\n            throw new Error(errMsg);\n          }\n        }\n      }\n    }\n    return out;\n  }\n}\n\nclass Hooks {\n  constructor(options) {\n    this.options = options || defaults;\n  }\n\n  static passThroughHooks = new Set([\n    'preprocess',\n    'postprocess'\n  ]);\n\n  /**\n   * Process markdown before marked\n   */\n  preprocess(markdown) {\n    return markdown;\n  }\n\n  /**\n   * Process HTML after marked is finished\n   */\n  postprocess(html) {\n    return html;\n  }\n}\n\nfunction onError(silent, async, callback) {\n  return (e) => {\n    e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n    if (silent) {\n      const msg = '<p>An error occurred:</p><pre>'\n        + escape(e.message + '', true)\n        + '</pre>';\n      if (async) {\n        return Promise.resolve(msg);\n      }\n      if (callback) {\n        callback(null, msg);\n        return;\n      }\n      return msg;\n    }\n\n    if (async) {\n      return Promise.reject(e);\n    }\n    if (callback) {\n      callback(e);\n      return;\n    }\n    throw e;\n  };\n}\n\nfunction parseMarkdown(lexer, parser) {\n  return (src, opt, callback) => {\n    if (typeof opt === 'function') {\n      callback = opt;\n      opt = null;\n    }\n\n    const origOpt = { ...opt };\n    opt = { ...marked.defaults, ...origOpt };\n    const throwError = onError(opt.silent, opt.async, callback);\n\n    // throw error in case of non string input\n    if (typeof src === 'undefined' || src === null) {\n      return throwError(new Error('marked(): input parameter is undefined or null'));\n    }\n    if (typeof src !== 'string') {\n      return throwError(new Error('marked(): input parameter is of type '\n        + Object.prototype.toString.call(src) + ', string expected'));\n    }\n\n    checkSanitizeDeprecation(opt);\n\n    if (opt.hooks) {\n      opt.hooks.options = opt;\n    }\n\n    if (callback) {\n      const highlight = opt.highlight;\n      let tokens;\n\n      try {\n        if (opt.hooks) {\n          src = opt.hooks.preprocess(src);\n        }\n        tokens = lexer(src, opt);\n      } catch (e) {\n        return throwError(e);\n      }\n\n      const done = function(err) {\n        let out;\n\n        if (!err) {\n          try {\n            if (opt.walkTokens) {\n              marked.walkTokens(tokens, opt.walkTokens);\n            }\n            out = parser(tokens, opt);\n            if (opt.hooks) {\n              out = opt.hooks.postprocess(out);\n            }\n          } catch (e) {\n            err = e;\n          }\n        }\n\n        opt.highlight = highlight;\n\n        return err\n          ? throwError(err)\n          : callback(null, out);\n      };\n\n      if (!highlight || highlight.length < 3) {\n        return done();\n      }\n\n      delete opt.highlight;\n\n      if (!tokens.length) return done();\n\n      let pending = 0;\n      marked.walkTokens(tokens, function(token) {\n        if (token.type === 'code') {\n          pending++;\n          setTimeout(() => {\n            highlight(token.text, token.lang, function(err, code) {\n              if (err) {\n                return done(err);\n              }\n              if (code != null && code !== token.text) {\n                token.text = code;\n                token.escaped = true;\n              }\n\n              pending--;\n              if (pending === 0) {\n                done();\n              }\n            });\n          }, 0);\n        }\n      });\n\n      if (pending === 0) {\n        done();\n      }\n\n      return;\n    }\n\n    if (opt.async) {\n      return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n        .then(src => lexer(src, opt))\n        .then(tokens => opt.walkTokens ? Promise.all(marked.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n        .then(tokens => parser(tokens, opt))\n        .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n        .catch(throwError);\n    }\n\n    try {\n      if (opt.hooks) {\n        src = opt.hooks.preprocess(src);\n      }\n      const tokens = lexer(src, opt);\n      if (opt.walkTokens) {\n        marked.walkTokens(tokens, opt.walkTokens);\n      }\n      let html = parser(tokens, opt);\n      if (opt.hooks) {\n        html = opt.hooks.postprocess(html);\n      }\n      return html;\n    } catch (e) {\n      return throwError(e);\n    }\n  };\n}\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n  return parseMarkdown(Lexer.lex, Parser.parse)(src, opt, callback);\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n  marked.defaults = { ...marked.defaults, ...opt };\n  changeDefaults(marked.defaults);\n  return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args) {\n  const extensions = marked.defaults.extensions || { renderers: {}, childTokens: {} };\n\n  args.forEach((pack) => {\n    // copy options to new object\n    const opts = { ...pack };\n\n    // set async to true if it was set to true before\n    opts.async = marked.defaults.async || opts.async || false;\n\n    // ==-- Parse \"addon\" extensions --== //\n    if (pack.extensions) {\n      pack.extensions.forEach((ext) => {\n        if (!ext.name) {\n          throw new Error('extension name required');\n        }\n        if (ext.renderer) { // Renderer extensions\n          const prevRenderer = extensions.renderers[ext.name];\n          if (prevRenderer) {\n            // Replace extension with func to run new extension but fall back if false\n            extensions.renderers[ext.name] = function(...args) {\n              let ret = ext.renderer.apply(this, args);\n              if (ret === false) {\n                ret = prevRenderer.apply(this, args);\n              }\n              return ret;\n            };\n          } else {\n            extensions.renderers[ext.name] = ext.renderer;\n          }\n        }\n        if (ext.tokenizer) { // Tokenizer Extensions\n          if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n            throw new Error(\"extension level must be 'block' or 'inline'\");\n          }\n          if (extensions[ext.level]) {\n            extensions[ext.level].unshift(ext.tokenizer);\n          } else {\n            extensions[ext.level] = [ext.tokenizer];\n          }\n          if (ext.start) { // Function to check for start of token\n            if (ext.level === 'block') {\n              if (extensions.startBlock) {\n                extensions.startBlock.push(ext.start);\n              } else {\n                extensions.startBlock = [ext.start];\n              }\n            } else if (ext.level === 'inline') {\n              if (extensions.startInline) {\n                extensions.startInline.push(ext.start);\n              } else {\n                extensions.startInline = [ext.start];\n              }\n            }\n          }\n        }\n        if (ext.childTokens) { // Child tokens to be visited by walkTokens\n          extensions.childTokens[ext.name] = ext.childTokens;\n        }\n      });\n      opts.extensions = extensions;\n    }\n\n    // ==-- Parse \"overwrite\" extensions --== //\n    if (pack.renderer) {\n      const renderer = marked.defaults.renderer || new Renderer();\n      for (const prop in pack.renderer) {\n        const prevRenderer = renderer[prop];\n        // Replace renderer with func to run extension, but fall back if false\n        renderer[prop] = (...args) => {\n          let ret = pack.renderer[prop].apply(renderer, args);\n          if (ret === false) {\n            ret = prevRenderer.apply(renderer, args);\n          }\n          return ret;\n        };\n      }\n      opts.renderer = renderer;\n    }\n    if (pack.tokenizer) {\n      const tokenizer = marked.defaults.tokenizer || new Tokenizer();\n      for (const prop in pack.tokenizer) {\n        const prevTokenizer = tokenizer[prop];\n        // Replace tokenizer with func to run extension, but fall back if false\n        tokenizer[prop] = (...args) => {\n          let ret = pack.tokenizer[prop].apply(tokenizer, args);\n          if (ret === false) {\n            ret = prevTokenizer.apply(tokenizer, args);\n          }\n          return ret;\n        };\n      }\n      opts.tokenizer = tokenizer;\n    }\n\n    // ==-- Parse Hooks extensions --== //\n    if (pack.hooks) {\n      const hooks = marked.defaults.hooks || new Hooks();\n      for (const prop in pack.hooks) {\n        const prevHook = hooks[prop];\n        if (Hooks.passThroughHooks.has(prop)) {\n          hooks[prop] = (arg) => {\n            if (marked.defaults.async) {\n              return Promise.resolve(pack.hooks[prop].call(hooks, arg)).then(ret => {\n                return prevHook.call(hooks, ret);\n              });\n            }\n\n            const ret = pack.hooks[prop].call(hooks, arg);\n            return prevHook.call(hooks, ret);\n          };\n        } else {\n          hooks[prop] = (...args) => {\n            let ret = pack.hooks[prop].apply(hooks, args);\n            if (ret === false) {\n              ret = prevHook.apply(hooks, args);\n            }\n            return ret;\n          };\n        }\n      }\n      opts.hooks = hooks;\n    }\n\n    // ==-- Parse WalkTokens extensions --== //\n    if (pack.walkTokens) {\n      const walkTokens = marked.defaults.walkTokens;\n      opts.walkTokens = function(token) {\n        let values = [];\n        values.push(pack.walkTokens.call(this, token));\n        if (walkTokens) {\n          values = values.concat(walkTokens.call(this, token));\n        }\n        return values;\n      };\n    }\n\n    marked.setOptions(opts);\n  });\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n  let values = [];\n  for (const token of tokens) {\n    values = values.concat(callback.call(marked, token));\n    switch (token.type) {\n      case 'table': {\n        for (const cell of token.header) {\n          values = values.concat(marked.walkTokens(cell.tokens, callback));\n        }\n        for (const row of token.rows) {\n          for (const cell of row) {\n            values = values.concat(marked.walkTokens(cell.tokens, callback));\n          }\n        }\n        break;\n      }\n      case 'list': {\n        values = values.concat(marked.walkTokens(token.items, callback));\n        break;\n      }\n      default: {\n        if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) { // Walk any extensions\n          marked.defaults.extensions.childTokens[token.type].forEach(function(childTokens) {\n            values = values.concat(marked.walkTokens(token[childTokens], callback));\n          });\n        } else if (token.tokens) {\n          values = values.concat(marked.walkTokens(token.tokens, callback));\n        }\n      }\n    }\n  }\n  return values;\n};\n\n/**\n * Parse Inline\n * @param {string} src\n */\nmarked.parseInline = parseMarkdown(Lexer.lexInline, Parser.parseInline);\n\n/**\n * Expose\n */\nmarked.Parser = Parser;\nmarked.parser = Parser.parse;\nmarked.Renderer = Renderer;\nmarked.TextRenderer = TextRenderer;\nmarked.Lexer = Lexer;\nmarked.lexer = Lexer.lex;\nmarked.Tokenizer = Tokenizer;\nmarked.Slugger = Slugger;\nmarked.Hooks = Hooks;\nmarked.parse = marked;\n\nconst options = marked.options;\nconst setOptions = marked.setOptions;\nconst use = marked.use;\nconst walkTokens = marked.walkTokens;\nconst parseInline = marked.parseInline;\nconst parse = marked;\nconst parser = Parser.parse;\nconst lexer = Lexer.lex;\n\nexport { Hooks, Lexer, Parser, Renderer, Slugger, TextRenderer, Tokenizer, defaults, getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { marked } from \"marked\"\n\nexport default class extends Controller {\n  static values = {\n    projectId: String\n  }\n\n  connect() {\n    console.log(\"Support Knowledge Controller connected\")\n    this.method = \"GET\" // Default method for search and retrieve_context\n    \n    // Configure marked options\n    marked.setOptions({\n      breaks: true,        // Add line breaks\n      gfm: true,           // Enable GitHub Flavored Markdown\n      headerIds: false,    // Don't add ids to headers\n      sanitize: false      // Don't sanitize (we'll handle that ourselves)\n    })\n  }\n  \n  toggleMethod(event) {\n    const endpoint = event.target.value\n    // Set method to POST for the ask API, GET for others\n    this.method = endpoint === \"ask\" ? \"POST\" : \"GET\"\n  }\n\n  testApi(event) {\n    event.preventDefault()\n    \n    const form = event.target.closest(\"form\")\n    const endpoint = form.querySelector(\"#api_endpoint\").value\n    const query = form.querySelector(\"#query\").value\n    const projectId = this.projectIdValue\n    \n    if (!query) {\n      this.showError(\"Please enter a query\")\n      return\n    }\n    \n    this.showLoading()\n    \n    // Construct the URL - using top-level routes instead of API namespace\n    const baseUrl = `/projects/${projectId}/support_knowledge/${endpoint}`\n    \n    // Make the API request based on the selected endpoint\n    if (this.method === \"GET\") {\n      // For search and retrieve_context endpoints (GET)\n      fetch(`${baseUrl}?query=${encodeURIComponent(query)}`, {\n        headers: {\n          \"Accept\": \"application/json\",\n          \"X-CSRF-Token\": this.getCsrfToken()\n        }\n      })\n      .then(response => this.handleResponse(response))\n      .catch(error => this.handleError(error))\n    } else {\n      // For ask endpoint (POST)\n      fetch(baseUrl, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"Accept\": \"application/json\",\n          \"X-CSRF-Token\": this.getCsrfToken()\n        },\n        body: JSON.stringify({\n          project_id: projectId,\n          query: query\n        })\n      })\n      .then(response => this.handleResponse(response))\n      .catch(error => this.handleError(error))\n    }\n  }\n  \n  handleResponse(response) {\n    this.hideLoading()\n    \n    if (!response.ok) {\n      return response.json().then(data => {\n        this.showError(`Error: ${data.error || response.statusText}`)\n      }).catch(() => {\n        this.showError(`Error: ${response.status} ${response.statusText}`)\n      })\n    }\n    \n    return response.json().then(data => {\n      this.displayResponse(data)\n    })\n  }\n  \n  handleError(error) {\n    this.hideLoading()\n    this.showError(`Error: ${error.message}`)\n  }\n  \n  displayResponse(data) {\n    const container = document.getElementById(\"api-response-container\")\n    \n    // Format the JSON response for better readability\n    const formattedJson = JSON.stringify(data, null, 2)\n    \n    // Create a styled pre element for the response\n    container.innerHTML = `\n      <pre class=\"bg-light p-3 rounded\" style=\"max-height: 500px; overflow-y: auto;\">${this.escapeHtml(formattedJson)}</pre>\n    `\n    \n    // If it's an \"ask\" response with a direct answer, show it prominently with markdown formatting\n    if (data.answer) {\n      // Parse the markdown\n      const parsedMarkdown = marked.parse(data.answer)\n      \n      const answerHtml = `\n        <div class=\"alert alert-info mb-3\">\n          <h6 class=\"mb-2\">Answer:</h6>\n          <div class=\"markdown-content\">${parsedMarkdown}</div>\n        </div>\n      `\n      container.innerHTML = answerHtml + container.innerHTML\n    }\n  }\n  \n  showError(message) {\n    const container = document.getElementById(\"api-response-container\")\n    container.innerHTML = `\n      <div class=\"alert alert-danger\">\n        ${this.escapeHtml(message)}\n      </div>\n    `\n  }\n  \n  showLoading() {\n    document.getElementById(\"api-response-loading\").classList.remove(\"d-none\")\n    document.getElementById(\"api-response-container\").classList.add(\"d-none\")\n  }\n  \n  hideLoading() {\n    document.getElementById(\"api-response-loading\").classList.add(\"d-none\")\n    document.getElementById(\"api-response-container\").classList.remove(\"d-none\")\n  }\n  \n  getCsrfToken() {\n    return document.querySelector('meta[name=\"csrf-token\"]')?.getAttribute('content')\n  }\n  \n  escapeHtml(unsafe) {\n    if (typeof unsafe !== 'string') return unsafe\n    return unsafe\n      .replace(/&/g, \"&amp;\")\n      .replace(/</g, \"&lt;\")\n      .replace(/>/g, \"&gt;\")\n      .replace(/\"/g, \"&quot;\")\n      .replace(/'/g, \"&#039;\")\n  }\n} ", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"gibberish-detection\"\nexport default class extends Controller {\n  static targets = [\"input\", \"errorMessage\"]\n  static values = { \n    checkUrl: String,\n    debounceTime: { type: Number, default: 250 },\n    issueId: Number\n  }\n\n  initialize() {\n    this.debouncedCheck = this.debounce(this.checkContent.bind(this), this.debounceTimeValue);\n    this.isFirstValidation = true;\n    this.isGibberish = true; // Default to assuming gibberish until proven otherwise\n  }\n\n  connect() {\n    // Add input event listener\n    this.inputTarget.addEventListener(\"input\", this.handleInput.bind(this));\n    \n    // Initially disable submit button\n    this.disableSubmitButton();\n    \n    // Run initial check if there's content\n    if (this.inputTarget.value.trim().length > 0) {\n      this.checkContent();\n    }\n  }\n\n  handleInput(event) {\n    // Immediately hide error message when user starts typing\n    this.hideError();\n    \n    // Always disable button when typing until validation passes\n    this.disableSubmitButton();\n    \n    // Don't validate on first keystrokes to avoid annoying the user\n    if (this.isFirstValidation && this.inputTarget.value.trim().length < 20) {\n      return;\n    }\n    \n    this.isFirstValidation = false;\n    \n    // Start debounced check\n    this.debouncedCheck();\n  }\n\n  async checkContent() {\n    const content = this.inputTarget.value.trim();\n    \n    // Skip validation if empty\n    if (content.length === 0) {\n      this.disableSubmitButton(); // Keep button disabled if empty\n      return;\n    }\n\n    try {\n      const response = await fetch(this.checkUrlValue, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          'Accept': 'application/json',\n          'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]').content\n        },\n        body: JSON.stringify({\n          content: content,\n        })\n      });\n\n      const data = await response.json();\n      \n      if (data.is_gibberish) {\n        this.showError(data.reason || \"The text appears to be gibberish. Please provide a proper description.\");\n        this.disableSubmitButton();\n        this.isGibberish = true;\n      } else {\n        this.hideError();\n        this.enableSubmitButton();\n        this.isGibberish = false;\n      }\n    } catch (error) {\n      console.error(\"Error checking for gibberish:\", error);\n      // In case of error, keep button disabled to be safe\n      this.disableSubmitButton();\n    }\n  }\n\n  showError(message) {\n    if (this.hasErrorMessageTarget) {\n      this.errorMessageTarget.textContent = message;\n      this.errorMessageTarget.classList.remove(\"d-none\");\n    } else {\n      // Create a new error message div if one doesn't exist\n      const errorDiv = document.createElement(\"div\");\n      errorDiv.textContent = message;\n      errorDiv.classList.add(\"alert\", \"alert-warning\", \"mt-2\");\n      errorDiv.setAttribute(\"data-gibberish-detection-target\", \"errorMessage\");\n      this.inputTarget.parentNode.insertBefore(errorDiv, this.inputTarget.nextSibling);\n      this.errorMessageTarget = errorDiv;\n    }\n  }\n\n  hideError() {\n    if (this.hasErrorMessageTarget) {\n      this.errorMessageTarget.classList.add(\"d-none\");\n    }\n  }\n\n  disableSubmitButton() {\n    const submitButton = this.findSubmitButton();\n    if (submitButton) {\n      submitButton.disabled = true;\n      submitButton.classList.add(\"disabled\");\n    }\n  }\n\n  enableSubmitButton() {\n    const submitButton = this.findSubmitButton();\n    if (submitButton) {\n      submitButton.disabled = false;\n      submitButton.classList.remove(\"disabled\");\n    }\n  }\n\n  findSubmitButton() {\n    // Find the closest form element from our input target\n    const form = this.inputTarget.closest('form');\n    if (!form) return null;\n\n    // Find the submit button within the form using the ID we know it has\n    return form.querySelector(`#submit-issue-button-${this.issueIdValue}`);\n  }\n\n  // Utility function for debouncing\n  debounce(func, wait) {\n    let timeout;\n    return function() {\n      const context = this;\n      const args = arguments;\n      clearTimeout(timeout);\n      timeout = setTimeout(() => {\n        func.apply(context, args);\n      }, wait);\n    };\n  }\n} ", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"collapse\", \"dropdownIndicator\"]\n\n  connect() {\n    // Check if we have saved state in localStorage\n    this.loadCollapseState()\n    \n    // Add event listener for bootstrap collapse events\n    this.collapseTargets.forEach(collapse => {\n      collapse.addEventListener('shown.bs.collapse', this.handleCollapseShown.bind(this))\n      collapse.addEventListener('hidden.bs.collapse', this.handleCollapseHidden.bind(this))\n    })\n  }\n\n  disconnect() {\n    // Clean up event listeners\n    this.collapseTargets.forEach(collapse => {\n      collapse.removeEventListener('shown.bs.collapse', this.handleCollapseShown.bind(this))\n      collapse.removeEventListener('hidden.bs.collapse', this.handleCollapseHidden.bind(this))\n    })\n  }\n\n  loadCollapseState() {\n    this.collapseTargets.forEach(collapse => {\n      const id = collapse.id\n      const isExpanded = localStorage.getItem(`sidebar-collapse-${id}`) === 'true'\n      \n      if (isExpanded) {\n        // If it should be expanded, add the 'show' class\n        collapse.classList.add('show')\n        this.dropdownIndicatorTargets.forEach(dropdownIndicator => {\n          dropdownIndicator.setAttribute('aria-expanded', 'true')\n        })\n      } else {\n        // If it should be collapsed, remove the 'show' class\n        collapse.classList.remove('show')\n        this.dropdownIndicatorTargets.forEach(dropdownIndicator => {\n          dropdownIndicator.setAttribute('aria-expanded', 'false')\n        })\n      }\n    })\n  }\n\n  handleCollapseShown(event) {\n    const id = event.target.id\n    localStorage.setItem(`sidebar-collapse-${id}`, 'true')\n    this.dropdownIndicatorTargets.forEach(dropdownIndicator => {\n      dropdownIndicator.setAttribute('aria-expanded', 'true')\n    })\n  }\n\n  handleCollapseHidden(event) {\n    const id = event.target.id\n    localStorage.setItem(`sidebar-collapse-${id}`, 'false')\n    this.dropdownIndicatorTargets.forEach(dropdownIndicator => {\n      dropdownIndicator.setAttribute('aria-expanded', 'false')\n    })\n  }\n} ", "const onRender = () => {\n    const players = document.getElementsByClassName(\"video-js\");\n    for (let player of players) {\n        // apply videojs scripts on player\n        videojs(player);\n    }\n};\n\ndocument.addEventListener(\"turbo:render\", onRender);\n", "// This code is responsible for setting a user's timezone when they first visit the site.\n\nconst setTimezone = () => {\n\n    // this is set to false if user's timezone has not been set yet\n    const timezoneSet = document.querySelector(\"#timezone_set\");\n\n    if (timezoneSet && timezoneSet.value === \"false\") {\n        const currentUserTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n        let headers = {\n            \"Content-Type\": \"application/json\",\n        };\n\n        const csrfToken = document.querySelector(\"meta[name=csrf-token]\");\n        if (csrfToken) {\n            headers[\"X-CSRF-Token\"] = csrfToken.content;\n        }\n\n        fetch(`/profiles/me/set_timezone`, {\n            method: \"PATCH\",\n            headers: headers,\n            body: JSON.stringify({ timezone: currentUserTimezone }),\n        }).then((response) => {\n            if (response.ok) {\n                console.log(\"Timezone updated successfully\");\n            } else {\n                console.error(\"Error updating timezone\");\n            }\n        });\n    }\n}\n\ndocument.addEventListener(\"turbo:render\", setTimezone);\ndocument.addEventListener(\"turbo:load\", setTimezone);", "// Function to add issue ID to recently visited list in local storage\nwindow.addIssueToRecentList = function(issueId) {\n  // Key for local storage\n  const storageKey = 'recentlyVisitedIssues';\n\n  // Retrieve the existing list from local storage\n  let recentIssues = JSON.parse(localStorage.getItem(storageKey)) || [];\n\n  // Add the current issue ID at the start of the array\n  recentIssues.unshift(issueId);\n\n  // Remove duplicates\n  recentIssues = [...new Set(recentIssues)];\n\n  // Limit the list to the last 8 issues\n  if (recentIssues.length > 8) {\n    recentIssues.length = 8;\n  }\n\n  // Save the updated list back to local storage\n  localStorage.setItem(storageKey, JSON.stringify(recentIssues));\n}\n\nwindow.getRecentIssues = function() {\n  // Key for local storage\n  const storageKey = 'recentlyVisitedIssues';\n\n  // Retrieve the list from local storage\n  return JSON.parse(localStorage.getItem(storageKey)) || [];\n}\n\n// Function to display recently visited issues\nfunction displayRecentIssues() {\n  // Key for local storage\n  const storageKey = 'recentlyVisitedIssues';\n\n  // Retrieve the list from local storage\n  let recentIssues = JSON.parse(localStorage.getItem(storageKey)) || [];\n\n  // Display the list\n  console.log('Recently Visited Issues:', recentIssues);\n  // Implement your display logic here, such as updating the DOM or console output\n}\n\n// // Example usage:\n// // Call this function when an issue page is visited\n// addIssueToRecentList('Issue123');\n//\n// // Call this function wherever you need to show the recently visited issues\n// displayRecentIssues();\n", "// Entry point for the build script in your package.json\nimport \"@hotwired/turbo-rails\"\nimport \"./controllers\"\nimport \"./custom/videojs_reload\"\nimport \"./custom/timezone\"\nimport \"./custom/recent_issues\"\nimport ClipboardJS from 'clipboard';\n\nfunction initializeClipboard() {\n    // Initialize tooltips\n    const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"tooltip\"]'));\n    const tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {\n        return new bootstrap.Tooltip(tooltipTriggerEl);\n    });\n\n    const clipboard = new ClipboardJS('.btn[data-clipboard-target]');\n\n    // Optional: Add event listeners for clipboard.js events\n    clipboard.on('success', function (e) {\n        console.log('Text copied:', e.text);\n\n        e.trigger.setAttribute('data-bs-original-title', 'Copied!');\n        const tooltipInstance = bootstrap.Tooltip.getInstance(e.trigger);\n        tooltipInstance.show();\n\n        // Reset the tooltip text after a short delay\n        setTimeout(() => {\n            e.trigger.setAttribute('data-bs-original-title', 'Copy to clipboard');\n            tooltipInstance.hide();\n        }, 1000);\n\n        e.clearSelection();\n    });\n\n    clipboard.on('error', function (e) {\n        console.error('Action:', e.action);\n        console.error('Trigger:', e.trigger);\n    });\n}\n\ndocument.addEventListener('turbo:render', () => {\n    initializeClipboard();\n    // check if Dropzone is defined\n    if (typeof Dropzone !== 'undefined') {\n        Dropzone.autoDiscover = false;\n    }\n});\n\ndocument.addEventListener('turbo:load', (event) => {\n    // This updates Matomo with the current page URL\n    if (typeof _paq !== 'undefined') {\n        // console.log('Matomo is loaded');\n        _paq.push(['setCustomUrl', event.detail.url]);\n        _paq.push(['setDocumentTitle', document.title]);\n        // _paq.push(['trackPageView']); // not needed, since it's triggeted by Google Tag Manager turbo:load event\n    }\n\n    // let the Google Tag Manager know that the page has been loaded\n    if (typeof dataLayer !== 'undefined') {\n        dataLayer.push({'event': 'turbo:load'});\n    }\n\n    initializeClipboard();\n});\n\n// on document ready\ndocument.addEventListener('DOMContentLoaded', () => {\n    // BetaHub Console Easter Egg\n    console.log(\"%cWelcome to BetaHub's secret lair!\", \"font-size: 24px; font-weight: bold; color: #7289DA;\");\n    console.log(\"%cYou've found our hidden console message. Nice bug-hunting skills!\", \"font-size: 16px; color: #43B581;\");\n    console.log(\"%c\", \"font-size: 100px; background: url(https://media.giphy.com/media/LmNwrBhejkK9EFP504/giphy.gif) no-repeat; background-size: contain;\");\n    console.log(\"%cFeel free to report any bugs you find... or create new ones. We love a challenge!\", \"font-size: 16px; color: #FAA61A;\");\n    console.log(\"%cHappy gaming and bug squashing!\", \"font-size: 18px; font-weight: bold; color: #7289DA;\");\n});"],
  "mappings": "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",
  "names": ["consumer", "error", "event", "consumer", "consumer", "subscription", "__webpack_require__", "ClipboardActionCut", "fakeCopyAction", "options", "ClipboardActionCopy", "_typeof", "obj", "ClipboardActionDefault", "_setPrototypeOf", "o", "p", "self", "_getPrototypeOf", "Clipboard", "action", "module", "exports", "HTMLElement", "event", "FrameLoadingStyle", "location", "FetchMethod", "error", "FormSubmissionState", "FormEnctype", "cookie", "options", "block", "TimingMetric", "VisitState", "SystemStatusCode", "session", "visit", "PageStage", "Turbo", "element", "document", "createConsumer", "event", "event", "event", "application", "error", "options", "fetch", "match", "oldValue", "error", "constructor", "extend", "application", "element", "event", "event", "error", "event", "del", "event", "error", "event", "event", "error", "event", "event", "event", "event", "filterName", "event", "error", "event", "event", "event", "error", "error", "getDefaultOptions", "event", "event", "event", "response", "event", "event", "error", "event", "event", "event", "event", "options", "event", "event", "event", "event", "event", "error", "error", "event", "noopTest", "lexer", "options", "start", "text", "mangle", "smartypants", "Renderer", "parser", "src", "args", "ret", "walkTokens", "event", "error", "event", "error", "event", "NotificationsController", "ClipboardJS", "event"]
}