{
  "version": 3,
  "sources": ["../../../../../shared/node_modules/@rails/actioncable/src/adapters.js", "../../../../../shared/node_modules/@rails/actioncable/src/logger.js", "../../../../../shared/node_modules/@rails/actioncable/src/connection_monitor.js", "../../../../../shared/node_modules/@rails/actioncable/src/internal.js", "../../../../../shared/node_modules/@rails/actioncable/src/connection.js", "../../../../../shared/node_modules/@rails/actioncable/src/subscription.js", "../../../../../shared/node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../../../shared/node_modules/@rails/actioncable/src/subscriptions.js", "../../../../../shared/node_modules/@rails/actioncable/src/consumer.js", "../../../../../shared/node_modules/@rails/actioncable/src/index.js", "../../../../../shared/node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../../../../shared/node_modules/@hotwired/stimulus/dist/stimulus.js", "../../../../../shared/node_modules/tailwindcss-stimulus-components/dist/tailwindcss-stimulus-components.module.js", "../../javascript/controllers/application.js", "../../javascript/controllers/cloudflare_turnstile_controller.js", "../../javascript/controllers/hello_controller.js", "../../javascript/controllers/index.js", "../../../../../shared/node_modules/trix/src/trix/config/attachments.js", "../../../../../shared/node_modules/trix/src/trix/config/block_attributes.js", "../../../../../shared/node_modules/trix/src/trix/config/browser.js", "../../../../../shared/node_modules/trix/src/trix/config/lang.js", "../../../../../shared/node_modules/trix/src/trix/config/file_size_formatting.js", "../../../../../shared/node_modules/trix/src/trix/constants.js", "../../../../../shared/node_modules/trix/src/trix/core/helpers/extend.js", "../../../../../shared/node_modules/trix/src/trix/core/helpers/dom.js", "../../../../../shared/node_modules/trix/src/trix/config/input.js", "../../../../../shared/node_modules/trix/src/trix/config/key_names.js", "../../../../../shared/node_modules/trix/src/trix/config/parser.js", "../../../../../shared/node_modules/trix/src/trix/config/text_attributes.js", "../../../../../shared/node_modules/trix/src/trix/config/toolbar.js", "../../../../../shared/node_modules/trix/src/trix/config/undo.js", "../../../../../shared/node_modules/trix/src/trix/config/css.js", "../../../../../shared/node_modules/trix/src/trix/core/basic_object.js", "../../../../../shared/node_modules/trix/src/trix/core/utilities/utf16_string.js", "../../../../../shared/node_modules/trix/src/trix/core/object.js", "../../../../../shared/node_modules/trix/src/trix/core/helpers/arrays.js", "../../../../../shared/node_modules/trix/src/trix/core/helpers/bidi.js", "../../../../../shared/node_modules/trix/src/trix/core/helpers/config.js", "../../../../../shared/node_modules/trix/src/trix/core/helpers/custom_elements.js", "../../../../../shared/node_modules/trix/src/trix/core/helpers/events.js", "../../../../../shared/node_modules/trix/src/trix/core/helpers/functions.js", "../../../../../shared/node_modules/trix/src/trix/core/helpers/objects.js", "../../../../../shared/node_modules/trix/src/trix/core/helpers/ranges.js", "../../../../../shared/node_modules/trix/src/trix/observers/selection_change_observer.js", "../../../../../shared/node_modules/trix/src/trix/core/helpers/strings.js", "../../../../../shared/node_modules/trix/src/trix/core/collections/hash.js", "../../../../../shared/node_modules/trix/src/trix/core/collections/object_group.js", "../../../../../shared/node_modules/trix/src/trix/core/collections/object_map.js", "../../../../../shared/node_modules/trix/src/trix/core/collections/element_store.js", "../../../../../shared/node_modules/trix/src/trix/core/utilities/operation.js", "../../../../../shared/node_modules/trix/src/trix/views/object_view.js", "../../../../../shared/node_modules/trix/src/trix/models/html_sanitizer.js", "../../../../../shared/node_modules/trix/src/trix/views/attachment_view.js", "../../../../../shared/node_modules/trix/src/trix/views/previewable_attachment_view.js", "../../../../../shared/node_modules/trix/src/trix/views/piece_view.js", "../../../../../shared/node_modules/trix/src/trix/views/text_view.js", "../../../../../shared/node_modules/trix/src/trix/views/block_view.js", "../../../../../shared/node_modules/trix/src/trix/views/document_view.js", "../../../../../shared/node_modules/trix/src/trix/models/piece.js", "../../../../../shared/node_modules/trix/src/trix/operations/image_preload_operation.js", "../../../../../shared/node_modules/trix/src/trix/models/attachment.js", "../../../../../shared/node_modules/trix/src/trix/models/attachment_piece.js", "../../../../../shared/node_modules/trix/src/trix/models/string_piece.js", "../../../../../shared/node_modules/trix/src/trix/models/splittable_list.js", "../../../../../shared/node_modules/trix/src/trix/models/text.js", "../../../../../shared/node_modules/trix/src/trix/models/block.js", "../../../../../shared/node_modules/trix/src/trix/models/document.js", "../../../../../shared/node_modules/trix/src/trix/models/html_parser.js", "../../../../../shared/node_modules/trix/src/trix/core/serialization.js", "../../../../../shared/node_modules/trix/src/trix/models/managed_attachment.js", "../../../../../shared/node_modules/trix/src/trix/models/attachment_manager.js", "../../../../../shared/node_modules/trix/src/trix/models/line_break_insertion.js", "../../../../../shared/node_modules/trix/src/trix/models/composition.js", "../../../../../shared/node_modules/trix/src/trix/models/undo_manager.js", "../../../../../shared/node_modules/trix/src/trix/filters/filter.js", "../../../../../shared/node_modules/trix/src/trix/filters/attachment_gallery_filter.js", "../../../../../shared/node_modules/trix/src/trix/models/editor.js", "../../../../../shared/node_modules/trix/src/trix/models/location_mapper.js", "../../../../../shared/node_modules/trix/src/trix/models/point_mapper.js", "../../../../../shared/node_modules/trix/src/trix/models/selection_manager.js", "../../../../../shared/node_modules/trix/src/trix/controllers/attachment_editor_controller.js", "../../../../../shared/node_modules/trix/src/trix/controllers/composition_controller.js", "../../../../../shared/node_modules/trix/src/trix/controllers/controller.js", "../../../../../shared/node_modules/trix/src/trix/observers/mutation_observer.js", "../../../../../shared/node_modules/trix/src/trix/operations/file_verification_operation.js", "../../../../../shared/node_modules/trix/src/trix/models/flaky_android_keyboard_detector.js", "../../../../../shared/node_modules/trix/src/trix/controllers/input_controller.js", "../../../../../shared/node_modules/trix/src/trix/controllers/level_0_input_controller.js", "../../../../../shared/node_modules/trix/src/trix/controllers/level_2_input_controller.js", "../../../../../shared/node_modules/trix/src/trix/controllers/toolbar_controller.js", "../../../../../shared/node_modules/trix/src/trix/controllers/editor_controller.js", "../../../../../shared/node_modules/trix/src/trix/elements/trix_toolbar_element.js", "../../../../../shared/node_modules/trix/src/trix/elements/trix_editor_element.js", "../../../../../shared/node_modules/trix/src/trix/trix.js", "../../../../../shared/node_modules/@rails/actiontext/app/assets/javascripts/actiontext.esm.js"],
  "sourcesContent": ["export default {\n  logger: typeof console !== \"undefined\" ? console : undefined,\n  WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined,\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  recordMessage() {\n    this.pingedAt = now()\n  }\n\n  recordConnect() {\n    this.reconnectAttempts = 0\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    \"remote\": \"remote\"\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      const socketProtocols = [...protocols, ...this.consumer.subprotocols || []]\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`)\n      if (this.webSocket) { this.uninstallEventHandlers() }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols)\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  triedToReconnect() {\n    return this.monitor.reconnectAttempts > 0\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    this.monitor.recordMessage()\n    switch (type) {\n      case message_types.welcome:\n        if (this.triedToReconnect()) {\n          this.reconnectAttempted = true\n        }\n        this.monitor.recordConnect()\n        return this.subscriptions.reload()\n      case message_types.disconnect:\n        logger.log(`Disconnecting. Reason: ${reason}`)\n        return this.close({allowReconnect: reconnect})\n      case message_types.ping:\n        return null\n      case message_types.confirmation:\n        this.subscriptions.confirmSubscription(identifier)\n        if (this.reconnectAttempted) {\n          this.reconnectAttempted = false\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: true})\n        } else {\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: false})\n        }\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    this.subprotocols = []\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  addSubProtocol(subprotocol) {\n    this.subprotocols = [...this.subprotocols, subprotocol]\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", "/*!\nTurbo 8.0.12\nCopyright \u00A9 2024 37signals LLC\n */\n/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Javan Makhmali\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function (prototype) {\n  if (typeof prototype.requestSubmit == \"function\") return\n\n  prototype.requestSubmit = function (submitter) {\n    if (submitter) {\n      validateSubmitter(submitter, this);\n      submitter.click();\n    } else {\n      submitter = document.createElement(\"input\");\n      submitter.type = \"submit\";\n      submitter.hidden = true;\n      this.appendChild(submitter);\n      submitter.click();\n      this.removeChild(submitter);\n    }\n  };\n\n  function validateSubmitter(submitter, form) {\n    submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n    submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n    submitter.form == form ||\n      raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n  }\n\n  function raise(errorConstructor, message, name) {\n    throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n  }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n  const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n  const candidate = element ? element.closest(\"input, button\") : null;\n  return candidate?.type == \"submit\" ? candidate : null\n}\n\nfunction clickCaptured(event) {\n  const submitter = findSubmitterFromClickTarget(event.target);\n\n  if (submitter && submitter.form) {\n    submittersByForm.set(submitter.form, submitter);\n  }\n}\n\n(function () {\n  if (\"submitter\" in Event.prototype) return\n\n  let prototype = window.Event.prototype;\n  // Certain versions of Safari 15 have a bug where they won't\n  // populate the submitter. This hurts TurboDrive's enable/disable detection.\n  // See https://bugs.webkit.org/show_bug.cgi?id=229660\n  if (\"SubmitEvent\" in window) {\n    const prototypeOfSubmitEvent = window.SubmitEvent.prototype;\n\n    if (/Apple Computer/.test(navigator.vendor) && !(\"submitter\" in prototypeOfSubmitEvent)) {\n      prototype = prototypeOfSubmitEvent;\n    } else {\n      return // polyfill not needed\n    }\n  }\n\n  addEventListener(\"click\", clickCaptured, true);\n\n  Object.defineProperty(prototype, \"submitter\", {\n    get() {\n      if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n        return submittersByForm.get(this.target)\n      }\n    }\n  });\n})();\n\nconst FrameLoadingStyle = {\n  eager: \"eager\",\n  lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n *   <turbo-frame id=\"messages\">\n *     <a href=\"/messages/expanded\">\n *       Show all expanded messages in this frame.\n *     </a>\n *\n *     <form action=\"/messages\">\n *       Show response from this form within this frame.\n *     </form>\n *   </turbo-frame>\n */\nclass FrameElement extends HTMLElement {\n  static delegateConstructor = undefined\n\n  loaded = Promise.resolve()\n\n  static get observedAttributes() {\n    return [\"disabled\", \"loading\", \"src\"]\n  }\n\n  constructor() {\n    super();\n    this.delegate = new FrameElement.delegateConstructor(this);\n  }\n\n  connectedCallback() {\n    this.delegate.connect();\n  }\n\n  disconnectedCallback() {\n    this.delegate.disconnect();\n  }\n\n  reload() {\n    return this.delegate.sourceURLReloaded()\n  }\n\n  attributeChangedCallback(name) {\n    if (name == \"loading\") {\n      this.delegate.loadingStyleChanged();\n    } else if (name == \"src\") {\n      this.delegate.sourceURLChanged();\n    } else if (name == \"disabled\") {\n      this.delegate.disabledChanged();\n    }\n  }\n\n  /**\n   * Gets the URL to lazily load source HTML from\n   */\n  get src() {\n    return this.getAttribute(\"src\")\n  }\n\n  /**\n   * Sets the URL to lazily load source HTML from\n   */\n  set src(value) {\n    if (value) {\n      this.setAttribute(\"src\", value);\n    } else {\n      this.removeAttribute(\"src\");\n    }\n  }\n\n  /**\n   * Gets the refresh mode for the frame.\n   */\n  get refresh() {\n    return this.getAttribute(\"refresh\")\n  }\n\n  /**\n   * Sets the refresh mode for the frame.\n   */\n  set refresh(value) {\n    if (value) {\n      this.setAttribute(\"refresh\", value);\n    } else {\n      this.removeAttribute(\"refresh\");\n    }\n  }\n\n  get shouldReloadWithMorph() {\n    return this.src && this.refresh === \"morph\"\n  }\n\n  /**\n   * Determines if the element is loading\n   */\n  get loading() {\n    return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n  }\n\n  /**\n   * Sets the value of if the element is loading\n   */\n  set loading(value) {\n    if (value) {\n      this.setAttribute(\"loading\", value);\n    } else {\n      this.removeAttribute(\"loading\");\n    }\n  }\n\n  /**\n   * Gets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  get disabled() {\n    return this.hasAttribute(\"disabled\")\n  }\n\n  /**\n   * Sets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  set disabled(value) {\n    if (value) {\n      this.setAttribute(\"disabled\", \"\");\n    } else {\n      this.removeAttribute(\"disabled\");\n    }\n  }\n\n  /**\n   * Gets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  get autoscroll() {\n    return this.hasAttribute(\"autoscroll\")\n  }\n\n  /**\n   * Sets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  set autoscroll(value) {\n    if (value) {\n      this.setAttribute(\"autoscroll\", \"\");\n    } else {\n      this.removeAttribute(\"autoscroll\");\n    }\n  }\n\n  /**\n   * Determines if the element has finished loading\n   */\n  get complete() {\n    return !this.delegate.isLoading\n  }\n\n  /**\n   * Gets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isActive() {\n    return this.ownerDocument === document && !this.isPreview\n  }\n\n  /**\n   * Sets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isPreview() {\n    return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n  }\n}\n\nfunction frameLoadingStyleFromString(style) {\n  switch (style.toLowerCase()) {\n    case \"lazy\":\n      return FrameLoadingStyle.lazy\n    default:\n      return FrameLoadingStyle.eager\n  }\n}\n\nconst drive = {\n  enabled: true,\n  progressBarDelay: 500,\n  unvisitableExtensions: new Set(\n    [\n      \".7z\", \".aac\", \".apk\", \".avi\", \".bmp\", \".bz2\", \".css\", \".csv\", \".deb\", \".dmg\", \".doc\",\n      \".docx\", \".exe\", \".gif\", \".gz\", \".heic\", \".heif\", \".ico\", \".iso\", \".jpeg\", \".jpg\",\n      \".js\", \".json\", \".m4a\", \".mkv\", \".mov\", \".mp3\", \".mp4\", \".mpeg\", \".mpg\", \".msi\",\n      \".ogg\", \".ogv\", \".pdf\", \".pkg\", \".png\", \".ppt\", \".pptx\", \".rar\", \".rtf\",\n      \".svg\", \".tar\", \".tif\", \".tiff\", \".txt\", \".wav\", \".webm\", \".webp\", \".wma\", \".wmv\",\n      \".xls\", \".xlsx\", \".xml\", \".zip\"\n    ]\n  )\n};\n\nfunction activateScriptElement(element) {\n  if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n    return element\n  } else {\n    const createdScriptElement = document.createElement(\"script\");\n    const cspNonce = getCspNonce();\n    if (cspNonce) {\n      createdScriptElement.nonce = cspNonce;\n    }\n    createdScriptElement.textContent = element.textContent;\n    createdScriptElement.async = false;\n    copyElementAttributes(createdScriptElement, element);\n    return createdScriptElement\n  }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n  for (const { name, value } of sourceElement.attributes) {\n    destinationElement.setAttribute(name, value);\n  }\n}\n\nfunction createDocumentFragment(html) {\n  const template = document.createElement(\"template\");\n  template.innerHTML = html;\n  return template.content\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n  const event = new CustomEvent(eventName, {\n    cancelable,\n    bubbles: true,\n    composed: true,\n    detail\n  });\n\n  if (target && target.isConnected) {\n    target.dispatchEvent(event);\n  } else {\n    document.documentElement.dispatchEvent(event);\n  }\n\n  return event\n}\n\nfunction cancelEvent(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n\nfunction nextRepaint() {\n  if (document.visibilityState === \"hidden\") {\n    return nextEventLoopTick()\n  } else {\n    return nextAnimationFrame()\n  }\n}\n\nfunction nextAnimationFrame() {\n  return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n  return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction nextMicrotask() {\n  return Promise.resolve()\n}\n\nfunction parseHTMLDocument(html = \"\") {\n  return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nfunction unindent(strings, ...values) {\n  const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n  const match = lines[0].match(/^\\s+/);\n  const indent = match ? match[0].length : 0;\n  return lines.map((line) => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings, values) {\n  return strings.reduce((result, string, i) => {\n    const value = values[i] == undefined ? \"\" : values[i];\n    return result + string + value\n  }, \"\")\n}\n\nfunction uuid() {\n  return Array.from({ length: 36 })\n    .map((_, i) => {\n      if (i == 8 || i == 13 || i == 18 || i == 23) {\n        return \"-\"\n      } else if (i == 14) {\n        return \"4\"\n      } else if (i == 19) {\n        return (Math.floor(Math.random() * 4) + 8).toString(16)\n      } else {\n        return Math.floor(Math.random() * 15).toString(16)\n      }\n    })\n    .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n  for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n    if (typeof value == \"string\") return value\n  }\n\n  return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n  return elements.some((element) => element && element.hasAttribute(attributeName))\n}\n\nfunction markAsBusy(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.setAttribute(\"busy\", \"\");\n    }\n    element.setAttribute(\"aria-busy\", \"true\");\n  }\n}\n\nfunction clearBusyState(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.removeAttribute(\"busy\");\n    }\n\n    element.removeAttribute(\"aria-busy\");\n  }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n  return new Promise((resolve) => {\n    const onComplete = () => {\n      element.removeEventListener(\"error\", onComplete);\n      element.removeEventListener(\"load\", onComplete);\n      resolve();\n    };\n\n    element.addEventListener(\"load\", onComplete, { once: true });\n    element.addEventListener(\"error\", onComplete, { once: true });\n    setTimeout(resolve, timeoutInMilliseconds);\n  })\n}\n\nfunction getHistoryMethodForAction(action) {\n  switch (action) {\n    case \"replace\":\n      return history.replaceState\n    case \"advance\":\n    case \"restore\":\n      return history.pushState\n  }\n}\n\nfunction isAction(action) {\n  return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n  const action = getAttribute(\"data-turbo-action\", ...elements);\n\n  return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n  return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n  const element = getMetaElement(name);\n  return element && element.content\n}\n\nfunction getCspNonce() {\n  const element = getMetaElement(\"csp-nonce\");\n\n  if (element) {\n    const { nonce, content } = element;\n    return nonce == \"\" ? content : nonce\n  }\n}\n\nfunction setMetaContent(name, content) {\n  let element = getMetaElement(name);\n\n  if (!element) {\n    element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", name);\n\n    document.head.appendChild(element);\n  }\n\n  element.setAttribute(\"content\", content);\n\n  return element\n}\n\nfunction findClosestRecursively(element, selector) {\n  if (element instanceof Element) {\n    return (\n      element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n    )\n  }\n}\n\nfunction elementIsFocusable(element) {\n  const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n  return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n  return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n  const before = reader();\n\n  callback();\n\n  await nextAnimationFrame();\n\n  const after = reader();\n\n  return [before, after]\n}\n\nfunction doesNotTargetIFrame(name) {\n  if (name === \"_blank\") {\n    return false\n  } else if (name) {\n    for (const element of document.getElementsByName(name)) {\n      if (element instanceof HTMLIFrameElement) return false\n    }\n\n    return true\n  } else {\n    return true\n  }\n}\n\nfunction findLinkFromClickTarget(target) {\n  return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\")\n}\n\nfunction getLocationForLink(link) {\n  return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction debounce(fn, delay) {\n  let timeoutId = null;\n\n  return (...args) => {\n    const callback = () => fn.apply(this, args);\n    clearTimeout(timeoutId);\n    timeoutId = setTimeout(callback, delay);\n  }\n}\n\nconst submitter = {\n  \"aria-disabled\": {\n    beforeSubmit: submitter => {\n      submitter.setAttribute(\"aria-disabled\", \"true\");\n      submitter.addEventListener(\"click\", cancelEvent);\n    },\n\n    afterSubmit: submitter => {\n      submitter.removeAttribute(\"aria-disabled\");\n      submitter.removeEventListener(\"click\", cancelEvent);\n    }\n  },\n\n  \"disabled\": {\n    beforeSubmit: submitter => submitter.disabled = true,\n    afterSubmit: submitter => submitter.disabled = false\n  }\n};\n\nclass Config {\n  #submitter = null\n\n  constructor(config) {\n    Object.assign(this, config);\n  }\n\n  get submitter() {\n    return this.#submitter\n  }\n\n  set submitter(value) {\n    this.#submitter = submitter[value] || value;\n  }\n}\n\nconst forms = new Config({\n  mode: \"on\",\n  submitter: \"disabled\"\n});\n\nconst config = {\n  drive,\n  forms\n};\n\nfunction expandURL(locatable) {\n  return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n  let anchorMatch;\n  if (url.hash) {\n    return url.hash.slice(1)\n    // eslint-disable-next-line no-cond-assign\n  } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n    return anchorMatch[1]\n  }\n}\n\nfunction getAction$1(form, submitter) {\n  const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n  return expandURL(action)\n}\n\nfunction getExtension(url) {\n  return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isPrefixedBy(baseURL, url) {\n  const prefix = getPrefix(url);\n  return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n  return isPrefixedBy(location, rootLocation) && !config.drive.unvisitableExtensions.has(getExtension(location))\n}\n\nfunction getRequestURL(url) {\n  const anchor = getAnchor(url);\n  return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n  return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n  return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n  return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n  return getPathComponents(url).slice(-1)[0]\n}\n\nfunction getPrefix(url) {\n  return addTrailingSlash(url.origin + url.pathname)\n}\n\nfunction addTrailingSlash(value) {\n  return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n  constructor(response) {\n    this.response = response;\n  }\n\n  get succeeded() {\n    return this.response.ok\n  }\n\n  get failed() {\n    return !this.succeeded\n  }\n\n  get clientError() {\n    return this.statusCode >= 400 && this.statusCode <= 499\n  }\n\n  get serverError() {\n    return this.statusCode >= 500 && this.statusCode <= 599\n  }\n\n  get redirected() {\n    return this.response.redirected\n  }\n\n  get location() {\n    return expandURL(this.response.url)\n  }\n\n  get isHTML() {\n    return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n  }\n\n  get statusCode() {\n    return this.response.status\n  }\n\n  get contentType() {\n    return this.header(\"Content-Type\")\n  }\n\n  get responseText() {\n    return this.response.clone().text()\n  }\n\n  get responseHTML() {\n    if (this.isHTML) {\n      return this.response.clone().text()\n    } else {\n      return Promise.resolve(undefined)\n    }\n  }\n\n  header(name) {\n    return this.response.headers.get(name)\n  }\n}\n\nclass LimitedSet extends Set {\n  constructor(maxSize) {\n    super();\n    this.maxSize = maxSize;\n  }\n\n  add(value) {\n    if (this.size >= this.maxSize) {\n      const iterator = this.values();\n      const oldestValue = iterator.next().value;\n      this.delete(oldestValue);\n    }\n    super.add(value);\n  }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nconst nativeFetch = window.fetch;\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n  const modifiedHeaders = new Headers(options.headers || {});\n  const requestUID = uuid();\n  recentRequests.add(requestUID);\n  modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n  return nativeFetch(url, {\n    ...options,\n    headers: modifiedHeaders\n  })\n}\n\nfunction fetchMethodFromString(method) {\n  switch (method.toLowerCase()) {\n    case \"get\":\n      return FetchMethod.get\n    case \"post\":\n      return FetchMethod.post\n    case \"put\":\n      return FetchMethod.put\n    case \"patch\":\n      return FetchMethod.patch\n    case \"delete\":\n      return FetchMethod.delete\n  }\n}\n\nconst FetchMethod = {\n  get: \"get\",\n  post: \"post\",\n  put: \"put\",\n  patch: \"patch\",\n  delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n  switch (encoding.toLowerCase()) {\n    case FetchEnctype.multipart:\n      return FetchEnctype.multipart\n    case FetchEnctype.plain:\n      return FetchEnctype.plain\n    default:\n      return FetchEnctype.urlEncoded\n  }\n}\n\nconst FetchEnctype = {\n  urlEncoded: \"application/x-www-form-urlencoded\",\n  multipart: \"multipart/form-data\",\n  plain: \"text/plain\"\n};\n\nclass FetchRequest {\n  abortController = new AbortController()\n  #resolveRequestPromise = (_value) => {}\n\n  constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n    const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n    this.delegate = delegate;\n    this.url = url;\n    this.target = target;\n    this.fetchOptions = {\n      credentials: \"same-origin\",\n      redirect: \"follow\",\n      method: method.toUpperCase(),\n      headers: { ...this.defaultHeaders },\n      body: body,\n      signal: this.abortSignal,\n      referrer: this.delegate.referrer?.href\n    };\n    this.enctype = enctype;\n  }\n\n  get method() {\n    return this.fetchOptions.method\n  }\n\n  set method(value) {\n    const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n    const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n    this.url.search = \"\";\n\n    const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n    this.url = url;\n    this.fetchOptions.body = body;\n    this.fetchOptions.method = fetchMethod.toUpperCase();\n  }\n\n  get headers() {\n    return this.fetchOptions.headers\n  }\n\n  set headers(value) {\n    this.fetchOptions.headers = value;\n  }\n\n  get body() {\n    if (this.isSafe) {\n      return this.url.searchParams\n    } else {\n      return this.fetchOptions.body\n    }\n  }\n\n  set body(value) {\n    this.fetchOptions.body = value;\n  }\n\n  get location() {\n    return this.url\n  }\n\n  get params() {\n    return this.url.searchParams\n  }\n\n  get entries() {\n    return this.body ? Array.from(this.body.entries()) : []\n  }\n\n  cancel() {\n    this.abortController.abort();\n  }\n\n  async perform() {\n    const { fetchOptions } = this;\n    this.delegate.prepareRequest(this);\n    const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n    try {\n      this.delegate.requestStarted(this);\n\n      if (event.detail.fetchRequest) {\n        this.response = event.detail.fetchRequest.response;\n      } else {\n        this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n      }\n\n      const response = await this.response;\n      return await this.receive(response)\n    } catch (error) {\n      if (error.name !== \"AbortError\") {\n        if (this.#willDelegateErrorHandling(error)) {\n          this.delegate.requestErrored(this, error);\n        }\n        throw error\n      }\n    } finally {\n      this.delegate.requestFinished(this);\n    }\n  }\n\n  async receive(response) {\n    const fetchResponse = new FetchResponse(response);\n    const event = dispatch(\"turbo:before-fetch-response\", {\n      cancelable: true,\n      detail: { fetchResponse },\n      target: this.target\n    });\n    if (event.defaultPrevented) {\n      this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n    } else if (fetchResponse.succeeded) {\n      this.delegate.requestSucceededWithResponse(this, fetchResponse);\n    } else {\n      this.delegate.requestFailedWithResponse(this, fetchResponse);\n    }\n    return fetchResponse\n  }\n\n  get defaultHeaders() {\n    return {\n      Accept: \"text/html, application/xhtml+xml\"\n    }\n  }\n\n  get isSafe() {\n    return isSafe(this.method)\n  }\n\n  get abortSignal() {\n    return this.abortController.signal\n  }\n\n  acceptResponseType(mimeType) {\n    this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n  }\n\n  async #allowRequestToBeIntercepted(fetchOptions) {\n    const requestInterception = new Promise((resolve) => (this.#resolveRequestPromise = resolve));\n    const event = dispatch(\"turbo:before-fetch-request\", {\n      cancelable: true,\n      detail: {\n        fetchOptions,\n        url: this.url,\n        resume: this.#resolveRequestPromise\n      },\n      target: this.target\n    });\n    this.url = event.detail.url;\n    if (event.defaultPrevented) await requestInterception;\n\n    return event\n  }\n\n  #willDelegateErrorHandling(error) {\n    const event = dispatch(\"turbo:fetch-request-error\", {\n      target: this.target,\n      cancelable: true,\n      detail: { request: this, error: error }\n    });\n\n    return !event.defaultPrevented\n  }\n}\n\nfunction isSafe(fetchMethod) {\n  return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n  const searchParams =\n    Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n  if (isSafe(method)) {\n    return [mergeIntoURLSearchParams(resource, searchParams), null]\n  } else if (enctype == FetchEnctype.urlEncoded) {\n    return [resource, searchParams]\n  } else {\n    return [resource, requestBody]\n  }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n  const entries = [];\n\n  for (const [name, value] of requestBody) {\n    if (value instanceof File) continue\n    else entries.push([name, value]);\n  }\n\n  return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n  const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n  url.search = searchParams.toString();\n\n  return url\n}\n\nclass AppearanceObserver {\n  started = false\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n    this.intersectionObserver = new IntersectionObserver(this.intersect);\n  }\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      this.intersectionObserver.observe(this.element);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      this.intersectionObserver.unobserve(this.element);\n    }\n  }\n\n  intersect = (entries) => {\n    const lastEntry = entries.slice(-1)[0];\n    if (lastEntry?.isIntersecting) {\n      this.delegate.elementAppearedInViewport(this.element);\n    }\n  }\n}\n\nclass StreamMessage {\n  static contentType = \"text/vnd.turbo-stream.html\"\n\n  static wrap(message) {\n    if (typeof message == \"string\") {\n      return new this(createDocumentFragment(message))\n    } else {\n      return message\n    }\n  }\n\n  constructor(fragment) {\n    this.fragment = importStreamElements(fragment);\n  }\n}\n\nfunction importStreamElements(fragment) {\n  for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n    const streamElement = document.importNode(element, true);\n\n    for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n      inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n    }\n\n    element.replaceWith(streamElement);\n  }\n\n  return fragment\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache {\n  #prefetchTimeout = null\n  #prefetched = null\n\n  get(url) {\n    if (this.#prefetched && this.#prefetched.url === url && this.#prefetched.expire > Date.now()) {\n      return this.#prefetched.request\n    }\n  }\n\n  setLater(url, request, ttl) {\n    this.clear();\n\n    this.#prefetchTimeout = setTimeout(() => {\n      request.perform();\n      this.set(url, request, ttl);\n      this.#prefetchTimeout = null;\n    }, PREFETCH_DELAY);\n  }\n\n  set(url, request, ttl) {\n    this.#prefetched = { url, request, expire: new Date(new Date().getTime() + ttl) };\n  }\n\n  clear() {\n    if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n    this.#prefetched = null;\n  }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n  initialized: \"initialized\",\n  requesting: \"requesting\",\n  waiting: \"waiting\",\n  receiving: \"receiving\",\n  stopping: \"stopping\",\n  stopped: \"stopped\"\n};\n\nclass FormSubmission {\n  state = FormSubmissionState.initialized\n\n  static confirmMethod(message) {\n    return Promise.resolve(confirm(message))\n  }\n\n  constructor(delegate, formElement, submitter, mustRedirect = false) {\n    const method = getMethod(formElement, submitter);\n    const action = getAction(getFormAction(formElement, submitter), method);\n    const body = buildFormData(formElement, submitter);\n    const enctype = getEnctype(formElement, submitter);\n\n    this.delegate = delegate;\n    this.formElement = formElement;\n    this.submitter = submitter;\n    this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n    this.mustRedirect = mustRedirect;\n  }\n\n  get method() {\n    return this.fetchRequest.method\n  }\n\n  set method(value) {\n    this.fetchRequest.method = value;\n  }\n\n  get action() {\n    return this.fetchRequest.url.toString()\n  }\n\n  set action(value) {\n    this.fetchRequest.url = expandURL(value);\n  }\n\n  get body() {\n    return this.fetchRequest.body\n  }\n\n  get enctype() {\n    return this.fetchRequest.enctype\n  }\n\n  get isSafe() {\n    return this.fetchRequest.isSafe\n  }\n\n  get location() {\n    return this.fetchRequest.url\n  }\n\n  // The submission process\n\n  async start() {\n    const { initialized, requesting } = FormSubmissionState;\n    const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n    if (typeof confirmationMessage === \"string\") {\n      const confirmMethod = typeof config.forms.confirm === \"function\" ?\n        config.forms.confirm :\n        FormSubmission.confirmMethod;\n\n      const answer = await confirmMethod(confirmationMessage, this.formElement, this.submitter);\n      if (!answer) {\n        return\n      }\n    }\n\n    if (this.state == initialized) {\n      this.state = requesting;\n      return this.fetchRequest.perform()\n    }\n  }\n\n  stop() {\n    const { stopping, stopped } = FormSubmissionState;\n    if (this.state != stopping && this.state != stopped) {\n      this.state = stopping;\n      this.fetchRequest.cancel();\n      return true\n    }\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (!request.isSafe) {\n      const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n      if (token) {\n        request.headers[\"X-CSRF-Token\"] = token;\n      }\n    }\n\n    if (this.requestAcceptsTurboStreamResponse(request)) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    this.state = FormSubmissionState.waiting;\n    if (this.submitter) config.forms.submitter.beforeSubmit(this.submitter);\n    this.setSubmitsWith();\n    markAsBusy(this.formElement);\n    dispatch(\"turbo:submit-start\", {\n      target: this.formElement,\n      detail: { formSubmission: this }\n    });\n    this.delegate.formSubmissionStarted(this);\n  }\n\n  requestPreventedHandlingResponse(request, response) {\n    prefetchCache.clear();\n\n    this.result = { success: response.succeeded, fetchResponse: response };\n  }\n\n  requestSucceededWithResponse(request, response) {\n    if (response.clientError || response.serverError) {\n      this.delegate.formSubmissionFailedWithResponse(this, response);\n      return\n    }\n\n    prefetchCache.clear();\n\n    if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n      const error = new Error(\"Form responses must redirect to another location\");\n      this.delegate.formSubmissionErrored(this, error);\n    } else {\n      this.state = FormSubmissionState.receiving;\n      this.result = { success: true, fetchResponse: response };\n      this.delegate.formSubmissionSucceededWithResponse(this, response);\n    }\n  }\n\n  requestFailedWithResponse(request, response) {\n    this.result = { success: false, fetchResponse: response };\n    this.delegate.formSubmissionFailedWithResponse(this, response);\n  }\n\n  requestErrored(request, error) {\n    this.result = { success: false, error };\n    this.delegate.formSubmissionErrored(this, error);\n  }\n\n  requestFinished(_request) {\n    this.state = FormSubmissionState.stopped;\n    if (this.submitter) config.forms.submitter.afterSubmit(this.submitter);\n    this.resetSubmitterText();\n    clearBusyState(this.formElement);\n    dispatch(\"turbo:submit-end\", {\n      target: this.formElement,\n      detail: { formSubmission: this, ...this.result }\n    });\n    this.delegate.formSubmissionFinished(this);\n  }\n\n  // Private\n\n  setSubmitsWith() {\n    if (!this.submitter || !this.submitsWith) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.originalSubmitText = this.submitter.innerHTML;\n      this.submitter.innerHTML = this.submitsWith;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      this.originalSubmitText = input.value;\n      input.value = this.submitsWith;\n    }\n  }\n\n  resetSubmitterText() {\n    if (!this.submitter || !this.originalSubmitText) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.submitter.innerHTML = this.originalSubmitText;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      input.value = this.originalSubmitText;\n    }\n  }\n\n  requestMustRedirect(request) {\n    return !request.isSafe && this.mustRedirect\n  }\n\n  requestAcceptsTurboStreamResponse(request) {\n    return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n  }\n\n  get submitsWith() {\n    return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n  }\n}\n\nfunction buildFormData(formElement, submitter) {\n  const formData = new FormData(formElement);\n  const name = submitter?.getAttribute(\"name\");\n  const value = submitter?.getAttribute(\"value\");\n\n  if (name) {\n    formData.append(name, value || \"\");\n  }\n\n  return formData\n}\n\nfunction getCookieValue(cookieName) {\n  if (cookieName != null) {\n    const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n    const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n    if (cookie) {\n      const value = cookie.split(\"=\").slice(1).join(\"=\");\n      return value ? decodeURIComponent(value) : undefined\n    }\n  }\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n  return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n  const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n  if (submitter?.hasAttribute(\"formaction\")) {\n    return submitter.getAttribute(\"formaction\") || \"\"\n  } else {\n    return formElement.getAttribute(\"action\") || formElementAction || \"\"\n  }\n}\n\nfunction getAction(formAction, fetchMethod) {\n  const action = expandURL(formAction);\n\n  if (isSafe(fetchMethod)) {\n    action.search = \"\";\n  }\n\n  return action\n}\n\nfunction getMethod(formElement, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n  return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n  return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n  constructor(element) {\n    this.element = element;\n  }\n\n  get activeElement() {\n    return this.element.ownerDocument.activeElement\n  }\n\n  get children() {\n    return [...this.element.children]\n  }\n\n  hasAnchor(anchor) {\n    return this.getElementForAnchor(anchor) != null\n  }\n\n  getElementForAnchor(anchor) {\n    return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n  }\n\n  get isConnected() {\n    return this.element.isConnected\n  }\n\n  get firstAutofocusableElement() {\n    return queryAutofocusableElement(this.element)\n  }\n\n  get permanentElements() {\n    return queryPermanentElementsAll(this.element)\n  }\n\n  getPermanentElementById(id) {\n    return getPermanentElementById(this.element, id)\n  }\n\n  getPermanentElementMapForSnapshot(snapshot) {\n    const permanentElementMap = {};\n\n    for (const currentPermanentElement of this.permanentElements) {\n      const { id } = currentPermanentElement;\n      const newPermanentElement = snapshot.getPermanentElementById(id);\n      if (newPermanentElement) {\n        permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n      }\n    }\n\n    return permanentElementMap\n  }\n}\n\nfunction getPermanentElementById(node, id) {\n  return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n  return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n      this.started = false;\n    }\n  }\n\n  submitCaptured = () => {\n    this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n    this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n  }\n\n  submitBubbled = (event) => {\n    if (!event.defaultPrevented) {\n      const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n      const submitter = event.submitter || undefined;\n\n      if (\n        form &&\n        submissionDoesNotDismissDialog(form, submitter) &&\n        submissionDoesNotTargetIFrame(form, submitter) &&\n        this.delegate.willSubmitForm(form, submitter)\n      ) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        this.delegate.formSubmitted(form, submitter);\n      }\n    }\n  }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n  return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n  const target = submitter?.getAttribute(\"formtarget\") || form.getAttribute(\"target\");\n\n  return doesNotTargetIFrame(target)\n}\n\nclass View {\n  #resolveRenderPromise = (_value) => {}\n  #resolveInterceptionPromise = (_value) => {}\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  // Scrolling\n\n  scrollToAnchor(anchor) {\n    const element = this.snapshot.getElementForAnchor(anchor);\n    if (element) {\n      this.scrollToElement(element);\n      this.focusElement(element);\n    } else {\n      this.scrollToPosition({ x: 0, y: 0 });\n    }\n  }\n\n  scrollToAnchorFromLocation(location) {\n    this.scrollToAnchor(getAnchor(location));\n  }\n\n  scrollToElement(element) {\n    element.scrollIntoView();\n  }\n\n  focusElement(element) {\n    if (element instanceof HTMLElement) {\n      if (element.hasAttribute(\"tabindex\")) {\n        element.focus();\n      } else {\n        element.setAttribute(\"tabindex\", \"-1\");\n        element.focus();\n        element.removeAttribute(\"tabindex\");\n      }\n    }\n  }\n\n  scrollToPosition({ x, y }) {\n    this.scrollRoot.scrollTo(x, y);\n  }\n\n  scrollToTop() {\n    this.scrollToPosition({ x: 0, y: 0 });\n  }\n\n  get scrollRoot() {\n    return window\n  }\n\n  // Rendering\n\n  async render(renderer) {\n    const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n    // A workaround to ignore tracked element mismatch reloads when performing\n    // a promoted Visit from a frame navigation\n    const shouldInvalidate = willRender;\n\n    if (shouldRender) {\n      try {\n        this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n        this.renderer = renderer;\n        await this.prepareToRenderSnapshot(renderer);\n\n        const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n        const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n        const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n        if (!immediateRender) await renderInterception;\n\n        await this.renderSnapshot(renderer);\n        this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n        this.delegate.preloadOnLoadLinksForView(this.element);\n        this.finishRenderingSnapshot(renderer);\n      } finally {\n        delete this.renderer;\n        this.#resolveRenderPromise(undefined);\n        delete this.renderPromise;\n      }\n    } else if (shouldInvalidate) {\n      this.invalidate(renderer.reloadReason);\n    }\n  }\n\n  invalidate(reason) {\n    this.delegate.viewInvalidated(reason);\n  }\n\n  async prepareToRenderSnapshot(renderer) {\n    this.markAsPreview(renderer.isPreview);\n    await renderer.prepareToRender();\n  }\n\n  markAsPreview(isPreview) {\n    if (isPreview) {\n      this.element.setAttribute(\"data-turbo-preview\", \"\");\n    } else {\n      this.element.removeAttribute(\"data-turbo-preview\");\n    }\n  }\n\n  markVisitDirection(direction) {\n    this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n  }\n\n  unmarkVisitDirection() {\n    this.element.removeAttribute(\"data-turbo-visit-direction\");\n  }\n\n  async renderSnapshot(renderer) {\n    await renderer.render();\n  }\n\n  finishRenderingSnapshot(renderer) {\n    renderer.finishRendering();\n  }\n}\n\nclass FrameView extends View {\n  missing() {\n    this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n  }\n\n  get snapshot() {\n    return new Snapshot(this.element)\n  }\n}\n\nclass LinkInterceptor {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  start() {\n    this.element.addEventListener(\"click\", this.clickBubbled);\n    document.addEventListener(\"turbo:click\", this.linkClicked);\n    document.addEventListener(\"turbo:before-visit\", this.willVisit);\n  }\n\n  stop() {\n    this.element.removeEventListener(\"click\", this.clickBubbled);\n    document.removeEventListener(\"turbo:click\", this.linkClicked);\n    document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n  }\n\n  clickBubbled = (event) => {\n    if (this.clickEventIsSignificant(event)) {\n      this.clickEvent = event;\n    } else {\n      delete this.clickEvent;\n    }\n  }\n\n  linkClicked = (event) => {\n    if (this.clickEvent && this.clickEventIsSignificant(event)) {\n      if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n        this.clickEvent.preventDefault();\n        event.preventDefault();\n        this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n      }\n    }\n    delete this.clickEvent;\n  }\n\n  willVisit = (_event) => {\n    delete this.clickEvent;\n  }\n\n  clickEventIsSignificant(event) {\n    const target = event.composed ? event.target?.parentElement : event.target;\n    const element = findLinkFromClickTarget(target) || target;\n\n    return element instanceof Element && element.closest(\"turbo-frame, html\") == this.element\n  }\n}\n\nclass LinkClickObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n      this.started = false;\n    }\n  }\n\n  clickCaptured = () => {\n    this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n    this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n  }\n\n  clickBubbled = (event) => {\n    if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n      const target = (event.composedPath && event.composedPath()[0]) || event.target;\n      const link = findLinkFromClickTarget(target);\n      if (link && doesNotTargetIFrame(link.target)) {\n        const location = getLocationForLink(link);\n        if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n          event.preventDefault();\n          this.delegate.followedLinkToLocation(link, location);\n        }\n      }\n    }\n  }\n\n  clickEventIsSignificant(event) {\n    return !(\n      (event.target && event.target.isContentEditable) ||\n      event.defaultPrevented ||\n      event.which > 1 ||\n      event.altKey ||\n      event.ctrlKey ||\n      event.metaKey ||\n      event.shiftKey\n    )\n  }\n}\n\nclass FormLinkClickObserver {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.linkInterceptor = new LinkClickObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n  }\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return false\n  }\n\n  prefetchAndCacheRequestToLocation(link, location) {\n    return\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, originalEvent) {\n    return (\n      this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n      (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const form = document.createElement(\"form\");\n\n    const type = \"hidden\";\n    for (const [name, value] of location.searchParams) {\n      form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n    }\n\n    const action = Object.assign(location, { search: \"\" });\n    form.setAttribute(\"data-turbo\", \"true\");\n    form.setAttribute(\"action\", action.href);\n    form.setAttribute(\"hidden\", \"\");\n\n    const method = link.getAttribute(\"data-turbo-method\");\n    if (method) form.setAttribute(\"method\", method);\n\n    const turboFrame = link.getAttribute(\"data-turbo-frame\");\n    if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n    const turboAction = getVisitAction(link);\n    if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n    const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n    if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n    const turboStream = link.hasAttribute(\"data-turbo-stream\");\n    if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n    this.delegate.submittedFormLinkToLocation(link, location, form);\n\n    document.body.appendChild(form);\n    form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n    requestAnimationFrame(() => form.requestSubmit());\n  }\n}\n\nclass Bardo {\n  static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n    const bardo = new this(delegate, permanentElementMap);\n    bardo.enter();\n    await callback();\n    bardo.leave();\n  }\n\n  constructor(delegate, permanentElementMap) {\n    this.delegate = delegate;\n    this.permanentElementMap = permanentElementMap;\n  }\n\n  enter() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n      this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n      this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n    }\n  }\n\n  leave() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement] = this.permanentElementMap[id];\n      this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n      this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n      this.delegate.leavingBardo(currentPermanentElement);\n    }\n  }\n\n  replaceNewPermanentElementWithPlaceholder(permanentElement) {\n    const placeholder = createPlaceholderForPermanentElement(permanentElement);\n    permanentElement.replaceWith(placeholder);\n  }\n\n  replaceCurrentPermanentElementWithClone(permanentElement) {\n    const clone = permanentElement.cloneNode(true);\n    permanentElement.replaceWith(clone);\n  }\n\n  replacePlaceholderWithPermanentElement(permanentElement) {\n    const placeholder = this.getPlaceholderById(permanentElement.id);\n    placeholder?.replaceWith(permanentElement);\n  }\n\n  getPlaceholderById(id) {\n    return this.placeholders.find((element) => element.content == id)\n  }\n\n  get placeholders() {\n    return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n  }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n  const element = document.createElement(\"meta\");\n  element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n  element.setAttribute(\"content\", permanentElement.id);\n  return element\n}\n\nclass Renderer {\n  #activeElement = null\n\n  static renderElement(currentElement, newElement) {\n    // Abstract method\n  }\n\n  constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {\n    this.currentSnapshot = currentSnapshot;\n    this.newSnapshot = newSnapshot;\n    this.isPreview = isPreview;\n    this.willRender = willRender;\n    this.renderElement = this.constructor.renderElement;\n    this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  get shouldAutofocus() {\n    return true\n  }\n\n  get reloadReason() {\n    return\n  }\n\n  prepareToRender() {\n    return\n  }\n\n  render() {\n    // Abstract method\n  }\n\n  finishRendering() {\n    if (this.resolvingFunctions) {\n      this.resolvingFunctions.resolve();\n      delete this.resolvingFunctions;\n    }\n  }\n\n  async preservingPermanentElements(callback) {\n    await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n  }\n\n  focusFirstAutofocusableElement() {\n    if (this.shouldAutofocus) {\n      const element = this.connectedSnapshot.firstAutofocusableElement;\n      if (element) {\n        element.focus();\n      }\n    }\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement) {\n    if (this.#activeElement) return\n\n    if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n      this.#activeElement = this.currentSnapshot.activeElement;\n    }\n  }\n\n  leavingBardo(currentPermanentElement) {\n    if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n      this.#activeElement.focus();\n\n      this.#activeElement = null;\n    }\n  }\n\n  get connectedSnapshot() {\n    return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n  }\n\n  get currentElement() {\n    return this.currentSnapshot.element\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  get permanentElementMap() {\n    return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n  }\n\n  get renderMethod() {\n    return \"replace\"\n  }\n}\n\nclass FrameRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const destinationRange = document.createRange();\n    destinationRange.selectNodeContents(currentElement);\n    destinationRange.deleteContents();\n\n    const frameElement = newElement;\n    const sourceRange = frameElement.ownerDocument?.createRange();\n    if (sourceRange) {\n      sourceRange.selectNodeContents(frameElement);\n      currentElement.appendChild(sourceRange.extractContents());\n    }\n  }\n\n  constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n    super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n    this.delegate = delegate;\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  async render() {\n    await nextRepaint();\n    this.preservingPermanentElements(() => {\n      this.loadFrameElement();\n    });\n    this.scrollFrameIntoView();\n    await nextRepaint();\n    this.focusFirstAutofocusableElement();\n    await nextRepaint();\n    this.activateScriptElements();\n  }\n\n  loadFrameElement() {\n    this.delegate.willRenderFrame(this.currentElement, this.newElement);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n\n  scrollFrameIntoView() {\n    if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n      const element = this.currentElement.firstElementChild;\n      const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n      const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n      if (element) {\n        element.scrollIntoView({ block, behavior });\n        return true\n      }\n    }\n    return false\n  }\n\n  activateScriptElements() {\n    for (const inertScriptElement of this.newScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  get newScriptElements() {\n    return this.currentElement.querySelectorAll(\"script\")\n  }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n  if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n  if (value == \"auto\" || value == \"smooth\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\n// base IIFE to define idiomorph\nvar Idiomorph = (function () {\n\n        //=============================================================================\n        // AND NOW IT BEGINS...\n        //=============================================================================\n        let EMPTY_SET = new Set();\n\n        // default configuration values, updatable by users now\n        let defaults = {\n            morphStyle: \"outerHTML\",\n            callbacks : {\n                beforeNodeAdded: noOp,\n                afterNodeAdded: noOp,\n                beforeNodeMorphed: noOp,\n                afterNodeMorphed: noOp,\n                beforeNodeRemoved: noOp,\n                afterNodeRemoved: noOp,\n                beforeAttributeUpdated: noOp,\n\n            },\n            head: {\n                style: 'merge',\n                shouldPreserve: function (elt) {\n                    return elt.getAttribute(\"im-preserve\") === \"true\";\n                },\n                shouldReAppend: function (elt) {\n                    return elt.getAttribute(\"im-re-append\") === \"true\";\n                },\n                shouldRemove: noOp,\n                afterHeadMorphed: noOp,\n            }\n        };\n\n        //=============================================================================\n        // Core Morphing Algorithm - morph, morphNormalizedContent, morphOldNodeTo, morphChildren\n        //=============================================================================\n        function morph(oldNode, newContent, config = {}) {\n\n            if (oldNode instanceof Document) {\n                oldNode = oldNode.documentElement;\n            }\n\n            if (typeof newContent === 'string') {\n                newContent = parseContent(newContent);\n            }\n\n            let normalizedContent = normalizeContent(newContent);\n\n            let ctx = createMorphContext(oldNode, normalizedContent, config);\n\n            return morphNormalizedContent(oldNode, normalizedContent, ctx);\n        }\n\n        function morphNormalizedContent(oldNode, normalizedNewContent, ctx) {\n            if (ctx.head.block) {\n                let oldHead = oldNode.querySelector('head');\n                let newHead = normalizedNewContent.querySelector('head');\n                if (oldHead && newHead) {\n                    let promises = handleHeadElement(newHead, oldHead, ctx);\n                    // when head promises resolve, call morph again, ignoring the head tag\n                    Promise.all(promises).then(function () {\n                        morphNormalizedContent(oldNode, normalizedNewContent, Object.assign(ctx, {\n                            head: {\n                                block: false,\n                                ignore: true\n                            }\n                        }));\n                    });\n                    return;\n                }\n            }\n\n            if (ctx.morphStyle === \"innerHTML\") {\n\n                // innerHTML, so we are only updating the children\n                morphChildren(normalizedNewContent, oldNode, ctx);\n                return oldNode.children;\n\n            } else if (ctx.morphStyle === \"outerHTML\" || ctx.morphStyle == null) {\n                // otherwise find the best element match in the new content, morph that, and merge its siblings\n                // into either side of the best match\n                let bestMatch = findBestNodeMatch(normalizedNewContent, oldNode, ctx);\n\n                // stash the siblings that will need to be inserted on either side of the best match\n                let previousSibling = bestMatch?.previousSibling;\n                let nextSibling = bestMatch?.nextSibling;\n\n                // morph it\n                let morphedNode = morphOldNodeTo(oldNode, bestMatch, ctx);\n\n                if (bestMatch) {\n                    // if there was a best match, merge the siblings in too and return the\n                    // whole bunch\n                    return insertSiblings(previousSibling, morphedNode, nextSibling);\n                } else {\n                    // otherwise nothing was added to the DOM\n                    return []\n                }\n            } else {\n                throw \"Do not understand how to morph style \" + ctx.morphStyle;\n            }\n        }\n\n\n        /**\n         * @param possibleActiveElement\n         * @param ctx\n         * @returns {boolean}\n         */\n        function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n            return ctx.ignoreActiveValue && possibleActiveElement === document.activeElement && possibleActiveElement !== document.body;\n        }\n\n        /**\n         * @param oldNode root node to merge content into\n         * @param newContent new content to merge\n         * @param ctx the merge context\n         * @returns {Element} the element that ended up in the DOM\n         */\n        function morphOldNodeTo(oldNode, newContent, ctx) {\n            if (ctx.ignoreActive && oldNode === document.activeElement) ; else if (newContent == null) {\n                if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n\n                oldNode.remove();\n                ctx.callbacks.afterNodeRemoved(oldNode);\n                return null;\n            } else if (!isSoftMatch(oldNode, newContent)) {\n                if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n                if (ctx.callbacks.beforeNodeAdded(newContent) === false) return oldNode;\n\n                oldNode.parentElement.replaceChild(newContent, oldNode);\n                ctx.callbacks.afterNodeAdded(newContent);\n                ctx.callbacks.afterNodeRemoved(oldNode);\n                return newContent;\n            } else {\n                if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) return oldNode;\n\n                if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (oldNode instanceof HTMLHeadElement && ctx.head.style !== \"morph\") {\n                    handleHeadElement(newContent, oldNode, ctx);\n                } else {\n                    syncNodeFrom(newContent, oldNode, ctx);\n                    if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n                        morphChildren(newContent, oldNode, ctx);\n                    }\n                }\n                ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n                return oldNode;\n            }\n        }\n\n        /**\n         * This is the core algorithm for matching up children.  The idea is to use id sets to try to match up\n         * nodes as faithfully as possible.  We greedily match, which allows us to keep the algorithm fast, but\n         * by using id sets, we are able to better match up with content deeper in the DOM.\n         *\n         * Basic algorithm is, for each node in the new content:\n         *\n         * - if we have reached the end of the old parent, append the new content\n         * - if the new content has an id set match with the current insertion point, morph\n         * - search for an id set match\n         * - if id set match found, morph\n         * - otherwise search for a \"soft\" match\n         * - if a soft match is found, morph\n         * - otherwise, prepend the new node before the current insertion point\n         *\n         * The two search algorithms terminate if competing node matches appear to outweigh what can be achieved\n         * with the current node.  See findIdSetMatch() and findSoftMatch() for details.\n         *\n         * @param {Element} newParent the parent element of the new content\n         * @param {Element } oldParent the old content that we are merging the new content into\n         * @param ctx the merge context\n         */\n        function morphChildren(newParent, oldParent, ctx) {\n\n            let nextNewChild = newParent.firstChild;\n            let insertionPoint = oldParent.firstChild;\n            let newChild;\n\n            // run through all the new content\n            while (nextNewChild) {\n\n                newChild = nextNewChild;\n                nextNewChild = newChild.nextSibling;\n\n                // if we are at the end of the exiting parent's children, just append\n                if (insertionPoint == null) {\n                    if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n                    oldParent.appendChild(newChild);\n                    ctx.callbacks.afterNodeAdded(newChild);\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // if the current node has an id set match then morph\n                if (isIdSetMatch(newChild, insertionPoint, ctx)) {\n                    morphOldNodeTo(insertionPoint, newChild, ctx);\n                    insertionPoint = insertionPoint.nextSibling;\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // otherwise search forward in the existing old children for an id set match\n                let idSetMatch = findIdSetMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n                // if we found a potential match, remove the nodes until that point and morph\n                if (idSetMatch) {\n                    insertionPoint = removeNodesBetween(insertionPoint, idSetMatch, ctx);\n                    morphOldNodeTo(idSetMatch, newChild, ctx);\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // no id set match found, so scan forward for a soft match for the current node\n                let softMatch = findSoftMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n                // if we found a soft match for the current node, morph\n                if (softMatch) {\n                    insertionPoint = removeNodesBetween(insertionPoint, softMatch, ctx);\n                    morphOldNodeTo(softMatch, newChild, ctx);\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // abandon all hope of morphing, just insert the new child before the insertion point\n                // and move on\n                if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n                oldParent.insertBefore(newChild, insertionPoint);\n                ctx.callbacks.afterNodeAdded(newChild);\n                removeIdsFromConsideration(ctx, newChild);\n            }\n\n            // remove any remaining old nodes that didn't match up with new content\n            while (insertionPoint !== null) {\n\n                let tempNode = insertionPoint;\n                insertionPoint = insertionPoint.nextSibling;\n                removeNode(tempNode, ctx);\n            }\n        }\n\n        //=============================================================================\n        // Attribute Syncing Code\n        //=============================================================================\n\n        /**\n         * @param attr {String} the attribute to be mutated\n         * @param to {Element} the element that is going to be updated\n         * @param updateType {(\"update\"|\"remove\")}\n         * @param ctx the merge context\n         * @returns {boolean} true if the attribute should be ignored, false otherwise\n         */\n        function ignoreAttribute(attr, to, updateType, ctx) {\n            if(attr === 'value' && ctx.ignoreActiveValue && to === document.activeElement){\n                return true;\n            }\n            return ctx.callbacks.beforeAttributeUpdated(attr, to, updateType) === false;\n        }\n\n        /**\n         * syncs a given node with another node, copying over all attributes and\n         * inner element state from the 'from' node to the 'to' node\n         *\n         * @param {Element} from the element to copy attributes & state from\n         * @param {Element} to the element to copy attributes & state to\n         * @param ctx the merge context\n         */\n        function syncNodeFrom(from, to, ctx) {\n            let type = from.nodeType;\n\n            // if is an element type, sync the attributes from the\n            // new node into the new node\n            if (type === 1 /* element type */) {\n                const fromAttributes = from.attributes;\n                const toAttributes = to.attributes;\n                for (const fromAttribute of fromAttributes) {\n                    if (ignoreAttribute(fromAttribute.name, to, 'update', ctx)) {\n                        continue;\n                    }\n                    if (to.getAttribute(fromAttribute.name) !== fromAttribute.value) {\n                        to.setAttribute(fromAttribute.name, fromAttribute.value);\n                    }\n                }\n                // iterate backwards to avoid skipping over items when a delete occurs\n                for (let i = toAttributes.length - 1; 0 <= i; i--) {\n                    const toAttribute = toAttributes[i];\n                    if (ignoreAttribute(toAttribute.name, to, 'remove', ctx)) {\n                        continue;\n                    }\n                    if (!from.hasAttribute(toAttribute.name)) {\n                        to.removeAttribute(toAttribute.name);\n                    }\n                }\n            }\n\n            // sync text nodes\n            if (type === 8 /* comment */ || type === 3 /* text */) {\n                if (to.nodeValue !== from.nodeValue) {\n                    to.nodeValue = from.nodeValue;\n                }\n            }\n\n            if (!ignoreValueOfActiveElement(to, ctx)) {\n                // sync input values\n                syncInputValue(from, to, ctx);\n            }\n        }\n\n        /**\n         * @param from {Element} element to sync the value from\n         * @param to {Element} element to sync the value to\n         * @param attributeName {String} the attribute name\n         * @param ctx the merge context\n         */\n        function syncBooleanAttribute(from, to, attributeName, ctx) {\n            if (from[attributeName] !== to[attributeName]) {\n                let ignoreUpdate = ignoreAttribute(attributeName, to, 'update', ctx);\n                if (!ignoreUpdate) {\n                    to[attributeName] = from[attributeName];\n                }\n                if (from[attributeName]) {\n                    if (!ignoreUpdate) {\n                        to.setAttribute(attributeName, from[attributeName]);\n                    }\n                } else {\n                    if (!ignoreAttribute(attributeName, to, 'remove', ctx)) {\n                        to.removeAttribute(attributeName);\n                    }\n                }\n            }\n        }\n\n        /**\n         * NB: many bothans died to bring us information:\n         *\n         *  https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n         *  https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n         *\n         * @param from {Element} the element to sync the input value from\n         * @param to {Element} the element to sync the input value to\n         * @param ctx the merge context\n         */\n        function syncInputValue(from, to, ctx) {\n            if (from instanceof HTMLInputElement &&\n                to instanceof HTMLInputElement &&\n                from.type !== 'file') {\n\n                let fromValue = from.value;\n                let toValue = to.value;\n\n                // sync boolean attributes\n                syncBooleanAttribute(from, to, 'checked', ctx);\n                syncBooleanAttribute(from, to, 'disabled', ctx);\n\n                if (!from.hasAttribute('value')) {\n                    if (!ignoreAttribute('value', to, 'remove', ctx)) {\n                        to.value = '';\n                        to.removeAttribute('value');\n                    }\n                } else if (fromValue !== toValue) {\n                    if (!ignoreAttribute('value', to, 'update', ctx)) {\n                        to.setAttribute('value', fromValue);\n                        to.value = fromValue;\n                    }\n                }\n            } else if (from instanceof HTMLOptionElement) {\n                syncBooleanAttribute(from, to, 'selected', ctx);\n            } else if (from instanceof HTMLTextAreaElement && to instanceof HTMLTextAreaElement) {\n                let fromValue = from.value;\n                let toValue = to.value;\n                if (ignoreAttribute('value', to, 'update', ctx)) {\n                    return;\n                }\n                if (fromValue !== toValue) {\n                    to.value = fromValue;\n                }\n                if (to.firstChild && to.firstChild.nodeValue !== fromValue) {\n                    to.firstChild.nodeValue = fromValue;\n                }\n            }\n        }\n\n        //=============================================================================\n        // the HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n        //=============================================================================\n        function handleHeadElement(newHeadTag, currentHead, ctx) {\n\n            let added = [];\n            let removed = [];\n            let preserved = [];\n            let nodesToAppend = [];\n\n            let headMergeStyle = ctx.head.style;\n\n            // put all new head elements into a Map, by their outerHTML\n            let srcToNewHeadNodes = new Map();\n            for (const newHeadChild of newHeadTag.children) {\n                srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n            }\n\n            // for each elt in the current head\n            for (const currentHeadElt of currentHead.children) {\n\n                // If the current head element is in the map\n                let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n                let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n                let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n                if (inNewContent || isPreserved) {\n                    if (isReAppended) {\n                        // remove the current version and let the new version replace it and re-execute\n                        removed.push(currentHeadElt);\n                    } else {\n                        // this element already exists and should not be re-appended, so remove it from\n                        // the new content map, preserving it in the DOM\n                        srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n                        preserved.push(currentHeadElt);\n                    }\n                } else {\n                    if (headMergeStyle === \"append\") {\n                        // we are appending and this existing element is not new content\n                        // so if and only if it is marked for re-append do we do anything\n                        if (isReAppended) {\n                            removed.push(currentHeadElt);\n                            nodesToAppend.push(currentHeadElt);\n                        }\n                    } else {\n                        // if this is a merge, we remove this content since it is not in the new head\n                        if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n                            removed.push(currentHeadElt);\n                        }\n                    }\n                }\n            }\n\n            // Push the remaining new head elements in the Map into the\n            // nodes to append to the head tag\n            nodesToAppend.push(...srcToNewHeadNodes.values());\n\n            let promises = [];\n            for (const newNode of nodesToAppend) {\n                let newElt = document.createRange().createContextualFragment(newNode.outerHTML).firstChild;\n                if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n                    if (newElt.href || newElt.src) {\n                        let resolve = null;\n                        let promise = new Promise(function (_resolve) {\n                            resolve = _resolve;\n                        });\n                        newElt.addEventListener('load', function () {\n                            resolve();\n                        });\n                        promises.push(promise);\n                    }\n                    currentHead.appendChild(newElt);\n                    ctx.callbacks.afterNodeAdded(newElt);\n                    added.push(newElt);\n                }\n            }\n\n            // remove all removed elements, after we have appended the new elements to avoid\n            // additional network requests for things like style sheets\n            for (const removedElement of removed) {\n                if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n                    currentHead.removeChild(removedElement);\n                    ctx.callbacks.afterNodeRemoved(removedElement);\n                }\n            }\n\n            ctx.head.afterHeadMorphed(currentHead, {added: added, kept: preserved, removed: removed});\n            return promises;\n        }\n\n        function noOp() {\n        }\n\n        /*\n          Deep merges the config object and the Idiomoroph.defaults object to\n          produce a final configuration object\n         */\n        function mergeDefaults(config) {\n            let finalConfig = {};\n            // copy top level stuff into final config\n            Object.assign(finalConfig, defaults);\n            Object.assign(finalConfig, config);\n\n            // copy callbacks into final config (do this to deep merge the callbacks)\n            finalConfig.callbacks = {};\n            Object.assign(finalConfig.callbacks, defaults.callbacks);\n            Object.assign(finalConfig.callbacks, config.callbacks);\n\n            // copy head config into final config  (do this to deep merge the head)\n            finalConfig.head = {};\n            Object.assign(finalConfig.head, defaults.head);\n            Object.assign(finalConfig.head, config.head);\n            return finalConfig;\n        }\n\n        function createMorphContext(oldNode, newContent, config) {\n            config = mergeDefaults(config);\n            return {\n                target: oldNode,\n                newContent: newContent,\n                config: config,\n                morphStyle: config.morphStyle,\n                ignoreActive: config.ignoreActive,\n                ignoreActiveValue: config.ignoreActiveValue,\n                idMap: createIdMap(oldNode, newContent),\n                deadIds: new Set(),\n                callbacks: config.callbacks,\n                head: config.head\n            }\n        }\n\n        function isIdSetMatch(node1, node2, ctx) {\n            if (node1 == null || node2 == null) {\n                return false;\n            }\n            if (node1.nodeType === node2.nodeType && node1.tagName === node2.tagName) {\n                if (node1.id !== \"\" && node1.id === node2.id) {\n                    return true;\n                } else {\n                    return getIdIntersectionCount(ctx, node1, node2) > 0;\n                }\n            }\n            return false;\n        }\n\n        function isSoftMatch(node1, node2) {\n            if (node1 == null || node2 == null) {\n                return false;\n            }\n            return node1.nodeType === node2.nodeType && node1.tagName === node2.tagName\n        }\n\n        function removeNodesBetween(startInclusive, endExclusive, ctx) {\n            while (startInclusive !== endExclusive) {\n                let tempNode = startInclusive;\n                startInclusive = startInclusive.nextSibling;\n                removeNode(tempNode, ctx);\n            }\n            removeIdsFromConsideration(ctx, endExclusive);\n            return endExclusive.nextSibling;\n        }\n\n        //=============================================================================\n        // Scans forward from the insertionPoint in the old parent looking for a potential id match\n        // for the newChild.  We stop if we find a potential id match for the new child OR\n        // if the number of potential id matches we are discarding is greater than the\n        // potential id matches for the new child\n        //=============================================================================\n        function findIdSetMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n            // max id matches we are willing to discard in our search\n            let newChildPotentialIdCount = getIdIntersectionCount(ctx, newChild, oldParent);\n\n            let potentialMatch = null;\n\n            // only search forward if there is a possibility of an id match\n            if (newChildPotentialIdCount > 0) {\n                let potentialMatch = insertionPoint;\n                // if there is a possibility of an id match, scan forward\n                // keep track of the potential id match count we are discarding (the\n                // newChildPotentialIdCount must be greater than this to make it likely\n                // worth it)\n                let otherMatchCount = 0;\n                while (potentialMatch != null) {\n\n                    // If we have an id match, return the current potential match\n                    if (isIdSetMatch(newChild, potentialMatch, ctx)) {\n                        return potentialMatch;\n                    }\n\n                    // computer the other potential matches of this new content\n                    otherMatchCount += getIdIntersectionCount(ctx, potentialMatch, newContent);\n                    if (otherMatchCount > newChildPotentialIdCount) {\n                        // if we have more potential id matches in _other_ content, we\n                        // do not have a good candidate for an id match, so return null\n                        return null;\n                    }\n\n                    // advanced to the next old content child\n                    potentialMatch = potentialMatch.nextSibling;\n                }\n            }\n            return potentialMatch;\n        }\n\n        //=============================================================================\n        // Scans forward from the insertionPoint in the old parent looking for a potential soft match\n        // for the newChild.  We stop if we find a potential soft match for the new child OR\n        // if we find a potential id match in the old parents children OR if we find two\n        // potential soft matches for the next two pieces of new content\n        //=============================================================================\n        function findSoftMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n            let potentialSoftMatch = insertionPoint;\n            let nextSibling = newChild.nextSibling;\n            let siblingSoftMatchCount = 0;\n\n            while (potentialSoftMatch != null) {\n\n                if (getIdIntersectionCount(ctx, potentialSoftMatch, newContent) > 0) {\n                    // the current potential soft match has a potential id set match with the remaining new\n                    // content so bail out of looking\n                    return null;\n                }\n\n                // if we have a soft match with the current node, return it\n                if (isSoftMatch(newChild, potentialSoftMatch)) {\n                    return potentialSoftMatch;\n                }\n\n                if (isSoftMatch(nextSibling, potentialSoftMatch)) {\n                    // the next new node has a soft match with this node, so\n                    // increment the count of future soft matches\n                    siblingSoftMatchCount++;\n                    nextSibling = nextSibling.nextSibling;\n\n                    // If there are two future soft matches, bail to allow the siblings to soft match\n                    // so that we don't consume future soft matches for the sake of the current node\n                    if (siblingSoftMatchCount >= 2) {\n                        return null;\n                    }\n                }\n\n                // advanced to the next old content child\n                potentialSoftMatch = potentialSoftMatch.nextSibling;\n            }\n\n            return potentialSoftMatch;\n        }\n\n        function parseContent(newContent) {\n            let parser = new DOMParser();\n\n            // remove svgs to avoid false-positive matches on head, etc.\n            let contentWithSvgsRemoved = newContent.replace(/<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim, '');\n\n            // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n            if (contentWithSvgsRemoved.match(/<\\/html>/) || contentWithSvgsRemoved.match(/<\\/head>/) || contentWithSvgsRemoved.match(/<\\/body>/)) {\n                let content = parser.parseFromString(newContent, \"text/html\");\n                // if it is a full HTML document, return the document itself as the parent container\n                if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n                    content.generatedByIdiomorph = true;\n                    return content;\n                } else {\n                    // otherwise return the html element as the parent container\n                    let htmlElement = content.firstChild;\n                    if (htmlElement) {\n                        htmlElement.generatedByIdiomorph = true;\n                        return htmlElement;\n                    } else {\n                        return null;\n                    }\n                }\n            } else {\n                // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n                // deal with touchy tags like tr, tbody, etc.\n                let responseDoc = parser.parseFromString(\"<body><template>\" + newContent + \"</template></body>\", \"text/html\");\n                let content = responseDoc.body.querySelector('template').content;\n                content.generatedByIdiomorph = true;\n                return content\n            }\n        }\n\n        function normalizeContent(newContent) {\n            if (newContent == null) {\n                // noinspection UnnecessaryLocalVariableJS\n                const dummyParent = document.createElement('div');\n                return dummyParent;\n            } else if (newContent.generatedByIdiomorph) {\n                // the template tag created by idiomorph parsing can serve as a dummy parent\n                return newContent;\n            } else if (newContent instanceof Node) {\n                // a single node is added as a child to a dummy parent\n                const dummyParent = document.createElement('div');\n                dummyParent.append(newContent);\n                return dummyParent;\n            } else {\n                // all nodes in the array or HTMLElement collection are consolidated under\n                // a single dummy parent element\n                const dummyParent = document.createElement('div');\n                for (const elt of [...newContent]) {\n                    dummyParent.append(elt);\n                }\n                return dummyParent;\n            }\n        }\n\n        function insertSiblings(previousSibling, morphedNode, nextSibling) {\n            let stack = [];\n            let added = [];\n            while (previousSibling != null) {\n                stack.push(previousSibling);\n                previousSibling = previousSibling.previousSibling;\n            }\n            while (stack.length > 0) {\n                let node = stack.pop();\n                added.push(node); // push added preceding siblings on in order and insert\n                morphedNode.parentElement.insertBefore(node, morphedNode);\n            }\n            added.push(morphedNode);\n            while (nextSibling != null) {\n                stack.push(nextSibling);\n                added.push(nextSibling); // here we are going in order, so push on as we scan, rather than add\n                nextSibling = nextSibling.nextSibling;\n            }\n            while (stack.length > 0) {\n                morphedNode.parentElement.insertBefore(stack.pop(), morphedNode.nextSibling);\n            }\n            return added;\n        }\n\n        function findBestNodeMatch(newContent, oldNode, ctx) {\n            let currentElement;\n            currentElement = newContent.firstChild;\n            let bestElement = currentElement;\n            let score = 0;\n            while (currentElement) {\n                let newScore = scoreElement(currentElement, oldNode, ctx);\n                if (newScore > score) {\n                    bestElement = currentElement;\n                    score = newScore;\n                }\n                currentElement = currentElement.nextSibling;\n            }\n            return bestElement;\n        }\n\n        function scoreElement(node1, node2, ctx) {\n            if (isSoftMatch(node1, node2)) {\n                return .5 + getIdIntersectionCount(ctx, node1, node2);\n            }\n            return 0;\n        }\n\n        function removeNode(tempNode, ctx) {\n            removeIdsFromConsideration(ctx, tempNode);\n            if (ctx.callbacks.beforeNodeRemoved(tempNode) === false) return;\n\n            tempNode.remove();\n            ctx.callbacks.afterNodeRemoved(tempNode);\n        }\n\n        //=============================================================================\n        // ID Set Functions\n        //=============================================================================\n\n        function isIdInConsideration(ctx, id) {\n            return !ctx.deadIds.has(id);\n        }\n\n        function idIsWithinNode(ctx, id, targetNode) {\n            let idSet = ctx.idMap.get(targetNode) || EMPTY_SET;\n            return idSet.has(id);\n        }\n\n        function removeIdsFromConsideration(ctx, node) {\n            let idSet = ctx.idMap.get(node) || EMPTY_SET;\n            for (const id of idSet) {\n                ctx.deadIds.add(id);\n            }\n        }\n\n        function getIdIntersectionCount(ctx, node1, node2) {\n            let sourceSet = ctx.idMap.get(node1) || EMPTY_SET;\n            let matchCount = 0;\n            for (const id of sourceSet) {\n                // a potential match is an id in the source and potentialIdsSet, but\n                // that has not already been merged into the DOM\n                if (isIdInConsideration(ctx, id) && idIsWithinNode(ctx, id, node2)) {\n                    ++matchCount;\n                }\n            }\n            return matchCount;\n        }\n\n        /**\n         * A bottom up algorithm that finds all elements with ids inside of the node\n         * argument and populates id sets for those nodes and all their parents, generating\n         * a set of ids contained within all nodes for the entire hierarchy in the DOM\n         *\n         * @param node {Element}\n         * @param {Map<Node, Set<String>>} idMap\n         */\n        function populateIdMapForNode(node, idMap) {\n            let nodeParent = node.parentElement;\n            // find all elements with an id property\n            let idElements = node.querySelectorAll('[id]');\n            for (const elt of idElements) {\n                let current = elt;\n                // walk up the parent hierarchy of that element, adding the id\n                // of element to the parent's id set\n                while (current !== nodeParent && current != null) {\n                    let idSet = idMap.get(current);\n                    // if the id set doesn't exist, create it and insert it in the  map\n                    if (idSet == null) {\n                        idSet = new Set();\n                        idMap.set(current, idSet);\n                    }\n                    idSet.add(elt.id);\n                    current = current.parentElement;\n                }\n            }\n        }\n\n        /**\n         * This function computes a map of nodes to all ids contained within that node (inclusive of the\n         * node).  This map can be used to ask if two nodes have intersecting sets of ids, which allows\n         * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n         * to contribute to a parent nodes matching.\n         *\n         * @param {Element} oldContent  the old content that will be morphed\n         * @param {Element} newContent  the new content to morph to\n         * @returns {Map<Node, Set<String>>} a map of nodes to id sets for the\n         */\n        function createIdMap(oldContent, newContent) {\n            let idMap = new Map();\n            populateIdMapForNode(oldContent, idMap);\n            populateIdMapForNode(newContent, idMap);\n            return idMap;\n        }\n\n        //=============================================================================\n        // This is what ends up becoming the Idiomorph global object\n        //=============================================================================\n        return {\n            morph,\n            defaults\n        }\n    })();\n\nfunction morphElements(currentElement, newElement, { callbacks, ...options } = {}) {\n  Idiomorph.morph(currentElement, newElement, {\n    ...options,\n    callbacks: new DefaultIdiomorphCallbacks(callbacks)\n  });\n}\n\nfunction morphChildren(currentElement, newElement) {\n  morphElements(currentElement, newElement.children, {\n    morphStyle: \"innerHTML\"\n  });\n}\n\nclass DefaultIdiomorphCallbacks {\n  #beforeNodeMorphed\n\n  constructor({ beforeNodeMorphed } = {}) {\n    this.#beforeNodeMorphed = beforeNodeMorphed || (() => true);\n  }\n\n  beforeNodeAdded = (node) => {\n    return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n  }\n\n  beforeNodeMorphed = (currentElement, newElement) => {\n    if (currentElement instanceof Element) {\n      if (!currentElement.hasAttribute(\"data-turbo-permanent\") && this.#beforeNodeMorphed(currentElement, newElement)) {\n        const event = dispatch(\"turbo:before-morph-element\", {\n          cancelable: true,\n          target: currentElement,\n          detail: { currentElement, newElement }\n        });\n\n        return !event.defaultPrevented\n      } else {\n        return false\n      }\n    }\n  }\n\n  beforeAttributeUpdated = (attributeName, target, mutationType) => {\n    const event = dispatch(\"turbo:before-morph-attribute\", {\n      cancelable: true,\n      target,\n      detail: { attributeName, mutationType }\n    });\n\n    return !event.defaultPrevented\n  }\n\n  beforeNodeRemoved = (node) => {\n    return this.beforeNodeMorphed(node)\n  }\n\n  afterNodeMorphed = (currentElement, newElement) => {\n    if (currentElement instanceof Element) {\n      dispatch(\"turbo:morph-element\", {\n        target: currentElement,\n        detail: { currentElement, newElement }\n      });\n    }\n  }\n}\n\nclass MorphingFrameRenderer extends FrameRenderer {\n  static renderElement(currentElement, newElement) {\n    dispatch(\"turbo:before-frame-morph\", {\n      target: currentElement,\n      detail: { currentElement, newElement }\n    });\n\n    morphChildren(currentElement, newElement);\n  }\n\n  async preservingPermanentElements(callback) {\n    return await callback()\n  }\n}\n\nclass ProgressBar {\n  static animationDuration = 300 /*ms*/\n\n  static get defaultCSS() {\n    return unindent`\n      .turbo-progress-bar {\n        position: fixed;\n        display: block;\n        top: 0;\n        left: 0;\n        height: 3px;\n        background: #0076ff;\n        z-index: 2147483647;\n        transition:\n          width ${ProgressBar.animationDuration}ms ease-out,\n          opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n        transform: translate3d(0, 0, 0);\n      }\n    `\n  }\n\n  hiding = false\n  value = 0\n  visible = false\n\n  constructor() {\n    this.stylesheetElement = this.createStylesheetElement();\n    this.progressElement = this.createProgressElement();\n    this.installStylesheetElement();\n    this.setValue(0);\n  }\n\n  show() {\n    if (!this.visible) {\n      this.visible = true;\n      this.installProgressElement();\n      this.startTrickling();\n    }\n  }\n\n  hide() {\n    if (this.visible && !this.hiding) {\n      this.hiding = true;\n      this.fadeProgressElement(() => {\n        this.uninstallProgressElement();\n        this.stopTrickling();\n        this.visible = false;\n        this.hiding = false;\n      });\n    }\n  }\n\n  setValue(value) {\n    this.value = value;\n    this.refresh();\n  }\n\n  // Private\n\n  installStylesheetElement() {\n    document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n  }\n\n  installProgressElement() {\n    this.progressElement.style.width = \"0\";\n    this.progressElement.style.opacity = \"1\";\n    document.documentElement.insertBefore(this.progressElement, document.body);\n    this.refresh();\n  }\n\n  fadeProgressElement(callback) {\n    this.progressElement.style.opacity = \"0\";\n    setTimeout(callback, ProgressBar.animationDuration * 1.5);\n  }\n\n  uninstallProgressElement() {\n    if (this.progressElement.parentNode) {\n      document.documentElement.removeChild(this.progressElement);\n    }\n  }\n\n  startTrickling() {\n    if (!this.trickleInterval) {\n      this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n    }\n  }\n\n  stopTrickling() {\n    window.clearInterval(this.trickleInterval);\n    delete this.trickleInterval;\n  }\n\n  trickle = () => {\n    this.setValue(this.value + Math.random() / 100);\n  }\n\n  refresh() {\n    requestAnimationFrame(() => {\n      this.progressElement.style.width = `${10 + this.value * 90}%`;\n    });\n  }\n\n  createStylesheetElement() {\n    const element = document.createElement(\"style\");\n    element.type = \"text/css\";\n    element.textContent = ProgressBar.defaultCSS;\n    const cspNonce = getCspNonce();\n    if (cspNonce) {\n      element.nonce = cspNonce;\n    }\n    return element\n  }\n\n  createProgressElement() {\n    const element = document.createElement(\"div\");\n    element.className = \"turbo-progress-bar\";\n    return element\n  }\n}\n\nclass HeadSnapshot extends Snapshot {\n  detailsByOuterHTML = this.children\n    .filter((element) => !elementIsNoscript(element))\n    .map((element) => elementWithoutNonce(element))\n    .reduce((result, element) => {\n      const { outerHTML } = element;\n      const details =\n        outerHTML in result\n          ? result[outerHTML]\n          : {\n              type: elementType(element),\n              tracked: elementIsTracked(element),\n              elements: []\n            };\n      return {\n        ...result,\n        [outerHTML]: {\n          ...details,\n          elements: [...details.elements, element]\n        }\n      }\n    }, {})\n\n  get trackedElementSignature() {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n      .join(\"\")\n  }\n\n  getScriptElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n  }\n\n  getStylesheetElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n  }\n\n  getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n      .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n      .filter(({ type }) => type == matchedType)\n      .map(({ elements: [element] }) => element)\n  }\n\n  get provisionalElements() {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n      if (type == null && !tracked) {\n        return [...result, ...elements]\n      } else if (elements.length > 1) {\n        return [...result, ...elements.slice(1)]\n      } else {\n        return result\n      }\n    }, [])\n  }\n\n  getMetaValue(name) {\n    const element = this.findMetaElementByName(name);\n    return element ? element.getAttribute(\"content\") : null\n  }\n\n  findMetaElementByName(name) {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const {\n        elements: [element]\n      } = this.detailsByOuterHTML[outerHTML];\n      return elementIsMetaElementWithName(element, name) ? element : result\n    }, undefined | undefined)\n  }\n}\n\nfunction elementType(element) {\n  if (elementIsScript(element)) {\n    return \"script\"\n  } else if (elementIsStylesheet(element)) {\n    return \"stylesheet\"\n  }\n}\n\nfunction elementIsTracked(element) {\n  return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n  const tagName = element.localName;\n  return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n  const tagName = element.localName;\n  return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n  const tagName = element.localName;\n  return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n  const tagName = element.localName;\n  return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n  if (element.hasAttribute(\"nonce\")) {\n    element.setAttribute(\"nonce\", \"\");\n  }\n\n  return element\n}\n\nclass PageSnapshot extends Snapshot {\n  static fromHTMLString(html = \"\") {\n    return this.fromDocument(parseHTMLDocument(html))\n  }\n\n  static fromElement(element) {\n    return this.fromDocument(element.ownerDocument)\n  }\n\n  static fromDocument({ documentElement, body, head }) {\n    return new this(documentElement, body, new HeadSnapshot(head))\n  }\n\n  constructor(documentElement, body, headSnapshot) {\n    super(body);\n    this.documentElement = documentElement;\n    this.headSnapshot = headSnapshot;\n  }\n\n  clone() {\n    const clonedElement = this.element.cloneNode(true);\n\n    const selectElements = this.element.querySelectorAll(\"select\");\n    const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n    for (const [index, source] of selectElements.entries()) {\n      const clone = clonedSelectElements[index];\n      for (const option of clone.selectedOptions) option.selected = false;\n      for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n    }\n\n    for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n      clonedPasswordInput.value = \"\";\n    }\n\n    return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n  }\n\n  get lang() {\n    return this.documentElement.getAttribute(\"lang\")\n  }\n\n  get headElement() {\n    return this.headSnapshot.element\n  }\n\n  get rootLocation() {\n    const root = this.getSetting(\"root\") ?? \"/\";\n    return expandURL(root)\n  }\n\n  get cacheControlValue() {\n    return this.getSetting(\"cache-control\")\n  }\n\n  get isPreviewable() {\n    return this.cacheControlValue != \"no-preview\"\n  }\n\n  get isCacheable() {\n    return this.cacheControlValue != \"no-cache\"\n  }\n\n  get isVisitable() {\n    return this.getSetting(\"visit-control\") != \"reload\"\n  }\n\n  get prefersViewTransitions() {\n    return this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\"\n  }\n\n  get shouldMorphPage() {\n    return this.getSetting(\"refresh-method\") === \"morph\"\n  }\n\n  get shouldPreserveScrollPosition() {\n    return this.getSetting(\"refresh-scroll\") === \"preserve\"\n  }\n\n  // Private\n\n  getSetting(name) {\n    return this.headSnapshot.getMetaValue(`turbo-${name}`)\n  }\n}\n\nclass ViewTransitioner {\n  #viewTransitionStarted = false\n  #lastOperation = Promise.resolve()\n\n  renderChange(useViewTransition, render) {\n    if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n      this.#viewTransitionStarted = true;\n      this.#lastOperation = this.#lastOperation.then(async () => {\n        await document.startViewTransition(render).finished;\n      });\n    } else {\n      this.#lastOperation = this.#lastOperation.then(render);\n    }\n\n    return this.#lastOperation\n  }\n\n  get viewTransitionsAvailable() {\n    return document.startViewTransition\n  }\n}\n\nconst defaultOptions = {\n  action: \"advance\",\n  historyChanged: false,\n  visitCachedSnapshot: () => {},\n  willRender: true,\n  updateHistory: true,\n  shouldCacheSnapshot: true,\n  acceptsStreamResponse: false\n};\n\nconst TimingMetric = {\n  visitStart: \"visitStart\",\n  requestStart: \"requestStart\",\n  requestEnd: \"requestEnd\",\n  visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n  initialized: \"initialized\",\n  started: \"started\",\n  canceled: \"canceled\",\n  failed: \"failed\",\n  completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n  networkFailure: 0,\n  timeoutFailure: -1,\n  contentTypeMismatch: -2\n};\n\nconst Direction = {\n  advance: \"forward\",\n  restore: \"back\",\n  replace: \"none\"\n};\n\nclass Visit {\n  identifier = uuid() // Required by turbo-ios\n  timingMetrics = {}\n\n  followedRedirect = false\n  historyChanged = false\n  scrolled = false\n  shouldCacheSnapshot = true\n  acceptsStreamResponse = false\n  snapshotCached = false\n  state = VisitState.initialized\n  viewTransitioner = new ViewTransitioner()\n\n  constructor(delegate, location, restorationIdentifier, options = {}) {\n    this.delegate = delegate;\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier || uuid();\n\n    const {\n      action,\n      historyChanged,\n      referrer,\n      snapshot,\n      snapshotHTML,\n      response,\n      visitCachedSnapshot,\n      willRender,\n      updateHistory,\n      shouldCacheSnapshot,\n      acceptsStreamResponse,\n      direction\n    } = {\n      ...defaultOptions,\n      ...options\n    };\n    this.action = action;\n    this.historyChanged = historyChanged;\n    this.referrer = referrer;\n    this.snapshot = snapshot;\n    this.snapshotHTML = snapshotHTML;\n    this.response = response;\n    this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n    this.isPageRefresh = this.view.isPageRefresh(this);\n    this.visitCachedSnapshot = visitCachedSnapshot;\n    this.willRender = willRender;\n    this.updateHistory = updateHistory;\n    this.scrolled = !willRender;\n    this.shouldCacheSnapshot = shouldCacheSnapshot;\n    this.acceptsStreamResponse = acceptsStreamResponse;\n    this.direction = direction || Direction[action];\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  get restorationData() {\n    return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n  }\n\n  get silent() {\n    return this.isSamePage\n  }\n\n  start() {\n    if (this.state == VisitState.initialized) {\n      this.recordTimingMetric(TimingMetric.visitStart);\n      this.state = VisitState.started;\n      this.adapter.visitStarted(this);\n      this.delegate.visitStarted(this);\n    }\n  }\n\n  cancel() {\n    if (this.state == VisitState.started) {\n      if (this.request) {\n        this.request.cancel();\n      }\n      this.cancelRender();\n      this.state = VisitState.canceled;\n    }\n  }\n\n  complete() {\n    if (this.state == VisitState.started) {\n      this.recordTimingMetric(TimingMetric.visitEnd);\n      this.adapter.visitCompleted(this);\n      this.state = VisitState.completed;\n      this.followRedirect();\n\n      if (!this.followedRedirect) {\n        this.delegate.visitCompleted(this);\n      }\n    }\n  }\n\n  fail() {\n    if (this.state == VisitState.started) {\n      this.state = VisitState.failed;\n      this.adapter.visitFailed(this);\n      this.delegate.visitCompleted(this);\n    }\n  }\n\n  changeHistory() {\n    if (!this.historyChanged && this.updateHistory) {\n      const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n      const method = getHistoryMethodForAction(actionForHistory);\n      this.history.update(method, this.location, this.restorationIdentifier);\n      this.historyChanged = true;\n    }\n  }\n\n  issueRequest() {\n    if (this.hasPreloadedResponse()) {\n      this.simulateRequest();\n    } else if (this.shouldIssueRequest() && !this.request) {\n      this.request = new FetchRequest(this, FetchMethod.get, this.location);\n      this.request.perform();\n    }\n  }\n\n  simulateRequest() {\n    if (this.response) {\n      this.startRequest();\n      this.recordResponse();\n      this.finishRequest();\n    }\n  }\n\n  startRequest() {\n    this.recordTimingMetric(TimingMetric.requestStart);\n    this.adapter.visitRequestStarted(this);\n  }\n\n  recordResponse(response = this.response) {\n    this.response = response;\n    if (response) {\n      const { statusCode } = response;\n      if (isSuccessful(statusCode)) {\n        this.adapter.visitRequestCompleted(this);\n      } else {\n        this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n      }\n    }\n  }\n\n  finishRequest() {\n    this.recordTimingMetric(TimingMetric.requestEnd);\n    this.adapter.visitRequestFinished(this);\n  }\n\n  loadResponse() {\n    if (this.response) {\n      const { statusCode, responseHTML } = this.response;\n      this.render(async () => {\n        if (this.shouldCacheSnapshot) this.cacheSnapshot();\n        if (this.view.renderPromise) await this.view.renderPromise;\n\n        if (isSuccessful(statusCode) && responseHTML != null) {\n          const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n          await this.renderPageSnapshot(snapshot, false);\n\n          this.adapter.visitRendered(this);\n          this.complete();\n        } else {\n          await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n          this.adapter.visitRendered(this);\n          this.fail();\n        }\n      });\n    }\n  }\n\n  getCachedSnapshot() {\n    const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n    if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n      if (this.action == \"restore\" || snapshot.isPreviewable) {\n        return snapshot\n      }\n    }\n  }\n\n  getPreloadedSnapshot() {\n    if (this.snapshotHTML) {\n      return PageSnapshot.fromHTMLString(this.snapshotHTML)\n    }\n  }\n\n  hasCachedSnapshot() {\n    return this.getCachedSnapshot() != null\n  }\n\n  loadCachedSnapshot() {\n    const snapshot = this.getCachedSnapshot();\n    if (snapshot) {\n      const isPreview = this.shouldIssueRequest();\n      this.render(async () => {\n        this.cacheSnapshot();\n        if (this.isSamePage || this.isPageRefresh) {\n          this.adapter.visitRendered(this);\n        } else {\n          if (this.view.renderPromise) await this.view.renderPromise;\n\n          await this.renderPageSnapshot(snapshot, isPreview);\n\n          this.adapter.visitRendered(this);\n          if (!isPreview) {\n            this.complete();\n          }\n        }\n      });\n    }\n  }\n\n  followRedirect() {\n    if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n      this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n        action: \"replace\",\n        response: this.response,\n        shouldCacheSnapshot: false,\n        willRender: false\n      });\n      this.followedRedirect = true;\n    }\n  }\n\n  goToSamePageAnchor() {\n    if (this.isSamePage) {\n      this.render(async () => {\n        this.cacheSnapshot();\n        this.performScroll();\n        this.changeHistory();\n        this.adapter.visitRendered(this);\n      });\n    }\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (this.acceptsStreamResponse) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted() {\n    this.startRequest();\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {}\n\n  async requestSucceededWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.redirectedToLocation = response.redirected ? response.location : undefined;\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  async requestFailedWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  requestErrored(_request, _error) {\n    this.recordResponse({\n      statusCode: SystemStatusCode.networkFailure,\n      redirected: false\n    });\n  }\n\n  requestFinished() {\n    this.finishRequest();\n  }\n\n  // Scrolling\n\n  performScroll() {\n    if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n      if (this.action == \"restore\") {\n        this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n      } else {\n        this.scrollToAnchor() || this.view.scrollToTop();\n      }\n      if (this.isSamePage) {\n        this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n      }\n\n      this.scrolled = true;\n    }\n  }\n\n  scrollToRestoredPosition() {\n    const { scrollPosition } = this.restorationData;\n    if (scrollPosition) {\n      this.view.scrollToPosition(scrollPosition);\n      return true\n    }\n  }\n\n  scrollToAnchor() {\n    const anchor = getAnchor(this.location);\n    if (anchor != null) {\n      this.view.scrollToAnchor(anchor);\n      return true\n    }\n  }\n\n  // Instrumentation\n\n  recordTimingMetric(metric) {\n    this.timingMetrics[metric] = new Date().getTime();\n  }\n\n  getTimingMetrics() {\n    return { ...this.timingMetrics }\n  }\n\n  // Private\n\n  getHistoryMethodForAction(action) {\n    switch (action) {\n      case \"replace\":\n        return history.replaceState\n      case \"advance\":\n      case \"restore\":\n        return history.pushState\n    }\n  }\n\n  hasPreloadedResponse() {\n    return typeof this.response == \"object\"\n  }\n\n  shouldIssueRequest() {\n    if (this.isSamePage) {\n      return false\n    } else if (this.action == \"restore\") {\n      return !this.hasCachedSnapshot()\n    } else {\n      return this.willRender\n    }\n  }\n\n  cacheSnapshot() {\n    if (!this.snapshotCached) {\n      this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n      this.snapshotCached = true;\n    }\n  }\n\n  async render(callback) {\n    this.cancelRender();\n    await new Promise((resolve) => {\n      this.frame =\n        document.visibilityState === \"hidden\" ? setTimeout(() => resolve(), 0) : requestAnimationFrame(() => resolve());\n    });\n    await callback();\n    delete this.frame;\n  }\n\n  async renderPageSnapshot(snapshot, isPreview) {\n    await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n      await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n      this.performScroll();\n    });\n  }\n\n  cancelRender() {\n    if (this.frame) {\n      cancelAnimationFrame(this.frame);\n      delete this.frame;\n    }\n  }\n}\n\nfunction isSuccessful(statusCode) {\n  return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n  progressBar = new ProgressBar()\n\n  constructor(session) {\n    this.session = session;\n  }\n\n  visitProposedToLocation(location, options) {\n    if (locationIsVisitable(location, this.navigator.rootLocation)) {\n      this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n    } else {\n      window.location.href = location.toString();\n    }\n  }\n\n  visitStarted(visit) {\n    this.location = visit.location;\n    visit.loadCachedSnapshot();\n    visit.issueRequest();\n    visit.goToSamePageAnchor();\n  }\n\n  visitRequestStarted(visit) {\n    this.progressBar.setValue(0);\n    if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n      this.showVisitProgressBarAfterDelay();\n    } else {\n      this.showProgressBar();\n    }\n  }\n\n  visitRequestCompleted(visit) {\n    visit.loadResponse();\n  }\n\n  visitRequestFailedWithStatusCode(visit, statusCode) {\n    switch (statusCode) {\n      case SystemStatusCode.networkFailure:\n      case SystemStatusCode.timeoutFailure:\n      case SystemStatusCode.contentTypeMismatch:\n        return this.reload({\n          reason: \"request_failed\",\n          context: {\n            statusCode\n          }\n        })\n      default:\n        return visit.loadResponse()\n    }\n  }\n\n  visitRequestFinished(_visit) {}\n\n  visitCompleted(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  pageInvalidated(reason) {\n    this.reload(reason);\n  }\n\n  visitFailed(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  visitRendered(_visit) {}\n\n  // Form Submission Delegate\n\n  formSubmissionStarted(_formSubmission) {\n    this.progressBar.setValue(0);\n    this.showFormProgressBarAfterDelay();\n  }\n\n  formSubmissionFinished(_formSubmission) {\n    this.progressBar.setValue(1);\n    this.hideFormProgressBar();\n  }\n\n  // Private\n\n  showVisitProgressBarAfterDelay() {\n    this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n  }\n\n  hideVisitProgressBar() {\n    this.progressBar.hide();\n    if (this.visitProgressBarTimeout != null) {\n      window.clearTimeout(this.visitProgressBarTimeout);\n      delete this.visitProgressBarTimeout;\n    }\n  }\n\n  showFormProgressBarAfterDelay() {\n    if (this.formProgressBarTimeout == null) {\n      this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n  }\n\n  hideFormProgressBar() {\n    this.progressBar.hide();\n    if (this.formProgressBarTimeout != null) {\n      window.clearTimeout(this.formProgressBarTimeout);\n      delete this.formProgressBarTimeout;\n    }\n  }\n\n  showProgressBar = () => {\n    this.progressBar.show();\n  }\n\n  reload(reason) {\n    dispatch(\"turbo:reload\", { detail: reason });\n\n    window.location.href = this.location?.toString() || window.location.href;\n  }\n\n  get navigator() {\n    return this.session.navigator\n  }\n}\n\nclass CacheObserver {\n  selector = \"[data-turbo-temporary]\"\n  deprecatedSelector = \"[data-turbo-cache=false]\"\n\n  started = false\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  removeTemporaryElements = (_event) => {\n    for (const element of this.temporaryElements) {\n      element.remove();\n    }\n  }\n\n  get temporaryElements() {\n    return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation]\n  }\n\n  get temporaryElementsWithDeprecation() {\n    const elements = document.querySelectorAll(this.deprecatedSelector);\n\n    if (elements.length) {\n      console.warn(\n        `The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`\n      );\n    }\n\n    return [...elements]\n  }\n}\n\nclass FrameRedirector {\n  constructor(session, element) {\n    this.session = session;\n    this.element = element;\n    this.linkInterceptor = new LinkInterceptor(this, element);\n    this.formSubmitObserver = new FormSubmitObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n    this.formSubmitObserver.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n    this.formSubmitObserver.stop();\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldRedirect(element)\n  }\n\n  linkClickIntercepted(element, url, event) {\n    const frame = this.#findFrameElement(element);\n    if (frame) {\n      frame.delegate.linkClickIntercepted(element, url, event);\n    }\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return (\n      element.closest(\"turbo-frame\") == null &&\n      this.#shouldSubmit(element, submitter) &&\n      this.#shouldRedirect(element, submitter)\n    )\n  }\n\n  formSubmitted(element, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n    if (frame) {\n      frame.delegate.formSubmitted(element, submitter);\n    }\n  }\n\n  #shouldSubmit(form, submitter) {\n    const action = getAction$1(form, submitter);\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const rootLocation = expandURL(meta?.content ?? \"/\");\n\n    return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n  }\n\n  #shouldRedirect(element, submitter) {\n    const isNavigatable =\n      element instanceof HTMLFormElement\n        ? this.session.submissionIsNavigatable(element, submitter)\n        : this.session.elementIsNavigatable(element);\n\n    if (isNavigatable) {\n      const frame = this.#findFrameElement(element, submitter);\n      return frame ? frame != element.closest(\"turbo-frame\") : false\n    } else {\n      return false\n    }\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = submitter?.getAttribute(\"data-turbo-frame\") || element.getAttribute(\"data-turbo-frame\");\n    if (id && id != \"_top\") {\n      const frame = this.element.querySelector(`#${id}:not([disabled])`);\n      if (frame instanceof FrameElement) {\n        return frame\n      }\n    }\n  }\n}\n\nclass History {\n  location\n  restorationIdentifier = uuid()\n  restorationData = {}\n  started = false\n  pageLoaded = false\n  currentIndex = 0\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"popstate\", this.onPopState, false);\n      addEventListener(\"load\", this.onPageLoad, false);\n      this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n      this.started = true;\n      this.replace(new URL(window.location.href));\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"popstate\", this.onPopState, false);\n      removeEventListener(\"load\", this.onPageLoad, false);\n      this.started = false;\n    }\n  }\n\n  push(location, restorationIdentifier) {\n    this.update(history.pushState, location, restorationIdentifier);\n  }\n\n  replace(location, restorationIdentifier) {\n    this.update(history.replaceState, location, restorationIdentifier);\n  }\n\n  update(method, location, restorationIdentifier = uuid()) {\n    if (method === history.pushState) ++this.currentIndex;\n\n    const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n    method.call(history, state, \"\", location.href);\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier;\n  }\n\n  // Restoration data\n\n  getRestorationDataForIdentifier(restorationIdentifier) {\n    return this.restorationData[restorationIdentifier] || {}\n  }\n\n  updateRestorationData(additionalData) {\n    const { restorationIdentifier } = this;\n    const restorationData = this.restorationData[restorationIdentifier];\n    this.restorationData[restorationIdentifier] = {\n      ...restorationData,\n      ...additionalData\n    };\n  }\n\n  // Scroll restoration\n\n  assumeControlOfScrollRestoration() {\n    if (!this.previousScrollRestoration) {\n      this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n      history.scrollRestoration = \"manual\";\n    }\n  }\n\n  relinquishControlOfScrollRestoration() {\n    if (this.previousScrollRestoration) {\n      history.scrollRestoration = this.previousScrollRestoration;\n      delete this.previousScrollRestoration;\n    }\n  }\n\n  // Event handlers\n\n  onPopState = (event) => {\n    if (this.shouldHandlePopState()) {\n      const { turbo } = event.state || {};\n      if (turbo) {\n        this.location = new URL(window.location.href);\n        const { restorationIdentifier, restorationIndex } = turbo;\n        this.restorationIdentifier = restorationIdentifier;\n        const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n        this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n        this.currentIndex = restorationIndex;\n      }\n    }\n  }\n\n  onPageLoad = async (_event) => {\n    await nextMicrotask();\n    this.pageLoaded = true;\n  }\n\n  // Private\n\n  shouldHandlePopState() {\n    // Safari dispatches a popstate event after window's load event, ignore it\n    return this.pageIsLoaded()\n  }\n\n  pageIsLoaded() {\n    return this.pageLoaded || document.readyState == \"complete\"\n  }\n}\n\nclass LinkPrefetchObserver {\n  started = false\n  #prefetchedLink = null\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (this.started) return\n\n    if (this.eventTarget.readyState === \"loading\") {\n      this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n    } else {\n      this.#enable();\n    }\n  }\n\n  stop() {\n    if (!this.started) return\n\n    this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = false;\n  }\n\n  #enable = () => {\n    this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = true;\n  }\n\n  #tryToPrefetchRequest = (event) => {\n    if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n    const target = event.target;\n    const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n    if (isLink && this.#isPrefetchable(target)) {\n      const link = target;\n      const location = getLocationForLink(link);\n\n      if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n        this.#prefetchedLink = link;\n\n        const fetchRequest = new FetchRequest(\n          this,\n          FetchMethod.get,\n          location,\n          new URLSearchParams(),\n          target\n        );\n\n        prefetchCache.setLater(location.toString(), fetchRequest, this.#cacheTtl);\n      }\n    }\n  }\n\n  #cancelRequestIfObsolete = (event) => {\n    if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n  }\n\n  #cancelPrefetchRequest = () => {\n    prefetchCache.clear();\n    this.#prefetchedLink = null;\n  }\n\n  #tryToUsePrefetchedRequest = (event) => {\n    if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"GET\") {\n      const cached = prefetchCache.get(event.detail.url.toString());\n\n      if (cached) {\n        // User clicked link, use cache response\n        event.detail.fetchRequest = cached;\n      }\n\n      prefetchCache.clear();\n    }\n  }\n\n  prepareRequest(request) {\n    const link = request.target;\n\n    request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n    const turboFrame = link.closest(\"turbo-frame\");\n    const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n    if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n      request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n    }\n  }\n\n  // Fetch request interface\n\n  requestSucceededWithResponse() {}\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  get #cacheTtl() {\n    return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n  }\n\n  #isPrefetchable(link) {\n    const href = link.getAttribute(\"href\");\n\n    if (!href) return false\n\n    if (unfetchableLink(link)) return false\n    if (linkToTheSamePage(link)) return false\n    if (linkOptsOut(link)) return false\n    if (nonSafeLink(link)) return false\n    if (eventPrevented(link)) return false\n\n    return true\n  }\n}\n\nconst unfetchableLink = (link) => {\n  return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n  return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n  if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n  if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n  const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n  if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n  return false\n};\n\nconst nonSafeLink = (link) => {\n  const turboMethod = link.getAttribute(\"data-turbo-method\");\n  if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n  if (isUJS(link)) return true\n  if (link.hasAttribute(\"data-turbo-confirm\")) return true\n  if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n  return false\n};\n\nconst isUJS = (link) => {\n  return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n  const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n  return event.defaultPrevented\n};\n\nclass Navigator {\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  proposeVisit(location, options = {}) {\n    if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n      this.delegate.visitProposedToLocation(location, options);\n    }\n  }\n\n  startVisit(locatable, restorationIdentifier, options = {}) {\n    this.stop();\n    this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n      referrer: this.location,\n      ...options\n    });\n    this.currentVisit.start();\n  }\n\n  submitForm(form, submitter) {\n    this.stop();\n    this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n    this.formSubmission.start();\n  }\n\n  stop() {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n      delete this.formSubmission;\n    }\n\n    if (this.currentVisit) {\n      this.currentVisit.cancel();\n      delete this.currentVisit;\n    }\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get rootLocation() {\n    return this.view.snapshot.rootLocation\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted(formSubmission) {\n    // Not all adapters implement formSubmissionStarted\n    if (typeof this.adapter.formSubmissionStarted === \"function\") {\n      this.adapter.formSubmissionStarted(formSubmission);\n    }\n  }\n\n  async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n    if (formSubmission == this.formSubmission) {\n      const responseHTML = await fetchResponse.responseHTML;\n      if (responseHTML) {\n        const shouldCacheSnapshot = formSubmission.isSafe;\n        if (!shouldCacheSnapshot) {\n          this.view.clearSnapshotCache();\n        }\n\n        const { statusCode, redirected } = fetchResponse;\n        const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n        const visitOptions = {\n          action,\n          shouldCacheSnapshot,\n          response: { statusCode, responseHTML, redirected }\n        };\n        this.proposeVisit(fetchResponse.location, visitOptions);\n      }\n    }\n  }\n\n  async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    const responseHTML = await fetchResponse.responseHTML;\n\n    if (responseHTML) {\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n      if (fetchResponse.serverError) {\n        await this.view.renderError(snapshot, this.currentVisit);\n      } else {\n        await this.view.renderPage(snapshot, false, true, this.currentVisit);\n      }\n      if(!snapshot.shouldPreserveScrollPosition) {\n        this.view.scrollToTop();\n      }\n      this.view.clearSnapshotCache();\n    }\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished(formSubmission) {\n    // Not all adapters implement formSubmissionFinished\n    if (typeof this.adapter.formSubmissionFinished === \"function\") {\n      this.adapter.formSubmissionFinished(formSubmission);\n    }\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    this.delegate.visitStarted(visit);\n  }\n\n  visitCompleted(visit) {\n    this.delegate.visitCompleted(visit);\n    delete this.currentVisit;\n  }\n\n  locationWithActionIsSamePage(location, action) {\n    const anchor = getAnchor(location);\n    const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n    const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n\n    return (\n      action !== \"replace\" &&\n      getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n      (isRestorationToTop || (anchor != null && anchor !== currentAnchor))\n    )\n  }\n\n  visitScrolledToSamePageLocation(oldURL, newURL) {\n    this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n  }\n\n  // Visits\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  #getActionForFormSubmission(formSubmission, fetchResponse) {\n    const { submitter, formElement } = formSubmission;\n    return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n  }\n\n  #getDefaultAction(fetchResponse) {\n    const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n    return sameLocationRedirect ? \"replace\" : \"advance\"\n  }\n}\n\nconst PageStage = {\n  initial: 0,\n  loading: 1,\n  interactive: 2,\n  complete: 3\n};\n\nclass PageObserver {\n  stage = PageStage.initial\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      if (this.stage == PageStage.initial) {\n        this.stage = PageStage.loading;\n      }\n      document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n      addEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n      removeEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = false;\n    }\n  }\n\n  interpretReadyState = () => {\n    const { readyState } = this;\n    if (readyState == \"interactive\") {\n      this.pageIsInteractive();\n    } else if (readyState == \"complete\") {\n      this.pageIsComplete();\n    }\n  }\n\n  pageIsInteractive() {\n    if (this.stage == PageStage.loading) {\n      this.stage = PageStage.interactive;\n      this.delegate.pageBecameInteractive();\n    }\n  }\n\n  pageIsComplete() {\n    this.pageIsInteractive();\n    if (this.stage == PageStage.interactive) {\n      this.stage = PageStage.complete;\n      this.delegate.pageLoaded();\n    }\n  }\n\n  pageWillUnload = () => {\n    this.delegate.pageWillUnload();\n  }\n\n  get readyState() {\n    return document.readyState\n  }\n}\n\nclass ScrollObserver {\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"scroll\", this.onScroll, false);\n      this.onScroll();\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"scroll\", this.onScroll, false);\n      this.started = false;\n    }\n  }\n\n  onScroll = () => {\n    this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n  }\n\n  // Private\n\n  updatePosition(position) {\n    this.delegate.scrollPositionChanged(position);\n  }\n}\n\nclass StreamMessageRenderer {\n  render({ fragment }) {\n    Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n      withAutofocusFromFragment(fragment, () => {\n        withPreservedFocus(() => {\n          document.documentElement.appendChild(fragment);\n        });\n      });\n    });\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement, newPermanentElement) {\n    newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n  }\n\n  leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n  const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n  const permanentElementMap = {};\n  for (const permanentElementInDocument of permanentElementsInDocument) {\n    const { id } = permanentElementInDocument;\n\n    for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n      const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n      if (elementInStream) {\n        permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n      }\n    }\n  }\n\n  return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n  const generatedID = `turbo-stream-autofocus-${uuid()}`;\n  const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n  const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n  let willAutofocusId = null;\n\n  if (elementWithAutofocus) {\n    if (elementWithAutofocus.id) {\n      willAutofocusId = elementWithAutofocus.id;\n    } else {\n      willAutofocusId = generatedID;\n    }\n\n    elementWithAutofocus.id = willAutofocusId;\n  }\n\n  callback();\n  await nextRepaint();\n\n  const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n  if (hasNoActiveElement && willAutofocusId) {\n    const elementToAutofocus = document.getElementById(willAutofocusId);\n\n    if (elementIsFocusable(elementToAutofocus)) {\n      elementToAutofocus.focus();\n    }\n    if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n      elementToAutofocus.removeAttribute(\"id\");\n    }\n  }\n}\n\nasync function withPreservedFocus(callback) {\n  const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n  const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n  if (restoreFocusTo) {\n    const elementToFocus = document.getElementById(restoreFocusTo);\n\n    if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n      elementToFocus.focus();\n    }\n  }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n  for (const streamElement of nodeListOfStreamElements) {\n    const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n    if (elementWithAutofocus) return elementWithAutofocus\n  }\n\n  return null\n}\n\nclass StreamObserver {\n  sources = new Set()\n  #started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.#started) {\n      this.#started = true;\n      addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  stop() {\n    if (this.#started) {\n      this.#started = false;\n      removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  connectStreamSource(source) {\n    if (!this.streamSourceIsConnected(source)) {\n      this.sources.add(source);\n      source.addEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  disconnectStreamSource(source) {\n    if (this.streamSourceIsConnected(source)) {\n      this.sources.delete(source);\n      source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  streamSourceIsConnected(source) {\n    return this.sources.has(source)\n  }\n\n  inspectFetchResponse = (event) => {\n    const response = fetchResponseFromEvent(event);\n    if (response && fetchResponseIsStream(response)) {\n      event.preventDefault();\n      this.receiveMessageResponse(response);\n    }\n  }\n\n  receiveMessageEvent = (event) => {\n    if (this.#started && typeof event.data == \"string\") {\n      this.receiveMessageHTML(event.data);\n    }\n  }\n\n  async receiveMessageResponse(response) {\n    const html = await response.responseHTML;\n    if (html) {\n      this.receiveMessageHTML(html);\n    }\n  }\n\n  receiveMessageHTML(html) {\n    this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n  }\n}\n\nfunction fetchResponseFromEvent(event) {\n  const fetchResponse = event.detail?.fetchResponse;\n  if (fetchResponse instanceof FetchResponse) {\n    return fetchResponse\n  }\n}\n\nfunction fetchResponseIsStream(response) {\n  const contentType = response.contentType ?? \"\";\n  return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const { documentElement, body } = document;\n\n    documentElement.replaceChild(newElement, body);\n  }\n\n  async render() {\n    this.replaceHeadAndBody();\n    this.activateScriptElements();\n  }\n\n  replaceHeadAndBody() {\n    const { documentElement, head } = document;\n    documentElement.replaceChild(this.newHead, head);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n\n  activateScriptElements() {\n    for (const replaceableElement of this.scriptElements) {\n      const parentNode = replaceableElement.parentNode;\n      if (parentNode) {\n        const element = activateScriptElement(replaceableElement);\n        parentNode.replaceChild(element, replaceableElement);\n      }\n    }\n  }\n\n  get newHead() {\n    return this.newSnapshot.headSnapshot.element\n  }\n\n  get scriptElements() {\n    return document.documentElement.querySelectorAll(\"script\")\n  }\n}\n\nclass PageRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    if (document.body && newElement instanceof HTMLBodyElement) {\n      document.body.replaceWith(newElement);\n    } else {\n      document.documentElement.appendChild(newElement);\n    }\n  }\n\n  get shouldRender() {\n    return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n  }\n\n  get reloadReason() {\n    if (!this.newSnapshot.isVisitable) {\n      return {\n        reason: \"turbo_visit_control_is_reload\"\n      }\n    }\n\n    if (!this.trackedElementsAreIdentical) {\n      return {\n        reason: \"tracked_element_mismatch\"\n      }\n    }\n  }\n\n  async prepareToRender() {\n    this.#setLanguage();\n    await this.mergeHead();\n  }\n\n  async render() {\n    if (this.willRender) {\n      await this.replaceBody();\n    }\n  }\n\n  finishRendering() {\n    super.finishRendering();\n    if (!this.isPreview) {\n      this.focusFirstAutofocusableElement();\n    }\n  }\n\n  get currentHeadSnapshot() {\n    return this.currentSnapshot.headSnapshot\n  }\n\n  get newHeadSnapshot() {\n    return this.newSnapshot.headSnapshot\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  #setLanguage() {\n    const { documentElement } = this.currentSnapshot;\n    const { lang } = this.newSnapshot;\n\n    if (lang) {\n      documentElement.setAttribute(\"lang\", lang);\n    } else {\n      documentElement.removeAttribute(\"lang\");\n    }\n  }\n\n  async mergeHead() {\n    const mergedHeadElements = this.mergeProvisionalElements();\n    const newStylesheetElements = this.copyNewHeadStylesheetElements();\n    this.copyNewHeadScriptElements();\n\n    await mergedHeadElements;\n    await newStylesheetElements;\n\n    if (this.willRender) {\n      this.removeUnusedDynamicStylesheetElements();\n    }\n  }\n\n  async replaceBody() {\n    await this.preservingPermanentElements(async () => {\n      this.activateNewBody();\n      await this.assignNewBody();\n    });\n  }\n\n  get trackedElementsAreIdentical() {\n    return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n  }\n\n  async copyNewHeadStylesheetElements() {\n    const loadingElements = [];\n\n    for (const element of this.newHeadStylesheetElements) {\n      loadingElements.push(waitForLoad(element));\n\n      document.head.appendChild(element);\n    }\n\n    await Promise.all(loadingElements);\n  }\n\n  copyNewHeadScriptElements() {\n    for (const element of this.newHeadScriptElements) {\n      document.head.appendChild(activateScriptElement(element));\n    }\n  }\n\n  removeUnusedDynamicStylesheetElements() {\n    for (const element of this.unusedDynamicStylesheetElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  async mergeProvisionalElements() {\n    const newHeadElements = [...this.newHeadProvisionalElements];\n\n    for (const element of this.currentHeadProvisionalElements) {\n      if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n        document.head.removeChild(element);\n      }\n    }\n\n    for (const element of newHeadElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  isCurrentElementInElementList(element, elementList) {\n    for (const [index, newElement] of elementList.entries()) {\n      // if title element...\n      if (element.tagName == \"TITLE\") {\n        if (newElement.tagName != \"TITLE\") {\n          continue\n        }\n        if (element.innerHTML == newElement.innerHTML) {\n          elementList.splice(index, 1);\n          return true\n        }\n      }\n\n      // if any other element...\n      if (newElement.isEqualNode(element)) {\n        elementList.splice(index, 1);\n        return true\n      }\n    }\n\n    return false\n  }\n\n  removeCurrentHeadProvisionalElements() {\n    for (const element of this.currentHeadProvisionalElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  copyNewHeadProvisionalElements() {\n    for (const element of this.newHeadProvisionalElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  activateNewBody() {\n    document.adoptNode(this.newElement);\n    this.activateNewBodyScriptElements();\n  }\n\n  activateNewBodyScriptElements() {\n    for (const inertScriptElement of this.newBodyScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  async assignNewBody() {\n    await this.renderElement(this.currentElement, this.newElement);\n  }\n\n  get unusedDynamicStylesheetElements() {\n    return this.oldHeadStylesheetElements.filter((element) => {\n      return element.getAttribute(\"data-turbo-track\") === \"dynamic\"\n    })\n  }\n\n  get oldHeadStylesheetElements() {\n    return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)\n  }\n\n  get newHeadStylesheetElements() {\n    return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get newHeadScriptElements() {\n    return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get currentHeadProvisionalElements() {\n    return this.currentHeadSnapshot.provisionalElements\n  }\n\n  get newHeadProvisionalElements() {\n    return this.newHeadSnapshot.provisionalElements\n  }\n\n  get newBodyScriptElements() {\n    return this.newElement.querySelectorAll(\"script\")\n  }\n}\n\nclass MorphingPageRenderer extends PageRenderer {\n  static renderElement(currentElement, newElement) {\n    morphElements(currentElement, newElement, {\n      callbacks: {\n        beforeNodeMorphed: element => !canRefreshFrame(element)\n      }\n    });\n\n    for (const frame of currentElement.querySelectorAll(\"turbo-frame\")) {\n      if (canRefreshFrame(frame)) frame.reload();\n    }\n\n    dispatch(\"turbo:morph\", { detail: { currentElement, newElement } });\n  }\n\n  async preservingPermanentElements(callback) {\n    return await callback()\n  }\n\n  get renderMethod() {\n    return \"morph\"\n  }\n\n  get shouldAutofocus() {\n    return false\n  }\n}\n\nfunction canRefreshFrame(frame) {\n  return frame instanceof FrameElement &&\n    frame.src &&\n    frame.refresh === \"morph\" &&\n    !frame.closest(\"[data-turbo-permanent]\")\n}\n\nclass SnapshotCache {\n  keys = []\n  snapshots = {}\n\n  constructor(size) {\n    this.size = size;\n  }\n\n  has(location) {\n    return toCacheKey(location) in this.snapshots\n  }\n\n  get(location) {\n    if (this.has(location)) {\n      const snapshot = this.read(location);\n      this.touch(location);\n      return snapshot\n    }\n  }\n\n  put(location, snapshot) {\n    this.write(location, snapshot);\n    this.touch(location);\n    return snapshot\n  }\n\n  clear() {\n    this.snapshots = {};\n  }\n\n  // Private\n\n  read(location) {\n    return this.snapshots[toCacheKey(location)]\n  }\n\n  write(location, snapshot) {\n    this.snapshots[toCacheKey(location)] = snapshot;\n  }\n\n  touch(location) {\n    const key = toCacheKey(location);\n    const index = this.keys.indexOf(key);\n    if (index > -1) this.keys.splice(index, 1);\n    this.keys.unshift(key);\n    this.trim();\n  }\n\n  trim() {\n    for (const key of this.keys.splice(this.size)) {\n      delete this.snapshots[key];\n    }\n  }\n}\n\nclass PageView extends View {\n  snapshotCache = new SnapshotCache(10)\n  lastRenderedLocation = new URL(location.href)\n  forceReloaded = false\n\n  shouldTransitionTo(newSnapshot) {\n    return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n  }\n\n  renderPage(snapshot, isPreview = false, willRender = true, visit) {\n    const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage;\n    const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer;\n\n    const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender);\n\n    if (!renderer.shouldRender) {\n      this.forceReloaded = true;\n    } else {\n      visit?.changeHistory();\n    }\n\n    return this.render(renderer)\n  }\n\n  renderError(snapshot, visit) {\n    visit?.changeHistory();\n    const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n    return this.render(renderer)\n  }\n\n  clearSnapshotCache() {\n    this.snapshotCache.clear();\n  }\n\n  async cacheSnapshot(snapshot = this.snapshot) {\n    if (snapshot.isCacheable) {\n      this.delegate.viewWillCacheSnapshot();\n      const { lastRenderedLocation: location } = this;\n      await nextEventLoopTick();\n      const cachedSnapshot = snapshot.clone();\n      this.snapshotCache.put(location, cachedSnapshot);\n      return cachedSnapshot\n    }\n  }\n\n  getCachedSnapshotForLocation(location) {\n    return this.snapshotCache.get(location)\n  }\n\n  isPageRefresh(visit) {\n    return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n  }\n\n  shouldPreserveScrollPosition(visit) {\n    return this.isPageRefresh(visit) && this.snapshot.shouldPreserveScrollPosition\n  }\n\n  get snapshot() {\n    return PageSnapshot.fromElement(this.element)\n  }\n}\n\nclass Preloader {\n  selector = \"a[data-turbo-preload]\"\n\n  constructor(delegate, snapshotCache) {\n    this.delegate = delegate;\n    this.snapshotCache = snapshotCache;\n  }\n\n  start() {\n    if (document.readyState === \"loading\") {\n      document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n    } else {\n      this.preloadOnLoadLinksForView(document.body);\n    }\n  }\n\n  stop() {\n    document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    for (const link of element.querySelectorAll(this.selector)) {\n      if (this.delegate.shouldPreloadLink(link)) {\n        this.preloadURL(link);\n      }\n    }\n  }\n\n  async preloadURL(link) {\n    const location = new URL(link.href);\n\n    if (this.snapshotCache.has(location)) {\n      return\n    }\n\n    const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n    await fetchRequest.perform();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(fetchRequest) {\n    fetchRequest.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n  }\n\n  async requestSucceededWithResponse(fetchRequest, fetchResponse) {\n    try {\n      const responseHTML = await fetchResponse.responseHTML;\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n      this.snapshotCache.put(fetchRequest.url, snapshot);\n    } catch (_) {\n      // If we cannot preload that is ok!\n    }\n  }\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  #preloadAll = () => {\n    this.preloadOnLoadLinksForView(document.body);\n  }\n}\n\nclass Cache {\n  constructor(session) {\n    this.session = session;\n  }\n\n  clear() {\n    this.session.clearCache();\n  }\n\n  resetCacheControl() {\n    this.#setCacheControl(\"\");\n  }\n\n  exemptPageFromCache() {\n    this.#setCacheControl(\"no-cache\");\n  }\n\n  exemptPageFromPreview() {\n    this.#setCacheControl(\"no-preview\");\n  }\n\n  #setCacheControl(value) {\n    setMetaContent(\"turbo-cache-control\", value);\n  }\n}\n\nclass Session {\n  navigator = new Navigator(this)\n  history = new History(this)\n  view = new PageView(this, document.documentElement)\n  adapter = new BrowserAdapter(this)\n\n  pageObserver = new PageObserver(this)\n  cacheObserver = new CacheObserver()\n  linkPrefetchObserver = new LinkPrefetchObserver(this, document)\n  linkClickObserver = new LinkClickObserver(this, window)\n  formSubmitObserver = new FormSubmitObserver(this, document)\n  scrollObserver = new ScrollObserver(this)\n  streamObserver = new StreamObserver(this)\n  formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement)\n  frameRedirector = new FrameRedirector(this, document.documentElement)\n  streamMessageRenderer = new StreamMessageRenderer()\n  cache = new Cache(this)\n\n  enabled = true\n  started = false\n  #pageRefreshDebouncePeriod = 150\n\n  constructor(recentRequests) {\n    this.recentRequests = recentRequests;\n    this.preloader = new Preloader(this, this.view.snapshotCache);\n    this.debouncedRefresh = this.refresh;\n    this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod;\n  }\n\n  start() {\n    if (!this.started) {\n      this.pageObserver.start();\n      this.cacheObserver.start();\n      this.linkPrefetchObserver.start();\n      this.formLinkClickObserver.start();\n      this.linkClickObserver.start();\n      this.formSubmitObserver.start();\n      this.scrollObserver.start();\n      this.streamObserver.start();\n      this.frameRedirector.start();\n      this.history.start();\n      this.preloader.start();\n      this.started = true;\n      this.enabled = true;\n    }\n  }\n\n  disable() {\n    this.enabled = false;\n  }\n\n  stop() {\n    if (this.started) {\n      this.pageObserver.stop();\n      this.cacheObserver.stop();\n      this.linkPrefetchObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkClickObserver.stop();\n      this.formSubmitObserver.stop();\n      this.scrollObserver.stop();\n      this.streamObserver.stop();\n      this.frameRedirector.stop();\n      this.history.stop();\n      this.preloader.stop();\n      this.started = false;\n    }\n  }\n\n  registerAdapter(adapter) {\n    this.adapter = adapter;\n  }\n\n  visit(location, options = {}) {\n    const frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n    if (frameElement instanceof FrameElement) {\n      const action = options.action || getVisitAction(frameElement);\n\n      frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action);\n      frameElement.src = location.toString();\n    } else {\n      this.navigator.proposeVisit(expandURL(location), options);\n    }\n  }\n\n  refresh(url, requestId) {\n    const isRecentRequest = requestId && this.recentRequests.has(requestId);\n    if (!isRecentRequest && !this.navigator.currentVisit) {\n      this.visit(url, { action: \"replace\", shouldCacheSnapshot: false });\n    }\n  }\n\n  connectStreamSource(source) {\n    this.streamObserver.connectStreamSource(source);\n  }\n\n  disconnectStreamSource(source) {\n    this.streamObserver.disconnectStreamSource(source);\n  }\n\n  renderStreamMessage(message) {\n    this.streamMessageRenderer.render(StreamMessage.wrap(message));\n  }\n\n  clearCache() {\n    this.view.clearSnapshotCache();\n  }\n\n  setProgressBarDelay(delay) {\n    console.warn(\n      \"Please replace `session.setProgressBarDelay(delay)` with `session.progressBarDelay = delay`. The function is deprecated and will be removed in a future version of Turbo.`\"\n    );\n\n    this.progressBarDelay = delay;\n  }\n\n  set progressBarDelay(delay) {\n    config.drive.progressBarDelay = delay;\n  }\n\n  get progressBarDelay() {\n    return config.drive.progressBarDelay\n  }\n\n  set drive(value) {\n    config.drive.enabled = value;\n  }\n\n  get drive() {\n    return config.drive.enabled\n  }\n\n  set formMode(value) {\n    config.forms.mode = value;\n  }\n\n  get formMode() {\n    return config.forms.mode\n  }\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  get pageRefreshDebouncePeriod() {\n    return this.#pageRefreshDebouncePeriod\n  }\n\n  set pageRefreshDebouncePeriod(value) {\n    this.refresh = debounce(this.debouncedRefresh.bind(this), value);\n    this.#pageRefreshDebouncePeriod = value;\n  }\n\n  // Preloader delegate\n\n  shouldPreloadLink(element) {\n    const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n    const isStream = element.hasAttribute(\"data-turbo-stream\");\n    const frameTarget = element.getAttribute(\"data-turbo-frame\");\n    const frame = frameTarget == \"_top\" ?\n      null :\n      document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n    if (isUnsafe || isStream || frame instanceof FrameElement) {\n      return false\n    } else {\n      const location = new URL(element.href);\n\n      return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n    }\n  }\n\n  // History delegate\n\n  historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n    if (this.enabled) {\n      this.navigator.startVisit(location, restorationIdentifier, {\n        action: \"restore\",\n        historyChanged: true,\n        direction\n      });\n    } else {\n      this.adapter.pageInvalidated({\n        reason: \"turbo_disabled\"\n      });\n    }\n  }\n\n  // Scroll observer delegate\n\n  scrollPositionChanged(position) {\n    this.history.updateRestorationData({ scrollPosition: position });\n  }\n\n  // Form click observer delegate\n\n  willSubmitFormLinkToLocation(link, location) {\n    return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n  }\n\n  submittedFormLinkToLocation() {}\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return (\n      this.elementIsNavigatable(link) &&\n        locationIsVisitable(location, this.snapshot.rootLocation)\n    )\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, event) {\n    return (\n      this.elementIsNavigatable(link) &&\n      locationIsVisitable(location, this.snapshot.rootLocation) &&\n      this.applicationAllowsFollowingLinkToLocation(link, location, event)\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const action = this.getActionForLink(link);\n    const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n    this.visit(location.href, { action, acceptsStreamResponse });\n  }\n\n  // Navigator delegate\n\n  allowsVisitingLocationWithAction(location, action) {\n    return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location)\n  }\n\n  visitProposedToLocation(location, options) {\n    extendURLWithDeprecatedProperties(location);\n    this.adapter.visitProposedToLocation(location, options);\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    if (!visit.acceptsStreamResponse) {\n      markAsBusy(document.documentElement);\n      this.view.markVisitDirection(visit.direction);\n    }\n    extendURLWithDeprecatedProperties(visit.location);\n    if (!visit.silent) {\n      this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n    }\n  }\n\n  visitCompleted(visit) {\n    this.view.unmarkVisitDirection();\n    clearBusyState(document.documentElement);\n    this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n  }\n\n  locationWithActionIsSamePage(location, action) {\n    return this.navigator.locationWithActionIsSamePage(location, action)\n  }\n\n  visitScrolledToSamePageLocation(oldURL, newURL) {\n    this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return (\n      this.submissionIsNavigatable(form, submitter) &&\n      locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n    )\n  }\n\n  formSubmitted(form, submitter) {\n    this.navigator.submitForm(form, submitter);\n  }\n\n  // Page observer delegate\n\n  pageBecameInteractive() {\n    this.view.lastRenderedLocation = this.location;\n    this.notifyApplicationAfterPageLoad();\n  }\n\n  pageLoaded() {\n    this.history.assumeControlOfScrollRestoration();\n  }\n\n  pageWillUnload() {\n    this.history.relinquishControlOfScrollRestoration();\n  }\n\n  // Stream observer delegate\n\n  receivedMessageFromStream(message) {\n    this.renderStreamMessage(message);\n  }\n\n  // Page view delegate\n\n  viewWillCacheSnapshot() {\n    if (!this.navigator.currentVisit?.silent) {\n      this.notifyApplicationBeforeCachingSnapshot();\n    }\n  }\n\n  allowsImmediateRender({ element }, options) {\n    const event = this.notifyApplicationBeforeRender(element, options);\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) {\n    this.view.lastRenderedLocation = this.history.location;\n    this.notifyApplicationAfterRender(renderMethod);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    this.preloader.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated(reason) {\n    this.adapter.pageInvalidated(reason);\n  }\n\n  // Frame element\n\n  frameLoaded(frame) {\n    this.notifyApplicationAfterFrameLoad(frame);\n  }\n\n  frameRendered(fetchResponse, frame) {\n    this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n  }\n\n  // Application events\n\n  applicationAllowsFollowingLinkToLocation(link, location, ev) {\n    const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n    return !event.defaultPrevented\n  }\n\n  applicationAllowsVisitingLocation(location) {\n    const event = this.notifyApplicationBeforeVisitingLocation(location);\n    return !event.defaultPrevented\n  }\n\n  notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n    return dispatch(\"turbo:click\", {\n      target: link,\n      detail: { url: location.href, originalEvent: event },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationBeforeVisitingLocation(location) {\n    return dispatch(\"turbo:before-visit\", {\n      detail: { url: location.href },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterVisitingLocation(location, action) {\n    return dispatch(\"turbo:visit\", { detail: { url: location.href, action } })\n  }\n\n  notifyApplicationBeforeCachingSnapshot() {\n    return dispatch(\"turbo:before-cache\")\n  }\n\n  notifyApplicationBeforeRender(newBody, options) {\n    return dispatch(\"turbo:before-render\", {\n      detail: { newBody, ...options },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterRender(renderMethod) {\n    return dispatch(\"turbo:render\", { detail: { renderMethod } })\n  }\n\n  notifyApplicationAfterPageLoad(timing = {}) {\n    return dispatch(\"turbo:load\", {\n      detail: { url: this.location.href, timing }\n    })\n  }\n\n  notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n    dispatchEvent(\n      new HashChangeEvent(\"hashchange\", {\n        oldURL: oldURL.toString(),\n        newURL: newURL.toString()\n      })\n    );\n  }\n\n  notifyApplicationAfterFrameLoad(frame) {\n    return dispatch(\"turbo:frame-load\", { target: frame })\n  }\n\n  notifyApplicationAfterFrameRender(fetchResponse, frame) {\n    return dispatch(\"turbo:frame-render\", {\n      detail: { fetchResponse },\n      target: frame,\n      cancelable: true\n    })\n  }\n\n  // Helpers\n\n  submissionIsNavigatable(form, submitter) {\n    if (config.forms.mode == \"off\") {\n      return false\n    } else {\n      const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n      if (config.forms.mode == \"optin\") {\n        return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null\n      } else {\n        return submitterIsNavigatable && this.elementIsNavigatable(form)\n      }\n    }\n  }\n\n  elementIsNavigatable(element) {\n    const container = findClosestRecursively(element, \"[data-turbo]\");\n    const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n    // Check if Drive is enabled on the session or we're within a Frame.\n    if (config.drive.enabled || withinFrame) {\n      // Element is navigatable by default, unless `data-turbo=\"false\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") != \"false\"\n      } else {\n        return true\n      }\n    } else {\n      // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") == \"true\"\n      } else {\n        return false\n      }\n    }\n  }\n\n  // Private\n\n  getActionForLink(link) {\n    return getVisitAction(link) || \"advance\"\n  }\n\n  get snapshot() {\n    return this.view.snapshot\n  }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n  Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n  absoluteURL: {\n    get() {\n      return this.toString()\n    }\n  }\n};\n\nconst session = new Session(recentRequests);\nconst { cache, navigator: navigator$1 } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n  session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n  session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n  session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n  session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n  session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n  session.renderStreamMessage(message);\n}\n\n/**\n * Removes all entries from the Turbo Drive page cache.\n * Call this when state has changed on the server that may affect cached pages.\n *\n * @deprecated since version 7.2.0 in favor of `Turbo.cache.clear()`\n */\nfunction clearCache() {\n  console.warn(\n    \"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  session.clearCache();\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n  console.warn(\n    \"Please replace `Turbo.setProgressBarDelay(delay)` with `Turbo.config.drive.progressBarDelay = delay`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.drive.progressBarDelay = delay;\n}\n\nfunction setConfirmMethod(confirmMethod) {\n  console.warn(\n    \"Please replace `Turbo.setConfirmMethod(confirmMethod)` with `Turbo.config.forms.confirm = confirmMethod`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.forms.confirm = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n  console.warn(\n    \"Please replace `Turbo.setFormMode(mode)` with `Turbo.config.forms.mode = mode`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.forms.mode = mode;\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  navigator: navigator$1,\n  session: session,\n  cache: cache,\n  PageRenderer: PageRenderer,\n  PageSnapshot: PageSnapshot,\n  FrameRenderer: FrameRenderer,\n  fetch: fetchWithTurboHeaders,\n  config: config,\n  start: start,\n  registerAdapter: registerAdapter,\n  visit: visit,\n  connectStreamSource: connectStreamSource,\n  disconnectStreamSource: disconnectStreamSource,\n  renderStreamMessage: renderStreamMessage,\n  clearCache: clearCache,\n  setProgressBarDelay: setProgressBarDelay,\n  setConfirmMethod: setConfirmMethod,\n  setFormMode: setFormMode\n});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n  fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n  #currentFetchRequest = null\n  #resolveVisitPromise = () => {}\n  #connected = false\n  #hasBeenLoaded = false\n  #ignoredAttributes = new Set()\n  #shouldMorphFrame = false\n  action = null\n\n  constructor(element) {\n    this.element = element;\n    this.view = new FrameView(this, this.element);\n    this.appearanceObserver = new AppearanceObserver(this, this.element);\n    this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n    this.linkInterceptor = new LinkInterceptor(this, this.element);\n    this.restorationIdentifier = uuid();\n    this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n  }\n\n  // Frame delegate\n\n  connect() {\n    if (!this.#connected) {\n      this.#connected = true;\n      if (this.loadingStyle == FrameLoadingStyle.lazy) {\n        this.appearanceObserver.start();\n      } else {\n        this.#loadSourceURL();\n      }\n      this.formLinkClickObserver.start();\n      this.linkInterceptor.start();\n      this.formSubmitObserver.start();\n    }\n  }\n\n  disconnect() {\n    if (this.#connected) {\n      this.#connected = false;\n      this.appearanceObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkInterceptor.stop();\n      this.formSubmitObserver.stop();\n    }\n  }\n\n  disabledChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.eager) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLChanged() {\n    if (this.#isIgnoringChangesTo(\"src\")) return\n\n    if (this.element.isConnected) {\n      this.complete = false;\n    }\n\n    if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLReloaded() {\n    const { refresh, src } = this.element;\n\n    this.#shouldMorphFrame = src && refresh === \"morph\";\n\n    this.element.removeAttribute(\"complete\");\n    this.element.src = null;\n    this.element.src = src;\n    return this.element.loaded\n  }\n\n  loadingStyleChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.lazy) {\n      this.appearanceObserver.start();\n    } else {\n      this.appearanceObserver.stop();\n      this.#loadSourceURL();\n    }\n  }\n\n  async #loadSourceURL() {\n    if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n      this.element.loaded = this.#visit(expandURL(this.sourceURL));\n      this.appearanceObserver.stop();\n      await this.element.loaded;\n      this.#hasBeenLoaded = true;\n    }\n  }\n\n  async loadResponse(fetchResponse) {\n    if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n      this.sourceURL = fetchResponse.response.url;\n    }\n\n    try {\n      const html = await fetchResponse.responseHTML;\n      if (html) {\n        const document = parseHTMLDocument(html);\n        const pageSnapshot = PageSnapshot.fromDocument(document);\n\n        if (pageSnapshot.isVisitable) {\n          await this.#loadFrameResponse(fetchResponse, document);\n        } else {\n          await this.#handleUnvisitableFrameResponse(fetchResponse);\n        }\n      }\n    } finally {\n      this.#shouldMorphFrame = false;\n      this.fetchResponseLoaded = () => Promise.resolve();\n    }\n  }\n\n  // Appearance observer delegate\n\n  elementAppearedInViewport(element) {\n    this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element));\n    this.#loadSourceURL();\n  }\n\n  // Form link click observer delegate\n\n  willSubmitFormLinkToLocation(link) {\n    return this.#shouldInterceptNavigation(link)\n  }\n\n  submittedFormLinkToLocation(link, _location, form) {\n    const frame = this.#findFrameElement(link);\n    if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldInterceptNavigation(element)\n  }\n\n  linkClickIntercepted(element, location) {\n    this.#navigateFrame(element, location);\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n  }\n\n  formSubmitted(element, submitter) {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n    }\n\n    this.formSubmission = new FormSubmission(this, element, submitter);\n    const { fetchRequest } = this.formSubmission;\n    this.prepareRequest(fetchRequest);\n    this.formSubmission.start();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    request.headers[\"Turbo-Frame\"] = this.id;\n\n    if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    markAsBusy(this.element);\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {\n    this.#resolveVisitPromise();\n  }\n\n  async requestSucceededWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  async requestFailedWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  requestErrored(request, error) {\n    console.error(error);\n    this.#resolveVisitPromise();\n  }\n\n  requestFinished(_request) {\n    clearBusyState(this.element);\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted({ formElement }) {\n    markAsBusy(formElement, this.#findFrameElement(formElement));\n  }\n\n  formSubmissionSucceededWithResponse(formSubmission, response) {\n    const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame));\n    frame.delegate.loadResponse(response);\n\n    if (!formSubmission.isSafe) {\n      session.clearCache();\n    }\n  }\n\n  formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    this.element.delegate.loadResponse(fetchResponse);\n    session.clearCache();\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished({ formElement }) {\n    clearBusyState(formElement, this.#findFrameElement(formElement));\n  }\n\n  // View delegate\n\n  allowsImmediateRender({ element: newFrame }, options) {\n    const event = dispatch(\"turbo:before-frame-render\", {\n      target: this.element,\n      detail: { newFrame, ...options },\n      cancelable: true\n    });\n\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) {}\n\n  preloadOnLoadLinksForView(element) {\n    session.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated() {}\n\n  // Frame renderer delegate\n\n  willRenderFrame(currentElement, _newElement) {\n    this.previousFrameElement = currentElement.cloneNode(true);\n  }\n\n  visitCachedSnapshot = ({ element }) => {\n    const frame = element.querySelector(\"#\" + this.element.id);\n\n    if (frame && this.previousFrameElement) {\n      frame.replaceChildren(...this.previousFrameElement.children);\n    }\n\n    delete this.previousFrameElement;\n  }\n\n  // Private\n\n  async #loadFrameResponse(fetchResponse, document) {\n    const newFrameElement = await this.extractForeignFrameElement(document.body);\n    const rendererClass = this.#shouldMorphFrame ? MorphingFrameRenderer : FrameRenderer;\n\n    if (newFrameElement) {\n      const snapshot = new Snapshot(newFrameElement);\n      const renderer = new rendererClass(this, this.view.snapshot, snapshot, false, false);\n      if (this.view.renderPromise) await this.view.renderPromise;\n      this.changeHistory();\n\n      await this.view.render(renderer);\n      this.complete = true;\n      session.frameRendered(fetchResponse, this.element);\n      session.frameLoaded(this.element);\n      await this.fetchResponseLoaded(fetchResponse);\n    } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) {\n      this.#handleFrameMissingFromResponse(fetchResponse);\n    }\n  }\n\n  async #visit(url) {\n    const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n\n    this.#currentFetchRequest?.cancel();\n    this.#currentFetchRequest = request;\n\n    return new Promise((resolve) => {\n      this.#resolveVisitPromise = () => {\n        this.#resolveVisitPromise = () => {};\n        this.#currentFetchRequest = null;\n        resolve();\n      };\n      request.perform();\n    })\n  }\n\n  #navigateFrame(element, url, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter, element, frame));\n\n    this.#withCurrentNavigationElement(element, () => {\n      frame.src = url;\n    });\n  }\n\n  proposeVisitIfNavigatedWithAction(frame, action = null) {\n    this.action = action;\n\n    if (this.action) {\n      const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n      const { visitCachedSnapshot } = frame.delegate;\n\n      frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n        if (frame.src) {\n          const { statusCode, redirected } = fetchResponse;\n          const responseHTML = await fetchResponse.responseHTML;\n          const response = { statusCode, redirected, responseHTML };\n          const options = {\n            response,\n            visitCachedSnapshot,\n            willRender: false,\n            updateHistory: false,\n            restorationIdentifier: this.restorationIdentifier,\n            snapshot: pageSnapshot\n          };\n\n          if (this.action) options.action = this.action;\n\n          session.visit(frame.src, options);\n        }\n      };\n    }\n  }\n\n  changeHistory() {\n    if (this.action) {\n      const method = getHistoryMethodForAction(this.action);\n      session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n    }\n  }\n\n  async #handleUnvisitableFrameResponse(fetchResponse) {\n    console.warn(\n      `The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`\n    );\n\n    await this.#visitResponse(fetchResponse.response);\n  }\n\n  #willHandleFrameMissingFromResponse(fetchResponse) {\n    this.element.setAttribute(\"complete\", \"\");\n\n    const response = fetchResponse.response;\n    const visit = async (url, options) => {\n      if (url instanceof Response) {\n        this.#visitResponse(url);\n      } else {\n        session.visit(url, options);\n      }\n    };\n\n    const event = dispatch(\"turbo:frame-missing\", {\n      target: this.element,\n      detail: { response, visit },\n      cancelable: true\n    });\n\n    return !event.defaultPrevented\n  }\n\n  #handleFrameMissingFromResponse(fetchResponse) {\n    this.view.missing();\n    this.#throwFrameMissingError(fetchResponse);\n  }\n\n  #throwFrameMissingError(fetchResponse) {\n    const message = `The response (${fetchResponse.statusCode}) did not contain the expected <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\n  async #visitResponse(response) {\n    const wrapped = new FetchResponse(response);\n    const responseHTML = await wrapped.responseHTML;\n    const { location, redirected, statusCode } = wrapped;\n\n    return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n    return getFrameElementById(id) ?? this.element\n  }\n\n  async extractForeignFrameElement(container) {\n    let element;\n    const id = CSS.escape(this.id);\n\n    try {\n      element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n      if (element) {\n        return element\n      }\n\n      element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n      if (element) {\n        await element.loaded;\n        return await this.extractForeignFrameElement(element)\n      }\n    } catch (error) {\n      console.error(error);\n      return new FrameElement()\n    }\n\n    return null\n  }\n\n  #formActionIsVisitable(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return locationIsVisitable(expandURL(action), this.rootLocation)\n  }\n\n  #shouldInterceptNavigation(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n    if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n      return false\n    }\n\n    if (!this.enabled || id == \"_top\") {\n      return false\n    }\n\n    if (id) {\n      const frameElement = getFrameElementById(id);\n      if (frameElement) {\n        return !frameElement.disabled\n      }\n    }\n\n    if (!session.elementIsNavigatable(element)) {\n      return false\n    }\n\n    if (submitter && !session.elementIsNavigatable(submitter)) {\n      return false\n    }\n\n    return true\n  }\n\n  // Computed properties\n\n  get id() {\n    return this.element.id\n  }\n\n  get enabled() {\n    return !this.element.disabled\n  }\n\n  get sourceURL() {\n    if (this.element.src) {\n      return this.element.src\n    }\n  }\n\n  set sourceURL(sourceURL) {\n    this.#ignoringChangesToAttribute(\"src\", () => {\n      this.element.src = sourceURL ?? null;\n    });\n  }\n\n  get loadingStyle() {\n    return this.element.loading\n  }\n\n  get isLoading() {\n    return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n  }\n\n  get complete() {\n    return this.element.hasAttribute(\"complete\")\n  }\n\n  set complete(value) {\n    if (value) {\n      this.element.setAttribute(\"complete\", \"\");\n    } else {\n      this.element.removeAttribute(\"complete\");\n    }\n  }\n\n  get isActive() {\n    return this.element.isActive && this.#connected\n  }\n\n  get rootLocation() {\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const root = meta?.content ?? \"/\";\n    return expandURL(root)\n  }\n\n  #isIgnoringChangesTo(attributeName) {\n    return this.#ignoredAttributes.has(attributeName)\n  }\n\n  #ignoringChangesToAttribute(attributeName, callback) {\n    this.#ignoredAttributes.add(attributeName);\n    callback();\n    this.#ignoredAttributes.delete(attributeName);\n  }\n\n  #withCurrentNavigationElement(element, callback) {\n    this.currentNavigationElement = element;\n    callback();\n    delete this.currentNavigationElement;\n  }\n}\n\nfunction getFrameElementById(id) {\n  if (id != null) {\n    const element = document.getElementById(id);\n    if (element instanceof FrameElement) {\n      return element\n    }\n  }\n}\n\nfunction activateElement(element, currentURL) {\n  if (element) {\n    const src = element.getAttribute(\"src\");\n    if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n      throw new Error(`Matching <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\n    if (element instanceof FrameElement) {\n      element.connectedCallback();\n      element.disconnectedCallback();\n      return element\n    }\n  }\n}\n\nconst StreamActions = {\n  after() {\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n  },\n\n  append() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.append(this.templateContent));\n  },\n\n  before() {\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n  },\n\n  prepend() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.prepend(this.templateContent));\n  },\n\n  remove() {\n    this.targetElements.forEach((e) => e.remove());\n  },\n\n  replace() {\n    const method = this.getAttribute(\"method\");\n\n    this.targetElements.forEach((targetElement) => {\n      if (method === \"morph\") {\n        morphElements(targetElement, this.templateContent);\n      } else {\n        targetElement.replaceWith(this.templateContent);\n      }\n    });\n  },\n\n  update() {\n    const method = this.getAttribute(\"method\");\n\n    this.targetElements.forEach((targetElement) => {\n      if (method === \"morph\") {\n        morphChildren(targetElement, this.templateContent);\n      } else {\n        targetElement.innerHTML = \"\";\n        targetElement.append(this.templateContent);\n      }\n    });\n  },\n\n  refresh() {\n    session.refresh(this.baseURI, this.requestId);\n  }\n};\n\n// <turbo-stream action=replace target=id><template>...\n\n/**\n * Renders updates to the page from a stream of messages.\n *\n * Using the `action` attribute, this can be configured one of eight ways:\n *\n * - `after` - inserts the result after the target\n * - `append` - appends the result to the target\n * - `before` - inserts the result before the target\n * - `prepend` - prepends the result to the target\n * - `refresh` - initiates a page refresh\n * - `remove` - removes the target\n * - `replace` - replaces the outer HTML of the target\n * - `update` - replaces the inner HTML of the target\n *\n * @customElement turbo-stream\n * @example\n *   <turbo-stream action=\"append\" target=\"dom_id\">\n *     <template>\n *       Content to append to target designated with the dom_id.\n *     </template>\n *   </turbo-stream>\n */\nclass StreamElement extends HTMLElement {\n  static async renderElement(newElement) {\n    await newElement.performAction();\n  }\n\n  async connectedCallback() {\n    try {\n      await this.render();\n    } catch (error) {\n      console.error(error);\n    } finally {\n      this.disconnect();\n    }\n  }\n\n  async render() {\n    return (this.renderPromise ??= (async () => {\n      const event = this.beforeRenderEvent;\n\n      if (this.dispatchEvent(event)) {\n        await nextRepaint();\n        await event.detail.render(this);\n      }\n    })())\n  }\n\n  disconnect() {\n    try {\n      this.remove();\n      // eslint-disable-next-line no-empty\n    } catch {}\n  }\n\n  /**\n   * Removes duplicate children (by ID)\n   */\n  removeDuplicateTargetChildren() {\n    this.duplicateChildren.forEach((c) => c.remove());\n  }\n\n  /**\n   * Gets the list of duplicate children (i.e. those with the same ID)\n   */\n  get duplicateChildren() {\n    const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n    const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.id).map((c) => c.id);\n\n    return existingChildren.filter((c) => newChildrenIds.includes(c.id))\n  }\n\n  /**\n   * Gets the action function to be performed.\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\n  /**\n   * Gets the target elements which the template will be rendered to.\n   */\n  get targetElements() {\n    if (this.target) {\n      return this.targetElementsById\n    } else if (this.targets) {\n      return this.targetElementsByQuery\n    } else {\n      this.#raise(\"target or targets attribute is missing\");\n    }\n  }\n\n  /**\n   * Gets the contents of the main `<template>`.\n   */\n  get templateContent() {\n    return this.templateElement.content.cloneNode(true)\n  }\n\n  /**\n   * Gets the main `<template>` used for rendering\n   */\n  get templateElement() {\n    if (this.firstElementChild === null) {\n      const template = this.ownerDocument.createElement(\"template\");\n      this.appendChild(template);\n      return template\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\n  /**\n   * Gets the current action.\n   */\n  get action() {\n    return this.getAttribute(\"action\")\n  }\n\n  /**\n   * Gets the current target (an element ID) to which the result will\n   * be rendered.\n   */\n  get target() {\n    return this.getAttribute(\"target\")\n  }\n\n  /**\n   * Gets the current \"targets\" selector (a CSS selector)\n   */\n  get targets() {\n    return this.getAttribute(\"targets\")\n  }\n\n  /**\n   * Reads the request-id attribute\n   */\n  get requestId() {\n    return this.getAttribute(\"request-id\")\n  }\n\n  #raise(message) {\n    throw new Error(`${this.description}: ${message}`)\n  }\n\n  get description() {\n    return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n  }\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\n  get targetElementsById() {\n    const element = this.ownerDocument?.getElementById(this.target);\n\n    if (element !== null) {\n      return [element]\n    } else {\n      return []\n    }\n  }\n\n  get targetElementsByQuery() {\n    const elements = this.ownerDocument?.querySelectorAll(this.targets);\n\n    if (elements.length !== 0) {\n      return Array.prototype.slice.call(elements)\n    } else {\n      return []\n    }\n  }\n}\n\nclass StreamSourceElement extends HTMLElement {\n  streamSource = null\n\n  connectedCallback() {\n    this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n\n    connectStreamSource(this.streamSource);\n  }\n\n  disconnectedCallback() {\n    if (this.streamSource) {\n      this.streamSource.close();\n\n      disconnectStreamSource(this.streamSource);\n    }\n  }\n\n  get src() {\n    return this.getAttribute(\"src\") || \"\"\n  }\n}\n\nFrameElement.delegateConstructor = FrameController;\n\nif (customElements.get(\"turbo-frame\") === undefined) {\n  customElements.define(\"turbo-frame\", FrameElement);\n}\n\nif (customElements.get(\"turbo-stream\") === undefined) {\n  customElements.define(\"turbo-stream\", StreamElement);\n}\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) return\n  if (element.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n  element = element.parentElement;\n  while (element) {\n    if (element == document.body) {\n      return console.warn(\n        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      `,\n        element.outerHTML\n      )\n    }\n\n    element = element.parentElement;\n  }\n})();\n\nwindow.Turbo = { ...Turbo, StreamActions };\nstart();\n\nexport { FetchEnctype, FetchMethod, FetchRequest, FetchResponse, FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, config, connectStreamSource, disconnectStreamSource, fetchWithTurboHeaders as fetch, fetchEnctypeFromString, fetchMethodFromString, isSafe, 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  static observedAttributes = [\"channel\", \"signed-stream-name\"]\n\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    this.subscriptionDisconnected()\n  }\n\n  attributeChangedCallback() {\n    if (this.subscription) {\n      this.disconnectedCallback()\n      this.connectedCallback()\n    }\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    // Rails 7 ActionView::Helpers::FormBuilder#button method has an override\n    // for formmethod if the button does not have name or value attributes\n    // set, which is the default. This means that if you use <%= f.button\n    // formmethod: :delete %>, it will generate a <button name=\"_method\"\n    // value=\"delete\" formmethod=\"post\">. Therefore, if the submitter's name\n    // is already _method, it's value attribute already contains the desired\n    // method.\n    if (submitter.name === '_method') {\n      return submitter.value\n    } else 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\nwindow.Turbo = Turbo\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    hasBindings() {\n        return this.unorderedBindings.size > 0;\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            },\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map();\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach((eventListener) => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding, clearEventListeners = false) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n        if (clearEventListeners)\n            this.clearEventListenersForBinding(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    clearEventListenersForBinding(binding) {\n        const eventListener = this.fetchEventListenerForBinding(binding);\n        if (!eventListener.hasBindings()) {\n            eventListener.disconnect();\n            this.removeMappedEventListenerFor(binding);\n        }\n    }\n    removeMappedEventListenerFor(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        eventListenerMap.delete(cacheKey);\n        if (eventListenerMap.size == 0)\n            this.eventListenerMaps.delete(eventTarget);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map();\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions)\n            .sort()\n            .forEach((key) => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst defaultActionDescriptorFilters = {\n    stop({ event, value }) {\n        if (value)\n            event.stopPropagation();\n        return true;\n    },\n    prevent({ event, value }) {\n        if (value)\n            event.preventDefault();\n        return true;\n    },\n    self({ event, value, element }) {\n        if (value) {\n            return element === event.target;\n        }\n        else {\n            return true;\n        }\n    },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    let eventName = matches[2];\n    let keyFilter = matches[3];\n    if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n        eventName += `.${keyFilter}`;\n        keyFilter = \"\";\n    }\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName,\n        eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n        identifier: matches[5],\n        methodName: matches[6],\n        keyFilter: matches[1] || keyFilter,\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions\n        .split(\":\")\n        .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n    return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n    return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n    return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n    constructor(element, index, descriptor, schema) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n        this.keyFilter = descriptor.keyFilter || \"\";\n        this.schema = schema;\n    }\n    static forToken(token, schema) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n    }\n    toString() {\n        const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n        const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n    }\n    shouldIgnoreKeyboardEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = this.keyFilter.split(\"+\");\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n        if (!standardFilter) {\n            return false;\n        }\n        if (!hasProperty(this.keyMappings, standardFilter)) {\n            error(`contains unknown key filter: ${this.keyFilter}`);\n        }\n        return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n    }\n    shouldIgnoreMouseEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = [this.keyFilter];\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        return false;\n    }\n    get params() {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n        for (const { name, value } of Array.from(this.element.attributes)) {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                params[camelize(key)] = typecast(value);\n            }\n        }\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n    get keyMappings() {\n        return this.schema.keyMappings;\n    }\n    keyFilterDissatisfied(event, filters) {\n        const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n        return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n    }\n}\nconst defaultEventNames = {\n    a: () => \"click\",\n    button: () => \"click\",\n    form: () => \"submit\",\n    details: () => \"toggle\",\n    input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n    select: () => \"change\",\n    textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        const actionEvent = this.prepareActionEvent(event);\n        if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n            this.invokeWithEvent(actionEvent);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    applyEventModifiers(event) {\n        const { element } = this.action;\n        const { actionDescriptorFilters } = this.context.application;\n        const { controller } = this.context;\n        let passes = true;\n        for (const [name, value] of Object.entries(this.eventOptions)) {\n            if (name in actionDescriptorFilters) {\n                const filter = actionDescriptorFilters[name];\n                passes = passes && filter({ name, value, event, element, controller });\n            }\n            else {\n                continue;\n            }\n        }\n        return passes;\n    }\n    prepareActionEvent(event) {\n        return Object.assign(event, { params: this.action.params });\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            this.method.call(this.controller, event);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n            return false;\n        }\n        if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n            return false;\n        }\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(element, attributeName) {\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some((set) => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([_key, values]) => values.has(value))\n            .map(([key, _values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map();\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass SelectorObserver {\n    constructor(element, selector, delegate, details) {\n        this._selector = selector;\n        this.details = details;\n        this.elementObserver = new ElementObserver(element, this);\n        this.delegate = delegate;\n        this.matchesByElement = new Multimap();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    get selector() {\n        return this._selector;\n    }\n    set selector(selector) {\n        this._selector = selector;\n        this.refresh();\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    matchElement(element) {\n        const { selector } = this;\n        if (selector) {\n            const matches = element.matches(selector);\n            if (this.delegate.selectorMatchElement) {\n                return matches && this.delegate.selectorMatchElement(element, this.details);\n            }\n            return matches;\n        }\n        else {\n            return false;\n        }\n    }\n    matchElementsInTree(tree) {\n        const { selector } = this;\n        if (selector) {\n            const match = this.matchElement(tree) ? [tree] : [];\n            const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n            return match.concat(matches);\n        }\n        else {\n            return [];\n        }\n    }\n    elementMatched(element) {\n        const { selector } = this;\n        if (selector) {\n            this.selectorMatched(element, selector);\n        }\n    }\n    elementUnmatched(element) {\n        const selectors = this.matchesByElement.getKeysForValue(element);\n        for (const selector of selectors) {\n            this.selectorUnmatched(element, selector);\n        }\n    }\n    elementAttributeChanged(element, _attributeName) {\n        const { selector } = this;\n        if (selector) {\n            const matches = this.matchElement(element);\n            const matchedBefore = this.matchesByElement.has(selector, element);\n            if (matches && !matchedBefore) {\n                this.selectorMatched(element, selector);\n            }\n            else if (!matches && matchedBefore) {\n                this.selectorUnmatched(element, selector);\n            }\n        }\n    }\n    selectorMatched(element, selector) {\n        this.delegate.selectorMatched(element, selector, this.details);\n        this.matchesByElement.add(selector, element);\n    }\n    selectorUnmatched(element, selector) {\n        this.delegate.selectorUnmatched(element, selector, this.details);\n        this.matchesByElement.delete(selector, element);\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map((attribute) => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap();\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach((token) => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach((token) => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString\n        .trim()\n        .split(/\\s+/)\n        .filter((content) => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap();\n        this.valuesByTokenByElement = new WeakMap();\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map();\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map();\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token, this.schema);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n    }\n    start() {\n        this.stringMapObserver.start();\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            try {\n                const value = descriptor.reader(rawValue);\n                let oldValue = rawOldValue;\n                if (rawOldValue) {\n                    oldValue = descriptor.reader(rawOldValue);\n                }\n                changedMethod.call(this.receiver, value, oldValue);\n            }\n            catch (error) {\n                if (error instanceof TypeError) {\n                    error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n                }\n                throw error;\n            }\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach((key) => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap();\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n        return values;\n    }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n    constructor(context, delegate) {\n        this.started = false;\n        this.context = context;\n        this.delegate = delegate;\n        this.outletsByName = new Multimap();\n        this.outletElementsByName = new Multimap();\n        this.selectorObserverMap = new Map();\n        this.attributeObserverMap = new Map();\n    }\n    start() {\n        if (!this.started) {\n            this.outletDefinitions.forEach((outletName) => {\n                this.setupSelectorObserverForOutlet(outletName);\n                this.setupAttributeObserverForOutlet(outletName);\n            });\n            this.started = true;\n            this.dependentContexts.forEach((context) => context.refresh());\n        }\n    }\n    refresh() {\n        this.selectorObserverMap.forEach((observer) => observer.refresh());\n        this.attributeObserverMap.forEach((observer) => observer.refresh());\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.disconnectAllOutlets();\n            this.stopSelectorObservers();\n            this.stopAttributeObservers();\n        }\n    }\n    stopSelectorObservers() {\n        if (this.selectorObserverMap.size > 0) {\n            this.selectorObserverMap.forEach((observer) => observer.stop());\n            this.selectorObserverMap.clear();\n        }\n    }\n    stopAttributeObservers() {\n        if (this.attributeObserverMap.size > 0) {\n            this.attributeObserverMap.forEach((observer) => observer.stop());\n            this.attributeObserverMap.clear();\n        }\n    }\n    selectorMatched(element, _selector, { outletName }) {\n        const outlet = this.getOutlet(element, outletName);\n        if (outlet) {\n            this.connectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorUnmatched(element, _selector, { outletName }) {\n        const outlet = this.getOutletFromMap(element, outletName);\n        if (outlet) {\n            this.disconnectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorMatchElement(element, { outletName }) {\n        const selector = this.selector(outletName);\n        const hasOutlet = this.hasOutlet(element, outletName);\n        const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n        if (selector) {\n            return hasOutlet && hasOutletController && element.matches(selector);\n        }\n        else {\n            return false;\n        }\n    }\n    elementMatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementAttributeValueChanged(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementUnmatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    connectOutlet(outlet, element, outletName) {\n        var _a;\n        if (!this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.add(outletName, outlet);\n            this.outletElementsByName.add(outletName, element);\n            (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n        }\n    }\n    disconnectOutlet(outlet, element, outletName) {\n        var _a;\n        if (this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.delete(outletName, outlet);\n            this.outletElementsByName.delete(outletName, element);\n            (_a = this.selectorObserverMap\n                .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n        }\n    }\n    disconnectAllOutlets() {\n        for (const outletName of this.outletElementsByName.keys) {\n            for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n                for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n                    this.disconnectOutlet(outlet, element, outletName);\n                }\n            }\n        }\n    }\n    updateSelectorObserverForOutlet(outletName) {\n        const observer = this.selectorObserverMap.get(outletName);\n        if (observer) {\n            observer.selector = this.selector(outletName);\n        }\n    }\n    setupSelectorObserverForOutlet(outletName) {\n        const selector = this.selector(outletName);\n        const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n        this.selectorObserverMap.set(outletName, selectorObserver);\n        selectorObserver.start();\n    }\n    setupAttributeObserverForOutlet(outletName) {\n        const attributeName = this.attributeNameForOutletName(outletName);\n        const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n        this.attributeObserverMap.set(outletName, attributeObserver);\n        attributeObserver.start();\n    }\n    selector(outletName) {\n        return this.scope.outlets.getSelectorForOutletName(outletName);\n    }\n    attributeNameForOutletName(outletName) {\n        return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n    }\n    getOutletNameFromOutletAttributeName(attributeName) {\n        return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n    }\n    get outletDependencies() {\n        const dependencies = new Multimap();\n        this.router.modules.forEach((module) => {\n            const constructor = module.definition.controllerConstructor;\n            const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n            outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n        });\n        return dependencies;\n    }\n    get outletDefinitions() {\n        return this.outletDependencies.getKeysForValue(this.identifier);\n    }\n    get dependentControllerIdentifiers() {\n        return this.outletDependencies.getValuesForKey(this.identifier);\n    }\n    get dependentContexts() {\n        const identifiers = this.dependentControllerIdentifiers;\n        return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n    }\n    hasOutlet(element, outletName) {\n        return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n    }\n    getOutlet(element, outletName) {\n        return this.application.getControllerForElementAndIdentifier(element, outletName);\n    }\n    getOutletFromMap(element, outletName) {\n        return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get router() {\n        return this.application.router;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        this.outletObserver = new OutletObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        this.outletObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    refresh() {\n        this.outletObserver.refresh();\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.outletObserver.stop();\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    outletConnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n    }\n    outletDisconnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended },\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () {\n            this.a.call(this);\n        };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b();\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor),\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap();\n        this.connectedContexts = new Set();\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap();\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set();\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName),\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass OutletSet {\n    constructor(scope, controllerElement) {\n        this.scope = scope;\n        this.controllerElement = controllerElement;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(outletName) {\n        return this.find(outletName) != null;\n    }\n    find(...outletNames) {\n        return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n    }\n    findAll(...outletNames) {\n        return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n    }\n    getSelectorForOutletName(outletName) {\n        const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n        return this.controllerElement.getAttribute(attributeName);\n    }\n    findOutlet(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        if (selector)\n            return this.findElement(selector, outletName);\n    }\n    findAllOutlets(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        return selector ? this.findAllElements(selector, outletName) : [];\n    }\n    findElement(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n    }\n    findAllElements(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName));\n    }\n    matchesElement(element, selector, outletName) {\n        const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n        return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n        this.outlets = new OutletSet(this.documentScope, element);\n    }\n    findElement(selector) {\n        return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...(this.element.matches(selector) ? [this.element] : []),\n            ...this.queryElements(selector).filter(this.containsElement),\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n    get isDocumentScope() {\n        return this.element === document.documentElement;\n    }\n    get documentScope() {\n        return this.isDocumentScope\n            ? this\n            : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap();\n        this.scopeReferenceCounts = new WeakMap();\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        return this.parseValueForElementAndIdentifier(element, identifier);\n    }\n    parseValueForElementAndIdentifier(element, identifier) {\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map();\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap();\n        this.modulesByIdentifier = new Map();\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n        const afterLoad = definition.controllerConstructor.afterLoad;\n        if (afterLoad) {\n            afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n        }\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find((context) => context.element == element);\n        }\n    }\n    proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n        const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n        if (scope) {\n            this.scopeObserver.elementMatchedValue(scope.element, scope);\n        }\n        else {\n            console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n    outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n    keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n    return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n        this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n    }\n    static start(element, schema) {\n        const application = new this(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        this.load({ identifier, controllerConstructor });\n    }\n    registerActionOption(name, filter) {\n        this.actionDescriptorFilters[name] = filter;\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach((definition) => {\n            if (definition.controllerConstructor.shouldLoad) {\n                this.router.loadDefinition(definition);\n            }\n        });\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map((context) => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise((resolve) => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            },\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            },\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            },\n        },\n    };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n    const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n    return outlets.reduce((properties, outletDefinition) => {\n        return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n    }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n    return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n    let outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n    controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n    outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n    const camelizedName = namespaceCamelize(name);\n    return {\n        [`${camelizedName}Outlet`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                    if (outletController)\n                        return outletController;\n                    throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n                }\n                throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n            },\n        },\n        [`${camelizedName}Outlets`]: {\n            get() {\n                const outlets = this.outlets.findAll(name);\n                if (outlets.length > 0) {\n                    return outlets\n                        .map((outletElement) => {\n                        const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                        if (outletController)\n                            return outletController;\n                        console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n                    })\n                        .filter((controller) => controller);\n                }\n                return [];\n            },\n        },\n        [`${camelizedName}OutletElement`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    return outletElement;\n                }\n                else {\n                    throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n                }\n            },\n        },\n        [`${camelizedName}OutletElements`]: {\n            get() {\n                return this.outlets.findAll(name);\n            },\n        },\n        [`has${capitalize(camelizedName)}Outlet`]: {\n            get() {\n                return this.outlets.has(name);\n            },\n        },\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            },\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            },\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            },\n        },\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            },\n        },\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            },\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            },\n        },\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n    return valueDescriptorForTokenAndTypeDefinition({\n        controller,\n        token,\n        typeDefinition,\n    });\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array:\n            return \"array\";\n        case Boolean:\n            return \"boolean\";\n        case Number:\n            return \"number\";\n        case Object:\n            return \"object\";\n        case String:\n            return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\":\n            return \"boolean\";\n        case \"number\":\n            return \"number\";\n        case \"string\":\n            return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n    const { controller, token, typeObject } = payload;\n    const hasType = isSomething(typeObject.type);\n    const hasDefault = isSomething(typeObject.default);\n    const fullObject = hasType && hasDefault;\n    const onlyType = hasType && !hasDefault;\n    const onlyDefault = !hasType && hasDefault;\n    const typeFromObject = parseValueTypeConstant(typeObject.type);\n    const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n    if (onlyType)\n        return typeFromObject;\n    if (onlyDefault)\n        return typeFromDefaultValue;\n    if (typeFromObject !== typeFromDefaultValue) {\n        const propertyPath = controller ? `${controller}.${token}` : token;\n        throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n    }\n    if (fullObject)\n        return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n    const { controller, token, typeDefinition } = payload;\n    const typeObject = { controller, token, typeObject: typeDefinition };\n    const typeFromObject = parseValueTypeObject(typeObject);\n    const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n    throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const hasDefault = hasProperty(typeDefinition, \"default\");\n    const hasType = hasProperty(typeDefinition, \"type\");\n    const typeObject = typeDefinition;\n    if (hasDefault)\n        return typeObject.default;\n    if (hasType) {\n        const { type } = typeObject;\n        const constantFromType = parseValueTypeConstant(type);\n        if (constantFromType)\n            return defaultValuesByType[constantFromType];\n    }\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n    const { token, typeDefinition } = payload;\n    const key = `${dasherize(token)}-value`;\n    const type = parseValueTypeDefinition(payload);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() {\n            return defaultValueForDefinition(typeDefinition);\n        },\n        get hasCustomDefaultValue() {\n            return parseValueTypeDefault(typeDefinition) !== undefined;\n        },\n        reader: readers[type],\n        writer: writers[type] || writers.default,\n    };\n}\nconst defaultValuesByType = {\n    get array() {\n        return [];\n    },\n    boolean: false,\n    number: 0,\n    get object() {\n        return {};\n    },\n    string: \"\",\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n    },\n    number(value) {\n        return Number(value.replace(/_/g, \"\"));\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    },\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON,\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    static afterLoad(_identifier, _application) {\n        return;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get outlets() {\n        return this.scope.outlets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [\n    ClassPropertiesBlessing,\n    TargetPropertiesBlessing,\n    ValuePropertiesBlessing,\n    OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "var x=Object.defineProperty;var V=(t,s,e)=>s in t?x(t,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[s]=e;var i=(t,s,e)=>V(t,typeof s!=\"symbol\"?s+\"\":s,e);import{Controller as y}from\"@hotwired/stimulus\";async function n(t,s,e={}){s?await T(t,e):await b(t,e)}async function T(t,s={}){let{transitionClasses:e,fromClasses:a,toClasses:o,toggleClass:r}=C(\"Enter\",t,s);return v(t,{firstFrame(){t.classList.add(...e.split(\" \")),t.classList.add(...a.split(\" \")),t.classList.remove(...o.split(\" \")),t.classList.remove(...r.split(\" \"))},secondFrame(){t.classList.remove(...a.split(\" \")),t.classList.add(...o.split(\" \"))},ending(){t.classList.remove(...e.split(\" \"))}})}async function b(t,s={}){let{transitionClasses:e,fromClasses:a,toClasses:o,toggleClass:r}=C(\"Leave\",t,s);return v(t,{firstFrame(){t.classList.add(...a.split(\" \")),t.classList.remove(...o.split(\" \")),t.classList.add(...e.split(\" \"))},secondFrame(){t.classList.remove(...a.split(\" \")),t.classList.add(...o.split(\" \"))},ending(){t.classList.remove(...e.split(\" \")),t.classList.add(...r.split(\" \"))}})}function C(t,s,e){return{transitionClasses:s.dataset[`transition${t}`]||e[t.toLowerCase()]||t.toLowerCase(),fromClasses:s.dataset[`transition${t}From`]||e[`${t.toLowerCase()}From`]||`${t.toLowerCase()}-from`,toClasses:s.dataset[`transition${t}To`]||e[`${t.toLowerCase()}To`]||`${t.toLowerCase()}-to`,toggleClass:s.dataset.toggleClass||e.toggleClass||e.toggle||\"hidden\"}}function L(t){t._stimulus_transition={timeout:null,interrupted:!1}}function I(t){t._stimulus_transition&&t._stimulus_transition.interrupt&&t._stimulus_transition.interrupt()}function v(t,s){t._stimulus_transition&&I(t);let e,a,o;return L(t),t._stimulus_transition.cleanup=()=>{a||s.firstFrame(),o||s.secondFrame(),s.ending(),t._stimulus_transition=null},t._stimulus_transition.interrupt=()=>{e=!0,t._stimulus_transition.timeout&&clearTimeout(t._stimulus_transition.timeout),t._stimulus_transition.cleanup()},new Promise(r=>{e||requestAnimationFrame(()=>{e||(s.firstFrame(),a=!0,requestAnimationFrame(()=>{e||(s.secondFrame(),o=!0,t._stimulus_transition&&(t._stimulus_transition.timeout=setTimeout(()=>{if(e){r();return}t._stimulus_transition.cleanup(),r()},w(t))))}))})})}function w(t){let s=Number(getComputedStyle(t).transitionDuration.replace(/,.*/,\"\").replace(\"s\",\"\"))*1e3,e=Number(getComputedStyle(t).transitionDelay.replace(/,.*/,\"\").replace(\"s\",\"\"))*1e3;return s===0&&(s=Number(getComputedStyle(t).animationDuration.replace(\"s\",\"\"))*1e3),s+e}var g=class extends y{connect(){setTimeout(()=>{T(this.element)},this.showDelayValue),this.hasDismissAfterValue&&setTimeout(()=>{this.close()},this.dismissAfterValue)}close(){b(this.element).then(()=>{this.element.remove()})}};i(g,\"values\",{dismissAfter:Number,showDelay:{type:Number,default:0}});import{Controller as A}from\"@hotwired/stimulus\";var h=class extends A{connect(){this.timeout=null}save(){clearTimeout(this.timeout),this.timeout=setTimeout(()=>{this.statusTarget.textContent=this.submittingTextValue,this.formTarget.requestSubmit()},this.submitDurationValue)}success(){this.setStatus(this.successTextValue)}error(){this.setStatus(this.errorTextValue)}setStatus(t){this.statusTarget.textContent=t,this.timeout=setTimeout(()=>{this.statusTarget.textContent=\"\"},this.statusDurationValue)}};i(h,\"targets\",[\"form\",\"status\"]),i(h,\"values\",{submitDuration:{type:Number,default:1e3},statusDuration:{type:Number,default:2e3},submittingText:{type:String,default:\"Saving...\"},successText:{type:String,default:\"Saved!\"},errorText:{type:String,default:\"Unable to save.\"}});import{Controller as _}from\"@hotwired/stimulus\";var c=class extends _{update(){this.preview=this.colorTarget.value}set preview(t){this.previewTarget.style[this.styleValue]=t;let s=this._getContrastYIQ(t);this.styleValue===\"color\"?this.previewTarget.style.backgroundColor=s:this.previewTarget.style.color=s}_getContrastYIQ(t){t=t.replace(\"#\",\"\");let s=128,e=parseInt(t.substr(0,2),16),a=parseInt(t.substr(2,2),16),o=parseInt(t.substr(4,2),16);return(e*299+a*587+o*114)/1e3>=s?\"#000\":\"#fff\"}};i(c,\"targets\",[\"preview\",\"color\"]),i(c,\"values\",{style:{type:String,default:\"backgroundColor\"}});import{Controller as D}from\"@hotwired/stimulus\";var l=class extends D{connect(){this.boundBeforeCache=this.beforeCache.bind(this),document.addEventListener(\"turbo:before-cache\",this.boundBeforeCache)}disconnect(){document.removeEventListener(\"turbo:before-cache\",this.boundBeforeCache)}openValueChanged(){n(this.menuTarget,this.openValue,this.transitionOptions),this.openValue===!0&&this.hasMenuItemTarget&&this.menuItemTargets[0].focus()}show(){this.openValue=!0}close(){this.openValue=!1}hide(t){this.closeOnClickOutsideValue&&t.target.nodeType&&this.element.contains(t.target)===!1&&this.openValue&&(this.openValue=!1),this.closeOnEscapeValue&&t.key===\"Escape\"&&this.openValue&&(this.openValue=!1)}toggle(){this.openValue=!this.openValue}nextItem(t){t.preventDefault(),this.menuItemTargets[this.nextIndex].focus()}previousItem(t){t.preventDefault(),this.menuItemTargets[this.previousIndex].focus()}get currentItemIndex(){return this.menuItemTargets.indexOf(document.activeElement)}get nextIndex(){return Math.min(this.currentItemIndex+1,this.menuItemTargets.length-1)}get previousIndex(){return Math.max(this.currentItemIndex-1,0)}get transitionOptions(){return{enter:this.hasEnterClass?this.enterClass:\"transition ease-out duration-100\",enterFrom:this.hasEnterFromClass?this.enterFromClass:\"transform opacity-0 scale-95\",enterTo:this.hasEnterToClass?this.enterToClass:\"transform opacity-100 scale-100\",leave:this.hasLeaveClass?this.leaveClass:\"transition ease-in duration-75\",leaveFrom:this.hasLeaveFromClass?this.leaveFromClass:\"transform opacity-100 scale-100\",leaveTo:this.hasLeaveToClass?this.leaveToClass:\"transform opacity-0 scale-95\",toggleClass:this.hasToggleClass?this.toggleClass:\"hidden\"}}beforeCache(){this.openValue=!1,this.menuTarget.classList.add(\"hidden\")}};i(l,\"targets\",[\"menu\",\"button\",\"menuItem\"]),i(l,\"values\",{open:{type:Boolean,default:!1},closeOnEscape:{type:Boolean,default:!0},closeOnClickOutside:{type:Boolean,default:!0}}),i(l,\"classes\",[\"enter\",\"enterFrom\",\"enterTo\",\"leave\",\"leaveFrom\",\"leaveTo\",\"toggle\"]);import{Controller as F}from\"@hotwired/stimulus\";var d=class extends F{connect(){this.openValue&&this.open(),this.boundBeforeCache=this.beforeCache.bind(this),document.addEventListener(\"turbo:before-cache\",this.boundBeforeCache)}disconnect(){document.removeEventListener(\"turbo:before-cache\",this.boundBeforeCache)}open(){this.dialogTarget.showModal()}close(){this.dialogTarget.setAttribute(\"closing\",\"\"),Promise.all(this.dialogTarget.getAnimations().map(t=>t.finished)).then(()=>{this.dialogTarget.removeAttribute(\"closing\"),this.dialogTarget.close()})}backdropClose(t){t.target.nodeName==\"DIALOG\"&&this.close()}show(){this.dialogTarget.show()}hide(){this.close()}beforeCache(){this.close()}};i(d,\"targets\",[\"dialog\"]),i(d,\"values\",{open:Boolean});import{Controller as B}from\"@hotwired/stimulus\";var f=class extends B{openValueChanged(){n(this.contentTarget,this.openValue),this.shouldAutoDismiss&&this.scheduleDismissal()}show(t){this.shouldAutoDismiss&&this.scheduleDismissal(),this.openValue=!0}hide(){this.openValue=!1}toggle(){this.openValue=!this.openValue}get shouldAutoDismiss(){return this.openValue&&this.hasDismissAfterValue}scheduleDismissal(){this.hasDismissAfterValue&&(this.cancelDismissal(),this.timeoutId=setTimeout(()=>{this.hide(),this.timeoutId=void 0},this.dismissAfterValue))}cancelDismissal(){typeof this.timeoutId==\"number\"&&(clearTimeout(this.timeoutId),this.timeoutId=void 0)}};i(f,\"targets\",[\"content\"]),i(f,\"values\",{dismissAfter:Number,open:{type:Boolean,default:!1}});import{Controller as E}from\"@hotwired/stimulus\";var m=class extends E{connect(){this.openValue&&this.open(),this.boundBeforeCache=this.beforeCache,document.addEventListener(\"turbo:before-cache\",this.boundBeforeCache)}disconnect(){document.removeEventListener(\"turbo:before-cache\",this.boundBeforeCache)}open(){this.dialogTarget.showModal()}close(){this.dialogTarget.setAttribute(\"closing\",\"\"),Promise.all(this.dialogTarget.getAnimations().map(t=>t.finished)).then(()=>{this.dialogTarget.removeAttribute(\"closing\"),this.dialogTarget.close()})}backdropClose(t){t.target.nodeName==\"DIALOG\"&&this.close()}show(){this.open()}hide(){this.close()}beforeCache(){this.close()}};i(m,\"targets\",[\"dialog\"]),i(m,\"values\",{open:Boolean});import{Controller as S}from\"@hotwired/stimulus\";var u=class extends S{initialize(){this.updateAnchorValue&&this.anchor&&(this.indexValue=this.tabTargets.findIndex(t=>t.id===this.anchor))}connect(){this.showTab()}change(t){t.currentTarget.tagName===\"SELECT\"?this.indexValue=t.currentTarget.selectedIndex:t.currentTarget.dataset.index?this.indexValue=t.currentTarget.dataset.index:t.currentTarget.dataset.id?this.indexValue=this.tabTargets.findIndex(s=>s.id==t.currentTarget.dataset.id):this.indexValue=this.tabTargets.indexOf(t.currentTarget)}nextTab(){this.indexValue=Math.min(this.indexValue+1,this.tabsCount-1)}previousTab(){this.indexValue=Math.max(this.indexValue-1,0)}firstTab(){this.indexValue=0}lastTab(){this.indexValue=this.tabsCount-1}indexValueChanged(){if(this.showTab(),this.dispatch(\"tab-change\",{target:this.tabTargets[this.indexValue],detail:{activeIndex:this.indexValue}}),this.updateAnchorValue){let t=this.tabTargets[this.indexValue].id;if(this.scrollToAnchorValue)location.hash=t;else{let e=window.location.href.split(\"#\")[0]+\"#\"+t;typeof Turbo<\"u\"?Turbo.navigator.history.replace(new URL(e)):history.replaceState({},document.title,e)}}}showTab(){this.panelTargets.forEach((t,s)=>{let e=this.tabTargets[s];s===this.indexValue?(t.classList.remove(\"hidden\"),e.ariaSelected=\"true\",e.dataset.active=!0,this.hasInactiveTabClass&&e?.classList?.remove(...this.inactiveTabClasses),this.hasActiveTabClass&&e?.classList?.add(...this.activeTabClasses)):(t.classList.add(\"hidden\"),e.ariaSelected=null,delete e.dataset.active,this.hasActiveTabClass&&e?.classList?.remove(...this.activeTabClasses),this.hasInactiveTabClass&&e?.classList?.add(...this.inactiveTabClasses))}),this.hasSelectTarget&&(this.selectTarget.selectedIndex=this.indexValue),this.scrollActiveTabIntoViewValue&&this.scrollToActiveTab()}scrollToActiveTab(){let t=this.element.querySelector(\"[aria-selected]\");t&&t.scrollIntoView({inline:\"center\"})}get tabsCount(){return this.tabTargets.length}get anchor(){return document.URL.split(\"#\").length>1?document.URL.split(\"#\")[1]:null}};i(u,\"classes\",[\"activeTab\",\"inactiveTab\"]),i(u,\"targets\",[\"tab\",\"panel\",\"select\"]),i(u,\"values\",{index:0,updateAnchor:Boolean,scrollToAnchor:Boolean,scrollActiveTabIntoView:Boolean});import{Controller as N}from\"@hotwired/stimulus\";var p=class extends N{toggle(t){this.openValue=!this.openValue,this.animate()}toggleInput(t){this.openValue=t.target.checked,this.animate()}hide(){this.openValue=!1,this.animate()}show(){this.openValue=!0,this.animate()}animate(){this.toggleableTargets.forEach(t=>{n(t,this.openValue)})}};i(p,\"targets\",[\"toggleable\"]),i(p,\"values\",{open:{type:Boolean,default:!1}});export{g as Alert,h as Autosave,c as ColorPreview,l as Dropdown,d as Modal,f as Popover,m as Slideover,u as Tabs,p as Toggle,n as transition};\n", "import { Application } from \"@hotwired/stimulus\"\n\nconst application = Application.start()\n\nimport { Alert, Dropdown } from \"tailwindcss-stimulus-components\"\napplication.register('alert', Alert)\napplication.register('dropdown', Dropdown)\n\n// Configure Stimulus development experience\napplication.debug = false\nwindow.Stimulus = application\n\nexport { application }\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"cloudflare-turnstile\"\nexport default class extends Controller {\n  connect() {\n    if (document.querySelector('.cf-turnstile') && window.turnstile) {\n      window.turnstile.render(\".cf-turnstile\")\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", "// 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 CloudflareTurnstileController from \"./cloudflare_turnstile_controller\"\napplication.register(\"cloudflare-turnstile\", CloudflareTurnstileController)\n\nimport HelloController from \"./hello_controller\"\napplication.register(\"hello\", HelloController)\n", "export const attachmentSelector = \"[data-trix-attachment]\"\n\nconst attachments = {\n  preview: {\n    presentation: \"gallery\",\n    caption: {\n      name: true,\n      size: true,\n    },\n  },\n  file: {\n    caption: {\n      size: true,\n    },\n  },\n}\nexport default attachments\n", "const attributes = {\n  default: {\n    tagName: \"div\",\n    parse: false,\n  },\n  quote: {\n    tagName: \"blockquote\",\n    nestable: true,\n  },\n  heading1: {\n    tagName: \"h1\",\n    terminal: true,\n    breakOnReturn: true,\n    group: false,\n  },\n  code: {\n    tagName: \"pre\",\n    terminal: true,\n    htmlAttributes: [ \"language\" ],\n    text: {\n      plaintext: true,\n    },\n  },\n  bulletList: {\n    tagName: \"ul\",\n    parse: false,\n  },\n  bullet: {\n    tagName: \"li\",\n    listAttribute: \"bulletList\",\n    group: false,\n    nestable: true,\n    test(element) {\n      return tagName(element.parentNode) === attributes[this.listAttribute].tagName\n    },\n  },\n  numberList: {\n    tagName: \"ol\",\n    parse: false,\n  },\n  number: {\n    tagName: \"li\",\n    listAttribute: \"numberList\",\n    group: false,\n    nestable: true,\n    test(element) {\n      return tagName(element.parentNode) === attributes[this.listAttribute].tagName\n    },\n  },\n  attachmentGallery: {\n    tagName: \"div\",\n    exclusive: true,\n    terminal: true,\n    parse: false,\n    group: false,\n  },\n}\n\nconst tagName = (element) => element?.tagName?.toLowerCase()\n\nexport default attributes\n", "const androidVersionMatch = navigator.userAgent.match(/android\\s([0-9]+.*Chrome)/i)\nconst androidVersion = androidVersionMatch && parseInt(androidVersionMatch[1])\n\nexport default {\n  // Android emits composition events when moving the cursor through existing text\n  // Introduced in Chrome 65: https://bugs.chromium.org/p/chromium/issues/detail?id=764439#c9\n  composesExistingText: /Android.*Chrome/.test(navigator.userAgent),\n\n  // Android 13, especially on Samsung keyboards, emits extra compositionend and beforeinput events\n  // that can make the input handler lose the current selection or enter an infinite input -> render -> input\n  // loop.\n  recentAndroid: androidVersion && androidVersion > 12,\n  samsungAndroid: androidVersion && navigator.userAgent.match(/Android.*SM-/),\n\n  // IE 11 activates resizing handles on editable elements that have \"layout\"\n  forcesObjectResizing: /Trident.*rv:11/.test(navigator.userAgent),\n  // https://www.w3.org/TR/input-events-1/ + https://www.w3.org/TR/input-events-2/\n  supportsInputEvents: typeof InputEvent !== \"undefined\" &&\n    [ \"data\", \"getTargetRanges\", \"inputType\" ].every(prop => prop in InputEvent.prototype),\n}\n", "export default {\n  attachFiles: \"Attach Files\",\n  bold: \"Bold\",\n  bullets: \"Bullets\",\n  byte: \"Byte\",\n  bytes: \"Bytes\",\n  captionPlaceholder: \"Add a caption…\",\n  code: \"Code\",\n  heading1: \"Heading\",\n  indent: \"Increase Level\",\n  italic: \"Italic\",\n  link: \"Link\",\n  numbers: \"Numbers\",\n  outdent: \"Decrease Level\",\n  quote: \"Quote\",\n  redo: \"Redo\",\n  remove: \"Remove\",\n  strike: \"Strikethrough\",\n  undo: \"Undo\",\n  unlink: \"Unlink\",\n  url: \"URL\",\n  urlPlaceholder: \"Enter a URL…\",\n  GB: \"GB\",\n  KB: \"KB\",\n  MB: \"MB\",\n  PB: \"PB\",\n  TB: \"TB\",\n}\n", "/* eslint-disable\n    no-case-declarations,\n*/\nimport lang from \"trix/config/lang\"\n\nconst sizes = [ lang.bytes, lang.KB, lang.MB, lang.GB, lang.TB, lang.PB ]\n\nexport default {\n  prefix: \"IEC\",\n  precision: 2,\n\n  formatter(number) {\n    switch (number) {\n      case 0:\n        return `0 ${lang.bytes}`\n      case 1:\n        return `1 ${lang.byte}`\n      default:\n        let base\n\n        if (this.prefix === \"SI\") {\n          base = 1000\n        } else if (this.prefix === \"IEC\") {\n          base = 1024\n        }\n\n        const exp = Math.floor(Math.log(number) / Math.log(base))\n        const humanSize = number / Math.pow(base, exp)\n        const string = humanSize.toFixed(this.precision)\n        const withoutInsignificantZeros = string.replace(/0*$/, \"\").replace(/\\.$/, \"\")\n        return `${withoutInsignificantZeros} ${sizes[exp]}`\n    }\n  },\n}\n", "export const ZERO_WIDTH_SPACE = \"\\uFEFF\"\nexport const NON_BREAKING_SPACE = \"\\u00A0\"\nexport const OBJECT_REPLACEMENT_CHARACTER = \"\\uFFFC\"\n", "export const extend = function(properties) {\n  for (const key in properties) {\n    const value = properties[key]\n    this[key] = value\n  }\n  return this\n}\n", "import blockAttributes from \"trix/config/block_attributes\"\nimport { ZERO_WIDTH_SPACE } from \"trix/constants\"\nimport { extend } from \"./extend\"\nimport { attachmentSelector } from \"trix/config/attachments\"\n\nconst html = document.documentElement\nconst match = html.matches\n\nexport const handleEvent = function(eventName, { onElement, matchingSelector, withCallback, inPhase, preventDefault, times } = {}) {\n  const element = onElement ? onElement : html\n  const selector = matchingSelector\n  const useCapture = inPhase === \"capturing\"\n\n  const handler = function(event) {\n    if (times != null && --times === 0) {\n      handler.destroy()\n    }\n    const target = findClosestElementFromNode(event.target, { matchingSelector: selector })\n    if (target != null) {\n      withCallback?.call(target, event, target)\n      if (preventDefault) {\n        event.preventDefault()\n      }\n    }\n  }\n\n  handler.destroy = () => element.removeEventListener(eventName, handler, useCapture)\n\n  element.addEventListener(eventName, handler, useCapture)\n  return handler\n}\n\nexport const handleEventOnce = function(eventName, options = {}) {\n  options.times = 1\n  return handleEvent(eventName, options)\n}\n\nexport const triggerEvent = function(eventName, { onElement, bubbles, cancelable, attributes } = {}) {\n  const element = onElement != null ? onElement : html\n  bubbles = bubbles !== false\n  cancelable = cancelable !== false\n\n  const event = document.createEvent(\"Events\")\n  event.initEvent(eventName, bubbles, cancelable)\n  if (attributes != null) {\n    extend.call(event, attributes)\n  }\n  return element.dispatchEvent(event)\n}\n\nexport const elementMatchesSelector = function(element, selector) {\n  if (element?.nodeType === 1) {\n    return match.call(element, selector)\n  }\n}\n\nexport const findClosestElementFromNode = function(node, { matchingSelector, untilNode } = {}) {\n  while (node && node.nodeType !== Node.ELEMENT_NODE) {\n    node = node.parentNode\n  }\n  if (node == null) {\n    return\n  }\n\n  if (matchingSelector != null) {\n    if (node.closest && untilNode == null) {\n      return node.closest(matchingSelector)\n    } else {\n      while (node && node !== untilNode) {\n        if (elementMatchesSelector(node, matchingSelector)) {\n          return node\n        }\n        node = node.parentNode\n      }\n    }\n  } else {\n    return node\n  }\n}\n\nexport const findInnerElement = function(element) {\n  while (element?.firstElementChild) {\n    element = element.firstElementChild\n  }\n  return element\n}\n\nexport const innerElementIsActive = (element) =>\n  document.activeElement !== element && elementContainsNode(element, document.activeElement)\n\nexport const elementContainsNode = function(element, node) {\n  if (!element || !node) {\n    return\n  }\n  while (node) {\n    if (node === element) {\n      return true\n    }\n    node = node.parentNode\n  }\n}\n\nexport const findNodeFromContainerAndOffset = function(container, offset) {\n  if (!container) {\n    return\n  }\n  if (container.nodeType === Node.TEXT_NODE) {\n    return container\n  } else if (offset === 0) {\n    return container.firstChild != null ? container.firstChild : container\n  } else {\n    return container.childNodes.item(offset - 1)\n  }\n}\n\nexport const findElementFromContainerAndOffset = function(container, offset) {\n  const node = findNodeFromContainerAndOffset(container, offset)\n  return findClosestElementFromNode(node)\n}\n\nexport const findChildIndexOfNode = function(node) {\n  if (!node?.parentNode) {\n    return\n  }\n  let childIndex = 0\n  node = node.previousSibling\n  while (node) {\n    childIndex++\n    node = node.previousSibling\n  }\n  return childIndex\n}\n\nexport const removeNode = (node) => node?.parentNode?.removeChild(node)\n\nexport const walkTree = function(tree, { onlyNodesOfType, usingFilter, expandEntityReferences } = {}) {\n  const whatToShow = (() => {\n    switch (onlyNodesOfType) {\n      case \"element\":\n        return NodeFilter.SHOW_ELEMENT\n      case \"text\":\n        return NodeFilter.SHOW_TEXT\n      case \"comment\":\n        return NodeFilter.SHOW_COMMENT\n      default:\n        return NodeFilter.SHOW_ALL\n    }\n  })()\n\n  return document.createTreeWalker(\n    tree,\n    whatToShow,\n    usingFilter != null ? usingFilter : null,\n    expandEntityReferences === true\n  )\n}\n\nexport const tagName = (element) => element?.tagName?.toLowerCase()\n\nexport const makeElement = function(tag, options = {}) {\n  let key, value\n  if (typeof tag === \"object\") {\n    options = tag\n    tag = options.tagName\n  } else {\n    options = { attributes: options }\n  }\n\n  const element = document.createElement(tag)\n\n  if (options.editable != null) {\n    if (options.attributes == null) {\n      options.attributes = {}\n    }\n    options.attributes.contenteditable = options.editable\n  }\n\n  if (options.attributes) {\n    for (key in options.attributes) {\n      value = options.attributes[key]\n      element.setAttribute(key, value)\n    }\n  }\n\n  if (options.style) {\n    for (key in options.style) {\n      value = options.style[key]\n      element.style[key] = value\n    }\n  }\n\n  if (options.data) {\n    for (key in options.data) {\n      value = options.data[key]\n      element.dataset[key] = value\n    }\n  }\n\n  if (options.className) {\n    options.className.split(\" \").forEach((className) => {\n      element.classList.add(className)\n    })\n  }\n\n  if (options.textContent) {\n    element.textContent = options.textContent\n  }\n\n  if (options.childNodes) {\n    [].concat(options.childNodes).forEach((childNode) => {\n      element.appendChild(childNode)\n    })\n  }\n\n  return element\n}\n\nlet blockTagNames = undefined\n\nexport const getBlockTagNames = function() {\n  if (blockTagNames != null) {\n    return blockTagNames\n  }\n\n  blockTagNames = []\n  for (const key in blockAttributes) {\n    const attributes = blockAttributes[key]\n    if (attributes.tagName) {\n      blockTagNames.push(attributes.tagName)\n    }\n  }\n\n  return blockTagNames\n}\n\nexport const nodeIsBlockContainer = (node) => nodeIsBlockStartComment(node?.firstChild)\n\nexport const nodeProbablyIsBlockContainer = function(node) {\n  return getBlockTagNames().includes(tagName(node)) && !getBlockTagNames().includes(tagName(node.firstChild))\n}\n\nexport const nodeIsBlockStart = function(node, { strict } = { strict: true }) {\n  if (strict) {\n    return nodeIsBlockStartComment(node)\n  } else {\n    return (\n      nodeIsBlockStartComment(node) || !nodeIsBlockStartComment(node.firstChild) && nodeProbablyIsBlockContainer(node)\n    )\n  }\n}\n\nexport const nodeIsBlockStartComment = (node) => nodeIsCommentNode(node) && node?.data === \"block\"\n\nexport const nodeIsCommentNode = (node) => node?.nodeType === Node.COMMENT_NODE\n\nexport const nodeIsCursorTarget = function(node, { name } = {}) {\n  if (!node) {\n    return\n  }\n  if (nodeIsTextNode(node)) {\n    if (node.data === ZERO_WIDTH_SPACE) {\n      if (name) {\n        return node.parentNode.dataset.trixCursorTarget === name\n      } else {\n        return true\n      }\n    }\n  } else {\n    return nodeIsCursorTarget(node.firstChild)\n  }\n}\n\nexport const nodeIsAttachmentElement = (node) => elementMatchesSelector(node, attachmentSelector)\n\nexport const nodeIsEmptyTextNode = (node) => nodeIsTextNode(node) && node?.data === \"\"\n\nexport const nodeIsTextNode = (node) => node?.nodeType === Node.TEXT_NODE\n", "import browser from \"trix/config/browser\"\nimport { makeElement, removeNode } from \"trix/core/helpers/dom\"\n\nconst input = {\n  level2Enabled: true,\n\n  getLevel() {\n    if (this.level2Enabled && browser.supportsInputEvents) {\n      return 2\n    } else {\n      return 0\n    }\n  },\n  pickFiles(callback) {\n    const input = makeElement(\"input\", { type: \"file\", multiple: true, hidden: true, id: this.fileInputId })\n\n    input.addEventListener(\"change\", () => {\n      callback(input.files)\n      removeNode(input)\n    })\n\n    removeNode(document.getElementById(this.fileInputId))\n    document.body.appendChild(input)\n    input.click()\n  }\n}\n\nexport default input\n", "export default {\n  8: \"backspace\",\n  9: \"tab\",\n  13: \"return\",\n  27: \"escape\",\n  37: \"left\",\n  39: \"right\",\n  46: \"delete\",\n  68: \"d\",\n  72: \"h\",\n  79: \"o\",\n}\n", "export default {\n  removeBlankTableCells: false,\n  tableCellSeparator: \" | \",\n  tableRowSeparator: \"\\n\",\n}\n", "import { attachmentSelector } from \"trix/config/attachments\"\n\nexport default {\n  bold: {\n    tagName: \"strong\",\n    inheritable: true,\n    parser(element) {\n      const style = window.getComputedStyle(element)\n      return style.fontWeight === \"bold\" || style.fontWeight >= 600\n    },\n  },\n  italic: {\n    tagName: \"em\",\n    inheritable: true,\n    parser(element) {\n      const style = window.getComputedStyle(element)\n      return style.fontStyle === \"italic\"\n    },\n  },\n  href: {\n    groupTagName: \"a\",\n    parser(element) {\n      const matchingSelector = `a:not(${attachmentSelector})`\n      const link = element.closest(matchingSelector)\n      if (link) {\n        return link.getAttribute(\"href\")\n      }\n    },\n  },\n  strike: {\n    tagName: \"del\",\n    inheritable: true,\n  },\n  frozen: {\n    style: { backgroundColor: \"highlight\" },\n  },\n}\n", "import lang from \"trix/config/lang\"\n\nexport default {\n  getDefaultHTML() {\n    return `<div class=\"trix-button-row\">\n      <span class=\"trix-button-group trix-button-group--text-tools\" data-trix-button-group=\"text-tools\">\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-bold\" data-trix-attribute=\"bold\" data-trix-key=\"b\" title=\"${lang.bold}\" tabindex=\"-1\">${lang.bold}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-italic\" data-trix-attribute=\"italic\" data-trix-key=\"i\" title=\"${lang.italic}\" tabindex=\"-1\">${lang.italic}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-strike\" data-trix-attribute=\"strike\" title=\"${lang.strike}\" tabindex=\"-1\">${lang.strike}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-link\" data-trix-attribute=\"href\" data-trix-action=\"link\" data-trix-key=\"k\" title=\"${lang.link}\" tabindex=\"-1\">${lang.link}</button>\n      </span>\n\n      <span class=\"trix-button-group trix-button-group--block-tools\" data-trix-button-group=\"block-tools\">\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-heading-1\" data-trix-attribute=\"heading1\" title=\"${lang.heading1}\" tabindex=\"-1\">${lang.heading1}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-quote\" data-trix-attribute=\"quote\" title=\"${lang.quote}\" tabindex=\"-1\">${lang.quote}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-code\" data-trix-attribute=\"code\" title=\"${lang.code}\" tabindex=\"-1\">${lang.code}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-bullet-list\" data-trix-attribute=\"bullet\" title=\"${lang.bullets}\" tabindex=\"-1\">${lang.bullets}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-number-list\" data-trix-attribute=\"number\" title=\"${lang.numbers}\" tabindex=\"-1\">${lang.numbers}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-decrease-nesting-level\" data-trix-action=\"decreaseNestingLevel\" title=\"${lang.outdent}\" tabindex=\"-1\">${lang.outdent}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-increase-nesting-level\" data-trix-action=\"increaseNestingLevel\" title=\"${lang.indent}\" tabindex=\"-1\">${lang.indent}</button>\n      </span>\n\n      <span class=\"trix-button-group trix-button-group--file-tools\" data-trix-button-group=\"file-tools\">\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-attach\" data-trix-action=\"attachFiles\" title=\"${lang.attachFiles}\" tabindex=\"-1\">${lang.attachFiles}</button>\n      </span>\n\n      <span class=\"trix-button-group-spacer\"></span>\n\n      <span class=\"trix-button-group trix-button-group--history-tools\" data-trix-button-group=\"history-tools\">\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-undo\" data-trix-action=\"undo\" data-trix-key=\"z\" title=\"${lang.undo}\" tabindex=\"-1\">${lang.undo}</button>\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-redo\" data-trix-action=\"redo\" data-trix-key=\"shift+z\" title=\"${lang.redo}\" tabindex=\"-1\">${lang.redo}</button>\n      </span>\n    </div>\n\n    <div class=\"trix-dialogs\" data-trix-dialogs>\n      <div class=\"trix-dialog trix-dialog--link\" data-trix-dialog=\"href\" data-trix-dialog-attribute=\"href\">\n        <div class=\"trix-dialog__link-fields\">\n          <input type=\"url\" name=\"href\" class=\"trix-input trix-input--dialog\" placeholder=\"${lang.urlPlaceholder}\" aria-label=\"${lang.url}\" required data-trix-input>\n          <div class=\"trix-button-group\">\n            <input type=\"button\" class=\"trix-button trix-button--dialog\" value=\"${lang.link}\" data-trix-method=\"setAttribute\">\n            <input type=\"button\" class=\"trix-button trix-button--dialog\" value=\"${lang.unlink}\" data-trix-method=\"removeAttribute\">\n          </div>\n        </div>\n      </div>\n    </div>`\n  },\n}\n", "const undo = { interval: 5000 }\nexport default undo\n", "export default {\n  attachment: \"attachment\",\n  attachmentCaption: \"attachment__caption\",\n  attachmentCaptionEditor: \"attachment__caption-editor\",\n  attachmentMetadata: \"attachment__metadata\",\n  attachmentMetadataContainer: \"attachment__metadata-container\",\n  attachmentName: \"attachment__name\",\n  attachmentProgress: \"attachment__progress\",\n  attachmentSize: \"attachment__size\",\n  attachmentToolbar: \"attachment__toolbar\",\n  attachmentGallery: \"attachment-gallery\",\n}\n", "export default class BasicObject {\n  static proxyMethod(expression) {\n    const { name, toMethod, toProperty, optional } = parseProxyMethodExpression(expression)\n\n    this.prototype[name] = function() {\n      let subject\n      let object\n\n      if (toMethod) {\n        if (optional) {\n          object = this[toMethod]?.()\n        } else {\n          object = this[toMethod]()\n        }\n      } else if (toProperty) {\n        object = this[toProperty]\n      }\n\n      if (optional) {\n        subject = object?.[name]\n        if (subject) {\n          return apply.call(subject, object, arguments)\n        }\n      } else {\n        subject = object[name]\n        return apply.call(subject, object, arguments)\n      }\n    }\n  }\n}\n\nconst parseProxyMethodExpression = function(expression) {\n  const match = expression.match(proxyMethodExpressionPattern)\n  if (!match) {\n    throw new Error(`can't parse @proxyMethod expression: ${expression}`)\n  }\n\n  const args = { name: match[4] }\n\n  if (match[2] != null) {\n    args.toMethod = match[1]\n  } else {\n    args.toProperty = match[1]\n  }\n\n  if (match[3] != null) {\n    args.optional = true\n  }\n\n  return args\n}\n\nconst { apply } = Function.prototype\n\nconst proxyMethodExpressionPattern = new RegExp(\"\\\n^\\\n(.+?)\\\n(\\\\(\\\\))?\\\n(\\\\?)?\\\n\\\\.\\\n(.+?)\\\n$\\\n\")\n", "import BasicObject from \"trix/core/basic_object\"\n\nexport default class UTF16String extends BasicObject {\n  static box(value = \"\") {\n    if (value instanceof this) {\n      return value\n    } else {\n      return this.fromUCS2String(value?.toString())\n    }\n  }\n\n  static fromUCS2String(ucs2String) {\n    return new this(ucs2String, ucs2decode(ucs2String))\n  }\n\n  static fromCodepoints(codepoints) {\n    return new this(ucs2encode(codepoints), codepoints)\n  }\n\n  constructor(ucs2String, codepoints) {\n    super(...arguments)\n    this.ucs2String = ucs2String\n    this.codepoints = codepoints\n    this.length = this.codepoints.length\n    this.ucs2Length = this.ucs2String.length\n  }\n\n  offsetToUCS2Offset(offset) {\n    return ucs2encode(this.codepoints.slice(0, Math.max(0, offset))).length\n  }\n\n  offsetFromUCS2Offset(ucs2Offset) {\n    return ucs2decode(this.ucs2String.slice(0, Math.max(0, ucs2Offset))).length\n  }\n\n  slice() {\n    return this.constructor.fromCodepoints(this.codepoints.slice(...arguments))\n  }\n\n  charAt(offset) {\n    return this.slice(offset, offset + 1)\n  }\n\n  isEqualTo(value) {\n    return this.constructor.box(value).ucs2String === this.ucs2String\n  }\n\n  toJSON() {\n    return this.ucs2String\n  }\n\n  getCacheKey() {\n    return this.ucs2String\n  }\n\n  toString() {\n    return this.ucs2String\n  }\n}\n\nconst hasArrayFrom = Array.from?.(\"\\ud83d\\udc7c\").length === 1\nconst hasStringCodePointAt = \" \".codePointAt?.(0) != null\nconst hasStringFromCodePoint = String.fromCodePoint?.(32, 128124) === \" \\ud83d\\udc7c\"\n\n// UCS-2 conversion helpers ported from Mathias Bynens' Punycode.js:\n// https://github.com/bestiejs/punycode.js#punycodeucs2\n\nlet ucs2decode, ucs2encode\n\n// Creates an array containing the numeric code points of each Unicode\n// character in the string. While JavaScript uses UCS-2 internally,\n// this function will convert a pair of surrogate halves (each of which\n// UCS-2 exposes as separate characters) into a single code point,\n// matching UTF-16.\nif (hasArrayFrom && hasStringCodePointAt) {\n  ucs2decode = (string) => Array.from(string).map((char) => char.codePointAt(0))\n} else {\n  ucs2decode = function(string) {\n    const output = []\n    let counter = 0\n    const { length } = string\n\n    while (counter < length) {\n      let value = string.charCodeAt(counter++)\n      if (0xd800 <= value && value <= 0xdbff && counter < length) {\n        // high surrogate, and there is a next character\n        const extra = string.charCodeAt(counter++)\n        if ((extra & 0xfc00) === 0xdc00) {\n          // low surrogate\n          value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000\n        } else {\n          // unmatched surrogate; only append this code unit, in case the\n          // next code unit is the high surrogate of a surrogate pair\n          counter--\n        }\n      }\n      output.push(value)\n    }\n\n    return output\n  }\n}\n\n// Creates a string based on an array of numeric code points.\nif (hasStringFromCodePoint) {\n  ucs2encode = (array) => String.fromCodePoint(...Array.from(array || []))\n} else {\n  ucs2encode = function(array) {\n    const characters = (() => {\n      const result = []\n\n      Array.from(array).forEach((value) => {\n        let output = \"\"\n        if (value > 0xffff) {\n          value -= 0x10000\n          output += String.fromCharCode(value >>> 10 & 0x3ff | 0xd800)\n          value = 0xdc00 | value & 0x3ff\n        }\n        result.push(output + String.fromCharCode(value))\n      })\n\n      return result\n    })()\n\n    return characters.join(\"\")\n  }\n}\n", "import BasicObject from \"trix/core/basic_object\"\nimport UTF16String from \"trix/core/utilities/utf16_string\"\n\nlet id = 0\n\nexport default class TrixObject extends BasicObject {\n  static fromJSONString(jsonString) {\n    return this.fromJSON(JSON.parse(jsonString))\n  }\n\n  constructor() {\n    super(...arguments)\n    this.id = ++id\n  }\n\n  hasSameConstructorAs(object) {\n    return this.constructor === object?.constructor\n  }\n\n  isEqualTo(object) {\n    return this === object\n  }\n\n  inspect() {\n    const parts = []\n    const contents = this.contentsForInspection() || {}\n\n    for (const key in contents) {\n      const value = contents[key]\n      parts.push(`${key}=${value}`)\n    }\n\n    return `#<${this.constructor.name}:${this.id}${parts.length ? ` ${parts.join(\", \")}` : \"\"}>`\n  }\n\n  contentsForInspection() {}\n\n  toJSONString() {\n    return JSON.stringify(this)\n  }\n\n  toUTF16String() {\n    return UTF16String.box(this)\n  }\n\n  getCacheKey() {\n    return this.id.toString()\n  }\n}\n", "/* eslint-disable\n    id-length,\n*/\nexport const arraysAreEqual = function(a = [], b = []) {\n  if (a.length !== b.length) {\n    return false\n  }\n  for (let index = 0; index < a.length; index++) {\n    const value = a[index]\n    if (value !== b[index]) {\n      return false\n    }\n  }\n  return true\n}\n\nexport const arrayStartsWith = (a = [], b = []) => arraysAreEqual(a.slice(0, b.length), b)\n\nexport const spliceArray = function(array, ...args) {\n  const result = array.slice(0)\n  result.splice(...args)\n  return result\n}\n\nexport const summarizeArrayChange = function(oldArray = [], newArray = []) {\n  const added = []\n  const removed = []\n\n  const existingValues = new Set()\n\n  oldArray.forEach((value) => {\n    existingValues.add(value)\n  })\n\n  const currentValues = new Set()\n\n  newArray.forEach((value) => {\n    currentValues.add(value)\n    if (!existingValues.has(value)) {\n      added.push(value)\n    }\n  })\n\n  oldArray.forEach((value) => {\n    if (!currentValues.has(value)) {\n      removed.push(value)\n    }\n  })\n\n  return { added, removed }\n}\n", "import { makeElement } from \"trix/core/helpers/dom\"\n\n// https://github.com/mathiasbynens/unicode-2.1.8/blob/master/Bidi_Class/Right_To_Left/regex.js\nconst RTL_PATTERN =\n  /[\\u05BE\\u05C0\\u05C3\\u05D0-\\u05EA\\u05F0-\\u05F4\\u061B\\u061F\\u0621-\\u063A\\u0640-\\u064A\\u066D\\u0671-\\u06B7\\u06BA-\\u06BE\\u06C0-\\u06CE\\u06D0-\\u06D5\\u06E5\\u06E6\\u200F\\u202B\\u202E\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE72\\uFE74\\uFE76-\\uFEFC]/\n\nexport const getDirection = (function() {\n  const input = makeElement(\"input\", { dir: \"auto\", name: \"x\", dirName: \"x.dir\" })\n  const textArea = makeElement(\"textarea\", { dir: \"auto\", name: \"y\", dirName: \"y.dir\" })\n  const form = makeElement(\"form\")\n  form.appendChild(input)\n  form.appendChild(textArea)\n\n  const supportsDirName = (function() {\n    try {\n      return new FormData(form).has(textArea.dirName)\n    } catch (error) {\n      return false\n    }\n  })()\n\n  const supportsDirSelector = (function() {\n    try {\n      return input.matches(\":dir(ltr),:dir(rtl)\")\n    } catch (error) {\n      return false\n    }\n  })()\n\n  if (supportsDirName) {\n    return function(string) {\n      textArea.value = string\n      return new FormData(form).get(textArea.dirName)\n    }\n  } else if (supportsDirSelector) {\n    return function(string) {\n      input.value = string\n      if (input.matches(\":dir(rtl)\")) {\n        return \"rtl\"\n      } else {\n        return \"ltr\"\n      }\n    }\n  } else {\n    return function(string) {\n      const char = string.trim().charAt(0)\n      if (RTL_PATTERN.test(char)) {\n        return \"rtl\"\n      } else {\n        return \"ltr\"\n      }\n    }\n  }\n})()\n", "import * as config from \"trix/config\"\n\nlet allAttributeNames = null\nlet blockAttributeNames = null\nlet textAttributeNames = null\nlet listAttributeNames = null\n\nexport const getAllAttributeNames = () => {\n  if (!allAttributeNames) {\n    allAttributeNames = getTextAttributeNames().concat(getBlockAttributeNames())\n  }\n  return allAttributeNames\n}\n\nexport const getBlockConfig = (attributeName) => config.blockAttributes[attributeName]\n\nexport const getBlockAttributeNames = () => {\n  if (!blockAttributeNames) {\n    blockAttributeNames = Object.keys(config.blockAttributes)\n  }\n  return blockAttributeNames\n}\n\nexport const getTextConfig = (attributeName) => config.textAttributes[attributeName]\n\nexport const getTextAttributeNames = () => {\n  if (!textAttributeNames) {\n    textAttributeNames = Object.keys(config.textAttributes)\n  }\n  return textAttributeNames\n}\n\nexport const getListAttributeNames = () => {\n  if (!listAttributeNames) {\n    listAttributeNames = []\n    for (const key in config.blockAttributes) {\n      const { listAttribute } = config.blockAttributes[key]\n      if (listAttribute != null) {\n        listAttributeNames.push(listAttribute)\n      }\n    }\n  }\n  return listAttributeNames\n}\n", "/* eslint-disable\n*/\nexport const installDefaultCSSForTagName = function(tagName, defaultCSS) {\n  const styleElement = insertStyleElementForTagName(tagName)\n  styleElement.textContent = defaultCSS.replace(/%t/g, tagName)\n}\n\nconst insertStyleElementForTagName = function(tagName) {\n  const element = document.createElement(\"style\")\n  element.setAttribute(\"type\", \"text/css\")\n  element.setAttribute(\"data-tag-name\", tagName.toLowerCase())\n  const nonce = getCSPNonce()\n  if (nonce) {\n    element.setAttribute(\"nonce\", nonce)\n  }\n  document.head.insertBefore(element, document.head.firstChild)\n  return element\n}\n\nconst getCSPNonce = function() {\n  const element = getMetaElement(\"trix-csp-nonce\") || getMetaElement(\"csp-nonce\")\n  if (element) {\n    const { nonce, content } = element\n    return nonce == \"\" ? content : nonce\n  }\n}\n\nconst getMetaElement = (name) => document.head.querySelector(`meta[name=${name}]`)\n", "const testTransferData = { \"application/x-trix-feature-detection\": \"test\" }\n\nexport const dataTransferIsPlainText = function(dataTransfer) {\n  const text = dataTransfer.getData(\"text/plain\")\n  const html = dataTransfer.getData(\"text/html\")\n\n  if (text && html) {\n    const { body } = new DOMParser().parseFromString(html, \"text/html\")\n    if (body.textContent === text) {\n      return !body.querySelector(\"*\")\n    }\n  } else {\n    return text?.length\n  }\n}\n\nexport const dataTransferIsMsOfficePaste = ({ dataTransfer }) => {\n  return dataTransfer.types.includes(\"Files\") &&\n    dataTransfer.types.includes(\"text/html\") &&\n    dataTransfer.getData(\"text/html\").includes(\"urn:schemas-microsoft-com:office:office\")\n}\n\nexport const dataTransferIsWritable = function(dataTransfer) {\n  if (!dataTransfer?.setData) return false\n\n  for (const key in testTransferData) {\n    const value = testTransferData[key]\n\n    try {\n      dataTransfer.setData(key, value)\n      if (!dataTransfer.getData(key) === value) return false\n    } catch (error) {\n      return false\n    }\n  }\n  return true\n}\n\nexport const keyEventIsKeyboardCommand = (function() {\n  if (/Mac|^iP/.test(navigator.platform)) {\n    return (event) => event.metaKey\n  } else {\n    return (event) => event.ctrlKey\n  }\n})()\n\nexport function shouldRenderInmmediatelyToDealWithIOSDictation(inputEvent) {\n  if (/iPhone|iPad/.test(navigator.userAgent)) {\n    // Handle garbled content and duplicated newlines when using dictation on iOS 18+. Upon dictation completion, iOS sends\n    // the list of insertText / insertParagraph events in a quick sequence. If we don't render\n    // the editor synchronously, the internal range fails to update and results in garbled content or duplicated newlines.\n    //\n    // This workaround is necessary because iOS doesn't send composing events as expected while dictating:\n    // https://bugs.webkit.org/show_bug.cgi?id=261764\n    return !inputEvent.inputType || inputEvent.inputType === \"insertParagraph\"\n  } else {\n    return false\n  }\n}\n", "export const defer = (fn) => setTimeout(fn, 1)\n", "/* eslint-disable\n    id-length,\n*/\nexport const copyObject = function(object = {}) {\n  const result = {}\n  for (const key in object) {\n    const value = object[key]\n    result[key] = value\n  }\n  return result\n}\n\nexport const objectsAreEqual = function(a = {}, b = {}) {\n  if (Object.keys(a).length !== Object.keys(b).length) {\n    return false\n  }\n  for (const key in a) {\n    const value = a[key]\n    if (value !== b[key]) {\n      return false\n    }\n  }\n  return true\n}\n", "import { copyObject, objectsAreEqual } from \"trix/core/helpers/objects\"\n\nexport const normalizeRange = function(range) {\n  if (range == null) return\n\n  if (!Array.isArray(range)) {\n    range = [ range, range ]\n  }\n  return [ copyValue(range[0]), copyValue(range[1] != null ? range[1] : range[0]) ]\n}\n\nexport const rangeIsCollapsed = function(range) {\n  if (range == null) return\n\n  const [ start, end ] = normalizeRange(range)\n  return rangeValuesAreEqual(start, end)\n}\n\nexport const rangesAreEqual = function(leftRange, rightRange) {\n  if (leftRange == null || rightRange == null) return\n\n  const [ leftStart, leftEnd ] = normalizeRange(leftRange)\n  const [ rightStart, rightEnd ] = normalizeRange(rightRange)\n  return rangeValuesAreEqual(leftStart, rightStart) && rangeValuesAreEqual(leftEnd, rightEnd)\n}\n\nconst copyValue = function(value) {\n  if (typeof value === \"number\") {\n    return value\n  } else {\n    return copyObject(value)\n  }\n}\n\nconst rangeValuesAreEqual = function(left, right) {\n  if (typeof left === \"number\") {\n    return left === right\n  } else {\n    return objectsAreEqual(left, right)\n  }\n}\n", "import BasicObject from \"trix/core/basic_object\"\n\nexport default class SelectionChangeObserver extends BasicObject {\n  constructor() {\n    super(...arguments)\n    this.update = this.update.bind(this)\n    this.selectionManagers = []\n  }\n\n  start() {\n    if (!this.started) {\n      this.started = true\n      document.addEventListener(\"selectionchange\", this.update, true)\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false\n      return document.removeEventListener(\"selectionchange\", this.update, true)\n    }\n  }\n\n  registerSelectionManager(selectionManager) {\n    if (!this.selectionManagers.includes(selectionManager)) {\n      this.selectionManagers.push(selectionManager)\n      return this.start()\n    }\n  }\n\n  unregisterSelectionManager(selectionManager) {\n    this.selectionManagers = this.selectionManagers.filter((sm) => sm !== selectionManager)\n    if (this.selectionManagers.length === 0) {\n      return this.stop()\n    }\n  }\n\n  notifySelectionManagersOfSelectionChange() {\n    return this.selectionManagers.map((selectionManager) => selectionManager.selectionDidChange())\n  }\n\n  update() {\n    this.notifySelectionManagersOfSelectionChange()\n  }\n\n  reset() {\n    this.update()\n  }\n}\n\nexport const selectionChangeObserver = new SelectionChangeObserver()\n\nexport const getDOMSelection = function() {\n  const selection = window.getSelection()\n  if (selection.rangeCount > 0) {\n    return selection\n  }\n}\n\nexport const getDOMRange = function() {\n  const domRange = getDOMSelection()?.getRangeAt(0)\n  if (domRange) {\n    if (!domRangeIsPrivate(domRange)) {\n      return domRange\n    }\n  }\n}\n\nexport const setDOMRange = function(domRange) {\n  const selection = window.getSelection()\n  selection.removeAllRanges()\n  selection.addRange(domRange)\n  return selectionChangeObserver.update()\n}\n\n// In Firefox, clicking certain <input> elements changes the selection to a\n// private element used to draw its UI. Attempting to access properties of those\n// elements throws an error.\n// https://bugzilla.mozilla.org/show_bug.cgi?id=208427\nconst domRangeIsPrivate = (domRange) => nodeIsPrivate(domRange.startContainer) || nodeIsPrivate(domRange.endContainer)\n\nconst nodeIsPrivate = (node) => !Object.getPrototypeOf(node)\n", "/* eslint-disable\n    id-length,\n    no-useless-escape,\n*/\nimport { NON_BREAKING_SPACE, ZERO_WIDTH_SPACE } from \"trix/constants\"\nimport UTF16String from \"trix/core/utilities/utf16_string\"\n\nexport const normalizeSpaces = (string) =>\n  string.replace(new RegExp(`${ZERO_WIDTH_SPACE}`, \"g\"), \"\").replace(new RegExp(`${NON_BREAKING_SPACE}`, \"g\"), \" \")\n\nexport const normalizeNewlines = (string) => string.replace(/\\r\\n?/g, \"\\n\")\n\nexport const breakableWhitespacePattern = new RegExp(`[^\\\\S${NON_BREAKING_SPACE}]`)\n\nexport const squishBreakableWhitespace = (string) =>\n  string\n    // Replace all breakable whitespace characters with a space\n    .replace(new RegExp(`${breakableWhitespacePattern.source}`, \"g\"), \" \")\n    // Replace two or more spaces with a single space\n    .replace(/\\ {2,}/g, \" \")\n\nexport const summarizeStringChange = function(oldString, newString) {\n  let added, removed\n  oldString = UTF16String.box(oldString)\n  newString = UTF16String.box(newString)\n\n  if (newString.length < oldString.length) {\n    [ removed, added ] = utf16StringDifferences(oldString, newString)\n  } else {\n    [ added, removed ] = utf16StringDifferences(newString, oldString)\n  }\n\n  return { added, removed }\n}\n\nconst utf16StringDifferences = function(a, b) {\n  if (a.isEqualTo(b)) {\n    return [ \"\", \"\" ]\n  }\n\n  const diffA = utf16StringDifference(a, b)\n  const { length } = diffA.utf16String\n\n  let diffB\n\n  if (length) {\n    const { offset } = diffA\n    const codepoints = a.codepoints.slice(0, offset).concat(a.codepoints.slice(offset + length))\n    diffB = utf16StringDifference(b, UTF16String.fromCodepoints(codepoints))\n  } else {\n    diffB = utf16StringDifference(b, a)\n  }\n\n  return [ diffA.utf16String.toString(), diffB.utf16String.toString() ]\n}\n\nconst utf16StringDifference = function(a, b) {\n  let leftIndex = 0\n  let rightIndexA = a.length\n  let rightIndexB = b.length\n\n  while (leftIndex < rightIndexA && a.charAt(leftIndex).isEqualTo(b.charAt(leftIndex))) {\n    leftIndex++\n  }\n\n  while (rightIndexA > leftIndex + 1 && a.charAt(rightIndexA - 1).isEqualTo(b.charAt(rightIndexB - 1))) {\n    rightIndexA--\n    rightIndexB--\n  }\n\n  return {\n    utf16String: a.slice(leftIndex, rightIndexA),\n    offset: leftIndex,\n  }\n}\n", "import TrixObject from \"trix/core/object\" // Don't override window.Object\nimport { arraysAreEqual } from \"trix/core/helpers\"\n\nexport default class Hash extends TrixObject {\n  static fromCommonAttributesOfObjects(objects = []) {\n    if (!objects.length) {\n      return new this()\n    }\n    let hash = box(objects[0])\n    let keys = hash.getKeys()\n\n    objects.slice(1).forEach((object) => {\n      keys = hash.getKeysCommonToHash(box(object))\n      hash = hash.slice(keys)\n    })\n\n    return hash\n  }\n\n  static box(values) {\n    return box(values)\n  }\n\n  constructor(values = {}) {\n    super(...arguments)\n    this.values = copy(values)\n  }\n\n  add(key, value) {\n    return this.merge(object(key, value))\n  }\n\n  remove(key) {\n    return new Hash(copy(this.values, key))\n  }\n\n  get(key) {\n    return this.values[key]\n  }\n\n  has(key) {\n    return key in this.values\n  }\n\n  merge(values) {\n    return new Hash(merge(this.values, unbox(values)))\n  }\n\n  slice(keys) {\n    const values = {}\n\n    Array.from(keys).forEach((key) => {\n      if (this.has(key)) {\n        values[key] = this.values[key]\n      }\n    })\n\n    return new Hash(values)\n  }\n\n  getKeys() {\n    return Object.keys(this.values)\n  }\n\n  getKeysCommonToHash(hash) {\n    hash = box(hash)\n    return this.getKeys().filter((key) => this.values[key] === hash.values[key])\n  }\n\n  isEqualTo(values) {\n    return arraysAreEqual(this.toArray(), box(values).toArray())\n  }\n\n  isEmpty() {\n    return this.getKeys().length === 0\n  }\n\n  toArray() {\n    if (!this.array) {\n      const result = []\n      for (const key in this.values) {\n        const value = this.values[key]\n        result.push(result.push(key, value))\n      }\n      this.array = result.slice(0)\n    }\n\n    return this.array\n  }\n\n  toObject() {\n    return copy(this.values)\n  }\n\n  toJSON() {\n    return this.toObject()\n  }\n\n  contentsForInspection() {\n    return { values: JSON.stringify(this.values) }\n  }\n}\n\nconst object = function(key, value) {\n  const result = {}\n  result[key] = value\n  return result\n}\n\nconst merge = function(object, values) {\n  const result = copy(object)\n  for (const key in values) {\n    const value = values[key]\n    result[key] = value\n  }\n  return result\n}\n\nconst copy = function(object, keyToRemove) {\n  const result = {}\n  const sortedKeys = Object.keys(object).sort()\n\n  sortedKeys.forEach((key) => {\n    if (key !== keyToRemove) {\n      result[key] = object[key]\n    }\n  })\n\n  return result\n}\n\nconst box = function(object) {\n  if (object instanceof Hash) {\n    return object\n  } else {\n    return new Hash(object)\n  }\n}\n\nconst unbox = function(object) {\n  if (object instanceof Hash) {\n    return object.values\n  } else {\n    return object\n  }\n}\n", "export default class ObjectGroup {\n  static groupObjects(ungroupedObjects = [], { depth, asTree } = {}) {\n    let group\n    if (asTree) {\n      if (depth == null) {\n        depth = 0\n      }\n    }\n    const objects = []\n\n    Array.from(ungroupedObjects).forEach((object) => {\n      if (group) {\n        if (object.canBeGrouped?.(depth) && group[group.length - 1].canBeGroupedWith?.(object, depth)) {\n          group.push(object)\n          return\n        } else {\n          objects.push(new this(group, { depth, asTree }))\n          group = null\n        }\n      }\n\n      if (object.canBeGrouped?.(depth)) {\n        group = [ object ]\n      } else {\n        objects.push(object)\n      }\n    })\n\n    if (group) {\n      objects.push(new this(group, { depth, asTree }))\n    }\n    return objects\n  }\n\n  constructor(objects = [], { depth, asTree }) {\n    this.objects = objects\n    if (asTree) {\n      this.depth = depth\n      this.objects = this.constructor.groupObjects(this.objects, { asTree, depth: this.depth + 1 })\n    }\n  }\n\n  getObjects() {\n    return this.objects\n  }\n\n  getDepth() {\n    return this.depth\n  }\n\n  getCacheKey() {\n    const keys = [ \"objectGroup\" ]\n    Array.from(this.getObjects()).forEach((object) => {\n      keys.push(object.getCacheKey())\n    })\n    return keys.join(\"/\")\n  }\n}\n", "import BasicObject from \"trix/core/basic_object\"\n\nexport default class ObjectMap extends BasicObject {\n  constructor(objects = []) {\n    super(...arguments)\n    this.objects = {}\n\n    Array.from(objects).forEach((object) => {\n      const hash = JSON.stringify(object)\n      if (this.objects[hash] == null) {\n        this.objects[hash] = object\n      }\n    })\n  }\n\n  find(object) {\n    const hash = JSON.stringify(object)\n    return this.objects[hash]\n  }\n}\n", "export default class ElementStore {\n  constructor(elements) {\n    this.reset(elements)\n  }\n\n  add(element) {\n    const key = getKey(element)\n    this.elements[key] = element\n  }\n\n  remove(element) {\n    const key = getKey(element)\n    const value = this.elements[key]\n    if (value) {\n      delete this.elements[key]\n      return value\n    }\n  }\n\n  reset(elements = []) {\n    this.elements = {}\n    Array.from(elements).forEach((element) => {\n      this.add(element)\n    })\n    return elements\n  }\n}\n\nconst getKey = (element) => element.dataset.trixStoreKey\n", "import BasicObject from \"trix/core/basic_object\"\n\nexport default class Operation extends BasicObject {\n  isPerforming() {\n    return this.performing === true\n  }\n\n  hasPerformed() {\n    return this.performed === true\n  }\n\n  hasSucceeded() {\n    return this.performed && this.succeeded\n  }\n\n  hasFailed() {\n    return this.performed && !this.succeeded\n  }\n\n  getPromise() {\n    if (!this.promise) {\n      this.promise = new Promise((resolve, reject) => {\n        this.performing = true\n        return this.perform((succeeded, result) => {\n          this.succeeded = succeeded\n          this.performing = false\n          this.performed = true\n\n          if (this.succeeded) {\n            resolve(result)\n          } else {\n            reject(result)\n          }\n        })\n      })\n    }\n\n    return this.promise\n  }\n\n  perform(callback) {\n    return callback(false)\n  }\n\n  release() {\n    this.promise?.cancel?.()\n    this.promise = null\n    this.performing = null\n    this.performed = null\n    this.succeeded = null\n  }\n}\n\nOperation.proxyMethod(\"getPromise().then\")\nOperation.proxyMethod(\"getPromise().catch\")\n", "import BasicObject from \"trix/core/basic_object\"\nimport ObjectGroup from \"trix/core/collections/object_group\"\n\nexport default class ObjectView extends BasicObject {\n  constructor(object, options = {}) {\n    super(...arguments)\n    this.object = object\n    this.options = options\n    this.childViews = []\n    this.rootView = this\n  }\n\n  getNodes() {\n    if (!this.nodes) { this.nodes = this.createNodes() }\n    return this.nodes.map((node) => node.cloneNode(true))\n  }\n\n  invalidate() {\n    this.nodes = null\n    this.childViews = []\n    return this.parentView?.invalidate()\n  }\n\n  invalidateViewForObject(object) {\n    return this.findViewForObject(object)?.invalidate()\n  }\n\n  findOrCreateCachedChildView(viewClass, object, options) {\n    let view = this.getCachedViewForObject(object)\n    if (view) {\n      this.recordChildView(view)\n    } else {\n      view = this.createChildView(...arguments)\n      this.cacheViewForObject(view, object)\n    }\n    return view\n  }\n\n  createChildView(viewClass, object, options = {}) {\n    if (object instanceof ObjectGroup) {\n      options.viewClass = viewClass\n      viewClass = ObjectGroupView\n    }\n\n    const view = new viewClass(object, options)\n    return this.recordChildView(view)\n  }\n\n  recordChildView(view) {\n    view.parentView = this\n    view.rootView = this.rootView\n    this.childViews.push(view)\n    return view\n  }\n\n  getAllChildViews() {\n    let views = []\n\n    this.childViews.forEach((childView) => {\n      views.push(childView)\n      views = views.concat(childView.getAllChildViews())\n    })\n\n    return views\n  }\n\n  findElement() {\n    return this.findElementForObject(this.object)\n  }\n\n  findElementForObject(object) {\n    const id = object?.id\n    if (id) {\n      return this.rootView.element.querySelector(`[data-trix-id='${id}']`)\n    }\n  }\n\n  findViewForObject(object) {\n    for (const view of this.getAllChildViews()) {\n      if (view.object === object) {\n        return view\n      }\n    }\n  }\n\n  getViewCache() {\n    if (this.rootView === this) {\n      if (this.isViewCachingEnabled()) {\n        if (!this.viewCache) { this.viewCache = {} }\n        return this.viewCache\n      }\n    } else {\n      return this.rootView.getViewCache()\n    }\n  }\n\n  isViewCachingEnabled() {\n    return this.shouldCacheViews !== false\n  }\n\n  enableViewCaching() {\n    this.shouldCacheViews = true\n  }\n\n  disableViewCaching() {\n    this.shouldCacheViews = false\n  }\n\n  getCachedViewForObject(object) {\n    return this.getViewCache()?.[object.getCacheKey()]\n  }\n\n  cacheViewForObject(view, object) {\n    const cache = this.getViewCache()\n    if (cache) {\n      cache[object.getCacheKey()] = view\n    }\n  }\n\n  garbageCollectCachedViews() {\n    const cache = this.getViewCache()\n    if (cache) {\n      const views = this.getAllChildViews().concat(this)\n      const objectKeys = views.map((view) => view.object.getCacheKey())\n      for (const key in cache) {\n        if (!objectKeys.includes(key)) {\n          delete cache[key]\n        }\n      }\n    }\n  }\n}\n\nexport class ObjectGroupView extends ObjectView {\n  constructor() {\n    super(...arguments)\n    this.objectGroup = this.object\n    this.viewClass = this.options.viewClass\n    delete this.options.viewClass\n  }\n\n  getChildViews() {\n    if (!this.childViews.length) {\n      Array.from(this.objectGroup.getObjects()).forEach((object) => {\n        this.findOrCreateCachedChildView(this.viewClass, object, this.options)\n      })\n    }\n    return this.childViews\n  }\n\n  createNodes() {\n    const element = this.createContainerElement()\n\n    this.getChildViews().forEach((view) => {\n      Array.from(view.getNodes()).forEach((node) => {\n        element.appendChild(node)\n      })\n    })\n\n    return [ element ]\n  }\n\n  createContainerElement(depth = this.objectGroup.getDepth()) {\n    return this.getChildViews()[0].createContainerElement(depth)\n  }\n}\n", "import BasicObject from \"trix/core/basic_object\"\n\nimport { nodeIsAttachmentElement, removeNode, tagName, walkTree } from \"trix/core/helpers\"\n\nconst DEFAULT_ALLOWED_ATTRIBUTES = \"style href src width height language class\".split(\" \")\nconst DEFAULT_FORBIDDEN_PROTOCOLS = \"javascript:\".split(\" \")\nconst DEFAULT_FORBIDDEN_ELEMENTS = \"script iframe form noscript\".split(\" \")\n\nexport default class HTMLSanitizer extends BasicObject {\n  static setHTML(element, html) {\n    const sanitizedElement = new this(html).sanitize()\n    const sanitizedHtml = sanitizedElement.getHTML ? sanitizedElement.getHTML() : sanitizedElement.outerHTML\n    element.innerHTML = sanitizedHtml\n  }\n\n  static sanitize(html, options) {\n    const sanitizer = new this(html, options)\n    sanitizer.sanitize()\n    return sanitizer\n  }\n\n  constructor(html, { allowedAttributes, forbiddenProtocols, forbiddenElements } = {}) {\n    super(...arguments)\n    this.allowedAttributes = allowedAttributes || DEFAULT_ALLOWED_ATTRIBUTES\n    this.forbiddenProtocols = forbiddenProtocols || DEFAULT_FORBIDDEN_PROTOCOLS\n    this.forbiddenElements = forbiddenElements || DEFAULT_FORBIDDEN_ELEMENTS\n    this.body = createBodyElementForHTML(html)\n  }\n\n  sanitize() {\n    this.sanitizeElements()\n    return this.normalizeListElementNesting()\n  }\n\n  getHTML() {\n    return this.body.innerHTML\n  }\n\n  getBody() {\n    return this.body\n  }\n\n  // Private\n\n  sanitizeElements() {\n    const walker = walkTree(this.body)\n    const nodesToRemove = []\n\n    while (walker.nextNode()) {\n      const node = walker.currentNode\n      switch (node.nodeType) {\n        case Node.ELEMENT_NODE:\n          if (this.elementIsRemovable(node)) {\n            nodesToRemove.push(node)\n          } else {\n            this.sanitizeElement(node)\n          }\n          break\n        case Node.COMMENT_NODE:\n          nodesToRemove.push(node)\n          break\n      }\n    }\n\n    nodesToRemove.forEach((node) => removeNode(node))\n\n    return this.body\n  }\n\n  sanitizeElement(element) {\n    if (element.hasAttribute(\"href\")) {\n      if (this.forbiddenProtocols.includes(element.protocol)) {\n        element.removeAttribute(\"href\")\n      }\n    }\n\n    Array.from(element.attributes).forEach(({ name }) => {\n      if (!this.allowedAttributes.includes(name) && name.indexOf(\"data-trix\") !== 0) {\n        element.removeAttribute(name)\n      }\n    })\n\n    return element\n  }\n\n  normalizeListElementNesting() {\n    Array.from(this.body.querySelectorAll(\"ul,ol\")).forEach((listElement) => {\n      const previousElement = listElement.previousElementSibling\n      if (previousElement) {\n        if (tagName(previousElement) === \"li\") {\n          previousElement.appendChild(listElement)\n        }\n      }\n    })\n\n    return this.body\n  }\n\n  elementIsRemovable(element) {\n    if (element?.nodeType !== Node.ELEMENT_NODE) return\n    return this.elementIsForbidden(element) || this.elementIsntSerializable(element)\n  }\n\n  elementIsForbidden(element) {\n    return this.forbiddenElements.includes(tagName(element))\n  }\n\n  elementIsntSerializable(element) {\n    return element.getAttribute(\"data-trix-serialize\") === \"false\" && !nodeIsAttachmentElement(element)\n  }\n}\n\nconst createBodyElementForHTML = function(html = \"\") {\n  // Remove everything after </html>\n  html = html.replace(/<\\/html[^>]*>[^]*$/i, \"</html>\")\n  const doc = document.implementation.createHTMLDocument(\"\")\n  doc.documentElement.innerHTML = html\n\n  Array.from(doc.head.querySelectorAll(\"style\")).forEach((element) => {\n    doc.body.appendChild(element)\n  })\n\n  return doc.body\n}\n", "import * as config from \"trix/config\"\nimport { ZERO_WIDTH_SPACE } from \"trix/constants\"\nimport { copyObject, makeElement } from \"trix/core/helpers\"\nimport ObjectView from \"trix/views/object_view\"\nimport HTMLSanitizer from \"trix/models/html_sanitizer\"\n\nconst { css } = config\n\nexport default class AttachmentView extends ObjectView {\n  constructor() {\n    super(...arguments)\n    this.attachment = this.object\n    this.attachment.uploadProgressDelegate = this\n    this.attachmentPiece = this.options.piece\n  }\n\n  createContentNodes() {\n    return []\n  }\n\n  createNodes() {\n    let innerElement\n    const figure = innerElement = makeElement({\n      tagName: \"figure\",\n      className: this.getClassName(),\n      data: this.getData(),\n      editable: false,\n    })\n\n    const href = this.getHref()\n    if (href) {\n      innerElement = makeElement({ tagName: \"a\", editable: false, attributes: { href, tabindex: -1 } })\n      figure.appendChild(innerElement)\n    }\n\n    if (this.attachment.hasContent()) {\n      HTMLSanitizer.setHTML(innerElement, this.attachment.getContent())\n    } else {\n      this.createContentNodes().forEach((node) => {\n        innerElement.appendChild(node)\n      })\n    }\n\n    innerElement.appendChild(this.createCaptionElement())\n\n    if (this.attachment.isPending()) {\n      this.progressElement = makeElement({\n        tagName: \"progress\",\n        attributes: {\n          class: css.attachmentProgress,\n          value: this.attachment.getUploadProgress(),\n          max: 100,\n        },\n        data: {\n          trixMutable: true,\n          trixStoreKey: [ \"progressElement\", this.attachment.id ].join(\"/\"),\n        },\n      })\n\n      figure.appendChild(this.progressElement)\n    }\n\n    return [ createCursorTarget(\"left\"), figure, createCursorTarget(\"right\") ]\n  }\n\n  createCaptionElement() {\n    const figcaption = makeElement({ tagName: \"figcaption\", className: css.attachmentCaption })\n    const caption = this.attachmentPiece.getCaption()\n    if (caption) {\n      figcaption.classList.add(`${css.attachmentCaption}--edited`)\n      figcaption.textContent = caption\n    } else {\n      let name, size\n      const captionConfig = this.getCaptionConfig()\n      if (captionConfig.name) {\n        name = this.attachment.getFilename()\n      }\n      if (captionConfig.size) {\n        size = this.attachment.getFormattedFilesize()\n      }\n\n      if (name) {\n        const nameElement = makeElement({ tagName: \"span\", className: css.attachmentName, textContent: name })\n        figcaption.appendChild(nameElement)\n      }\n\n      if (size) {\n        if (name) {\n          figcaption.appendChild(document.createTextNode(\" \"))\n        }\n        const sizeElement = makeElement({ tagName: \"span\", className: css.attachmentSize, textContent: size })\n        figcaption.appendChild(sizeElement)\n      }\n    }\n\n    return figcaption\n  }\n\n  getClassName() {\n    const names = [ css.attachment, `${css.attachment}--${this.attachment.getType()}` ]\n    const extension = this.attachment.getExtension()\n    if (extension) {\n      names.push(`${css.attachment}--${extension}`)\n    }\n    return names.join(\" \")\n  }\n\n  getData() {\n    const data = {\n      trixAttachment: JSON.stringify(this.attachment),\n      trixContentType: this.attachment.getContentType(),\n      trixId: this.attachment.id,\n    }\n\n    const { attributes } = this.attachmentPiece\n    if (!attributes.isEmpty()) {\n      data.trixAttributes = JSON.stringify(attributes)\n    }\n\n    if (this.attachment.isPending()) {\n      data.trixSerialize = false\n    }\n\n    return data\n  }\n\n  getHref() {\n    if (!htmlContainsTagName(this.attachment.getContent(), \"a\")) {\n      return this.attachment.getHref()\n    }\n  }\n\n  getCaptionConfig() {\n    const type = this.attachment.getType()\n    const captionConfig = copyObject(config.attachments[type]?.caption)\n    if (type === \"file\") {\n      captionConfig.name = true\n    }\n    return captionConfig\n  }\n\n  findProgressElement() {\n    return this.findElement()?.querySelector(\"progress\")\n  }\n\n  // Attachment delegate\n\n  attachmentDidChangeUploadProgress() {\n    const value = this.attachment.getUploadProgress()\n    const progressElement = this.findProgressElement()\n    if (progressElement) {\n      progressElement.value = value\n    }\n  }\n}\n\nconst createCursorTarget = (name) =>\n  makeElement({\n    tagName: \"span\",\n    textContent: ZERO_WIDTH_SPACE,\n    data: {\n      trixCursorTarget: name,\n      trixSerialize: false,\n    },\n  })\n\nconst htmlContainsTagName = function(html, tagName) {\n  const div = makeElement(\"div\")\n  HTMLSanitizer.setHTML(div, html || \"\")\n  return div.querySelector(tagName)\n}\n", "import * as config from \"trix/config\"\nimport { makeElement } from \"trix/core/helpers\"\n\nimport AttachmentView from \"trix/views/attachment_view\"\n\nexport default class PreviewableAttachmentView extends AttachmentView {\n  constructor() {\n    super(...arguments)\n    this.attachment.previewDelegate = this\n  }\n\n  createContentNodes() {\n    this.image = makeElement({\n      tagName: \"img\",\n      attributes: {\n        src: \"\",\n      },\n      data: {\n        trixMutable: true,\n      },\n    })\n\n    this.refresh(this.image)\n    return [ this.image ]\n  }\n\n  createCaptionElement() {\n    const figcaption = super.createCaptionElement(...arguments)\n    if (!figcaption.textContent) {\n      figcaption.setAttribute(\"data-trix-placeholder\", config.lang.captionPlaceholder)\n    }\n    return figcaption\n  }\n\n  refresh(image) {\n    if (!image) { image = this.findElement()?.querySelector(\"img\") }\n    if (image) {\n      return this.updateAttributesForImage(image)\n    }\n  }\n\n  updateAttributesForImage(image) {\n    const url = this.attachment.getURL()\n    const previewURL = this.attachment.getPreviewURL()\n    image.src = previewURL || url\n\n    if (previewURL === url) {\n      image.removeAttribute(\"data-trix-serialized-attributes\")\n    } else {\n      const serializedAttributes = JSON.stringify({ src: url })\n      image.setAttribute(\"data-trix-serialized-attributes\", serializedAttributes)\n    }\n\n    const width = this.attachment.getWidth()\n    const height = this.attachment.getHeight()\n\n    if (width != null) {\n      image.width = width\n    }\n    if (height != null) {\n      image.height = height\n    }\n\n    const storeKey = [ \"imageElement\", this.attachment.id, image.src, image.width, image.height ].join(\"/\")\n    image.dataset.trixStoreKey = storeKey\n  }\n\n  // Attachment delegate\n\n  attachmentDidChangeAttributes() {\n    this.refresh(this.image)\n    return this.refresh()\n  }\n}\n", "/* eslint-disable\n    no-useless-escape,\n    no-var,\n*/\nimport { NON_BREAKING_SPACE } from \"trix/constants\"\n\nimport ObjectView from \"trix/views/object_view\"\nimport AttachmentView from \"trix/views/attachment_view\"\nimport PreviewableAttachmentView from \"trix/views/previewable_attachment_view\"\n\nimport { findInnerElement, getTextConfig, makeElement } from \"trix/core/helpers\"\n\nexport default class PieceView extends ObjectView {\n  constructor() {\n    super(...arguments)\n    this.piece = this.object\n    this.attributes = this.piece.getAttributes()\n    this.textConfig = this.options.textConfig\n    this.context = this.options.context\n\n    if (this.piece.attachment) {\n      this.attachment = this.piece.attachment\n    } else {\n      this.string = this.piece.toString()\n    }\n  }\n\n  createNodes() {\n    let nodes = this.attachment ? this.createAttachmentNodes() : this.createStringNodes()\n    const element = this.createElement()\n    if (element) {\n      const innerElement = findInnerElement(element)\n      Array.from(nodes).forEach((node) => {\n        innerElement.appendChild(node)\n      })\n      nodes = [ element ]\n    }\n    return nodes\n  }\n\n  createAttachmentNodes() {\n    const constructor = this.attachment.isPreviewable() ? PreviewableAttachmentView : AttachmentView\n\n    const view = this.createChildView(constructor, this.piece.attachment, { piece: this.piece })\n    return view.getNodes()\n  }\n\n  createStringNodes() {\n    if (this.textConfig?.plaintext) {\n      return [ document.createTextNode(this.string) ]\n    } else {\n      const nodes = []\n      const iterable = this.string.split(\"\\n\")\n      for (let index = 0; index < iterable.length; index++) {\n        const substring = iterable[index]\n        if (index > 0) {\n          const element = makeElement(\"br\")\n          nodes.push(element)\n        }\n\n        if (substring.length) {\n          const node = document.createTextNode(this.preserveSpaces(substring))\n          nodes.push(node)\n        }\n      }\n      return nodes\n    }\n  }\n\n  createElement() {\n    let element, key, value\n    const styles = {}\n\n    for (key in this.attributes) {\n      value = this.attributes[key]\n      const config = getTextConfig(key)\n      if (config) {\n        if (config.tagName) {\n          var innerElement\n          const pendingElement = makeElement(config.tagName)\n\n          if (innerElement) {\n            innerElement.appendChild(pendingElement)\n            innerElement = pendingElement\n          } else {\n            element = innerElement = pendingElement\n          }\n        }\n\n        if (config.styleProperty) {\n          styles[config.styleProperty] = value\n        }\n\n        if (config.style) {\n          for (key in config.style) {\n            value = config.style[key]\n            styles[key] = value\n          }\n        }\n      }\n    }\n\n    if (Object.keys(styles).length) {\n      if (!element) { element = makeElement(\"span\") }\n      for (key in styles) {\n        value = styles[key]\n        element.style[key] = value\n      }\n    }\n    return element\n  }\n\n  createContainerElement() {\n    for (const key in this.attributes) {\n      const value = this.attributes[key]\n      const config = getTextConfig(key)\n      if (config) {\n        if (config.groupTagName) {\n          const attributes = {}\n          attributes[key] = value\n          return makeElement(config.groupTagName, attributes)\n        }\n      }\n    }\n  }\n\n  preserveSpaces(string) {\n    if (this.context.isLast) {\n      string = string.replace(/\\ $/, NON_BREAKING_SPACE)\n    }\n\n    string = string\n      .replace(/(\\S)\\ {3}(\\S)/g, `$1 ${NON_BREAKING_SPACE} $2`)\n      .replace(/\\ {2}/g, `${NON_BREAKING_SPACE} `)\n      .replace(/\\ {2}/g, ` ${NON_BREAKING_SPACE}`)\n\n    if (this.context.isFirst || this.context.followsWhitespace) {\n      string = string.replace(/^\\ /, NON_BREAKING_SPACE)\n    }\n\n    return string\n  }\n}\n", "/* eslint-disable\n    no-var,\n*/\nimport ObjectView from \"trix/views/object_view\"\nimport ObjectGroup from \"trix/core/collections/object_group\"\nimport PieceView from \"trix/views/piece_view\"\n\nexport default class TextView extends ObjectView {\n  constructor() {\n    super(...arguments)\n    this.text = this.object\n    this.textConfig = this.options.textConfig\n  }\n\n  createNodes() {\n    const nodes = []\n    const pieces = ObjectGroup.groupObjects(this.getPieces())\n    const lastIndex = pieces.length - 1\n\n    for (let index = 0; index < pieces.length; index++) {\n      const piece = pieces[index]\n      const context = {}\n      if (index === 0) {\n        context.isFirst = true\n      }\n      if (index === lastIndex) {\n        context.isLast = true\n      }\n      if (endsWithWhitespace(previousPiece)) {\n        context.followsWhitespace = true\n      }\n\n      const view = this.findOrCreateCachedChildView(PieceView, piece, { textConfig: this.textConfig, context })\n      nodes.push(...Array.from(view.getNodes() || []))\n\n      var previousPiece = piece\n    }\n    return nodes\n  }\n\n  getPieces() {\n    return Array.from(this.text.getPieces()).filter((piece) => !piece.hasAttribute(\"blockBreak\"))\n  }\n}\n\nconst endsWithWhitespace = (piece) => /\\s$/.test(piece?.toString())\n", "import * as config from \"trix/config\"\nimport ObjectView from \"trix/views/object_view\"\nimport TextView from \"trix/views/text_view\"\n\nimport { getBlockConfig, makeElement } from \"trix/core/helpers\"\nconst { css } = config\n\nexport default class BlockView extends ObjectView {\n  constructor() {\n    super(...arguments)\n    this.block = this.object\n    this.attributes = this.block.getAttributes()\n  }\n\n  createNodes() {\n    const comment = document.createComment(\"block\")\n    const nodes = [ comment ]\n    if (this.block.isEmpty()) {\n      nodes.push(makeElement(\"br\"))\n    } else {\n      const textConfig = getBlockConfig(this.block.getLastAttribute())?.text\n      const textView = this.findOrCreateCachedChildView(TextView, this.block.text, { textConfig })\n      nodes.push(...Array.from(textView.getNodes() || []))\n      if (this.shouldAddExtraNewlineElement()) {\n        nodes.push(makeElement(\"br\"))\n      }\n    }\n\n    if (this.attributes.length) {\n      return nodes\n    } else {\n      let attributes\n      const { tagName } = config.blockAttributes.default\n      if (this.block.isRTL()) {\n        attributes = { dir: \"rtl\" }\n      }\n\n      const element = makeElement({ tagName, attributes })\n      nodes.forEach((node) => element.appendChild(node))\n      return [ element ]\n    }\n  }\n\n  createContainerElement(depth) {\n    const attributes = {}\n    let className\n    const attributeName = this.attributes[depth]\n\n    const { tagName, htmlAttributes = [] } = getBlockConfig(attributeName)\n\n    if (depth === 0 && this.block.isRTL()) {\n      Object.assign(attributes, { dir: \"rtl\" })\n    }\n\n    if (attributeName === \"attachmentGallery\") {\n      const size = this.block.getBlockBreakPosition()\n      className = `${css.attachmentGallery} ${css.attachmentGallery}--${size}`\n    }\n\n    Object.entries(this.block.htmlAttributes).forEach(([ name, value ]) => {\n      if (htmlAttributes.includes(name)) {\n        attributes[name] = value\n      }\n    })\n\n    return makeElement({ tagName, className, attributes })\n  }\n\n  // A single <br> at the end of a block element has no visual representation\n  // so add an extra one.\n  shouldAddExtraNewlineElement() {\n    return /\\n\\n$/.test(this.block.toString())\n  }\n}\n", "import { makeElement } from \"trix/core/helpers\"\n\nimport ElementStore from \"trix/core/collections/element_store\"\nimport ObjectGroup from \"trix/core/collections/object_group\"\nimport ObjectView from \"trix/views/object_view\"\nimport BlockView from \"trix/views/block_view\"\n\nimport { defer } from \"trix/core/helpers\"\n\nexport default class DocumentView extends ObjectView {\n  static render(document) {\n    const element = makeElement(\"div\")\n    const view = new this(document, { element })\n    view.render()\n    view.sync()\n    return element\n  }\n\n  constructor() {\n    super(...arguments)\n    this.element = this.options.element\n    this.elementStore = new ElementStore()\n    this.setDocument(this.object)\n  }\n\n  setDocument(document) {\n    if (!document.isEqualTo(this.document)) {\n      this.document = this.object = document\n    }\n  }\n\n  render() {\n    this.childViews = []\n\n    this.shadowElement = makeElement(\"div\")\n\n    if (!this.document.isEmpty()) {\n      const objects = ObjectGroup.groupObjects(this.document.getBlocks(), { asTree: true })\n\n      Array.from(objects).forEach((object) => {\n        const view = this.findOrCreateCachedChildView(BlockView, object)\n        Array.from(view.getNodes()).map((node) => this.shadowElement.appendChild(node))\n      })\n    }\n  }\n\n  isSynced() {\n    return elementsHaveEqualHTML(this.shadowElement, this.element)\n  }\n\n  sync() {\n    const fragment = this.createDocumentFragmentForSync()\n    while (this.element.lastChild) {\n      this.element.removeChild(this.element.lastChild)\n    }\n    this.element.appendChild(fragment)\n    return this.didSync()\n  }\n\n  // Private\n\n  didSync() {\n    this.elementStore.reset(findStoredElements(this.element))\n    return defer(() => this.garbageCollectCachedViews())\n  }\n\n  createDocumentFragmentForSync() {\n    const fragment = document.createDocumentFragment()\n\n    Array.from(this.shadowElement.childNodes).forEach((node) => {\n      fragment.appendChild(node.cloneNode(true))\n    })\n\n    Array.from(findStoredElements(fragment)).forEach((element) => {\n      const storedElement = this.elementStore.remove(element)\n      if (storedElement) {\n        element.parentNode.replaceChild(storedElement, element)\n      }\n    })\n\n    return fragment\n  }\n}\n\nconst findStoredElements = (element) => element.querySelectorAll(\"[data-trix-store-key]\")\n\nconst elementsHaveEqualHTML = (element, otherElement) =>\n  ignoreSpaces(element.innerHTML) === ignoreSpaces(otherElement.innerHTML)\n\nconst ignoreSpaces = (html) => html.replace(/&nbsp;/g, \" \")\n", "import TrixObject from \"trix/core/object\" // Don't override window.Object\nimport Hash from \"trix/core/collections/hash\"\n\nexport default class Piece extends TrixObject {\n  static types = {}\n\n  static registerType(type, constructor) {\n    constructor.type = type\n    this.types[type] = constructor\n  }\n\n  static fromJSON(pieceJSON) {\n    const constructor = this.types[pieceJSON.type]\n    if (constructor) {\n      return constructor.fromJSON(pieceJSON)\n    }\n  }\n\n  constructor(value, attributes = {}) {\n    super(...arguments)\n    this.attributes = Hash.box(attributes)\n  }\n\n  copyWithAttributes(attributes) {\n    return new this.constructor(this.getValue(), attributes)\n  }\n\n  copyWithAdditionalAttributes(attributes) {\n    return this.copyWithAttributes(this.attributes.merge(attributes))\n  }\n\n  copyWithoutAttribute(attribute) {\n    return this.copyWithAttributes(this.attributes.remove(attribute))\n  }\n\n  copy() {\n    return this.copyWithAttributes(this.attributes)\n  }\n\n  getAttribute(attribute) {\n    return this.attributes.get(attribute)\n  }\n\n  getAttributesHash() {\n    return this.attributes\n  }\n\n  getAttributes() {\n    return this.attributes.toObject()\n  }\n\n  hasAttribute(attribute) {\n    return this.attributes.has(attribute)\n  }\n\n  hasSameStringValueAsPiece(piece) {\n    return piece && this.toString() === piece.toString()\n  }\n\n  hasSameAttributesAsPiece(piece) {\n    return piece && (this.attributes === piece.attributes || this.attributes.isEqualTo(piece.attributes))\n  }\n\n  isBlockBreak() {\n    return false\n  }\n\n  isEqualTo(piece) {\n    return (\n      super.isEqualTo(...arguments) ||\n      this.hasSameConstructorAs(piece) &&\n        this.hasSameStringValueAsPiece(piece) &&\n        this.hasSameAttributesAsPiece(piece)\n    )\n  }\n\n  isEmpty() {\n    return this.length === 0\n  }\n\n  isSerializable() {\n    return true\n  }\n\n  toJSON() {\n    return {\n      type: this.constructor.type,\n      attributes: this.getAttributes(),\n    }\n  }\n\n  contentsForInspection() {\n    return {\n      type: this.constructor.type,\n      attributes: this.attributes.inspect(),\n    }\n  }\n\n  // Grouping\n\n  canBeGrouped() {\n    return this.hasAttribute(\"href\")\n  }\n\n  canBeGroupedWith(piece) {\n    return this.getAttribute(\"href\") === piece.getAttribute(\"href\")\n  }\n\n  // Splittable\n\n  getLength() {\n    return this.length\n  }\n\n  canBeConsolidatedWith(piece) {\n    return false\n  }\n}\n", "import Operation from \"trix/core/utilities/operation\"\n\nexport default class ImagePreloadOperation extends Operation {\n  constructor(url) {\n    super(...arguments)\n    this.url = url\n  }\n\n  perform(callback) {\n    const image = new Image()\n\n    image.onload = () => {\n      image.width = this.width = image.naturalWidth\n      image.height = this.height = image.naturalHeight\n      return callback(true, image)\n    }\n\n    image.onerror = () => callback(false)\n\n    image.src = this.url\n  }\n}\n", "import * as config from \"trix/config\"\nimport TrixObject from \"trix/core/object\" // Don't override window.Object\nimport Hash from \"trix/core/collections/hash\"\nimport ImagePreloadOperation from \"trix/operations/image_preload_operation\"\n\nexport default class Attachment extends TrixObject {\n  static previewablePattern = /^image(\\/(gif|png|webp|jpe?g)|$)/\n\n  static attachmentForFile(file) {\n    const attributes = this.attributesForFile(file)\n    const attachment = new this(attributes)\n    attachment.setFile(file)\n    return attachment\n  }\n\n  static attributesForFile(file) {\n    return new Hash({\n      filename: file.name,\n      filesize: file.size,\n      contentType: file.type,\n    })\n  }\n\n  static fromJSON(attachmentJSON) {\n    return new this(attachmentJSON)\n  }\n\n  constructor(attributes = {}) {\n    super(attributes)\n    this.releaseFile = this.releaseFile.bind(this)\n    this.attributes = Hash.box(attributes)\n    this.didChangeAttributes()\n  }\n\n  getAttribute(attribute) {\n    return this.attributes.get(attribute)\n  }\n\n  hasAttribute(attribute) {\n    return this.attributes.has(attribute)\n  }\n\n  getAttributes() {\n    return this.attributes.toObject()\n  }\n\n  setAttributes(attributes = {}) {\n    const newAttributes = this.attributes.merge(attributes)\n    if (!this.attributes.isEqualTo(newAttributes)) {\n      this.attributes = newAttributes\n      this.didChangeAttributes()\n      this.previewDelegate?.attachmentDidChangeAttributes?.(this)\n      return this.delegate?.attachmentDidChangeAttributes?.(this)\n    }\n  }\n\n  didChangeAttributes() {\n    if (this.isPreviewable()) {\n      return this.preloadURL()\n    }\n  }\n\n  isPending() {\n    return this.file != null && !(this.getURL() || this.getHref())\n  }\n\n  isPreviewable() {\n    if (this.attributes.has(\"previewable\")) {\n      return this.attributes.get(\"previewable\")\n    } else {\n      return Attachment.previewablePattern.test(this.getContentType())\n    }\n  }\n\n  getType() {\n    if (this.hasContent()) {\n      return \"content\"\n    } else if (this.isPreviewable()) {\n      return \"preview\"\n    } else {\n      return \"file\"\n    }\n  }\n\n  getURL() {\n    return this.attributes.get(\"url\")\n  }\n\n  getHref() {\n    return this.attributes.get(\"href\")\n  }\n\n  getFilename() {\n    return this.attributes.get(\"filename\") || \"\"\n  }\n\n  getFilesize() {\n    return this.attributes.get(\"filesize\")\n  }\n\n  getFormattedFilesize() {\n    const filesize = this.attributes.get(\"filesize\")\n    if (typeof filesize === \"number\") {\n      return config.fileSize.formatter(filesize)\n    } else {\n      return \"\"\n    }\n  }\n\n  getExtension() {\n    return this.getFilename()\n      .match(/\\.(\\w+)$/)?.[1]\n      .toLowerCase()\n  }\n\n  getContentType() {\n    return this.attributes.get(\"contentType\")\n  }\n\n  hasContent() {\n    return this.attributes.has(\"content\")\n  }\n\n  getContent() {\n    return this.attributes.get(\"content\")\n  }\n\n  getWidth() {\n    return this.attributes.get(\"width\")\n  }\n\n  getHeight() {\n    return this.attributes.get(\"height\")\n  }\n\n  getFile() {\n    return this.file\n  }\n\n  setFile(file) {\n    this.file = file\n    if (this.isPreviewable()) {\n      return this.preloadFile()\n    }\n  }\n\n  releaseFile() {\n    this.releasePreloadedFile()\n    this.file = null\n  }\n\n  getUploadProgress() {\n    return this.uploadProgress != null ? this.uploadProgress : 0\n  }\n\n  setUploadProgress(value) {\n    if (this.uploadProgress !== value) {\n      this.uploadProgress = value\n      return this.uploadProgressDelegate?.attachmentDidChangeUploadProgress?.(this)\n    }\n  }\n\n  toJSON() {\n    return this.getAttributes()\n  }\n\n  getCacheKey() {\n    return [ super.getCacheKey(...arguments), this.attributes.getCacheKey(), this.getPreviewURL() ].join(\"/\")\n  }\n\n  // Previewable\n\n  getPreviewURL() {\n    return this.previewURL || this.preloadingURL\n  }\n\n  setPreviewURL(url) {\n    if (url !== this.getPreviewURL()) {\n      this.previewURL = url\n      this.previewDelegate?.attachmentDidChangeAttributes?.(this)\n      return this.delegate?.attachmentDidChangePreviewURL?.(this)\n    }\n  }\n\n  preloadURL() {\n    return this.preload(this.getURL(), this.releaseFile)\n  }\n\n  preloadFile() {\n    if (this.file) {\n      this.fileObjectURL = URL.createObjectURL(this.file)\n      return this.preload(this.fileObjectURL)\n    }\n  }\n\n  releasePreloadedFile() {\n    if (this.fileObjectURL) {\n      URL.revokeObjectURL(this.fileObjectURL)\n      this.fileObjectURL = null\n    }\n  }\n\n  preload(url, callback) {\n    if (url && url !== this.getPreviewURL()) {\n      this.preloadingURL = url\n      const operation = new ImagePreloadOperation(url)\n      return operation\n        .then(({ width, height }) => {\n          if (!this.getWidth() || !this.getHeight()) {\n            this.setAttributes({ width, height })\n          }\n          this.preloadingURL = null\n          this.setPreviewURL(url)\n          return callback?.()\n        })\n        .catch(() => {\n          this.preloadingURL = null\n          return callback?.()\n        })\n    }\n  }\n}\n", "import { OBJECT_REPLACEMENT_CHARACTER } from \"trix/constants\"\n\nimport Attachment from \"trix/models/attachment\"\nimport Piece from \"trix/models/piece\"\n\nexport default class AttachmentPiece extends Piece {\n  static permittedAttributes = [ \"caption\", \"presentation\" ]\n\n  static fromJSON(pieceJSON) {\n    return new this(Attachment.fromJSON(pieceJSON.attachment), pieceJSON.attributes)\n  }\n\n  constructor(attachment) {\n    super(...arguments)\n    this.attachment = attachment\n    this.length = 1\n    this.ensureAttachmentExclusivelyHasAttribute(\"href\")\n    if (!this.attachment.hasContent()) {\n      this.removeProhibitedAttributes()\n    }\n  }\n\n  ensureAttachmentExclusivelyHasAttribute(attribute) {\n    if (this.hasAttribute(attribute)) {\n      if (!this.attachment.hasAttribute(attribute)) {\n        this.attachment.setAttributes(this.attributes.slice([ attribute ]))\n      }\n      this.attributes = this.attributes.remove(attribute)\n    }\n  }\n\n  removeProhibitedAttributes() {\n    const attributes = this.attributes.slice(AttachmentPiece.permittedAttributes)\n    if (!attributes.isEqualTo(this.attributes)) {\n      this.attributes = attributes\n    }\n  }\n\n  getValue() {\n    return this.attachment\n  }\n\n  isSerializable() {\n    return !this.attachment.isPending()\n  }\n\n  getCaption() {\n    return this.attributes.get(\"caption\") || \"\"\n  }\n\n  isEqualTo(piece) {\n    return super.isEqualTo(piece) && this.attachment.id === piece?.attachment?.id\n  }\n\n  toString() {\n    return OBJECT_REPLACEMENT_CHARACTER\n  }\n\n  toJSON() {\n    const json = super.toJSON(...arguments)\n    json.attachment = this.attachment\n    return json\n  }\n\n  getCacheKey() {\n    return [ super.getCacheKey(...arguments), this.attachment.getCacheKey() ].join(\"/\")\n  }\n\n  toConsole() {\n    return JSON.stringify(this.toString())\n  }\n}\n\nPiece.registerType(\"attachment\", AttachmentPiece)\n", "import Piece from \"trix/models/piece\"\n\nimport { normalizeNewlines } from \"trix/core/helpers\"\n\nexport default class StringPiece extends Piece {\n  static fromJSON(pieceJSON) {\n    return new this(pieceJSON.string, pieceJSON.attributes)\n  }\n\n  constructor(string) {\n    super(...arguments)\n    this.string = normalizeNewlines(string)\n    this.length = this.string.length\n  }\n\n  getValue() {\n    return this.string\n  }\n\n  toString() {\n    return this.string.toString()\n  }\n\n  isBlockBreak() {\n    return this.toString() === \"\\n\" && this.getAttribute(\"blockBreak\") === true\n  }\n\n  toJSON() {\n    const result = super.toJSON(...arguments)\n    result.string = this.string\n    return result\n  }\n\n  // Splittable\n\n  canBeConsolidatedWith(piece) {\n    return piece && this.hasSameConstructorAs(piece) && this.hasSameAttributesAsPiece(piece)\n  }\n\n  consolidateWith(piece) {\n    return new this.constructor(this.toString() + piece.toString(), this.attributes)\n  }\n\n  splitAtOffset(offset) {\n    let left, right\n    if (offset === 0) {\n      left = null\n      right = this\n    } else if (offset === this.length) {\n      left = this\n      right = null\n    } else {\n      left = new this.constructor(this.string.slice(0, offset), this.attributes)\n      right = new this.constructor(this.string.slice(offset), this.attributes)\n    }\n    return [ left, right ]\n  }\n\n  toConsole() {\n    let { string } = this\n    if (string.length > 15) {\n      string = string.slice(0, 14) + \"…\"\n    }\n    return JSON.stringify(string.toString())\n  }\n}\n\nPiece.registerType(\"string\", StringPiece)\n", "/* eslint-disable\n    prefer-const,\n*/\nimport TrixObject from \"trix/core/object\" // Don't override window.Object\n\nimport { spliceArray } from \"trix/core/helpers\"\n\nexport default class SplittableList extends TrixObject {\n  static box(objects) {\n    if (objects instanceof this) {\n      return objects\n    } else {\n      return new this(objects)\n    }\n  }\n\n  constructor(objects = []) {\n    super(...arguments)\n    this.objects = objects.slice(0)\n    this.length = this.objects.length\n  }\n\n  indexOf(object) {\n    return this.objects.indexOf(object)\n  }\n\n  splice(...args) {\n    return new this.constructor(spliceArray(this.objects, ...args))\n  }\n\n  eachObject(callback) {\n    return this.objects.map((object, index) => callback(object, index))\n  }\n\n  insertObjectAtIndex(object, index) {\n    return this.splice(index, 0, object)\n  }\n\n  insertSplittableListAtIndex(splittableList, index) {\n    return this.splice(index, 0, ...splittableList.objects)\n  }\n\n  insertSplittableListAtPosition(splittableList, position) {\n    const [ objects, index ] = this.splitObjectAtPosition(position)\n    return new this.constructor(objects).insertSplittableListAtIndex(splittableList, index)\n  }\n\n  editObjectAtIndex(index, callback) {\n    return this.replaceObjectAtIndex(callback(this.objects[index]), index)\n  }\n\n  replaceObjectAtIndex(object, index) {\n    return this.splice(index, 1, object)\n  }\n\n  removeObjectAtIndex(index) {\n    return this.splice(index, 1)\n  }\n\n  getObjectAtIndex(index) {\n    return this.objects[index]\n  }\n\n  getSplittableListInRange(range) {\n    const [ objects, leftIndex, rightIndex ] = this.splitObjectsAtRange(range)\n    return new this.constructor(objects.slice(leftIndex, rightIndex + 1))\n  }\n\n  selectSplittableList(test) {\n    const objects = this.objects.filter((object) => test(object))\n    return new this.constructor(objects)\n  }\n\n  removeObjectsInRange(range) {\n    const [ objects, leftIndex, rightIndex ] = this.splitObjectsAtRange(range)\n    return new this.constructor(objects).splice(leftIndex, rightIndex - leftIndex + 1)\n  }\n\n  transformObjectsInRange(range, transform) {\n    const [ objects, leftIndex, rightIndex ] = this.splitObjectsAtRange(range)\n    const transformedObjects = objects.map((object, index) =>\n      leftIndex <= index && index <= rightIndex ? transform(object) : object\n    )\n    return new this.constructor(transformedObjects)\n  }\n\n  splitObjectsAtRange(range) {\n    let rightOuterIndex\n    let [ objects, leftInnerIndex, offset ] = this.splitObjectAtPosition(startOfRange(range))\n    ;[ objects, rightOuterIndex ] = new this.constructor(objects).splitObjectAtPosition(endOfRange(range) + offset)\n\n    return [ objects, leftInnerIndex, rightOuterIndex - 1 ]\n  }\n\n  getObjectAtPosition(position) {\n    const { index } = this.findIndexAndOffsetAtPosition(position)\n    return this.objects[index]\n  }\n\n  splitObjectAtPosition(position) {\n    let splitIndex, splitOffset\n    const { index, offset } = this.findIndexAndOffsetAtPosition(position)\n    const objects = this.objects.slice(0)\n    if (index != null) {\n      if (offset === 0) {\n        splitIndex = index\n        splitOffset = 0\n      } else {\n        const object = this.getObjectAtIndex(index)\n        const [ leftObject, rightObject ] = object.splitAtOffset(offset)\n        objects.splice(index, 1, leftObject, rightObject)\n        splitIndex = index + 1\n        splitOffset = leftObject.getLength() - offset\n      }\n    } else {\n      splitIndex = objects.length\n      splitOffset = 0\n    }\n\n    return [ objects, splitIndex, splitOffset ]\n  }\n\n  consolidate() {\n    const objects = []\n    let pendingObject = this.objects[0]\n\n    this.objects.slice(1).forEach((object) => {\n      if (pendingObject.canBeConsolidatedWith?.(object)) {\n        pendingObject = pendingObject.consolidateWith(object)\n      } else {\n        objects.push(pendingObject)\n        pendingObject = object\n      }\n    })\n\n    if (pendingObject) {\n      objects.push(pendingObject)\n    }\n\n    return new this.constructor(objects)\n  }\n\n  consolidateFromIndexToIndex(startIndex, endIndex) {\n    const objects = this.objects.slice(0)\n    const objectsInRange = objects.slice(startIndex, endIndex + 1)\n    const consolidatedInRange = new this.constructor(objectsInRange).consolidate().toArray()\n    return this.splice(startIndex, objectsInRange.length, ...consolidatedInRange)\n  }\n\n  findIndexAndOffsetAtPosition(position) {\n    let index\n    let currentPosition = 0\n    for (index = 0; index < this.objects.length; index++) {\n      const object = this.objects[index]\n      const nextPosition = currentPosition + object.getLength()\n      if (currentPosition <= position && position < nextPosition) {\n        return { index, offset: position - currentPosition }\n      }\n      currentPosition = nextPosition\n    }\n    return { index: null, offset: null }\n  }\n\n  findPositionAtIndexAndOffset(index, offset) {\n    let position = 0\n    for (let currentIndex = 0; currentIndex < this.objects.length; currentIndex++) {\n      const object = this.objects[currentIndex]\n      if (currentIndex < index) {\n        position += object.getLength()\n      } else if (currentIndex === index) {\n        position += offset\n        break\n      }\n    }\n    return position\n  }\n\n  getEndPosition() {\n    if (this.endPosition == null) {\n      this.endPosition = 0\n      this.objects.forEach((object) => this.endPosition += object.getLength())\n    }\n\n    return this.endPosition\n  }\n\n  toString() {\n    return this.objects.join(\"\")\n  }\n\n  toArray() {\n    return this.objects.slice(0)\n  }\n\n  toJSON() {\n    return this.toArray()\n  }\n\n  isEqualTo(splittableList) {\n    return super.isEqualTo(...arguments) || objectArraysAreEqual(this.objects, splittableList?.objects)\n  }\n\n  contentsForInspection() {\n    return {\n      objects: `[${this.objects.map((object) => object.inspect()).join(\", \")}]`,\n    }\n  }\n}\n\nconst objectArraysAreEqual = function(left, right = []) {\n  if (left.length !== right.length) {\n    return false\n  }\n  let result = true\n  for (let index = 0; index < left.length; index++) {\n    const object = left[index]\n    if (result && !object.isEqualTo(right[index])) {\n      result = false\n    }\n  }\n  return result\n}\n\nconst startOfRange = (range) => range[0]\n\nconst endOfRange = (range) => range[1]\n", "import TrixObject from \"trix/core/object\" // Don't override window.Object\n\nimport { getDirection } from \"trix/core/helpers\"\n\nimport Piece from \"trix/models/piece\"\nimport AttachmentPiece from \"trix/models/attachment_piece\"\nimport StringPiece from \"trix/models/string_piece\"\nimport SplittableList from \"trix/models/splittable_list\"\n\nimport Hash from \"trix/core/collections/hash\"\n\nexport default class Text extends TrixObject {\n  static textForAttachmentWithAttributes(attachment, attributes) {\n    const piece = new AttachmentPiece(attachment, attributes)\n    return new this([ piece ])\n  }\n\n  static textForStringWithAttributes(string, attributes) {\n    const piece = new StringPiece(string, attributes)\n    return new this([ piece ])\n  }\n\n  static fromJSON(textJSON) {\n    const pieces = Array.from(textJSON).map((pieceJSON) => Piece.fromJSON(pieceJSON))\n    return new this(pieces)\n  }\n\n  constructor(pieces = []) {\n    super(...arguments)\n    const notEmpty = pieces.filter((piece) => !piece.isEmpty())\n    this.pieceList = new SplittableList(notEmpty)\n  }\n\n  copy() {\n    return this.copyWithPieceList(this.pieceList)\n  }\n\n  copyWithPieceList(pieceList) {\n    return new this.constructor(pieceList.consolidate().toArray())\n  }\n\n  copyUsingObjectMap(objectMap) {\n    const pieces = this.getPieces().map((piece) => objectMap.find(piece) || piece)\n    return new this.constructor(pieces)\n  }\n\n  appendText(text) {\n    return this.insertTextAtPosition(text, this.getLength())\n  }\n\n  insertTextAtPosition(text, position) {\n    return this.copyWithPieceList(this.pieceList.insertSplittableListAtPosition(text.pieceList, position))\n  }\n\n  removeTextAtRange(range) {\n    return this.copyWithPieceList(this.pieceList.removeObjectsInRange(range))\n  }\n\n  replaceTextAtRange(text, range) {\n    return this.removeTextAtRange(range).insertTextAtPosition(text, range[0])\n  }\n\n  moveTextFromRangeToPosition(range, position) {\n    if (range[0] <= position && position <= range[1]) return\n    const text = this.getTextAtRange(range)\n    const length = text.getLength()\n    if (range[0] < position) {\n      position -= length\n    }\n    return this.removeTextAtRange(range).insertTextAtPosition(text, position)\n  }\n\n  addAttributeAtRange(attribute, value, range) {\n    const attributes = {}\n    attributes[attribute] = value\n    return this.addAttributesAtRange(attributes, range)\n  }\n\n  addAttributesAtRange(attributes, range) {\n    return this.copyWithPieceList(\n      this.pieceList.transformObjectsInRange(range, (piece) => piece.copyWithAdditionalAttributes(attributes))\n    )\n  }\n\n  removeAttributeAtRange(attribute, range) {\n    return this.copyWithPieceList(\n      this.pieceList.transformObjectsInRange(range, (piece) => piece.copyWithoutAttribute(attribute))\n    )\n  }\n\n  setAttributesAtRange(attributes, range) {\n    return this.copyWithPieceList(\n      this.pieceList.transformObjectsInRange(range, (piece) => piece.copyWithAttributes(attributes))\n    )\n  }\n\n  getAttributesAtPosition(position) {\n    return this.pieceList.getObjectAtPosition(position)?.getAttributes() || {}\n  }\n\n  getCommonAttributes() {\n    const objects = Array.from(this.pieceList.toArray()).map((piece) => piece.getAttributes())\n    return Hash.fromCommonAttributesOfObjects(objects).toObject()\n  }\n\n  getCommonAttributesAtRange(range) {\n    return this.getTextAtRange(range).getCommonAttributes() || {}\n  }\n\n  getExpandedRangeForAttributeAtOffset(attributeName, offset) {\n    let right\n    let left = right = offset\n    const length = this.getLength()\n\n    while (left > 0 && this.getCommonAttributesAtRange([ left - 1, right ])[attributeName]) {\n      left--\n    }\n    while (right < length && this.getCommonAttributesAtRange([ offset, right + 1 ])[attributeName]) {\n      right++\n    }\n\n    return [ left, right ]\n  }\n\n  getTextAtRange(range) {\n    return this.copyWithPieceList(this.pieceList.getSplittableListInRange(range))\n  }\n\n  getStringAtRange(range) {\n    return this.pieceList.getSplittableListInRange(range).toString()\n  }\n\n  getStringAtPosition(position) {\n    return this.getStringAtRange([ position, position + 1 ])\n  }\n\n  startsWithString(string) {\n    return this.getStringAtRange([ 0, string.length ]) === string\n  }\n\n  endsWithString(string) {\n    const length = this.getLength()\n    return this.getStringAtRange([ length - string.length, length ]) === string\n  }\n\n  getAttachmentPieces() {\n    return this.pieceList.toArray().filter((piece) => !!piece.attachment)\n  }\n\n  getAttachments() {\n    return this.getAttachmentPieces().map((piece) => piece.attachment)\n  }\n\n  getAttachmentAndPositionById(attachmentId) {\n    let position = 0\n    for (const piece of this.pieceList.toArray()) {\n      if (piece.attachment?.id === attachmentId) {\n        return { attachment: piece.attachment, position }\n      }\n      position += piece.length\n    }\n    return { attachment: null, position: null }\n  }\n\n  getAttachmentById(attachmentId) {\n    const { attachment } = this.getAttachmentAndPositionById(attachmentId)\n    return attachment\n  }\n\n  getRangeOfAttachment(attachment) {\n    const attachmentAndPosition = this.getAttachmentAndPositionById(attachment.id)\n    const position = attachmentAndPosition.position\n    attachment = attachmentAndPosition.attachment\n    if (attachment) {\n      return [ position, position + 1 ]\n    }\n  }\n\n  updateAttributesForAttachment(attributes, attachment) {\n    const range = this.getRangeOfAttachment(attachment)\n    if (range) {\n      return this.addAttributesAtRange(attributes, range)\n    } else {\n      return this\n    }\n  }\n\n  getLength() {\n    return this.pieceList.getEndPosition()\n  }\n\n  isEmpty() {\n    return this.getLength() === 0\n  }\n\n  isEqualTo(text) {\n    return super.isEqualTo(text) || text?.pieceList?.isEqualTo(this.pieceList)\n  }\n\n  isBlockBreak() {\n    return this.getLength() === 1 && this.pieceList.getObjectAtIndex(0).isBlockBreak()\n  }\n\n  eachPiece(callback) {\n    return this.pieceList.eachObject(callback)\n  }\n\n  getPieces() {\n    return this.pieceList.toArray()\n  }\n\n  getPieceAtPosition(position) {\n    return this.pieceList.getObjectAtPosition(position)\n  }\n\n  contentsForInspection() {\n    return { pieceList: this.pieceList.inspect() }\n  }\n\n  toSerializableText() {\n    const pieceList = this.pieceList.selectSplittableList((piece) => piece.isSerializable())\n    return this.copyWithPieceList(pieceList)\n  }\n\n  toString() {\n    return this.pieceList.toString()\n  }\n\n  toJSON() {\n    return this.pieceList.toJSON()\n  }\n\n  toConsole() {\n    return JSON.stringify(this.pieceList.toArray().map((piece) => JSON.parse(piece.toConsole())))\n  }\n\n  // BIDI\n\n  getDirection() {\n    return getDirection(this.toString())\n  }\n\n  isRTL() {\n    return this.getDirection() === \"rtl\"\n  }\n}\n", "import TrixObject from \"trix/core/object\" // Don't override window.Object\nimport Text from \"trix/models/text\"\n\nimport {\n  arraysAreEqual,\n  getBlockConfig,\n  getListAttributeNames,\n  objectsAreEqual,\n  spliceArray,\n} from \"trix/core/helpers\"\n\nexport default class Block extends TrixObject {\n  static fromJSON(blockJSON) {\n    const text = Text.fromJSON(blockJSON.text)\n    return new this(text, blockJSON.attributes, blockJSON.htmlAttributes)\n  }\n\n  constructor(text, attributes, htmlAttributes) {\n    super(...arguments)\n    this.text = applyBlockBreakToText(text || new Text())\n    this.attributes = attributes || []\n    this.htmlAttributes = htmlAttributes || {}\n  }\n\n  isEmpty() {\n    return this.text.isBlockBreak()\n  }\n\n  isEqualTo(block) {\n    if (super.isEqualTo(block)) return true\n\n    return this.text.isEqualTo(block?.text) && arraysAreEqual(this.attributes, block?.attributes) && objectsAreEqual(this.htmlAttributes, block?.htmlAttributes)\n  }\n\n  copyWithText(text) {\n    return new Block(text, this.attributes, this.htmlAttributes)\n  }\n\n  copyWithoutText() {\n    return this.copyWithText(null)\n  }\n\n  copyWithAttributes(attributes) {\n    return new Block(this.text, attributes, this.htmlAttributes)\n  }\n\n  copyWithoutAttributes() {\n    return this.copyWithAttributes(null)\n  }\n\n  copyUsingObjectMap(objectMap) {\n    const mappedText = objectMap.find(this.text)\n    if (mappedText) {\n      return this.copyWithText(mappedText)\n    } else {\n      return this.copyWithText(this.text.copyUsingObjectMap(objectMap))\n    }\n  }\n\n  addAttribute(attribute) {\n    const attributes = this.attributes.concat(expandAttribute(attribute))\n    return this.copyWithAttributes(attributes)\n  }\n\n  addHTMLAttribute(attribute, value) {\n    const htmlAttributes = Object.assign({}, this.htmlAttributes, { [attribute]: value })\n    return new Block(this.text, this.attributes, htmlAttributes)\n  }\n\n  removeAttribute(attribute) {\n    const { listAttribute } = getBlockConfig(attribute)\n    const attributes = removeLastValue(removeLastValue(this.attributes, attribute), listAttribute)\n    return this.copyWithAttributes(attributes)\n  }\n\n  removeLastAttribute() {\n    return this.removeAttribute(this.getLastAttribute())\n  }\n\n  getLastAttribute() {\n    return getLastElement(this.attributes)\n  }\n\n  getAttributes() {\n    return this.attributes.slice(0)\n  }\n\n  getAttributeLevel() {\n    return this.attributes.length\n  }\n\n  getAttributeAtLevel(level) {\n    return this.attributes[level - 1]\n  }\n\n  hasAttribute(attributeName) {\n    return this.attributes.includes(attributeName)\n  }\n\n  hasAttributes() {\n    return this.getAttributeLevel() > 0\n  }\n\n  getLastNestableAttribute() {\n    return getLastElement(this.getNestableAttributes())\n  }\n\n  getNestableAttributes() {\n    return this.attributes.filter((attribute) => getBlockConfig(attribute).nestable)\n  }\n\n  getNestingLevel() {\n    return this.getNestableAttributes().length\n  }\n\n  decreaseNestingLevel() {\n    const attribute = this.getLastNestableAttribute()\n    if (attribute) {\n      return this.removeAttribute(attribute)\n    } else {\n      return this\n    }\n  }\n\n  increaseNestingLevel() {\n    const attribute = this.getLastNestableAttribute()\n    if (attribute) {\n      const index = this.attributes.lastIndexOf(attribute)\n      const attributes = spliceArray(this.attributes, index + 1, 0, ...expandAttribute(attribute))\n      return this.copyWithAttributes(attributes)\n    } else {\n      return this\n    }\n  }\n\n  getListItemAttributes() {\n    return this.attributes.filter((attribute) => getBlockConfig(attribute).listAttribute)\n  }\n\n  isListItem() {\n    return getBlockConfig(this.getLastAttribute())?.listAttribute\n  }\n\n  isTerminalBlock() {\n    return getBlockConfig(this.getLastAttribute())?.terminal\n  }\n\n  breaksOnReturn() {\n    return getBlockConfig(this.getLastAttribute())?.breakOnReturn\n  }\n\n  findLineBreakInDirectionFromPosition(direction, position) {\n    const string = this.toString()\n    let result\n    switch (direction) {\n      case \"forward\":\n        result = string.indexOf(\"\\n\", position)\n        break\n      case \"backward\":\n        result = string.slice(0, position).lastIndexOf(\"\\n\")\n    }\n\n    if (result !== -1) {\n      return result\n    }\n  }\n\n  contentsForInspection() {\n    return {\n      text: this.text.inspect(),\n      attributes: this.attributes,\n    }\n  }\n\n  toString() {\n    return this.text.toString()\n  }\n\n  toJSON() {\n    return {\n      text: this.text,\n      attributes: this.attributes,\n      htmlAttributes: this.htmlAttributes,\n    }\n  }\n\n  // BIDI\n\n  getDirection() {\n    return this.text.getDirection()\n  }\n\n  isRTL() {\n    return this.text.isRTL()\n  }\n\n  // Splittable\n\n  getLength() {\n    return this.text.getLength()\n  }\n\n  canBeConsolidatedWith(block) {\n    return !this.hasAttributes() && !block.hasAttributes() && this.getDirection() === block.getDirection()\n  }\n\n  consolidateWith(block) {\n    const newlineText = Text.textForStringWithAttributes(\"\\n\")\n    const text = this.getTextWithoutBlockBreak().appendText(newlineText)\n    return this.copyWithText(text.appendText(block.text))\n  }\n\n  splitAtOffset(offset) {\n    let left, right\n    if (offset === 0) {\n      left = null\n      right = this\n    } else if (offset === this.getLength()) {\n      left = this\n      right = null\n    } else {\n      left = this.copyWithText(this.text.getTextAtRange([ 0, offset ]))\n      right = this.copyWithText(this.text.getTextAtRange([ offset, this.getLength() ]))\n    }\n    return [ left, right ]\n  }\n\n  getBlockBreakPosition() {\n    return this.text.getLength() - 1\n  }\n\n  getTextWithoutBlockBreak() {\n    if (textEndsInBlockBreak(this.text)) {\n      return this.text.getTextAtRange([ 0, this.getBlockBreakPosition() ])\n    } else {\n      return this.text.copy()\n    }\n  }\n\n  // Grouping\n\n  canBeGrouped(depth) {\n    return this.attributes[depth]\n  }\n\n  canBeGroupedWith(otherBlock, depth) {\n    const otherAttributes = otherBlock.getAttributes()\n    const otherAttribute = otherAttributes[depth]\n    const attribute = this.attributes[depth]\n\n    return (\n      attribute === otherAttribute &&\n      !(getBlockConfig(attribute).group === false && !getListAttributeNames().includes(otherAttributes[depth + 1])) &&\n      (this.getDirection() === otherBlock.getDirection() || otherBlock.isEmpty())\n    )\n  }\n}\n\n// Block breaks\n\nconst applyBlockBreakToText = function(text) {\n  text = unmarkExistingInnerBlockBreaksInText(text)\n  text = addBlockBreakToText(text)\n  return text\n}\n\nconst unmarkExistingInnerBlockBreaksInText = function(text) {\n  let modified = false\n  const pieces = text.getPieces()\n\n  let innerPieces = pieces.slice(0, pieces.length - 1)\n  const lastPiece = pieces[pieces.length - 1]\n\n  if (!lastPiece) return text\n\n  innerPieces = innerPieces.map((piece) => {\n    if (piece.isBlockBreak()) {\n      modified = true\n      return unmarkBlockBreakPiece(piece)\n    } else {\n      return piece\n    }\n  })\n\n  if (modified) {\n    return new Text([ ...innerPieces, lastPiece ])\n  } else {\n    return text\n  }\n}\n\nconst blockBreakText = Text.textForStringWithAttributes(\"\\n\", { blockBreak: true })\n\nconst addBlockBreakToText = function(text) {\n  if (textEndsInBlockBreak(text)) {\n    return text\n  } else {\n    return text.appendText(blockBreakText)\n  }\n}\n\nconst textEndsInBlockBreak = function(text) {\n  const length = text.getLength()\n  if (length === 0) {\n    return false\n  }\n  const endText = text.getTextAtRange([ length - 1, length ])\n  return endText.isBlockBreak()\n}\n\nconst unmarkBlockBreakPiece = (piece) => piece.copyWithoutAttribute(\"blockBreak\")\n\n// Attributes\n\nconst expandAttribute = function(attribute) {\n  const { listAttribute } = getBlockConfig(attribute)\n  if (listAttribute) {\n    return [ listAttribute, attribute ]\n  } else {\n    return [ attribute ]\n  }\n}\n\n// Array helpers\n\nconst getLastElement = (array) => array.slice(-1)[0]\n\nconst removeLastValue = function(array, value) {\n  const index = array.lastIndexOf(value)\n  if (index === -1) {\n    return array\n  } else {\n    return spliceArray(array, index, 1)\n  }\n}\n", "import * as config from \"trix/config\"\nimport TrixObject from \"trix/core/object\" // Don't override window.Object\n\nimport Text from \"trix/models/text\"\nimport Block from \"trix/models/block\"\nimport SplittableList from \"trix/models/splittable_list\"\nimport Hash from \"trix/core/collections/hash\"\nimport ObjectMap from \"trix/core/collections/object_map\"\n\nimport { arraysAreEqual, getBlockConfig, normalizeRange, rangeIsCollapsed } from \"trix/core/helpers\"\n\nexport default class Document extends TrixObject {\n  static fromJSON(documentJSON) {\n    const blocks = Array.from(documentJSON).map((blockJSON) => Block.fromJSON(blockJSON))\n    return new this(blocks)\n  }\n\n  static fromString(string, textAttributes) {\n    const text = Text.textForStringWithAttributes(string, textAttributes)\n    return new this([ new Block(text) ])\n  }\n\n  constructor(blocks = []) {\n    super(...arguments)\n    if (blocks.length === 0) {\n      blocks = [ new Block() ]\n    }\n    this.blockList = SplittableList.box(blocks)\n  }\n\n  isEmpty() {\n    const block = this.getBlockAtIndex(0)\n    return this.blockList.length === 1 && block.isEmpty() && !block.hasAttributes()\n  }\n\n  copy(options = {}) {\n    const blocks = options.consolidateBlocks ? this.blockList.consolidate().toArray() : this.blockList.toArray()\n\n    return new this.constructor(blocks)\n  }\n\n  copyUsingObjectsFromDocument(sourceDocument) {\n    const objectMap = new ObjectMap(sourceDocument.getObjects())\n    return this.copyUsingObjectMap(objectMap)\n  }\n\n  copyUsingObjectMap(objectMap) {\n    const blocks = this.getBlocks().map((block) => {\n      const mappedBlock = objectMap.find(block)\n      return mappedBlock || block.copyUsingObjectMap(objectMap)\n    })\n    return new this.constructor(blocks)\n  }\n\n  copyWithBaseBlockAttributes(blockAttributes = []) {\n    const blocks = this.getBlocks().map((block) => {\n      const attributes = blockAttributes.concat(block.getAttributes())\n      return block.copyWithAttributes(attributes)\n    })\n\n    return new this.constructor(blocks)\n  }\n\n  replaceBlock(oldBlock, newBlock) {\n    const index = this.blockList.indexOf(oldBlock)\n    if (index === -1) {\n      return this\n    }\n    return new this.constructor(this.blockList.replaceObjectAtIndex(newBlock, index))\n  }\n\n  insertDocumentAtRange(document, range) {\n    const { blockList } = document\n    range = normalizeRange(range)\n    let [ position ] = range\n    const { index, offset } = this.locationFromPosition(position)\n\n    let result = this\n    const block = this.getBlockAtPosition(position)\n\n    if (rangeIsCollapsed(range) && block.isEmpty() && !block.hasAttributes()) {\n      result = new this.constructor(result.blockList.removeObjectAtIndex(index))\n    } else if (block.getBlockBreakPosition() === offset) {\n      position++\n    }\n\n    result = result.removeTextAtRange(range)\n    return new this.constructor(result.blockList.insertSplittableListAtPosition(blockList, position))\n  }\n\n  mergeDocumentAtRange(document, range) {\n    let formattedDocument, result\n    range = normalizeRange(range)\n    const [ startPosition ] = range\n    const startLocation = this.locationFromPosition(startPosition)\n    const blockAttributes = this.getBlockAtIndex(startLocation.index).getAttributes()\n    const baseBlockAttributes = document.getBaseBlockAttributes()\n    const trailingBlockAttributes = blockAttributes.slice(-baseBlockAttributes.length)\n\n    if (arraysAreEqual(baseBlockAttributes, trailingBlockAttributes)) {\n      const leadingBlockAttributes = blockAttributes.slice(0, -baseBlockAttributes.length)\n      formattedDocument = document.copyWithBaseBlockAttributes(leadingBlockAttributes)\n    } else {\n      formattedDocument = document.copy({ consolidateBlocks: true }).copyWithBaseBlockAttributes(blockAttributes)\n    }\n\n    const blockCount = formattedDocument.getBlockCount()\n    const firstBlock = formattedDocument.getBlockAtIndex(0)\n\n    if (arraysAreEqual(blockAttributes, firstBlock.getAttributes())) {\n      const firstText = firstBlock.getTextWithoutBlockBreak()\n      result = this.insertTextAtRange(firstText, range)\n\n      if (blockCount > 1) {\n        formattedDocument = new this.constructor(formattedDocument.getBlocks().slice(1))\n        const position = startPosition + firstText.getLength()\n        result = result.insertDocumentAtRange(formattedDocument, position)\n      }\n    } else {\n      result = this.insertDocumentAtRange(formattedDocument, range)\n    }\n\n    return result\n  }\n\n  insertTextAtRange(text, range) {\n    range = normalizeRange(range)\n    const [ startPosition ] = range\n    const { index, offset } = this.locationFromPosition(startPosition)\n\n    const document = this.removeTextAtRange(range)\n    return new this.constructor(\n      document.blockList.editObjectAtIndex(index, (block) =>\n        block.copyWithText(block.text.insertTextAtPosition(text, offset))\n      )\n    )\n  }\n\n  removeTextAtRange(range) {\n    let blocks\n    range = normalizeRange(range)\n    const [ leftPosition, rightPosition ] = range\n    if (rangeIsCollapsed(range)) {\n      return this\n    }\n    const [ leftLocation, rightLocation ] = Array.from(this.locationRangeFromRange(range))\n\n    const leftIndex = leftLocation.index\n    const leftOffset = leftLocation.offset\n    const leftBlock = this.getBlockAtIndex(leftIndex)\n\n    const rightIndex = rightLocation.index\n    const rightOffset = rightLocation.offset\n    const rightBlock = this.getBlockAtIndex(rightIndex)\n\n    const removeRightNewline =\n      rightPosition - leftPosition === 1 &&\n      leftBlock.getBlockBreakPosition() === leftOffset &&\n      rightBlock.getBlockBreakPosition() !== rightOffset &&\n      rightBlock.text.getStringAtPosition(rightOffset) === \"\\n\"\n\n    if (removeRightNewline) {\n      blocks = this.blockList.editObjectAtIndex(rightIndex, (block) =>\n        block.copyWithText(block.text.removeTextAtRange([ rightOffset, rightOffset + 1 ]))\n      )\n    } else {\n      let block\n      const leftText = leftBlock.text.getTextAtRange([ 0, leftOffset ])\n      const rightText = rightBlock.text.getTextAtRange([ rightOffset, rightBlock.getLength() ])\n      const text = leftText.appendText(rightText)\n\n      const removingLeftBlock = leftIndex !== rightIndex && leftOffset === 0\n      const useRightBlock = removingLeftBlock && leftBlock.getAttributeLevel() >= rightBlock.getAttributeLevel()\n\n      if (useRightBlock) {\n        block = rightBlock.copyWithText(text)\n      } else {\n        block = leftBlock.copyWithText(text)\n      }\n\n      const affectedBlockCount = rightIndex + 1 - leftIndex\n      blocks = this.blockList.splice(leftIndex, affectedBlockCount, block)\n    }\n\n    return new this.constructor(blocks)\n  }\n\n  moveTextFromRangeToPosition(range, position) {\n    let text\n    range = normalizeRange(range)\n    const [ startPosition, endPosition ] = range\n    if (startPosition <= position && position <= endPosition) {\n      return this\n    }\n\n    let document = this.getDocumentAtRange(range)\n    let result = this.removeTextAtRange(range)\n\n    const movingRightward = startPosition < position\n    if (movingRightward) {\n      position -= document.getLength()\n    }\n\n    const [ firstBlock, ...blocks ] = document.getBlocks()\n    if (blocks.length === 0) {\n      text = firstBlock.getTextWithoutBlockBreak()\n      if (movingRightward) {\n        position += 1\n      }\n    } else {\n      text = firstBlock.text\n    }\n\n    result = result.insertTextAtRange(text, position)\n    if (blocks.length === 0) {\n      return result\n    }\n\n    document = new this.constructor(blocks)\n    position += text.getLength()\n\n    return result.insertDocumentAtRange(document, position)\n  }\n\n  addAttributeAtRange(attribute, value, range) {\n    let { blockList } = this\n    this.eachBlockAtRange(\n      range,\n      (block, textRange, index) =>\n        blockList = blockList.editObjectAtIndex(index, function() {\n          if (getBlockConfig(attribute)) {\n            return block.addAttribute(attribute, value)\n          } else {\n            if (textRange[0] === textRange[1]) {\n              return block\n            } else {\n              return block.copyWithText(block.text.addAttributeAtRange(attribute, value, textRange))\n            }\n          }\n        })\n    )\n    return new this.constructor(blockList)\n  }\n\n  addAttribute(attribute, value) {\n    let { blockList } = this\n    this.eachBlock(\n      (block, index) => blockList = blockList.editObjectAtIndex(index, () => block.addAttribute(attribute, value))\n    )\n    return new this.constructor(blockList)\n  }\n\n  removeAttributeAtRange(attribute, range) {\n    let { blockList } = this\n    this.eachBlockAtRange(range, function(block, textRange, index) {\n      if (getBlockConfig(attribute)) {\n        blockList = blockList.editObjectAtIndex(index, () => block.removeAttribute(attribute))\n      } else if (textRange[0] !== textRange[1]) {\n        blockList = blockList.editObjectAtIndex(index, () =>\n          block.copyWithText(block.text.removeAttributeAtRange(attribute, textRange))\n        )\n      }\n    })\n    return new this.constructor(blockList)\n  }\n\n  updateAttributesForAttachment(attributes, attachment) {\n    const range = this.getRangeOfAttachment(attachment)\n    const [ startPosition ] = Array.from(range)\n    const { index } = this.locationFromPosition(startPosition)\n    const text = this.getTextAtIndex(index)\n\n    return new this.constructor(\n      this.blockList.editObjectAtIndex(index, (block) =>\n        block.copyWithText(text.updateAttributesForAttachment(attributes, attachment))\n      )\n    )\n  }\n\n  removeAttributeForAttachment(attribute, attachment) {\n    const range = this.getRangeOfAttachment(attachment)\n    return this.removeAttributeAtRange(attribute, range)\n  }\n\n  setHTMLAttributeAtPosition(position, name, value) {\n    const block = this.getBlockAtPosition(position)\n    const updatedBlock = block.addHTMLAttribute(name, value)\n    return this.replaceBlock(block, updatedBlock)\n  }\n\n  insertBlockBreakAtRange(range) {\n    let blocks\n    range = normalizeRange(range)\n    const [ startPosition ] = range\n    const { offset } = this.locationFromPosition(startPosition)\n\n    const document = this.removeTextAtRange(range)\n    if (offset === 0) {\n      blocks = [ new Block() ]\n    }\n    return new this.constructor(\n      document.blockList.insertSplittableListAtPosition(new SplittableList(blocks), startPosition)\n    )\n  }\n\n  applyBlockAttributeAtRange(attributeName, value, range) {\n    const expanded = this.expandRangeToLineBreaksAndSplitBlocks(range)\n    let document = expanded.document\n    range = expanded.range\n    const blockConfig = getBlockConfig(attributeName)\n\n    if (blockConfig.listAttribute) {\n      document = document.removeLastListAttributeAtRange(range, { exceptAttributeName: attributeName })\n      const converted = document.convertLineBreaksToBlockBreaksInRange(range)\n      document = converted.document\n      range = converted.range\n    } else if (blockConfig.exclusive) {\n      document = document.removeBlockAttributesAtRange(range)\n    } else if (blockConfig.terminal) {\n      document = document.removeLastTerminalAttributeAtRange(range)\n    } else {\n      document = document.consolidateBlocksAtRange(range)\n    }\n\n    return document.addAttributeAtRange(attributeName, value, range)\n  }\n\n  removeLastListAttributeAtRange(range, options = {}) {\n    let { blockList } = this\n    this.eachBlockAtRange(range, function(block, textRange, index) {\n      const lastAttributeName = block.getLastAttribute()\n      if (!lastAttributeName) {\n        return\n      }\n      if (!getBlockConfig(lastAttributeName).listAttribute) {\n        return\n      }\n      if (lastAttributeName === options.exceptAttributeName) {\n        return\n      }\n      blockList = blockList.editObjectAtIndex(index, () => block.removeAttribute(lastAttributeName))\n    })\n    return new this.constructor(blockList)\n  }\n\n  removeLastTerminalAttributeAtRange(range) {\n    let { blockList } = this\n    this.eachBlockAtRange(range, function(block, textRange, index) {\n      const lastAttributeName = block.getLastAttribute()\n      if (!lastAttributeName) {\n        return\n      }\n      if (!getBlockConfig(lastAttributeName).terminal) {\n        return\n      }\n      blockList = blockList.editObjectAtIndex(index, () => block.removeAttribute(lastAttributeName))\n    })\n    return new this.constructor(blockList)\n  }\n\n  removeBlockAttributesAtRange(range) {\n    let { blockList } = this\n    this.eachBlockAtRange(range, function(block, textRange, index) {\n      if (block.hasAttributes()) {\n        blockList = blockList.editObjectAtIndex(index, () => block.copyWithoutAttributes())\n      }\n    })\n    return new this.constructor(blockList)\n  }\n\n  expandRangeToLineBreaksAndSplitBlocks(range) {\n    let position\n    range = normalizeRange(range)\n    let [ startPosition, endPosition ] = range\n    const startLocation = this.locationFromPosition(startPosition)\n    const endLocation = this.locationFromPosition(endPosition)\n    let document = this\n\n    const startBlock = document.getBlockAtIndex(startLocation.index)\n    startLocation.offset = startBlock.findLineBreakInDirectionFromPosition(\"backward\", startLocation.offset)\n    if (startLocation.offset != null) {\n      position = document.positionFromLocation(startLocation)\n      document = document.insertBlockBreakAtRange([ position, position + 1 ])\n      endLocation.index += 1\n      endLocation.offset -= document.getBlockAtIndex(startLocation.index).getLength()\n      startLocation.index += 1\n    }\n    startLocation.offset = 0\n\n    if (endLocation.offset === 0 && endLocation.index > startLocation.index) {\n      endLocation.index -= 1\n      endLocation.offset = document.getBlockAtIndex(endLocation.index).getBlockBreakPosition()\n    } else {\n      const endBlock = document.getBlockAtIndex(endLocation.index)\n      if (endBlock.text.getStringAtRange([ endLocation.offset - 1, endLocation.offset ]) === \"\\n\") {\n        endLocation.offset -= 1\n      } else {\n        endLocation.offset = endBlock.findLineBreakInDirectionFromPosition(\"forward\", endLocation.offset)\n      }\n      if (endLocation.offset !== endBlock.getBlockBreakPosition()) {\n        position = document.positionFromLocation(endLocation)\n        document = document.insertBlockBreakAtRange([ position, position + 1 ])\n      }\n    }\n\n    startPosition = document.positionFromLocation(startLocation)\n    endPosition = document.positionFromLocation(endLocation)\n    range = normalizeRange([ startPosition, endPosition ])\n\n    return { document, range }\n  }\n\n  convertLineBreaksToBlockBreaksInRange(range) {\n    range = normalizeRange(range)\n    let [ position ] = range\n    const string = this.getStringAtRange(range).slice(0, -1)\n    let document = this\n\n    string.replace(/.*?\\n/g, function(match) {\n      position += match.length\n      document = document.insertBlockBreakAtRange([ position - 1, position ])\n    })\n\n    return { document, range }\n  }\n\n  consolidateBlocksAtRange(range) {\n    range = normalizeRange(range)\n    const [ startPosition, endPosition ] = range\n    const startIndex = this.locationFromPosition(startPosition).index\n    const endIndex = this.locationFromPosition(endPosition).index\n    return new this.constructor(this.blockList.consolidateFromIndexToIndex(startIndex, endIndex))\n  }\n\n  getDocumentAtRange(range) {\n    range = normalizeRange(range)\n    const blocks = this.blockList.getSplittableListInRange(range).toArray()\n    return new this.constructor(blocks)\n  }\n\n  getStringAtRange(range) {\n    let endIndex\n    const array = range = normalizeRange(range),\n      endPosition = array[array.length - 1]\n    if (endPosition !== this.getLength()) {\n      endIndex = -1\n    }\n    return this.getDocumentAtRange(range).toString().slice(0, endIndex)\n  }\n\n  getBlockAtIndex(index) {\n    return this.blockList.getObjectAtIndex(index)\n  }\n\n  getBlockAtPosition(position) {\n    const { index } = this.locationFromPosition(position)\n    return this.getBlockAtIndex(index)\n  }\n\n  getTextAtIndex(index) {\n    return this.getBlockAtIndex(index)?.text\n  }\n\n  getTextAtPosition(position) {\n    const { index } = this.locationFromPosition(position)\n    return this.getTextAtIndex(index)\n  }\n\n  getPieceAtPosition(position) {\n    const { index, offset } = this.locationFromPosition(position)\n    return this.getTextAtIndex(index).getPieceAtPosition(offset)\n  }\n\n  getCharacterAtPosition(position) {\n    const { index, offset } = this.locationFromPosition(position)\n    return this.getTextAtIndex(index).getStringAtRange([ offset, offset + 1 ])\n  }\n\n  getLength() {\n    return this.blockList.getEndPosition()\n  }\n\n  getBlocks() {\n    return this.blockList.toArray()\n  }\n\n  getBlockCount() {\n    return this.blockList.length\n  }\n\n  getEditCount() {\n    return this.editCount\n  }\n\n  eachBlock(callback) {\n    return this.blockList.eachObject(callback)\n  }\n\n  eachBlockAtRange(range, callback) {\n    let block, textRange\n    range = normalizeRange(range)\n    const [ startPosition, endPosition ] = range\n    const startLocation = this.locationFromPosition(startPosition)\n    const endLocation = this.locationFromPosition(endPosition)\n\n    if (startLocation.index === endLocation.index) {\n      block = this.getBlockAtIndex(startLocation.index)\n      textRange = [ startLocation.offset, endLocation.offset ]\n      return callback(block, textRange, startLocation.index)\n    } else {\n      for (let index = startLocation.index; index <= endLocation.index; index++) {\n        block = this.getBlockAtIndex(index)\n        if (block) {\n          switch (index) {\n            case startLocation.index:\n              textRange = [ startLocation.offset, block.text.getLength() ]\n              break\n            case endLocation.index:\n              textRange = [ 0, endLocation.offset ]\n              break\n            default:\n              textRange = [ 0, block.text.getLength() ]\n          }\n          callback(block, textRange, index)\n        }\n      }\n    }\n  }\n\n  getCommonAttributesAtRange(range) {\n    range = normalizeRange(range)\n    const [ startPosition ] = range\n    if (rangeIsCollapsed(range)) {\n      return this.getCommonAttributesAtPosition(startPosition)\n    } else {\n      const textAttributes = []\n      const blockAttributes = []\n\n      this.eachBlockAtRange(range, function(block, textRange) {\n        if (textRange[0] !== textRange[1]) {\n          textAttributes.push(block.text.getCommonAttributesAtRange(textRange))\n          return blockAttributes.push(attributesForBlock(block))\n        }\n      })\n\n      return Hash.fromCommonAttributesOfObjects(textAttributes)\n        .merge(Hash.fromCommonAttributesOfObjects(blockAttributes))\n        .toObject()\n    }\n  }\n\n  getCommonAttributesAtPosition(position) {\n    let key, value\n    const { index, offset } = this.locationFromPosition(position)\n    const block = this.getBlockAtIndex(index)\n    if (!block) {\n      return {}\n    }\n\n    const commonAttributes = attributesForBlock(block)\n    const attributes = block.text.getAttributesAtPosition(offset)\n    const attributesLeft = block.text.getAttributesAtPosition(offset - 1)\n    const inheritableAttributes = Object.keys(config.textAttributes).filter((key) => {\n      return config.textAttributes[key].inheritable\n    })\n\n    for (key in attributesLeft) {\n      value = attributesLeft[key]\n      if (value === attributes[key] || inheritableAttributes.includes(key)) {\n        commonAttributes[key] = value\n      }\n    }\n\n    return commonAttributes\n  }\n\n  getRangeOfCommonAttributeAtPosition(attributeName, position) {\n    const { index, offset } = this.locationFromPosition(position)\n    const text = this.getTextAtIndex(index)\n    const [ startOffset, endOffset ] = Array.from(text.getExpandedRangeForAttributeAtOffset(attributeName, offset))\n\n    const start = this.positionFromLocation({ index, offset: startOffset })\n    const end = this.positionFromLocation({ index, offset: endOffset })\n    return normalizeRange([ start, end ])\n  }\n\n  getBaseBlockAttributes() {\n    let baseBlockAttributes = this.getBlockAtIndex(0).getAttributes()\n\n    for (let blockIndex = 1; blockIndex < this.getBlockCount(); blockIndex++) {\n      const blockAttributes = this.getBlockAtIndex(blockIndex).getAttributes()\n      const lastAttributeIndex = Math.min(baseBlockAttributes.length, blockAttributes.length)\n\n      baseBlockAttributes = (() => {\n        const result = []\n        for (let index = 0; index < lastAttributeIndex; index++) {\n          if (blockAttributes[index] !== baseBlockAttributes[index]) {\n            break\n          }\n          result.push(blockAttributes[index])\n        }\n        return result\n      })()\n    }\n\n    return baseBlockAttributes\n  }\n\n  getAttachmentById(attachmentId) {\n    for (const attachment of this.getAttachments()) {\n      if (attachment.id === attachmentId) {\n        return attachment\n      }\n    }\n  }\n\n  getAttachmentPieces() {\n    let attachmentPieces = []\n    this.blockList.eachObject(({ text }) => attachmentPieces = attachmentPieces.concat(text.getAttachmentPieces()))\n    return attachmentPieces\n  }\n\n  getAttachments() {\n    return this.getAttachmentPieces().map((piece) => piece.attachment)\n  }\n\n  getRangeOfAttachment(attachment) {\n    let position = 0\n    const iterable = this.blockList.toArray()\n    for (let index = 0; index < iterable.length; index++) {\n      const { text } = iterable[index]\n      const textRange = text.getRangeOfAttachment(attachment)\n      if (textRange) {\n        return normalizeRange([ position + textRange[0], position + textRange[1] ])\n      }\n      position += text.getLength()\n    }\n  }\n\n  getLocationRangeOfAttachment(attachment) {\n    const range = this.getRangeOfAttachment(attachment)\n    return this.locationRangeFromRange(range)\n  }\n\n  getAttachmentPieceForAttachment(attachment) {\n    for (const piece of this.getAttachmentPieces()) {\n      if (piece.attachment === attachment) {\n        return piece\n      }\n    }\n  }\n\n  findRangesForBlockAttribute(attributeName) {\n    let position = 0\n    const ranges = []\n\n    this.getBlocks().forEach((block) => {\n      const length = block.getLength()\n      if (block.hasAttribute(attributeName)) {\n        ranges.push([ position, position + length ])\n      }\n      position += length\n    })\n\n    return ranges\n  }\n\n  findRangesForTextAttribute(attributeName, { withValue } = {}) {\n    let position = 0\n    let range = []\n    const ranges = []\n\n    const match = function(piece) {\n      if (withValue) {\n        return piece.getAttribute(attributeName) === withValue\n      } else {\n        return piece.hasAttribute(attributeName)\n      }\n    }\n\n    this.getPieces().forEach((piece) => {\n      const length = piece.getLength()\n      if (match(piece)) {\n        if (range[1] === position) {\n          range[1] = position + length\n        } else {\n          ranges.push(range = [ position, position + length ])\n        }\n      }\n      position += length\n    })\n\n    return ranges\n  }\n\n  locationFromPosition(position) {\n    const location = this.blockList.findIndexAndOffsetAtPosition(Math.max(0, position))\n    if (location.index != null) {\n      return location\n    } else {\n      const blocks = this.getBlocks()\n      return { index: blocks.length - 1, offset: blocks[blocks.length - 1].getLength() }\n    }\n  }\n\n  positionFromLocation(location) {\n    return this.blockList.findPositionAtIndexAndOffset(location.index, location.offset)\n  }\n\n  locationRangeFromPosition(position) {\n    return normalizeRange(this.locationFromPosition(position))\n  }\n\n  locationRangeFromRange(range) {\n    range = normalizeRange(range)\n    if (!range) return\n\n    const [ startPosition, endPosition ] = Array.from(range)\n    const startLocation = this.locationFromPosition(startPosition)\n    const endLocation = this.locationFromPosition(endPosition)\n    return normalizeRange([ startLocation, endLocation ])\n  }\n\n  rangeFromLocationRange(locationRange) {\n    let rightPosition\n    locationRange = normalizeRange(locationRange)\n    const leftPosition = this.positionFromLocation(locationRange[0])\n    if (!rangeIsCollapsed(locationRange)) {\n      rightPosition = this.positionFromLocation(locationRange[1])\n    }\n    return normalizeRange([ leftPosition, rightPosition ])\n  }\n\n  isEqualTo(document) {\n    return this.blockList.isEqualTo(document?.blockList)\n  }\n\n  getTexts() {\n    return this.getBlocks().map((block) => block.text)\n  }\n\n  getPieces() {\n    const pieces = []\n\n    Array.from(this.getTexts()).forEach((text) => {\n      pieces.push(...Array.from(text.getPieces() || []))\n    })\n\n    return pieces\n  }\n\n  getObjects() {\n    return this.getBlocks().concat(this.getTexts()).concat(this.getPieces())\n  }\n\n  toSerializableDocument() {\n    const blocks = []\n    this.blockList.eachObject((block) => blocks.push(block.copyWithText(block.text.toSerializableText())))\n    return new this.constructor(blocks)\n  }\n\n  toString() {\n    return this.blockList.toString()\n  }\n\n  toJSON() {\n    return this.blockList.toJSON()\n  }\n\n  toConsole() {\n    return JSON.stringify(this.blockList.toArray().map((block) => JSON.parse(block.text.toConsole())))\n  }\n}\n\nconst attributesForBlock = function(block) {\n  const attributes = {}\n  const attributeName = block.getLastAttribute()\n  if (attributeName) {\n    attributes[attributeName] = true\n  }\n  return attributes\n}\n", "/* eslint-disable\n    no-case-declarations,\n    no-irregular-whitespace,\n*/\nimport * as config from \"trix/config\"\nimport BasicObject from \"trix/core/basic_object\"\nimport Document from \"trix/models/document\"\nimport HTMLSanitizer from \"trix/models/html_sanitizer\"\n\nimport {\n  arraysAreEqual,\n  breakableWhitespacePattern,\n  elementContainsNode,\n  findClosestElementFromNode,\n  getBlockTagNames,\n  makeElement,\n  nodeIsAttachmentElement,\n  normalizeSpaces,\n  removeNode,\n  squishBreakableWhitespace,\n  tagName,\n  walkTree,\n} from \"trix/core/helpers\"\n\nconst pieceForString = (string, attributes = {}) => {\n  const type = \"string\"\n  string = normalizeSpaces(string)\n  return { string, attributes, type }\n}\n\nconst pieceForAttachment = (attachment, attributes = {}) => {\n  const type = \"attachment\"\n  return { attachment, attributes, type }\n}\n\nconst blockForAttributes = (attributes = {}, htmlAttributes = {}) => {\n  const text = []\n  return { text, attributes, htmlAttributes }\n}\n\nconst parseTrixDataAttribute = (element, name) => {\n  try {\n    return JSON.parse(element.getAttribute(`data-trix-${name}`))\n  } catch (error) {\n    return {}\n  }\n}\n\nconst getImageDimensions = (element) => {\n  const width = element.getAttribute(\"width\")\n  const height = element.getAttribute(\"height\")\n  const dimensions = {}\n  if (width) {\n    dimensions.width = parseInt(width, 10)\n  }\n  if (height) {\n    dimensions.height = parseInt(height, 10)\n  }\n  return dimensions\n}\n\nexport default class HTMLParser extends BasicObject {\n  static parse(html, options) {\n    const parser = new this(html, options)\n    parser.parse()\n    return parser\n  }\n\n  constructor(html, { referenceElement } = {}) {\n    super(...arguments)\n    this.html = html\n    this.referenceElement = referenceElement\n    this.blocks = []\n    this.blockElements = []\n    this.processedElements = []\n  }\n\n  getDocument() {\n    return Document.fromJSON(this.blocks)\n  }\n\n  // HTML parsing\n\n  parse() {\n    try {\n      this.createHiddenContainer()\n      HTMLSanitizer.setHTML(this.containerElement, this.html)\n      const walker = walkTree(this.containerElement, { usingFilter: nodeFilter })\n      while (walker.nextNode()) {\n        this.processNode(walker.currentNode)\n      }\n      return this.translateBlockElementMarginsToNewlines()\n    } finally {\n      this.removeHiddenContainer()\n    }\n  }\n\n  createHiddenContainer() {\n    if (this.referenceElement) {\n      this.containerElement = this.referenceElement.cloneNode(false)\n      this.containerElement.removeAttribute(\"id\")\n      this.containerElement.setAttribute(\"data-trix-internal\", \"\")\n      this.containerElement.style.display = \"none\"\n      return this.referenceElement.parentNode.insertBefore(this.containerElement, this.referenceElement.nextSibling)\n    } else {\n      this.containerElement = makeElement({ tagName: \"div\", style: { display: \"none\" } })\n      return document.body.appendChild(this.containerElement)\n    }\n  }\n\n  removeHiddenContainer() {\n    return removeNode(this.containerElement)\n  }\n\n  processNode(node) {\n    switch (node.nodeType) {\n      case Node.TEXT_NODE:\n        if (!this.isInsignificantTextNode(node)) {\n          this.appendBlockForTextNode(node)\n          return this.processTextNode(node)\n        }\n        break\n      case Node.ELEMENT_NODE:\n        this.appendBlockForElement(node)\n        return this.processElement(node)\n    }\n  }\n\n  appendBlockForTextNode(node) {\n    const element = node.parentNode\n    if (element === this.currentBlockElement && this.isBlockElement(node.previousSibling)) {\n      return this.appendStringWithAttributes(\"\\n\")\n    } else if (element === this.containerElement || this.isBlockElement(element)) {\n      const attributes = this.getBlockAttributes(element)\n      const htmlAttributes = this.getBlockHTMLAttributes(element)\n      if (!arraysAreEqual(attributes, this.currentBlock?.attributes)) {\n        this.currentBlock = this.appendBlockForAttributesWithElement(attributes, element, htmlAttributes)\n        this.currentBlockElement = element\n      }\n    }\n  }\n\n  appendBlockForElement(element) {\n    const elementIsBlockElement = this.isBlockElement(element)\n    const currentBlockContainsElement = elementContainsNode(this.currentBlockElement, element)\n\n    if (elementIsBlockElement && !this.isBlockElement(element.firstChild)) {\n      if (!this.isInsignificantTextNode(element.firstChild) || !this.isBlockElement(element.firstElementChild)) {\n        const attributes = this.getBlockAttributes(element)\n        const htmlAttributes = this.getBlockHTMLAttributes(element)\n        if (element.firstChild) {\n          if (!(currentBlockContainsElement && arraysAreEqual(attributes, this.currentBlock.attributes))) {\n            this.currentBlock = this.appendBlockForAttributesWithElement(attributes, element, htmlAttributes)\n            this.currentBlockElement = element\n          } else {\n            return this.appendStringWithAttributes(\"\\n\")\n          }\n        }\n      }\n    } else if (this.currentBlockElement && !currentBlockContainsElement && !elementIsBlockElement) {\n      const parentBlockElement = this.findParentBlockElement(element)\n      if (parentBlockElement) {\n        return this.appendBlockForElement(parentBlockElement)\n      } else {\n        this.currentBlock = this.appendEmptyBlock()\n        this.currentBlockElement = null\n      }\n    }\n  }\n\n  findParentBlockElement(element) {\n    let { parentElement } = element\n    while (parentElement && parentElement !== this.containerElement) {\n      if (this.isBlockElement(parentElement) && this.blockElements.includes(parentElement)) {\n        return parentElement\n      } else {\n        parentElement = parentElement.parentElement\n      }\n    }\n    return null\n  }\n\n  processTextNode(node) {\n    let string = node.data\n    if (!elementCanDisplayPreformattedText(node.parentNode)) {\n      string = squishBreakableWhitespace(string)\n      if (stringEndsWithWhitespace(node.previousSibling?.textContent)) {\n        string = leftTrimBreakableWhitespace(string)\n      }\n    }\n    return this.appendStringWithAttributes(string, this.getTextAttributes(node.parentNode))\n  }\n\n  processElement(element) {\n    let attributes\n    if (nodeIsAttachmentElement(element)) {\n      attributes = parseTrixDataAttribute(element, \"attachment\")\n      if (Object.keys(attributes).length) {\n        const textAttributes = this.getTextAttributes(element)\n        this.appendAttachmentWithAttributes(attributes, textAttributes)\n        // We have everything we need so avoid processing inner nodes\n        element.innerHTML = \"\"\n      }\n      return this.processedElements.push(element)\n    } else {\n      switch (tagName(element)) {\n        case \"br\":\n          if (!this.isExtraBR(element) && !this.isBlockElement(element.nextSibling)) {\n            this.appendStringWithAttributes(\"\\n\", this.getTextAttributes(element))\n          }\n          return this.processedElements.push(element)\n        case \"img\":\n          attributes = { url: element.getAttribute(\"src\"), contentType: \"image\" }\n          const object = getImageDimensions(element)\n          for (const key in object) {\n            const value = object[key]\n            attributes[key] = value\n          }\n          this.appendAttachmentWithAttributes(attributes, this.getTextAttributes(element))\n          return this.processedElements.push(element)\n        case \"tr\":\n          if (this.needsTableSeparator(element)) {\n            return this.appendStringWithAttributes(config.parser.tableRowSeparator)\n          }\n          break\n        case \"td\":\n          if (this.needsTableSeparator(element)) {\n            return this.appendStringWithAttributes(config.parser.tableCellSeparator)\n          }\n          break\n      }\n    }\n  }\n\n  // Document construction\n\n  appendBlockForAttributesWithElement(attributes, element, htmlAttributes = {}) {\n    this.blockElements.push(element)\n    const block = blockForAttributes(attributes, htmlAttributes)\n    this.blocks.push(block)\n    return block\n  }\n\n  appendEmptyBlock() {\n    return this.appendBlockForAttributesWithElement([], null)\n  }\n\n  appendStringWithAttributes(string, attributes) {\n    return this.appendPiece(pieceForString(string, attributes))\n  }\n\n  appendAttachmentWithAttributes(attachment, attributes) {\n    return this.appendPiece(pieceForAttachment(attachment, attributes))\n  }\n\n  appendPiece(piece) {\n    if (this.blocks.length === 0) {\n      this.appendEmptyBlock()\n    }\n    return this.blocks[this.blocks.length - 1].text.push(piece)\n  }\n\n  appendStringToTextAtIndex(string, index) {\n    const { text } = this.blocks[index]\n    const piece = text[text.length - 1]\n\n    if (piece?.type === \"string\") {\n      piece.string += string\n    } else {\n      return text.push(pieceForString(string))\n    }\n  }\n\n  prependStringToTextAtIndex(string, index) {\n    const { text } = this.blocks[index]\n    const piece = text[0]\n\n    if (piece?.type === \"string\") {\n      piece.string = string + piece.string\n    } else {\n      return text.unshift(pieceForString(string))\n    }\n  }\n\n  // Attribute parsing\n\n  getTextAttributes(element) {\n    let value\n    const attributes = {}\n    for (const attribute in config.textAttributes) {\n      const configAttr = config.textAttributes[attribute]\n      if (\n        configAttr.tagName &&\n        findClosestElementFromNode(element, {\n          matchingSelector: configAttr.tagName,\n          untilNode: this.containerElement,\n        })\n      ) {\n        attributes[attribute] = true\n      } else if (configAttr.parser) {\n        value = configAttr.parser(element)\n        if (value) {\n          let attributeInheritedFromBlock = false\n          for (const blockElement of this.findBlockElementAncestors(element)) {\n            if (configAttr.parser(blockElement) === value) {\n              attributeInheritedFromBlock = true\n              break\n            }\n          }\n          if (!attributeInheritedFromBlock) {\n            attributes[attribute] = value\n          }\n        }\n      } else if (configAttr.styleProperty) {\n        value = element.style[configAttr.styleProperty]\n        if (value) {\n          attributes[attribute] = value\n        }\n      }\n    }\n\n    if (nodeIsAttachmentElement(element)) {\n      const object = parseTrixDataAttribute(element, \"attributes\")\n      for (const key in object) {\n        value = object[key]\n        attributes[key] = value\n      }\n    }\n\n    return attributes\n  }\n\n  getBlockAttributes(element) {\n    const attributes = []\n    while (element && element !== this.containerElement) {\n      for (const attribute in config.blockAttributes) {\n        const attrConfig = config.blockAttributes[attribute]\n        if (attrConfig.parse !== false) {\n          if (tagName(element) === attrConfig.tagName) {\n            if (attrConfig.test?.(element) || !attrConfig.test) {\n              attributes.push(attribute)\n              if (attrConfig.listAttribute) {\n                attributes.push(attrConfig.listAttribute)\n              }\n            }\n          }\n        }\n      }\n      element = element.parentNode\n    }\n    return attributes.reverse()\n  }\n\n  getBlockHTMLAttributes(element) {\n    const attributes = {}\n    const blockConfig = Object.values(config.blockAttributes).find(settings => settings.tagName === tagName(element))\n    const allowedAttributes = blockConfig?.htmlAttributes || []\n\n    allowedAttributes.forEach((attribute) => {\n      if (element.hasAttribute(attribute)) {\n        attributes[attribute] = element.getAttribute(attribute)\n      }\n    })\n\n    return attributes\n  }\n\n  findBlockElementAncestors(element) {\n    const ancestors = []\n    while (element && element !== this.containerElement) {\n      const tag = tagName(element)\n      if (getBlockTagNames().includes(tag)) {\n        ancestors.push(element)\n      }\n      element = element.parentNode\n    }\n    return ancestors\n  }\n\n  // Element inspection\n\n  isBlockElement(element) {\n    if (element?.nodeType !== Node.ELEMENT_NODE) return\n    if (nodeIsAttachmentElement(element)) return\n    if (findClosestElementFromNode(element, { matchingSelector: \"td\", untilNode: this.containerElement })) return\n\n    return getBlockTagNames().includes(tagName(element)) ||\n      window.getComputedStyle(element).display === \"block\"\n  }\n\n  isInsignificantTextNode(node) {\n    if (node?.nodeType !== Node.TEXT_NODE) return\n    if (!stringIsAllBreakableWhitespace(node.data)) return\n    const { parentNode, previousSibling, nextSibling } = node\n    if (nodeEndsWithNonWhitespace(parentNode.previousSibling) && !this.isBlockElement(parentNode.previousSibling)) return\n    if (elementCanDisplayPreformattedText(parentNode)) return\n    return !previousSibling || this.isBlockElement(previousSibling) || !nextSibling || this.isBlockElement(nextSibling)\n  }\n\n  isExtraBR(element) {\n    return tagName(element) === \"br\" && this.isBlockElement(element.parentNode) && element.parentNode.lastChild === element\n  }\n\n  needsTableSeparator(element) {\n    if (config.parser.removeBlankTableCells) {\n      const content = element.previousSibling?.textContent\n      return content && /\\S/.test(content)\n    } else {\n      return element.previousSibling\n    }\n  }\n\n  // Margin translation\n\n  translateBlockElementMarginsToNewlines() {\n    const defaultMargin = this.getMarginOfDefaultBlockElement()\n\n    for (let index = 0; index < this.blocks.length; index++) {\n      const margin = this.getMarginOfBlockElementAtIndex(index)\n      if (margin) {\n        if (margin.top > defaultMargin.top * 2) {\n          this.prependStringToTextAtIndex(\"\\n\", index)\n        }\n\n        if (margin.bottom > defaultMargin.bottom * 2) {\n          this.appendStringToTextAtIndex(\"\\n\", index)\n        }\n      }\n    }\n  }\n\n  getMarginOfBlockElementAtIndex(index) {\n    const element = this.blockElements[index]\n    if (element) {\n      if (element.textContent) {\n        if (!getBlockTagNames().includes(tagName(element)) && !this.processedElements.includes(element)) {\n          return getBlockElementMargin(element)\n        }\n      }\n    }\n  }\n\n  getMarginOfDefaultBlockElement() {\n    const element = makeElement(config.blockAttributes.default.tagName)\n    this.containerElement.appendChild(element)\n    return getBlockElementMargin(element)\n  }\n}\n\n// Helpers\n\nconst elementCanDisplayPreformattedText = function(element) {\n  const { whiteSpace } = window.getComputedStyle(element)\n  return [ \"pre\", \"pre-wrap\", \"pre-line\" ].includes(whiteSpace)\n}\n\nconst nodeEndsWithNonWhitespace = (node) => node && !stringEndsWithWhitespace(node.textContent)\n\nconst getBlockElementMargin = function(element) {\n  const style = window.getComputedStyle(element)\n  if (style.display === \"block\") {\n    return { top: parseInt(style.marginTop), bottom: parseInt(style.marginBottom) }\n  }\n}\n\nconst nodeFilter = function(node) {\n  if (tagName(node) === \"style\") {\n    return NodeFilter.FILTER_REJECT\n  } else {\n    return NodeFilter.FILTER_ACCEPT\n  }\n}\n\n// Whitespace\n\nconst leftTrimBreakableWhitespace = (string) => string.replace(new RegExp(`^${breakableWhitespacePattern.source}+`), \"\")\n\nconst stringIsAllBreakableWhitespace = (string) => new RegExp(`^${breakableWhitespacePattern.source}*$`).test(string)\n\nconst stringEndsWithWhitespace = (string) => /\\s$/.test(string)\n", "/* eslint-disable\n    no-empty,\n*/\nimport { removeNode } from \"trix/core/helpers\"\n\nimport DocumentView from \"trix/views/document_view\"\nimport Document from \"trix/models/document\"\nimport HTMLParser from \"trix/models/html_parser\"\n\nconst unserializableElementSelector = \"[data-trix-serialize=false]\"\nconst unserializableAttributeNames = [\n  \"contenteditable\",\n  \"data-trix-id\",\n  \"data-trix-store-key\",\n  \"data-trix-mutable\",\n  \"data-trix-placeholder\",\n  \"tabindex\",\n]\nconst serializedAttributesAttribute = \"data-trix-serialized-attributes\"\nconst serializedAttributesSelector = `[${serializedAttributesAttribute}]`\n\nconst blockCommentPattern = new RegExp(\"<!--block-->\", \"g\")\n\nconst serializers = {\n  \"application/json\": function(serializable) {\n    let document\n    if (serializable instanceof Document) {\n      document = serializable\n    } else if (serializable instanceof HTMLElement) {\n      document = HTMLParser.parse(serializable.innerHTML).getDocument()\n    } else {\n      throw new Error(\"unserializable object\")\n    }\n\n    return document.toSerializableDocument().toJSONString()\n  },\n\n  \"text/html\": function(serializable) {\n    let element\n    if (serializable instanceof Document) {\n      element = DocumentView.render(serializable)\n    } else if (serializable instanceof HTMLElement) {\n      element = serializable.cloneNode(true)\n    } else {\n      throw new Error(\"unserializable object\")\n    }\n\n    // Remove unserializable elements\n    Array.from(element.querySelectorAll(unserializableElementSelector)).forEach((el) => {\n      removeNode(el)\n    })\n\n    // Remove unserializable attributes\n    unserializableAttributeNames.forEach((attribute) => {\n      Array.from(element.querySelectorAll(`[${attribute}]`)).forEach((el) => {\n        el.removeAttribute(attribute)\n      })\n    })\n\n    // Rewrite elements with serialized attribute overrides\n    Array.from(element.querySelectorAll(serializedAttributesSelector)).forEach((el) => {\n      try {\n        const attributes = JSON.parse(el.getAttribute(serializedAttributesAttribute))\n        el.removeAttribute(serializedAttributesAttribute)\n        for (const name in attributes) {\n          const value = attributes[name]\n          el.setAttribute(name, value)\n        }\n      } catch (error) {}\n    })\n\n    return element.innerHTML.replace(blockCommentPattern, \"\")\n  },\n}\n\nconst deserializers = {\n  \"application/json\": function(string) {\n    return Document.fromJSONString(string)\n  },\n\n  \"text/html\": function(string) {\n    return HTMLParser.parse(string).getDocument()\n  },\n}\n\nexport const serializeToContentType = function(serializable, contentType) {\n  const serializer = serializers[contentType]\n  if (serializer) {\n    return serializer(serializable)\n  } else {\n    throw new Error(`unknown content type: ${contentType}`)\n  }\n}\n\nexport const deserializeFromContentType = function(string, contentType) {\n  const deserializer = deserializers[contentType]\n  if (deserializer) {\n    return deserializer(string)\n  } else {\n    throw new Error(`unknown content type: ${contentType}`)\n  }\n}\n", "import \"trix/models/attachment\"\nimport BasicObject from \"trix/core/basic_object\"\n\nexport default class ManagedAttachment extends BasicObject {\n  constructor(attachmentManager, attachment) {\n    super(...arguments)\n    this.attachmentManager = attachmentManager\n    this.attachment = attachment\n    this.id = this.attachment.id\n    this.file = this.attachment.file\n  }\n\n  remove() {\n    return this.attachmentManager.requestRemovalOfAttachment(this.attachment)\n  }\n}\n\nManagedAttachment.proxyMethod(\"attachment.getAttribute\")\nManagedAttachment.proxyMethod(\"attachment.hasAttribute\")\nManagedAttachment.proxyMethod(\"attachment.setAttribute\")\nManagedAttachment.proxyMethod(\"attachment.getAttributes\")\nManagedAttachment.proxyMethod(\"attachment.setAttributes\")\nManagedAttachment.proxyMethod(\"attachment.isPending\")\nManagedAttachment.proxyMethod(\"attachment.isPreviewable\")\nManagedAttachment.proxyMethod(\"attachment.getURL\")\nManagedAttachment.proxyMethod(\"attachment.getHref\")\nManagedAttachment.proxyMethod(\"attachment.getFilename\")\nManagedAttachment.proxyMethod(\"attachment.getFilesize\")\nManagedAttachment.proxyMethod(\"attachment.getFormattedFilesize\")\nManagedAttachment.proxyMethod(\"attachment.getExtension\")\nManagedAttachment.proxyMethod(\"attachment.getContentType\")\nManagedAttachment.proxyMethod(\"attachment.getFile\")\nManagedAttachment.proxyMethod(\"attachment.setFile\")\nManagedAttachment.proxyMethod(\"attachment.releaseFile\")\nManagedAttachment.proxyMethod(\"attachment.getUploadProgress\")\nManagedAttachment.proxyMethod(\"attachment.setUploadProgress\")\n\n", "import ManagedAttachment from \"trix/models/managed_attachment\"\nimport BasicObject from \"trix/core/basic_object\"\n\nexport default class AttachmentManager extends BasicObject {\n  constructor(attachments = []) {\n    super(...arguments)\n    this.managedAttachments = {}\n    Array.from(attachments).forEach((attachment) => {\n      this.manageAttachment(attachment)\n    })\n  }\n\n  getAttachments() {\n    const result = []\n    for (const id in this.managedAttachments) {\n      const attachment = this.managedAttachments[id]\n      result.push(attachment)\n    }\n    return result\n  }\n\n  manageAttachment(attachment) {\n    if (!this.managedAttachments[attachment.id]) {\n      this.managedAttachments[attachment.id] = new ManagedAttachment(this, attachment)\n    }\n    return this.managedAttachments[attachment.id]\n  }\n\n  attachmentIsManaged(attachment) {\n    return attachment.id in this.managedAttachments\n  }\n\n  requestRemovalOfAttachment(attachment) {\n    if (this.attachmentIsManaged(attachment)) {\n      return this.delegate?.attachmentManagerDidRequestRemovalOfAttachment?.(attachment)\n    }\n  }\n\n  unmanageAttachment(attachment) {\n    const managedAttachment = this.managedAttachments[attachment.id]\n    delete this.managedAttachments[attachment.id]\n    return managedAttachment\n  }\n}\n", "export default class LineBreakInsertion {\n  constructor(composition) {\n    this.composition = composition\n    this.document = this.composition.document\n    const selectedRange = this.composition.getSelectedRange()\n    this.startPosition = selectedRange[0]\n    this.endPosition = selectedRange[1]\n\n    this.startLocation = this.document.locationFromPosition(this.startPosition)\n    this.endLocation = this.document.locationFromPosition(this.endPosition)\n\n    this.block = this.document.getBlockAtIndex(this.endLocation.index)\n    this.breaksOnReturn = this.block.breaksOnReturn()\n    this.previousCharacter = this.block.text.getStringAtPosition(this.endLocation.offset - 1)\n    this.nextCharacter = this.block.text.getStringAtPosition(this.endLocation.offset)\n  }\n\n  shouldInsertBlockBreak() {\n    if (this.block.hasAttributes() && this.block.isListItem() && !this.block.isEmpty()) {\n      return this.startLocation.offset !== 0\n    } else {\n      return this.breaksOnReturn && this.nextCharacter !== \"\\n\"\n    }\n  }\n\n  shouldBreakFormattedBlock() {\n    return (\n      this.block.hasAttributes() &&\n      !this.block.isListItem() &&\n      (this.breaksOnReturn && this.nextCharacter === \"\\n\" || this.previousCharacter === \"\\n\")\n    )\n  }\n\n  shouldDecreaseListLevel() {\n    return this.block.hasAttributes() && this.block.isListItem() && this.block.isEmpty()\n  }\n\n  shouldPrependListItem() {\n    return this.block.isListItem() && this.startLocation.offset === 0 && !this.block.isEmpty()\n  }\n\n  shouldRemoveLastBlockAttribute() {\n    return this.block.hasAttributes() && !this.block.isListItem() && this.block.isEmpty()\n  }\n}\n", "import * as config from \"trix/config\"\nimport { OBJECT_REPLACEMENT_CHARACTER } from \"trix/constants\"\n\nimport BasicObject from \"trix/core/basic_object\"\nimport Text from \"trix/models/text\"\nimport Block from \"trix/models/block\"\nimport Attachment from \"trix/models/attachment\"\nimport Document from \"trix/models/document\"\nimport HTMLParser from \"trix/models/html_parser\"\nimport LineBreakInsertion from \"trix/models/line_break_insertion\"\n\nimport {\n  arrayStartsWith,\n  extend,\n  getAllAttributeNames,\n  getBlockConfig,\n  getTextConfig,\n  normalizeRange,\n  objectsAreEqual,\n  rangeIsCollapsed,\n  rangesAreEqual,\n  summarizeArrayChange,\n} from \"trix/core/helpers\"\n\nconst PLACEHOLDER = \" \"\n\nexport default class Composition extends BasicObject {\n  constructor() {\n    super(...arguments)\n    this.document = new Document()\n    this.attachments = []\n    this.currentAttributes = {}\n    this.revision = 0\n  }\n\n  setDocument(document) {\n    if (!document.isEqualTo(this.document)) {\n      this.document = document\n      this.refreshAttachments()\n      this.revision++\n      return this.delegate?.compositionDidChangeDocument?.(document)\n    }\n  }\n\n  // Snapshots\n\n  getSnapshot() {\n    return {\n      document: this.document,\n      selectedRange: this.getSelectedRange(),\n    }\n  }\n\n  loadSnapshot({ document, selectedRange }) {\n    this.delegate?.compositionWillLoadSnapshot?.()\n    this.setDocument(document != null ? document : new Document())\n    this.setSelection(selectedRange != null ? selectedRange : [ 0, 0 ])\n    return this.delegate?.compositionDidLoadSnapshot?.()\n  }\n\n  // Responder protocol\n\n  insertText(text, { updatePosition } = { updatePosition: true }) {\n    const selectedRange = this.getSelectedRange()\n    this.setDocument(this.document.insertTextAtRange(text, selectedRange))\n\n    const startPosition = selectedRange[0]\n    const endPosition = startPosition + text.getLength()\n\n    if (updatePosition) {\n      this.setSelection(endPosition)\n    }\n    return this.notifyDelegateOfInsertionAtRange([ startPosition, endPosition ])\n  }\n\n  insertBlock(block = new Block()) {\n    const document = new Document([ block ])\n    return this.insertDocument(document)\n  }\n\n  insertDocument(document = new Document()) {\n    const selectedRange = this.getSelectedRange()\n    this.setDocument(this.document.insertDocumentAtRange(document, selectedRange))\n\n    const startPosition = selectedRange[0]\n    const endPosition = startPosition + document.getLength()\n\n    this.setSelection(endPosition)\n    return this.notifyDelegateOfInsertionAtRange([ startPosition, endPosition ])\n  }\n\n  insertString(string, options) {\n    const attributes = this.getCurrentTextAttributes()\n    const text = Text.textForStringWithAttributes(string, attributes)\n    return this.insertText(text, options)\n  }\n\n  insertBlockBreak() {\n    const selectedRange = this.getSelectedRange()\n    this.setDocument(this.document.insertBlockBreakAtRange(selectedRange))\n\n    const startPosition = selectedRange[0]\n    const endPosition = startPosition + 1\n\n    this.setSelection(endPosition)\n    return this.notifyDelegateOfInsertionAtRange([ startPosition, endPosition ])\n  }\n\n  insertLineBreak() {\n    const insertion = new LineBreakInsertion(this)\n\n    if (insertion.shouldDecreaseListLevel()) {\n      this.decreaseListLevel()\n      return this.setSelection(insertion.startPosition)\n    } else if (insertion.shouldPrependListItem()) {\n      const document = new Document([ insertion.block.copyWithoutText() ])\n      return this.insertDocument(document)\n    } else if (insertion.shouldInsertBlockBreak()) {\n      return this.insertBlockBreak()\n    } else if (insertion.shouldRemoveLastBlockAttribute()) {\n      return this.removeLastBlockAttribute()\n    } else if (insertion.shouldBreakFormattedBlock()) {\n      return this.breakFormattedBlock(insertion)\n    } else {\n      return this.insertString(\"\\n\")\n    }\n  }\n\n  insertHTML(html) {\n    const document = HTMLParser.parse(html).getDocument()\n    const selectedRange = this.getSelectedRange()\n\n    this.setDocument(this.document.mergeDocumentAtRange(document, selectedRange))\n\n    const startPosition = selectedRange[0]\n    const endPosition = startPosition + document.getLength() - 1\n\n    this.setSelection(endPosition)\n    return this.notifyDelegateOfInsertionAtRange([ startPosition, endPosition ])\n  }\n\n  replaceHTML(html) {\n    const document = HTMLParser.parse(html).getDocument().copyUsingObjectsFromDocument(this.document)\n    const locationRange = this.getLocationRange({ strict: false })\n    const selectedRange = this.document.rangeFromLocationRange(locationRange)\n    this.setDocument(document)\n    return this.setSelection(selectedRange)\n  }\n\n  insertFile(file) {\n    return this.insertFiles([ file ])\n  }\n\n  insertFiles(files) {\n    const attachments = []\n\n    Array.from(files).forEach((file) => {\n      if (this.delegate?.compositionShouldAcceptFile(file)) {\n        const attachment = Attachment.attachmentForFile(file)\n        attachments.push(attachment)\n      }\n    })\n\n    return this.insertAttachments(attachments)\n  }\n\n  insertAttachment(attachment) {\n    return this.insertAttachments([ attachment ])\n  }\n\n  insertAttachments(attachments) {\n    let text = new Text()\n\n    Array.from(attachments).forEach((attachment) => {\n      const type = attachment.getType()\n      const presentation = config.attachments[type]?.presentation\n\n      const attributes = this.getCurrentTextAttributes()\n      if (presentation) {\n        attributes.presentation = presentation\n      }\n\n      const attachmentText = Text.textForAttachmentWithAttributes(attachment, attributes)\n      text = text.appendText(attachmentText)\n    })\n\n    return this.insertText(text)\n  }\n\n  shouldManageDeletingInDirection(direction) {\n    const locationRange = this.getLocationRange()\n    if (rangeIsCollapsed(locationRange)) {\n      if (direction === \"backward\" && locationRange[0].offset === 0) {\n        return true\n      }\n      if (this.shouldManageMovingCursorInDirection(direction)) {\n        return true\n      }\n    } else {\n      if (locationRange[0].index !== locationRange[1].index) {\n        return true\n      }\n    }\n    return false\n  }\n\n  deleteInDirection(direction, { length } = {}) {\n    let attachment, deletingIntoPreviousBlock, selectionSpansBlocks\n    const locationRange = this.getLocationRange()\n    let range = this.getSelectedRange()\n    const selectionIsCollapsed = rangeIsCollapsed(range)\n\n    if (selectionIsCollapsed) {\n      deletingIntoPreviousBlock = direction === \"backward\" && locationRange[0].offset === 0\n    } else {\n      selectionSpansBlocks = locationRange[0].index !== locationRange[1].index\n    }\n\n    if (deletingIntoPreviousBlock) {\n      if (this.canDecreaseBlockAttributeLevel()) {\n        const block = this.getBlock()\n\n        if (block.isListItem()) {\n          this.decreaseListLevel()\n        } else {\n          this.decreaseBlockAttributeLevel()\n        }\n\n        this.setSelection(range[0])\n        if (block.isEmpty()) {\n          return false\n        }\n      }\n    }\n\n    if (selectionIsCollapsed) {\n      range = this.getExpandedRangeInDirection(direction, { length })\n      if (direction === \"backward\") {\n        attachment = this.getAttachmentAtRange(range)\n      }\n    }\n\n    if (attachment) {\n      this.editAttachment(attachment)\n      return false\n    } else {\n      this.setDocument(this.document.removeTextAtRange(range))\n      this.setSelection(range[0])\n      if (deletingIntoPreviousBlock || selectionSpansBlocks) {\n        return false\n      }\n    }\n  }\n\n  moveTextFromRange(range) {\n    const [ position ] = Array.from(this.getSelectedRange())\n    this.setDocument(this.document.moveTextFromRangeToPosition(range, position))\n    return this.setSelection(position)\n  }\n\n  removeAttachment(attachment) {\n    const range = this.document.getRangeOfAttachment(attachment)\n    if (range) {\n      this.stopEditingAttachment()\n      this.setDocument(this.document.removeTextAtRange(range))\n      return this.setSelection(range[0])\n    }\n  }\n\n  removeLastBlockAttribute() {\n    const [ startPosition, endPosition ] = Array.from(this.getSelectedRange())\n    const block = this.document.getBlockAtPosition(endPosition)\n    this.removeCurrentAttribute(block.getLastAttribute())\n    return this.setSelection(startPosition)\n  }\n\n  insertPlaceholder() {\n    this.placeholderPosition = this.getPosition()\n    return this.insertString(PLACEHOLDER)\n  }\n\n  selectPlaceholder() {\n    if (this.placeholderPosition != null) {\n      this.setSelectedRange([ this.placeholderPosition, this.placeholderPosition + PLACEHOLDER.length ])\n      return this.getSelectedRange()\n    }\n  }\n\n  forgetPlaceholder() {\n    this.placeholderPosition = null\n  }\n\n  // Current attributes\n\n  hasCurrentAttribute(attributeName) {\n    const value = this.currentAttributes[attributeName]\n    return value != null && value !== false\n  }\n\n  toggleCurrentAttribute(attributeName) {\n    const value = !this.currentAttributes[attributeName]\n    if (value) {\n      return this.setCurrentAttribute(attributeName, value)\n    } else {\n      return this.removeCurrentAttribute(attributeName)\n    }\n  }\n\n  canSetCurrentAttribute(attributeName) {\n    if (getBlockConfig(attributeName)) {\n      return this.canSetCurrentBlockAttribute(attributeName)\n    } else {\n      return this.canSetCurrentTextAttribute(attributeName)\n    }\n  }\n\n  canSetCurrentTextAttribute(attributeName) {\n    const document = this.getSelectedDocument()\n    if (!document) return\n    for (const attachment of Array.from(document.getAttachments())) {\n      if (!attachment.hasContent()) {\n        return false\n      }\n    }\n    return true\n  }\n\n  canSetCurrentBlockAttribute(attributeName) {\n    const block = this.getBlock()\n    if (!block) return\n    return !block.isTerminalBlock()\n  }\n\n  setCurrentAttribute(attributeName, value) {\n    if (getBlockConfig(attributeName)) {\n      return this.setBlockAttribute(attributeName, value)\n    } else {\n      this.setTextAttribute(attributeName, value)\n      this.currentAttributes[attributeName] = value\n      return this.notifyDelegateOfCurrentAttributesChange()\n    }\n  }\n\n  setHTMLAtributeAtPosition(position, attributeName, value) {\n    const block = this.document.getBlockAtPosition(position)\n    const allowedHTMLAttributes = getBlockConfig(block.getLastAttribute())?.htmlAttributes\n\n    if (block && allowedHTMLAttributes?.includes(attributeName)) {\n      const newDocument = this.document.setHTMLAttributeAtPosition(position, attributeName, value)\n      this.setDocument(newDocument)\n    }\n  }\n\n  setTextAttribute(attributeName, value) {\n    const selectedRange = this.getSelectedRange()\n    if (!selectedRange) return\n\n    const [ startPosition, endPosition ] = Array.from(selectedRange)\n    if (startPosition === endPosition) {\n      if (attributeName === \"href\") {\n        const text = Text.textForStringWithAttributes(value, { href: value })\n        return this.insertText(text)\n      }\n    } else {\n      return this.setDocument(this.document.addAttributeAtRange(attributeName, value, selectedRange))\n    }\n  }\n\n  setBlockAttribute(attributeName, value) {\n    const selectedRange = this.getSelectedRange()\n    if (this.canSetCurrentAttribute(attributeName)) {\n      this.setDocument(this.document.applyBlockAttributeAtRange(attributeName, value, selectedRange))\n      return this.setSelection(selectedRange)\n    }\n  }\n\n  removeCurrentAttribute(attributeName) {\n    if (getBlockConfig(attributeName)) {\n      this.removeBlockAttribute(attributeName)\n      return this.updateCurrentAttributes()\n    } else {\n      this.removeTextAttribute(attributeName)\n      delete this.currentAttributes[attributeName]\n      return this.notifyDelegateOfCurrentAttributesChange()\n    }\n  }\n\n  removeTextAttribute(attributeName) {\n    const selectedRange = this.getSelectedRange()\n    if (!selectedRange) return\n    return this.setDocument(this.document.removeAttributeAtRange(attributeName, selectedRange))\n  }\n\n  removeBlockAttribute(attributeName) {\n    const selectedRange = this.getSelectedRange()\n    if (!selectedRange) return\n    return this.setDocument(this.document.removeAttributeAtRange(attributeName, selectedRange))\n  }\n\n  canDecreaseNestingLevel() {\n    return this.getBlock()?.getNestingLevel() > 0\n  }\n\n  canIncreaseNestingLevel() {\n    const block = this.getBlock()\n    if (!block) return\n    if (getBlockConfig(block.getLastNestableAttribute())?.listAttribute) {\n      const previousBlock = this.getPreviousBlock()\n      if (previousBlock) {\n        return arrayStartsWith(previousBlock.getListItemAttributes(), block.getListItemAttributes())\n      }\n    } else {\n      return block.getNestingLevel() > 0\n    }\n  }\n\n  decreaseNestingLevel() {\n    const block = this.getBlock()\n    if (!block) return\n    return this.setDocument(this.document.replaceBlock(block, block.decreaseNestingLevel()))\n  }\n\n  increaseNestingLevel() {\n    const block = this.getBlock()\n    if (!block) return\n    return this.setDocument(this.document.replaceBlock(block, block.increaseNestingLevel()))\n  }\n\n  canDecreaseBlockAttributeLevel() {\n    return this.getBlock()?.getAttributeLevel() > 0\n  }\n\n  decreaseBlockAttributeLevel() {\n    const attribute = this.getBlock()?.getLastAttribute()\n    if (attribute) {\n      return this.removeCurrentAttribute(attribute)\n    }\n  }\n\n  decreaseListLevel() {\n    let [ startPosition ] = Array.from(this.getSelectedRange())\n    const { index } = this.document.locationFromPosition(startPosition)\n    let endIndex = index\n    const attributeLevel = this.getBlock().getAttributeLevel()\n\n    let block = this.document.getBlockAtIndex(endIndex + 1)\n    while (block) {\n      if (!block.isListItem() || block.getAttributeLevel() <= attributeLevel) {\n        break\n      }\n      endIndex++\n      block = this.document.getBlockAtIndex(endIndex + 1)\n    }\n\n    startPosition = this.document.positionFromLocation({ index, offset: 0 })\n    const endPosition = this.document.positionFromLocation({ index: endIndex, offset: 0 })\n    return this.setDocument(this.document.removeLastListAttributeAtRange([ startPosition, endPosition ]))\n  }\n\n  updateCurrentAttributes() {\n    const selectedRange = this.getSelectedRange({ ignoreLock: true })\n    if (selectedRange) {\n      const currentAttributes = this.document.getCommonAttributesAtRange(selectedRange)\n\n      Array.from(getAllAttributeNames()).forEach((attributeName) => {\n        if (!currentAttributes[attributeName]) {\n          if (!this.canSetCurrentAttribute(attributeName)) {\n            currentAttributes[attributeName] = false\n          }\n        }\n      })\n\n      if (!objectsAreEqual(currentAttributes, this.currentAttributes)) {\n        this.currentAttributes = currentAttributes\n        return this.notifyDelegateOfCurrentAttributesChange()\n      }\n    }\n  }\n\n  getCurrentAttributes() {\n    return extend.call({}, this.currentAttributes)\n  }\n\n  getCurrentTextAttributes() {\n    const attributes = {}\n    for (const key in this.currentAttributes) {\n      const value = this.currentAttributes[key]\n      if (value !== false) {\n        if (getTextConfig(key)) {\n          attributes[key] = value\n        }\n      }\n    }\n    return attributes\n  }\n\n  // Selection freezing\n\n  freezeSelection() {\n    return this.setCurrentAttribute(\"frozen\", true)\n  }\n\n  thawSelection() {\n    return this.removeCurrentAttribute(\"frozen\")\n  }\n\n  hasFrozenSelection() {\n    return this.hasCurrentAttribute(\"frozen\")\n  }\n\n  setSelection(selectedRange) {\n    const locationRange = this.document.locationRangeFromRange(selectedRange)\n    return this.delegate?.compositionDidRequestChangingSelectionToLocationRange(locationRange)\n  }\n\n  getSelectedRange() {\n    const locationRange = this.getLocationRange()\n    if (locationRange) {\n      return this.document.rangeFromLocationRange(locationRange)\n    }\n  }\n\n  setSelectedRange(selectedRange) {\n    const locationRange = this.document.locationRangeFromRange(selectedRange)\n    return this.getSelectionManager().setLocationRange(locationRange)\n  }\n\n  getPosition() {\n    const locationRange = this.getLocationRange()\n    if (locationRange) {\n      return this.document.positionFromLocation(locationRange[0])\n    }\n  }\n\n  getLocationRange(options) {\n    if (this.targetLocationRange) {\n      return this.targetLocationRange\n    } else {\n      return this.getSelectionManager().getLocationRange(options) || normalizeRange({ index: 0, offset: 0 })\n    }\n  }\n\n  withTargetLocationRange(locationRange, fn) {\n    let result\n    this.targetLocationRange = locationRange\n    try {\n      result = fn()\n    } finally {\n      this.targetLocationRange = null\n    }\n    return result\n  }\n\n  withTargetRange(range, fn) {\n    const locationRange = this.document.locationRangeFromRange(range)\n    return this.withTargetLocationRange(locationRange, fn)\n  }\n\n  withTargetDOMRange(domRange, fn) {\n    const locationRange = this.createLocationRangeFromDOMRange(domRange, { strict: false })\n    return this.withTargetLocationRange(locationRange, fn)\n  }\n\n  getExpandedRangeInDirection(direction, { length } = {}) {\n    let [ startPosition, endPosition ] = Array.from(this.getSelectedRange())\n    if (direction === \"backward\") {\n      if (length) {\n        startPosition -= length\n      } else {\n        startPosition = this.translateUTF16PositionFromOffset(startPosition, -1)\n      }\n    } else {\n      if (length) {\n        endPosition += length\n      } else {\n        endPosition = this.translateUTF16PositionFromOffset(endPosition, 1)\n      }\n    }\n    return normalizeRange([ startPosition, endPosition ])\n  }\n\n  shouldManageMovingCursorInDirection(direction) {\n    if (this.editingAttachment) {\n      return true\n    }\n    const range = this.getExpandedRangeInDirection(direction)\n    return this.getAttachmentAtRange(range) != null\n  }\n\n  moveCursorInDirection(direction) {\n    let canEditAttachment, range\n    if (this.editingAttachment) {\n      range = this.document.getRangeOfAttachment(this.editingAttachment)\n    } else {\n      const selectedRange = this.getSelectedRange()\n      range = this.getExpandedRangeInDirection(direction)\n      canEditAttachment = !rangesAreEqual(selectedRange, range)\n    }\n\n    if (direction === \"backward\") {\n      this.setSelectedRange(range[0])\n    } else {\n      this.setSelectedRange(range[1])\n    }\n\n    if (canEditAttachment) {\n      const attachment = this.getAttachmentAtRange(range)\n      if (attachment) {\n        return this.editAttachment(attachment)\n      }\n    }\n  }\n\n  expandSelectionInDirection(direction, { length } = {}) {\n    const range = this.getExpandedRangeInDirection(direction, { length })\n    return this.setSelectedRange(range)\n  }\n\n  expandSelectionForEditing() {\n    if (this.hasCurrentAttribute(\"href\")) {\n      return this.expandSelectionAroundCommonAttribute(\"href\")\n    }\n  }\n\n  expandSelectionAroundCommonAttribute(attributeName) {\n    const position = this.getPosition()\n    const range = this.document.getRangeOfCommonAttributeAtPosition(attributeName, position)\n    return this.setSelectedRange(range)\n  }\n\n  selectionContainsAttachments() {\n    return this.getSelectedAttachments()?.length > 0\n  }\n\n  selectionIsInCursorTarget() {\n    return this.editingAttachment || this.positionIsCursorTarget(this.getPosition())\n  }\n\n  positionIsCursorTarget(position) {\n    const location = this.document.locationFromPosition(position)\n    if (location) {\n      return this.locationIsCursorTarget(location)\n    }\n  }\n\n  positionIsBlockBreak(position) {\n    return this.document.getPieceAtPosition(position)?.isBlockBreak()\n  }\n\n  getSelectedDocument() {\n    const selectedRange = this.getSelectedRange()\n    if (selectedRange) {\n      return this.document.getDocumentAtRange(selectedRange)\n    }\n  }\n\n  getSelectedAttachments() {\n    return this.getSelectedDocument()?.getAttachments()\n  }\n\n  // Attachments\n\n  getAttachments() {\n    return this.attachments.slice(0)\n  }\n\n  refreshAttachments() {\n    const attachments = this.document.getAttachments()\n    const { added, removed } = summarizeArrayChange(this.attachments, attachments)\n    this.attachments = attachments\n\n    Array.from(removed).forEach((attachment) => {\n      attachment.delegate = null\n      this.delegate?.compositionDidRemoveAttachment?.(attachment)\n    })\n\n    return (() => {\n      const result = []\n\n      Array.from(added).forEach((attachment) => {\n        attachment.delegate = this\n        result.push(this.delegate?.compositionDidAddAttachment?.(attachment))\n      })\n\n      return result\n    })()\n  }\n\n  // Attachment delegate\n\n  attachmentDidChangeAttributes(attachment) {\n    this.revision++\n    return this.delegate?.compositionDidEditAttachment?.(attachment)\n  }\n\n  attachmentDidChangePreviewURL(attachment) {\n    this.revision++\n    return this.delegate?.compositionDidChangeAttachmentPreviewURL?.(attachment)\n  }\n\n  // Attachment editing\n\n  editAttachment(attachment, options) {\n    if (attachment === this.editingAttachment) return\n    this.stopEditingAttachment()\n    this.editingAttachment = attachment\n    return this.delegate?.compositionDidStartEditingAttachment?.(this.editingAttachment, options)\n  }\n\n  stopEditingAttachment() {\n    if (!this.editingAttachment) return\n    this.delegate?.compositionDidStopEditingAttachment?.(this.editingAttachment)\n    this.editingAttachment = null\n  }\n\n  updateAttributesForAttachment(attributes, attachment) {\n    return this.setDocument(this.document.updateAttributesForAttachment(attributes, attachment))\n  }\n\n  removeAttributeForAttachment(attribute, attachment) {\n    return this.setDocument(this.document.removeAttributeForAttachment(attribute, attachment))\n  }\n\n  // Private\n\n  breakFormattedBlock(insertion) {\n    let { document } = insertion\n    const { block } = insertion\n    let position = insertion.startPosition\n    let range = [ position - 1, position ]\n\n    if (block.getBlockBreakPosition() === insertion.startLocation.offset) {\n      if (block.breaksOnReturn() && insertion.nextCharacter === \"\\n\") {\n        position += 1\n      } else {\n        document = document.removeTextAtRange(range)\n      }\n      range = [ position, position ]\n    } else if (insertion.nextCharacter === \"\\n\") {\n      if (insertion.previousCharacter === \"\\n\") {\n        range = [ position - 1, position + 1 ]\n      } else {\n        range = [ position, position + 1 ]\n        position += 1\n      }\n    } else if (insertion.startLocation.offset - 1 !== 0) {\n      position += 1\n    }\n\n    const newDocument = new Document([ block.removeLastAttribute().copyWithoutText() ])\n    this.setDocument(document.insertDocumentAtRange(newDocument, range))\n    return this.setSelection(position)\n  }\n\n  getPreviousBlock() {\n    const locationRange = this.getLocationRange()\n    if (locationRange) {\n      const { index } = locationRange[0]\n      if (index > 0) {\n        return this.document.getBlockAtIndex(index - 1)\n      }\n    }\n  }\n\n  getBlock() {\n    const locationRange = this.getLocationRange()\n    if (locationRange) {\n      return this.document.getBlockAtIndex(locationRange[0].index)\n    }\n  }\n\n  getAttachmentAtRange(range) {\n    const document = this.document.getDocumentAtRange(range)\n    if (document.toString() === `${OBJECT_REPLACEMENT_CHARACTER}\\n`) {\n      return document.getAttachments()[0]\n    }\n  }\n\n  notifyDelegateOfCurrentAttributesChange() {\n    return this.delegate?.compositionDidChangeCurrentAttributes?.(this.currentAttributes)\n  }\n\n  notifyDelegateOfInsertionAtRange(range) {\n    return this.delegate?.compositionDidPerformInsertionAtRange?.(range)\n  }\n\n  translateUTF16PositionFromOffset(position, offset) {\n    const utf16string = this.document.toUTF16String()\n    const utf16position = utf16string.offsetFromUCS2Offset(position)\n    return utf16string.offsetToUCS2Offset(utf16position + offset)\n  }\n}\n\nComposition.proxyMethod(\"getSelectionManager().getPointRange\")\nComposition.proxyMethod(\"getSelectionManager().setLocationRangeFromPointRange\")\nComposition.proxyMethod(\"getSelectionManager().createLocationRangeFromDOMRange\")\nComposition.proxyMethod(\"getSelectionManager().locationIsCursorTarget\")\nComposition.proxyMethod(\"getSelectionManager().selectionIsExpanded\")\nComposition.proxyMethod(\"delegate?.getSelectionManager\")\n", "import BasicObject from \"trix/core/basic_object\"\n\nexport default class UndoManager extends BasicObject {\n  constructor(composition) {\n    super(...arguments)\n    this.composition = composition\n    this.undoEntries = []\n    this.redoEntries = []\n  }\n\n  recordUndoEntry(description, { context, consolidatable } = {}) {\n    const previousEntry = this.undoEntries.slice(-1)[0]\n\n    if (!consolidatable || !entryHasDescriptionAndContext(previousEntry, description, context)) {\n      const undoEntry = this.createEntry({ description, context })\n      this.undoEntries.push(undoEntry)\n      this.redoEntries = []\n    }\n  }\n\n  undo() {\n    const undoEntry = this.undoEntries.pop()\n    if (undoEntry) {\n      const redoEntry = this.createEntry(undoEntry)\n      this.redoEntries.push(redoEntry)\n      return this.composition.loadSnapshot(undoEntry.snapshot)\n    }\n  }\n\n  redo() {\n    const redoEntry = this.redoEntries.pop()\n    if (redoEntry) {\n      const undoEntry = this.createEntry(redoEntry)\n      this.undoEntries.push(undoEntry)\n      return this.composition.loadSnapshot(redoEntry.snapshot)\n    }\n  }\n\n  canUndo() {\n    return this.undoEntries.length > 0\n  }\n\n  canRedo() {\n    return this.redoEntries.length > 0\n  }\n\n  // Private\n\n  createEntry({ description, context } = {}) {\n    return {\n      description: description?.toString(),\n      context: JSON.stringify(context),\n      snapshot: this.composition.getSnapshot(),\n    }\n  }\n}\n\nconst entryHasDescriptionAndContext = (entry, description, context) =>\n  entry?.description === description?.toString() && entry?.context === JSON.stringify(context)\n", "const BLOCK_ATTRIBUTE_NAME = \"attachmentGallery\"\nconst TEXT_ATTRIBUTE_NAME = \"presentation\"\nconst TEXT_ATTRIBUTE_VALUE = \"gallery\"\n\nexport default class Filter {\n  constructor(snapshot) {\n    this.document = snapshot.document\n    this.selectedRange = snapshot.selectedRange\n  }\n\n  perform() {\n    this.removeBlockAttribute()\n    return this.applyBlockAttribute()\n  }\n\n  getSnapshot() {\n    return { document: this.document, selectedRange: this.selectedRange }\n  }\n\n  // Private\n\n  removeBlockAttribute() {\n    return this.findRangesOfBlocks().map((range) => this.document = this.document.removeAttributeAtRange(BLOCK_ATTRIBUTE_NAME, range))\n  }\n\n  applyBlockAttribute() {\n    let offset = 0\n\n    this.findRangesOfPieces().forEach((range) => {\n      if (range[1] - range[0] > 1) {\n        range[0] += offset\n        range[1] += offset\n\n        if (this.document.getCharacterAtPosition(range[1]) !== \"\\n\") {\n          this.document = this.document.insertBlockBreakAtRange(range[1])\n          if (range[1] < this.selectedRange[1]) {\n            this.moveSelectedRangeForward()\n          }\n          range[1]++\n          offset++\n        }\n\n        if (range[0] !== 0) {\n          if (this.document.getCharacterAtPosition(range[0] - 1) !== \"\\n\") {\n            this.document = this.document.insertBlockBreakAtRange(range[0])\n            if (range[0] < this.selectedRange[0]) {\n              this.moveSelectedRangeForward()\n            }\n            range[0]++\n            offset++\n          }\n        }\n\n        this.document = this.document.applyBlockAttributeAtRange(BLOCK_ATTRIBUTE_NAME, true, range)\n      }\n    })\n  }\n\n  findRangesOfBlocks() {\n    return this.document.findRangesForBlockAttribute(BLOCK_ATTRIBUTE_NAME)\n  }\n\n  findRangesOfPieces() {\n    return this.document.findRangesForTextAttribute(TEXT_ATTRIBUTE_NAME, { withValue: TEXT_ATTRIBUTE_VALUE })\n  }\n\n  moveSelectedRangeForward() {\n    this.selectedRange[0] += 1\n    this.selectedRange[1] += 1\n  }\n}\n", "import Filter from \"./filter\"\n\nexport const attachmentGalleryFilter = function(snapshot) {\n  const filter = new Filter(snapshot)\n  filter.perform()\n  return filter.getSnapshot()\n}\n\n", "import Document from \"trix/models/document\"\nimport HTMLParser from \"trix/models/html_parser\"\n\nimport UndoManager from \"trix/models/undo_manager\"\nimport { attachmentGalleryFilter } from \"trix/filters/attachment_gallery_filter\"\nconst DEFAULT_FILTERS = [ attachmentGalleryFilter ]\n\nexport default class Editor {\n  constructor(composition, selectionManager, element) {\n    this.insertFiles = this.insertFiles.bind(this)\n    this.composition = composition\n    this.selectionManager = selectionManager\n    this.element = element\n    this.undoManager = new UndoManager(this.composition)\n    this.filters = DEFAULT_FILTERS.slice(0)\n  }\n\n  loadDocument(document) {\n    return this.loadSnapshot({ document, selectedRange: [ 0, 0 ] })\n  }\n\n  loadHTML(html = \"\") {\n    const document = HTMLParser.parse(html, { referenceElement: this.element }).getDocument()\n    return this.loadDocument(document)\n  }\n\n  loadJSON({ document, selectedRange }) {\n    document = Document.fromJSON(document)\n    return this.loadSnapshot({ document, selectedRange })\n  }\n\n  loadSnapshot(snapshot) {\n    this.undoManager = new UndoManager(this.composition)\n    return this.composition.loadSnapshot(snapshot)\n  }\n\n  getDocument() {\n    return this.composition.document\n  }\n\n  getSelectedDocument() {\n    return this.composition.getSelectedDocument()\n  }\n\n  getSnapshot() {\n    return this.composition.getSnapshot()\n  }\n\n  toJSON() {\n    return this.getSnapshot()\n  }\n\n  // Document manipulation\n\n  deleteInDirection(direction) {\n    return this.composition.deleteInDirection(direction)\n  }\n\n  insertAttachment(attachment) {\n    return this.composition.insertAttachment(attachment)\n  }\n\n  insertAttachments(attachments) {\n    return this.composition.insertAttachments(attachments)\n  }\n\n  insertDocument(document) {\n    return this.composition.insertDocument(document)\n  }\n\n  insertFile(file) {\n    return this.composition.insertFile(file)\n  }\n\n  insertFiles(files) {\n    return this.composition.insertFiles(files)\n  }\n\n  insertHTML(html) {\n    return this.composition.insertHTML(html)\n  }\n\n  insertString(string) {\n    return this.composition.insertString(string)\n  }\n\n  insertText(text) {\n    return this.composition.insertText(text)\n  }\n\n  insertLineBreak() {\n    return this.composition.insertLineBreak()\n  }\n\n  // Selection\n\n  getSelectedRange() {\n    return this.composition.getSelectedRange()\n  }\n\n  getPosition() {\n    return this.composition.getPosition()\n  }\n\n  getClientRectAtPosition(position) {\n    const locationRange = this.getDocument().locationRangeFromRange([ position, position + 1 ])\n    return this.selectionManager.getClientRectAtLocationRange(locationRange)\n  }\n\n  expandSelectionInDirection(direction) {\n    return this.composition.expandSelectionInDirection(direction)\n  }\n\n  moveCursorInDirection(direction) {\n    return this.composition.moveCursorInDirection(direction)\n  }\n\n  setSelectedRange(selectedRange) {\n    return this.composition.setSelectedRange(selectedRange)\n  }\n\n  // Attributes\n\n  activateAttribute(name, value = true) {\n    return this.composition.setCurrentAttribute(name, value)\n  }\n\n  attributeIsActive(name) {\n    return this.composition.hasCurrentAttribute(name)\n  }\n\n  canActivateAttribute(name) {\n    return this.composition.canSetCurrentAttribute(name)\n  }\n\n  deactivateAttribute(name) {\n    return this.composition.removeCurrentAttribute(name)\n  }\n\n  // HTML attributes\n  setHTMLAtributeAtPosition(position, name, value) {\n    this.composition.setHTMLAtributeAtPosition(position, name, value)\n  }\n\n  // Nesting level\n\n  canDecreaseNestingLevel() {\n    return this.composition.canDecreaseNestingLevel()\n  }\n\n  canIncreaseNestingLevel() {\n    return this.composition.canIncreaseNestingLevel()\n  }\n\n  decreaseNestingLevel() {\n    if (this.canDecreaseNestingLevel()) {\n      return this.composition.decreaseNestingLevel()\n    }\n  }\n\n  increaseNestingLevel() {\n    if (this.canIncreaseNestingLevel()) {\n      return this.composition.increaseNestingLevel()\n    }\n  }\n\n  // Undo/redo\n\n  canRedo() {\n    return this.undoManager.canRedo()\n  }\n\n  canUndo() {\n    return this.undoManager.canUndo()\n  }\n\n  recordUndoEntry(description, { context, consolidatable } = {}) {\n    return this.undoManager.recordUndoEntry(description, { context, consolidatable })\n  }\n\n  redo() {\n    if (this.canRedo()) {\n      return this.undoManager.redo()\n    }\n  }\n\n  undo() {\n    if (this.canUndo()) {\n      return this.undoManager.undo()\n    }\n  }\n}\n", "/* eslint-disable\n    no-var,\n    prefer-const,\n*/\nimport {\n  elementContainsNode,\n  findChildIndexOfNode,\n  nodeIsAttachmentElement,\n  nodeIsBlockContainer,\n  nodeIsBlockStart,\n  nodeIsBlockStartComment,\n  nodeIsCursorTarget,\n  nodeIsEmptyTextNode,\n  nodeIsTextNode,\n  tagName,\n  walkTree,\n} from \"trix/core/helpers\"\n\nexport default class LocationMapper {\n  constructor(element) {\n    this.element = element\n  }\n\n  findLocationFromContainerAndOffset(container, offset, { strict } = { strict: true }) {\n    let childIndex = 0\n    let foundBlock = false\n    const location = { index: 0, offset: 0 }\n    const attachmentElement = this.findAttachmentElementParentForNode(container)\n\n    if (attachmentElement) {\n      container = attachmentElement.parentNode\n      offset = findChildIndexOfNode(attachmentElement)\n    }\n\n    const walker = walkTree(this.element, { usingFilter: rejectAttachmentContents })\n\n    while (walker.nextNode()) {\n      const node = walker.currentNode\n\n      if (node === container && nodeIsTextNode(container)) {\n        if (!nodeIsCursorTarget(node)) {\n          location.offset += offset\n        }\n        break\n      } else {\n        if (node.parentNode === container) {\n          if (childIndex++ === offset) {\n            break\n          }\n        } else if (!elementContainsNode(container, node)) {\n          if (childIndex > 0) {\n            break\n          }\n        }\n\n        if (nodeIsBlockStart(node, { strict })) {\n          if (foundBlock) {\n            location.index++\n          }\n          location.offset = 0\n          foundBlock = true\n        } else {\n          location.offset += nodeLength(node)\n        }\n      }\n    }\n\n    return location\n  }\n\n  findContainerAndOffsetFromLocation(location) {\n    let container, offset\n    if (location.index === 0 && location.offset === 0) {\n      container = this.element\n      offset = 0\n\n      while (container.firstChild) {\n        container = container.firstChild\n        if (nodeIsBlockContainer(container)) {\n          offset = 1\n          break\n        }\n      }\n\n      return [ container, offset ]\n    }\n\n    let [ node, nodeOffset ] = this.findNodeAndOffsetFromLocation(location)\n    if (!node) return\n\n    if (nodeIsTextNode(node)) {\n      if (nodeLength(node) === 0) {\n        container = node.parentNode.parentNode\n        offset = findChildIndexOfNode(node.parentNode)\n        if (nodeIsCursorTarget(node, { name: \"right\" })) {\n          offset++\n        }\n      } else {\n        container = node\n        offset = location.offset - nodeOffset\n      }\n    } else {\n      container = node.parentNode\n\n      if (!nodeIsBlockStart(node.previousSibling)) {\n        if (!nodeIsBlockContainer(container)) {\n          while (node === container.lastChild) {\n            node = container\n            container = container.parentNode\n            if (nodeIsBlockContainer(container)) {\n              break\n            }\n          }\n        }\n      }\n\n      offset = findChildIndexOfNode(node)\n      if (location.offset !== 0) {\n        offset++\n      }\n    }\n\n    return [ container, offset ]\n  }\n\n  findNodeAndOffsetFromLocation(location) {\n    let node, nodeOffset\n    let offset = 0\n\n    for (const currentNode of this.getSignificantNodesForIndex(location.index)) {\n      const length = nodeLength(currentNode)\n\n      if (location.offset <= offset + length) {\n        if (nodeIsTextNode(currentNode)) {\n          node = currentNode\n          nodeOffset = offset\n          if (location.offset === nodeOffset && nodeIsCursorTarget(node)) {\n            break\n          }\n        } else if (!node) {\n          node = currentNode\n          nodeOffset = offset\n        }\n      }\n\n      offset += length\n      if (offset > location.offset) {\n        break\n      }\n    }\n\n    return [ node, nodeOffset ]\n  }\n\n  // Private\n\n  findAttachmentElementParentForNode(node) {\n    while (node && node !== this.element) {\n      if (nodeIsAttachmentElement(node)) {\n        return node\n      }\n      node = node.parentNode\n    }\n  }\n\n  getSignificantNodesForIndex(index) {\n    const nodes = []\n    const walker = walkTree(this.element, { usingFilter: acceptSignificantNodes })\n    let recordingNodes = false\n\n    while (walker.nextNode()) {\n      const node = walker.currentNode\n      if (nodeIsBlockStartComment(node)) {\n        var blockIndex\n        if (blockIndex != null) {\n          blockIndex++\n        } else {\n          blockIndex = 0\n        }\n\n        if (blockIndex === index) {\n          recordingNodes = true\n        } else if (recordingNodes) {\n          break\n        }\n      } else if (recordingNodes) {\n        nodes.push(node)\n      }\n    }\n\n    return nodes\n  }\n}\n\nconst nodeLength = function(node) {\n  if (node.nodeType === Node.TEXT_NODE) {\n    if (nodeIsCursorTarget(node)) {\n      return 0\n    } else {\n      const string = node.textContent\n      return string.length\n    }\n  } else if (tagName(node) === \"br\" || nodeIsAttachmentElement(node)) {\n    return 1\n  } else {\n    return 0\n  }\n}\n\nconst acceptSignificantNodes = function(node) {\n  if (rejectEmptyTextNodes(node) === NodeFilter.FILTER_ACCEPT) {\n    return rejectAttachmentContents(node)\n  } else {\n    return NodeFilter.FILTER_REJECT\n  }\n}\n\nconst rejectEmptyTextNodes = function(node) {\n  if (nodeIsEmptyTextNode(node)) {\n    return NodeFilter.FILTER_REJECT\n  } else {\n    return NodeFilter.FILTER_ACCEPT\n  }\n}\n\nconst rejectAttachmentContents = function(node) {\n  if (nodeIsAttachmentElement(node.parentNode)) {\n    return NodeFilter.FILTER_REJECT\n  } else {\n    return NodeFilter.FILTER_ACCEPT\n  }\n}\n", "/* eslint-disable\n    id-length,\n    no-empty,\n*/\nimport { getDOMRange, setDOMRange } from \"trix/core/helpers\"\n\nexport default class PointMapper {\n  createDOMRangeFromPoint({ x, y }) {\n    let domRange\n    if (document.caretPositionFromPoint) {\n      const { offsetNode, offset } = document.caretPositionFromPoint(x, y)\n      domRange = document.createRange()\n      domRange.setStart(offsetNode, offset)\n      return domRange\n    } else if (document.caretRangeFromPoint) {\n      return document.caretRangeFromPoint(x, y)\n    } else if (document.body.createTextRange) {\n      const originalDOMRange = getDOMRange()\n      try {\n        // IE 11 throws \"Unspecified error\" when using moveToPoint\n        // during a drag-and-drop operation.\n        const textRange = document.body.createTextRange()\n        textRange.moveToPoint(x, y)\n        textRange.select()\n      } catch (error) {}\n      domRange = getDOMRange()\n      setDOMRange(originalDOMRange)\n      return domRange\n    }\n  }\n\n  getClientRectsForDOMRange(domRange) {\n    const array = Array.from(domRange.getClientRects())\n    const start = array[0]\n    const end = array[array.length - 1]\n\n    return [ start, end ]\n  }\n}\n", "/* eslint-disable\n*/\nimport BasicObject from \"trix/core/basic_object\"\n\nimport LocationMapper from \"trix/models/location_mapper\"\nimport PointMapper from \"trix/models/point_mapper\"\n\nimport {\n  elementContainsNode,\n  getDOMRange,\n  getDOMSelection,\n  handleEvent,\n  innerElementIsActive,\n  nodeIsCursorTarget,\n  normalizeRange,\n  rangeIsCollapsed,\n  rangesAreEqual,\n  setDOMRange,\n} from \"trix/core/helpers\"\n\nexport default class SelectionManager extends BasicObject {\n  constructor(element) {\n    super(...arguments)\n    this.didMouseDown = this.didMouseDown.bind(this)\n    this.selectionDidChange = this.selectionDidChange.bind(this)\n    this.element = element\n    this.locationMapper = new LocationMapper(this.element)\n    this.pointMapper = new PointMapper()\n    this.lockCount = 0\n    handleEvent(\"mousedown\", { onElement: this.element, withCallback: this.didMouseDown })\n  }\n\n  getLocationRange(options = {}) {\n    if (options.strict === false) {\n      return this.createLocationRangeFromDOMRange(getDOMRange())\n    } else if (options.ignoreLock) {\n      return this.currentLocationRange\n    } else if (this.lockedLocationRange) {\n      return this.lockedLocationRange\n    } else {\n      return this.currentLocationRange\n    }\n  }\n\n  setLocationRange(locationRange) {\n    if (this.lockedLocationRange) return\n    locationRange = normalizeRange(locationRange)\n\n    const domRange = this.createDOMRangeFromLocationRange(locationRange)\n    if (domRange) {\n      setDOMRange(domRange)\n      this.updateCurrentLocationRange(locationRange)\n    }\n  }\n\n  setLocationRangeFromPointRange(pointRange) {\n    pointRange = normalizeRange(pointRange)\n    const startLocation = this.getLocationAtPoint(pointRange[0])\n    const endLocation = this.getLocationAtPoint(pointRange[1])\n    this.setLocationRange([ startLocation, endLocation ])\n  }\n\n  getClientRectAtLocationRange(locationRange) {\n    const domRange = this.createDOMRangeFromLocationRange(locationRange)\n    if (domRange) {\n      return this.getClientRectsForDOMRange(domRange)[1]\n    }\n  }\n\n  locationIsCursorTarget(location) {\n    const node = Array.from(this.findNodeAndOffsetFromLocation(location))[0]\n    return nodeIsCursorTarget(node)\n  }\n\n  lock() {\n    if (this.lockCount++ === 0) {\n      this.updateCurrentLocationRange()\n      this.lockedLocationRange = this.getLocationRange()\n    }\n  }\n\n  unlock() {\n    if (--this.lockCount === 0) {\n      const { lockedLocationRange } = this\n      this.lockedLocationRange = null\n      if (lockedLocationRange != null) {\n        return this.setLocationRange(lockedLocationRange)\n      }\n    }\n  }\n\n  clearSelection() {\n    return getDOMSelection()?.removeAllRanges()\n  }\n\n  selectionIsCollapsed() {\n    return getDOMRange()?.collapsed === true\n  }\n\n  selectionIsExpanded() {\n    return !this.selectionIsCollapsed()\n  }\n\n  createLocationRangeFromDOMRange(domRange, options) {\n    if (domRange == null || !this.domRangeWithinElement(domRange)) return\n\n    const start = this.findLocationFromContainerAndOffset(domRange.startContainer, domRange.startOffset, options)\n    if (!start) return\n\n    const end = domRange.collapsed\n      ? undefined\n      : this.findLocationFromContainerAndOffset(domRange.endContainer, domRange.endOffset, options)\n\n    return normalizeRange([ start, end ])\n  }\n\n  didMouseDown() {\n    return this.pauseTemporarily()\n  }\n\n  pauseTemporarily() {\n    let resumeHandlers\n    this.paused = true\n\n    const resume = () => {\n      this.paused = false\n      clearTimeout(resumeTimeout)\n\n      Array.from(resumeHandlers).forEach((handler) => {\n        handler.destroy()\n      })\n\n      if (elementContainsNode(document, this.element)) {\n        return this.selectionDidChange()\n      }\n    }\n\n    const resumeTimeout = setTimeout(resume, 200)\n\n    resumeHandlers = [ \"mousemove\", \"keydown\" ].map((eventName) =>\n      handleEvent(eventName, { onElement: document, withCallback: resume })\n    )\n  }\n\n  selectionDidChange() {\n    if (!this.paused && !innerElementIsActive(this.element)) {\n      return this.updateCurrentLocationRange()\n    }\n  }\n\n  updateCurrentLocationRange(locationRange) {\n    if (locationRange != null ? locationRange : locationRange = this.createLocationRangeFromDOMRange(getDOMRange())) {\n      if (!rangesAreEqual(locationRange, this.currentLocationRange)) {\n        this.currentLocationRange = locationRange\n        return this.delegate?.locationRangeDidChange?.(this.currentLocationRange.slice(0))\n      }\n    }\n  }\n\n  createDOMRangeFromLocationRange(locationRange) {\n    const rangeStart = this.findContainerAndOffsetFromLocation(locationRange[0])\n    const rangeEnd = rangeIsCollapsed(locationRange)\n      ? rangeStart\n      : this.findContainerAndOffsetFromLocation(locationRange[1]) || rangeStart\n\n    if (rangeStart != null && rangeEnd != null) {\n      const domRange = document.createRange()\n      domRange.setStart(...Array.from(rangeStart || []))\n      domRange.setEnd(...Array.from(rangeEnd || []))\n      return domRange\n    }\n  }\n\n  getLocationAtPoint(point) {\n    const domRange = this.createDOMRangeFromPoint(point)\n    if (domRange) {\n      return this.createLocationRangeFromDOMRange(domRange)?.[0]\n    }\n  }\n\n  domRangeWithinElement(domRange) {\n    if (domRange.collapsed) {\n      return elementContainsNode(this.element, domRange.startContainer)\n    } else {\n      return (\n        elementContainsNode(this.element, domRange.startContainer) &&\n        elementContainsNode(this.element, domRange.endContainer)\n      )\n    }\n  }\n}\n\nSelectionManager.proxyMethod(\"locationMapper.findLocationFromContainerAndOffset\")\nSelectionManager.proxyMethod(\"locationMapper.findContainerAndOffsetFromLocation\")\nSelectionManager.proxyMethod(\"locationMapper.findNodeAndOffsetFromLocation\")\nSelectionManager.proxyMethod(\"pointMapper.createDOMRangeFromPoint\")\nSelectionManager.proxyMethod(\"pointMapper.getClientRectsForDOMRange\")\n\n", "import { removeNode } from \"trix/core/helpers\"\n\nimport * as config from \"trix/config\"\nimport BasicObject from \"trix/core/basic_object\"\n\nimport { defer, handleEvent, makeElement, tagName, triggerEvent } from \"trix/core/helpers\"\nconst { lang, css, keyNames } = config\n\nconst undoable = function(fn) {\n  return function() {\n    const commands = fn.apply(this, arguments)\n    commands.do()\n    if (!this.undos) {\n      this.undos = []\n    }\n    this.undos.push(commands.undo)\n  }\n}\n\nexport default class AttachmentEditorController extends BasicObject {\n  constructor(attachmentPiece, element, container, options = {}) {\n    super(...arguments)\n    this.didClickToolbar = this.didClickToolbar.bind(this)\n    this.didClickActionButton = this.didClickActionButton.bind(this)\n    this.didKeyDownCaption = this.didKeyDownCaption.bind(this)\n    this.didInputCaption = this.didInputCaption.bind(this)\n    this.didChangeCaption = this.didChangeCaption.bind(this)\n    this.didBlurCaption = this.didBlurCaption.bind(this)\n    this.attachmentPiece = attachmentPiece\n    this.element = element\n    this.container = container\n    this.options = options\n    this.attachment = this.attachmentPiece.attachment\n    if (tagName(this.element) === \"a\") {\n      this.element = this.element.firstChild\n    }\n    this.install()\n  }\n\n  install() {\n    this.makeElementMutable()\n    this.addToolbar()\n    if (this.attachment.isPreviewable()) {\n      this.installCaptionEditor()\n    }\n  }\n\n  uninstall() {\n    let undo = this.undos.pop()\n    this.savePendingCaption()\n    while (undo) {\n      undo()\n      undo = this.undos.pop()\n    }\n    this.delegate?.didUninstallAttachmentEditor(this)\n  }\n\n  // Private\n\n  savePendingCaption() {\n    if (this.pendingCaption != null) {\n      const caption = this.pendingCaption\n      this.pendingCaption = null\n      if (caption) {\n        this.delegate?.attachmentEditorDidRequestUpdatingAttributesForAttachment?.({ caption }, this.attachment)\n      } else {\n        this.delegate?.attachmentEditorDidRequestRemovingAttributeForAttachment?.(\"caption\", this.attachment)\n      }\n    }\n  }\n\n  // Installing and uninstalling\n\n  makeElementMutable = undoable(() => {\n    return {\n      do: () => {\n        this.element.dataset.trixMutable = true\n      },\n      undo: () => delete this.element.dataset.trixMutable,\n    }\n  })\n\n  addToolbar = undoable(() => {\n    // <div class=\"#{css.attachmentMetadataContainer}\" data-trix-mutable=\"true\">\n    //   <div class=\"trix-button-row\">\n    //     <span class=\"trix-button-group trix-button-group--actions\">\n    //       <button type=\"button\" class=\"trix-button trix-button--remove\" title=\"#{lang.remove}\" data-trix-action=\"remove\">#{lang.remove}</button>\n    //     </span>\n    //   </div>\n    // </div>\n    const element = makeElement({\n      tagName: \"div\",\n      className: css.attachmentToolbar,\n      data: { trixMutable: true },\n      childNodes: makeElement({\n        tagName: \"div\",\n        className: \"trix-button-row\",\n        childNodes: makeElement({\n          tagName: \"span\",\n          className: \"trix-button-group trix-button-group--actions\",\n          childNodes: makeElement({\n            tagName: \"button\",\n            className: \"trix-button trix-button--remove\",\n            textContent: lang.remove,\n            attributes: { title: lang.remove },\n            data: { trixAction: \"remove\" },\n          }),\n        }),\n      }),\n    })\n\n    if (this.attachment.isPreviewable()) {\n      // <div class=\"#{css.attachmentMetadataContainer}\">\n      //   <span class=\"#{css.attachmentMetadata}\">\n      //     <span class=\"#{css.attachmentName}\" title=\"#{name}\">#{name}</span>\n      //     <span class=\"#{css.attachmentSize}\">#{size}</span>\n      //   </span>\n      // </div>\n      element.appendChild(\n        makeElement({\n          tagName: \"div\",\n          className: css.attachmentMetadataContainer,\n          childNodes: makeElement({\n            tagName: \"span\",\n            className: css.attachmentMetadata,\n            childNodes: [\n              makeElement({\n                tagName: \"span\",\n                className: css.attachmentName,\n                textContent: this.attachment.getFilename(),\n                attributes: { title: this.attachment.getFilename() },\n              }),\n              makeElement({\n                tagName: \"span\",\n                className: css.attachmentSize,\n                textContent: this.attachment.getFormattedFilesize(),\n              }),\n            ],\n          }),\n        })\n      )\n    }\n\n    handleEvent(\"click\", { onElement: element, withCallback: this.didClickToolbar })\n    handleEvent(\"click\", {\n      onElement: element,\n      matchingSelector: \"[data-trix-action]\",\n      withCallback: this.didClickActionButton,\n    })\n\n    triggerEvent(\"trix-attachment-before-toolbar\", { onElement: this.element, attributes: { toolbar: element, attachment: this.attachment } })\n\n    return {\n      do: () => this.element.appendChild(element),\n      undo: () => removeNode(element),\n    }\n  })\n\n  installCaptionEditor = undoable(() => {\n    const textarea = makeElement({\n      tagName: \"textarea\",\n      className: css.attachmentCaptionEditor,\n      attributes: { placeholder: lang.captionPlaceholder },\n      data: { trixMutable: true },\n    })\n    textarea.value = this.attachmentPiece.getCaption()\n\n    const textareaClone = textarea.cloneNode()\n    textareaClone.classList.add(\"trix-autoresize-clone\")\n    textareaClone.tabIndex = -1\n\n    const autoresize = function() {\n      textareaClone.value = textarea.value\n      textarea.style.height = textareaClone.scrollHeight + \"px\"\n    }\n\n    handleEvent(\"input\", { onElement: textarea, withCallback: autoresize })\n    handleEvent(\"input\", { onElement: textarea, withCallback: this.didInputCaption })\n    handleEvent(\"keydown\", { onElement: textarea, withCallback: this.didKeyDownCaption })\n    handleEvent(\"change\", { onElement: textarea, withCallback: this.didChangeCaption })\n    handleEvent(\"blur\", { onElement: textarea, withCallback: this.didBlurCaption })\n\n    const figcaption = this.element.querySelector(\"figcaption\")\n    const editingFigcaption = figcaption.cloneNode()\n\n    return {\n      do: () => {\n        figcaption.style.display = \"none\"\n        editingFigcaption.appendChild(textarea)\n        editingFigcaption.appendChild(textareaClone)\n        editingFigcaption.classList.add(`${css.attachmentCaption}--editing`)\n        figcaption.parentElement.insertBefore(editingFigcaption, figcaption)\n        autoresize()\n        if (this.options.editCaption) {\n          return defer(() => textarea.focus())\n        }\n      },\n      undo() {\n        removeNode(editingFigcaption)\n        figcaption.style.display = null\n      },\n    }\n  })\n\n  // Event handlers\n\n  didClickToolbar(event) {\n    event.preventDefault()\n    return event.stopPropagation()\n  }\n\n  didClickActionButton(event) {\n    const action = event.target.getAttribute(\"data-trix-action\")\n    switch (action) {\n      case \"remove\":\n        return this.delegate?.attachmentEditorDidRequestRemovalOfAttachment(this.attachment)\n    }\n  }\n\n  didKeyDownCaption(event) {\n    if (keyNames[event.keyCode] === \"return\") {\n      event.preventDefault()\n      this.savePendingCaption()\n      return this.delegate?.attachmentEditorDidRequestDeselectingAttachment?.(this.attachment)\n    }\n  }\n\n  didInputCaption(event) {\n    this.pendingCaption = event.target.value.replace(/\\s/g, \" \").trim()\n  }\n\n  didChangeCaption(event) {\n    return this.savePendingCaption()\n  }\n\n  didBlurCaption(event) {\n    return this.savePendingCaption()\n  }\n}\n", "import BasicObject from \"trix/core/basic_object\"\nimport DocumentView from \"trix/views/document_view\"\nimport AttachmentEditorController from \"trix/controllers/attachment_editor_controller\"\n\nimport { defer, findClosestElementFromNode, handleEvent, innerElementIsActive } from \"trix/core/helpers\"\nimport { attachmentSelector } from \"trix/config/attachments\"\n\nexport default class CompositionController extends BasicObject {\n  constructor(element, composition) {\n    super(...arguments)\n    this.didFocus = this.didFocus.bind(this)\n    this.didBlur = this.didBlur.bind(this)\n    this.didClickAttachment = this.didClickAttachment.bind(this)\n\n    this.element = element\n    this.composition = composition\n    this.documentView = new DocumentView(this.composition.document, { element: this.element })\n\n    handleEvent(\"focus\", { onElement: this.element, withCallback: this.didFocus })\n    handleEvent(\"blur\", { onElement: this.element, withCallback: this.didBlur })\n    handleEvent(\"click\", {\n      onElement: this.element,\n      matchingSelector: \"a[contenteditable=false]\",\n      preventDefault: true,\n    })\n    handleEvent(\"mousedown\", {\n      onElement: this.element,\n      matchingSelector: attachmentSelector,\n      withCallback: this.didClickAttachment,\n    })\n    handleEvent(\"click\", { onElement: this.element, matchingSelector: `a${attachmentSelector}`, preventDefault: true })\n  }\n\n  didFocus(event) {\n    const perform = () => {\n      if (!this.focused) {\n        this.focused = true\n        return this.delegate?.compositionControllerDidFocus?.()\n      }\n    }\n\n    return this.blurPromise?.then(perform) || perform()\n  }\n\n  didBlur(event) {\n    this.blurPromise = new Promise((resolve) => {\n      return defer(() => {\n        if (!innerElementIsActive(this.element)) {\n          this.focused = null\n          this.delegate?.compositionControllerDidBlur?.()\n        }\n        this.blurPromise = null\n        return resolve()\n      })\n    })\n  }\n\n  didClickAttachment(event, target) {\n    const attachment = this.findAttachmentForElement(target)\n    const editCaption = !!findClosestElementFromNode(event.target, { matchingSelector: \"figcaption\" })\n    return this.delegate?.compositionControllerDidSelectAttachment?.(attachment, { editCaption })\n  }\n\n  getSerializableElement() {\n    if (this.isEditingAttachment()) {\n      return this.documentView.shadowElement\n    } else {\n      return this.element\n    }\n  }\n\n  render() {\n    if (this.revision !== this.composition.revision) {\n      this.documentView.setDocument(this.composition.document)\n      this.documentView.render()\n      this.revision = this.composition.revision\n    }\n\n    if (this.canSyncDocumentView() && !this.documentView.isSynced()) {\n      this.delegate?.compositionControllerWillSyncDocumentView?.()\n      this.documentView.sync()\n      this.delegate?.compositionControllerDidSyncDocumentView?.()\n    }\n\n    return this.delegate?.compositionControllerDidRender?.()\n  }\n\n  rerenderViewForObject(object) {\n    this.invalidateViewForObject(object)\n    return this.render()\n  }\n\n  invalidateViewForObject(object) {\n    return this.documentView.invalidateViewForObject(object)\n  }\n\n  isViewCachingEnabled() {\n    return this.documentView.isViewCachingEnabled()\n  }\n\n  enableViewCaching() {\n    return this.documentView.enableViewCaching()\n  }\n\n  disableViewCaching() {\n    return this.documentView.disableViewCaching()\n  }\n\n  refreshViewCache() {\n    return this.documentView.garbageCollectCachedViews()\n  }\n\n  // Attachment editor management\n\n  isEditingAttachment() {\n    return !!this.attachmentEditor\n  }\n\n  installAttachmentEditorForAttachment(attachment, options) {\n    if (this.attachmentEditor?.attachment === attachment) return\n    const element = this.documentView.findElementForObject(attachment)\n    if (!element) return\n\n    this.uninstallAttachmentEditor()\n    const attachmentPiece = this.composition.document.getAttachmentPieceForAttachment(attachment)\n    this.attachmentEditor = new AttachmentEditorController(attachmentPiece, element, this.element, options)\n    this.attachmentEditor.delegate = this\n  }\n\n  uninstallAttachmentEditor() {\n    return this.attachmentEditor?.uninstall()\n  }\n\n  // Attachment controller delegate\n\n  didUninstallAttachmentEditor() {\n    this.attachmentEditor = null\n    return this.render()\n  }\n\n  attachmentEditorDidRequestUpdatingAttributesForAttachment(attributes, attachment) {\n    this.delegate?.compositionControllerWillUpdateAttachment?.(attachment)\n    return this.composition.updateAttributesForAttachment(attributes, attachment)\n  }\n\n  attachmentEditorDidRequestRemovingAttributeForAttachment(attribute, attachment) {\n    this.delegate?.compositionControllerWillUpdateAttachment?.(attachment)\n    return this.composition.removeAttributeForAttachment(attribute, attachment)\n  }\n\n  attachmentEditorDidRequestRemovalOfAttachment(attachment) {\n    return this.delegate?.compositionControllerDidRequestRemovalOfAttachment?.(attachment)\n  }\n\n  attachmentEditorDidRequestDeselectingAttachment(attachment) {\n    return this.delegate?.compositionControllerDidRequestDeselectingAttachment?.(attachment)\n  }\n\n  // Private\n\n  canSyncDocumentView() {\n    return !this.isEditingAttachment()\n  }\n\n  findAttachmentForElement(element) {\n    return this.composition.document.getAttachmentById(parseInt(element.dataset.trixId, 10))\n  }\n}\n", "import \"trix/views/object_view\"\nimport BasicObject from \"trix/core/basic_object\"\n\nexport default class Controller extends BasicObject {}\n", "import BasicObject from \"trix/core/basic_object\"\n\nimport {\n  findClosestElementFromNode,\n  nodeIsBlockStartComment,\n  nodeIsEmptyTextNode,\n  normalizeSpaces,\n  summarizeStringChange,\n  tagName,\n} from \"trix/core/helpers\"\n\nconst mutableAttributeName = \"data-trix-mutable\"\nconst mutableSelector = `[${mutableAttributeName}]`\n\nconst options = {\n  attributes: true,\n  childList: true,\n  characterData: true,\n  characterDataOldValue: true,\n  subtree: true,\n}\n\nexport default class MutationObserver extends BasicObject {\n  constructor(element) {\n    super(element)\n    this.didMutate = this.didMutate.bind(this)\n    this.element = element\n    this.observer = new window.MutationObserver(this.didMutate)\n    this.start()\n  }\n\n  start() {\n    this.reset()\n    return this.observer.observe(this.element, options)\n  }\n\n  stop() {\n    return this.observer.disconnect()\n  }\n\n  didMutate(mutations) {\n    this.mutations.push(...Array.from(this.findSignificantMutations(mutations) || []))\n\n    if (this.mutations.length) {\n      this.delegate?.elementDidMutate?.(this.getMutationSummary())\n      return this.reset()\n    }\n  }\n\n  // Private\n\n  reset() {\n    this.mutations = []\n  }\n\n  findSignificantMutations(mutations) {\n    return mutations.filter((mutation) => {\n      return this.mutationIsSignificant(mutation)\n    })\n  }\n\n  mutationIsSignificant(mutation) {\n    if (this.nodeIsMutable(mutation.target)) {\n      return false\n    }\n    for (const node of Array.from(this.nodesModifiedByMutation(mutation))) {\n      if (this.nodeIsSignificant(node)) return true\n    }\n    return false\n  }\n\n  nodeIsSignificant(node) {\n    return node !== this.element && !this.nodeIsMutable(node) && !nodeIsEmptyTextNode(node)\n  }\n\n  nodeIsMutable(node) {\n    return findClosestElementFromNode(node, { matchingSelector: mutableSelector })\n  }\n\n  nodesModifiedByMutation(mutation) {\n    const nodes = []\n    switch (mutation.type) {\n      case \"attributes\":\n        if (mutation.attributeName !== mutableAttributeName) {\n          nodes.push(mutation.target)\n        }\n        break\n      case \"characterData\":\n        // Changes to text nodes should consider the parent element\n        nodes.push(mutation.target.parentNode)\n        nodes.push(mutation.target)\n        break\n      case \"childList\":\n        // Consider each added or removed node\n        nodes.push(...Array.from(mutation.addedNodes || []))\n        nodes.push(...Array.from(mutation.removedNodes || []))\n        break\n    }\n    return nodes\n  }\n\n  getMutationSummary() {\n    return this.getTextMutationSummary()\n  }\n\n  getTextMutationSummary() {\n    const { additions, deletions } = this.getTextChangesFromCharacterData()\n    const textChanges = this.getTextChangesFromChildList()\n\n    Array.from(textChanges.additions).forEach((addition) => {\n      if (!Array.from(additions).includes(addition)) {\n        additions.push(addition)\n      }\n    })\n\n    deletions.push(...Array.from(textChanges.deletions || []))\n\n    const summary = {}\n\n    const added = additions.join(\"\")\n    if (added) {\n      summary.textAdded = added\n    }\n\n    const deleted = deletions.join(\"\")\n    if (deleted) {\n      summary.textDeleted = deleted\n    }\n\n    return summary\n  }\n\n  getMutationsByType(type) {\n    return Array.from(this.mutations).filter((mutation) => mutation.type === type)\n  }\n\n  getTextChangesFromChildList() {\n    let textAdded, textRemoved\n    const addedNodes = []\n    const removedNodes = []\n\n    Array.from(this.getMutationsByType(\"childList\")).forEach((mutation) => {\n      addedNodes.push(...Array.from(mutation.addedNodes || []))\n      removedNodes.push(...Array.from(mutation.removedNodes || []))\n    })\n\n    const singleBlockCommentRemoved =\n      addedNodes.length === 0 && removedNodes.length === 1 && nodeIsBlockStartComment(removedNodes[0])\n\n    if (singleBlockCommentRemoved) {\n      textAdded = []\n      textRemoved = [ \"\\n\" ]\n    } else {\n      textAdded = getTextForNodes(addedNodes)\n      textRemoved = getTextForNodes(removedNodes)\n    }\n\n    const additions = textAdded.filter((text, index) => text !== textRemoved[index]).map(normalizeSpaces)\n    const deletions = textRemoved.filter((text, index) => text !== textAdded[index]).map(normalizeSpaces)\n\n    return { additions, deletions }\n  }\n\n  getTextChangesFromCharacterData() {\n    let added, removed\n    const characterMutations = this.getMutationsByType(\"characterData\")\n\n    if (characterMutations.length) {\n      const startMutation = characterMutations[0],\n        endMutation = characterMutations[characterMutations.length - 1]\n\n      const oldString = normalizeSpaces(startMutation.oldValue)\n      const newString = normalizeSpaces(endMutation.target.data)\n      const summarized = summarizeStringChange(oldString, newString)\n      added = summarized.added\n      removed = summarized.removed\n    }\n\n    return {\n      additions: added ? [ added ] : [],\n      deletions: removed ? [ removed ] : [],\n    }\n  }\n}\n\nconst getTextForNodes = function(nodes = []) {\n  const text = []\n  for (const node of Array.from(nodes)) {\n    switch (node.nodeType) {\n      case Node.TEXT_NODE:\n        text.push(node.data)\n        break\n      case Node.ELEMENT_NODE:\n        if (tagName(node) === \"br\") {\n          text.push(\"\\n\")\n        } else {\n          text.push(...Array.from(getTextForNodes(node.childNodes) || []))\n        }\n        break\n    }\n  }\n  return text\n}\n", "/* eslint-disable\n    no-empty,\n*/\nimport Operation from \"trix/core/utilities/operation\"\n\nexport default class FileVerificationOperation extends Operation {\n  constructor(file) {\n    super(...arguments)\n    this.file = file\n  }\n\n  perform(callback) {\n    const reader = new FileReader()\n\n    reader.onerror = () => callback(false)\n\n    reader.onload = () => {\n      reader.onerror = null\n      try {\n        reader.abort()\n      } catch (error) {}\n      return callback(true, this.file)\n    }\n\n    return reader.readAsArrayBuffer(this.file)\n  }\n}\n", "import * as config from \"trix/config\"\nimport { NON_BREAKING_SPACE, OBJECT_REPLACEMENT_CHARACTER, ZERO_WIDTH_SPACE } from \"trix/constants\"\n\n// Each software keyboard on Android emits its own set of events and some of them can be buggy.\n// This class detects when some buggy events are being emitted and lets know the input controller\n// that they should be ignored.\nexport default class FlakyAndroidKeyboardDetector {\n  constructor(element) {\n    this.element = element\n  }\n\n  shouldIgnore(event) {\n    if (!config.browser.samsungAndroid) return false\n\n    this.previousEvent = this.event\n    this.event = event\n\n    this.checkSamsungKeyboardBuggyModeStart()\n    this.checkSamsungKeyboardBuggyModeEnd()\n\n    return this.buggyMode\n  }\n\n  // private\n\n  // The Samsung keyboard on Android can enter a buggy state in which it emits a flurry of confused events that,\n  // if processed, corrupts the editor. The buggy mode always starts with an insertText event, right after a\n  // keydown event with for an \"Unidentified\" key, with the same text as the editor element, except for a few\n  // extra whitespace, or exotic utf8, characters.\n  checkSamsungKeyboardBuggyModeStart() {\n    if (this.insertingLongTextAfterUnidentifiedChar() && differsInWhitespace(this.element.innerText, this.event.data)) {\n      this.buggyMode = true\n      this.event.preventDefault()\n    }\n  }\n\n  // The flurry of buggy events are always insertText. If we see any other type, it means it's over.\n  checkSamsungKeyboardBuggyModeEnd() {\n    if (this.buggyMode && this.event.inputType !== \"insertText\") {\n      this.buggyMode = false\n    }\n  }\n\n  insertingLongTextAfterUnidentifiedChar() {\n    return this.isBeforeInputInsertText() && this.previousEventWasUnidentifiedKeydown() && this.event.data?.length > 50\n  }\n\n  isBeforeInputInsertText() {\n    return this.event.type === \"beforeinput\" && this.event.inputType === \"insertText\"\n  }\n\n  previousEventWasUnidentifiedKeydown() {\n    return this.previousEvent?.type === \"keydown\" && this.previousEvent?.key === \"Unidentified\"\n  }\n}\n\nconst differsInWhitespace = (text1, text2) => {\n  return normalize(text1) === normalize(text2)\n}\n\nconst whiteSpaceNormalizerRegexp = new RegExp(`(${OBJECT_REPLACEMENT_CHARACTER}|${ZERO_WIDTH_SPACE}|${NON_BREAKING_SPACE}|\\\\s)+`, \"g\")\nconst normalize = (text) => text.replace(whiteSpaceNormalizerRegexp, \" \").trim()\n", "import BasicObject from \"trix/core/basic_object\"\nimport MutationObserver from \"trix/observers/mutation_observer\"\nimport FileVerificationOperation from \"trix/operations/file_verification_operation\"\nimport FlakyAndroidKeyboardDetector from \"../models/flaky_android_keyboard_detector\"\n\nimport { handleEvent, innerElementIsActive } from \"trix/core/helpers\"\n\nexport default class InputController extends BasicObject {\n\n  static events = {}\n\n  constructor(element) {\n    super(...arguments)\n    this.element = element\n    this.mutationObserver = new MutationObserver(this.element)\n    this.mutationObserver.delegate = this\n    this.flakyKeyboardDetector = new FlakyAndroidKeyboardDetector(this.element)\n    for (const eventName in this.constructor.events) {\n      handleEvent(eventName, { onElement: this.element, withCallback: this.handlerFor(eventName) })\n    }\n  }\n\n  elementDidMutate(mutationSummary) {}\n\n  editorWillSyncDocumentView() {\n    return this.mutationObserver.stop()\n  }\n\n  editorDidSyncDocumentView() {\n    return this.mutationObserver.start()\n  }\n\n  requestRender() {\n    return this.delegate?.inputControllerDidRequestRender?.()\n  }\n\n  requestReparse() {\n    this.delegate?.inputControllerDidRequestReparse?.()\n    return this.requestRender()\n  }\n\n  attachFiles(files) {\n    const operations = Array.from(files).map((file) => new FileVerificationOperation(file))\n    return Promise.all(operations).then((files) => {\n      this.handleInput(function() {\n        this.delegate?.inputControllerWillAttachFiles()\n        this.responder?.insertFiles(files)\n        return this.requestRender()\n      })\n    })\n  }\n\n  // Private\n\n  handlerFor(eventName) {\n    return (event) => {\n      if (!event.defaultPrevented) {\n        this.handleInput(() => {\n          if (!innerElementIsActive(this.element)) {\n            if (this.flakyKeyboardDetector.shouldIgnore(event)) return\n\n            this.eventName = eventName\n            this.constructor.events[eventName].call(this, event)\n          }\n        })\n      }\n    }\n  }\n\n  handleInput(callback) {\n    try {\n      this.delegate?.inputControllerWillHandleInput()\n      callback.call(this)\n    } finally {\n      this.delegate?.inputControllerDidHandleInput()\n    }\n  }\n\n  createLinkHTML(href, text) {\n    const link = document.createElement(\"a\")\n    link.href = href\n    link.textContent = text ? text : href\n    return link.outerHTML\n  }\n}\n\n", "import * as config from \"trix/config\"\nimport UTF16String from \"trix/core/utilities/utf16_string\"\nimport BasicObject from \"trix/core/basic_object\"\nimport InputController from \"trix/controllers/input_controller\"\nimport DocumentView from \"trix/views/document_view\"\nimport Document from \"trix/models/document\"\n\nimport {\n  dataTransferIsPlainText,\n  dataTransferIsWritable,\n  keyEventIsKeyboardCommand,\n  makeElement,\n  objectsAreEqual,\n  removeNode,\n  squishBreakableWhitespace,\n} from \"trix/core/helpers\"\n\nimport { selectionChangeObserver } from \"trix/observers/selection_change_observer\"\n\nconst { browser, keyNames } = config\nlet pastedFileCount = 0\n\nexport default class Level0InputController extends InputController {\n\n  static events = {\n    keydown(event) {\n      if (!this.isComposing()) {\n        this.resetInputSummary()\n      }\n      this.inputSummary.didInput = true\n\n      const keyName = keyNames[event.keyCode]\n      if (keyName) {\n        let context = this.keys\n\n        ;[ \"ctrl\", \"alt\", \"shift\", \"meta\" ].forEach((modifier) => {\n          if (event[`${modifier}Key`]) {\n            if (modifier === \"ctrl\") {\n              modifier = \"control\"\n            }\n            context = context?.[modifier]\n          }\n        })\n\n        if (context?.[keyName] != null) {\n          this.setInputSummary({ keyName })\n          selectionChangeObserver.reset()\n          context[keyName].call(this, event)\n        }\n      }\n\n      if (keyEventIsKeyboardCommand(event)) {\n        const character = String.fromCharCode(event.keyCode).toLowerCase()\n        if (character) {\n          const keys = [ \"alt\", \"shift\" ].map((modifier) => {\n            if (event[`${modifier}Key`]) {\n              return modifier\n            }\n          }).filter(key => key)\n          keys.push(character)\n          if (this.delegate?.inputControllerDidReceiveKeyboardCommand(keys)) {\n            event.preventDefault()\n          }\n        }\n      }\n    },\n\n    keypress(event) {\n      if (this.inputSummary.eventName != null) return\n      if (event.metaKey) return\n      if (event.ctrlKey && !event.altKey) return\n\n      const string = stringFromKeyEvent(event)\n      if (string) {\n        this.delegate?.inputControllerWillPerformTyping()\n        this.responder?.insertString(string)\n        return this.setInputSummary({ textAdded: string, didDelete: this.selectionIsExpanded() })\n      }\n    },\n\n    textInput(event) {\n      // Handle autocapitalization\n      const { data } = event\n      const { textAdded } = this.inputSummary\n      if (textAdded && textAdded !== data && textAdded.toUpperCase() === data) {\n        const range = this.getSelectedRange()\n        this.setSelectedRange([ range[0], range[1] + textAdded.length ])\n        this.responder?.insertString(data)\n        this.setInputSummary({ textAdded: data })\n        return this.setSelectedRange(range)\n      }\n    },\n\n    dragenter(event) {\n      event.preventDefault()\n    },\n\n    dragstart(event) {\n      this.serializeSelectionToDataTransfer(event.dataTransfer)\n      this.draggedRange = this.getSelectedRange()\n      return this.delegate?.inputControllerDidStartDrag?.()\n    },\n\n    dragover(event) {\n      if (this.draggedRange || this.canAcceptDataTransfer(event.dataTransfer)) {\n        event.preventDefault()\n        const draggingPoint = { x: event.clientX, y: event.clientY }\n        if (!objectsAreEqual(draggingPoint, this.draggingPoint)) {\n          this.draggingPoint = draggingPoint\n          return this.delegate?.inputControllerDidReceiveDragOverPoint?.(this.draggingPoint)\n        }\n      }\n    },\n\n    dragend(event) {\n      this.delegate?.inputControllerDidCancelDrag?.()\n      this.draggedRange = null\n      this.draggingPoint = null\n    },\n\n    drop(event) {\n      event.preventDefault()\n      const files = event.dataTransfer?.files\n      const documentJSON = event.dataTransfer.getData(\"application/x-trix-document\")\n\n      const point = { x: event.clientX, y: event.clientY }\n      this.responder?.setLocationRangeFromPointRange(point)\n\n      if (files?.length) {\n        this.attachFiles(files)\n      } else if (this.draggedRange) {\n        this.delegate?.inputControllerWillMoveText()\n        this.responder?.moveTextFromRange(this.draggedRange)\n        this.draggedRange = null\n        this.requestRender()\n      } else if (documentJSON) {\n        const document = Document.fromJSONString(documentJSON)\n        this.responder?.insertDocument(document)\n        this.requestRender()\n      }\n\n      this.draggedRange = null\n      this.draggingPoint = null\n    },\n\n    cut(event) {\n      if (this.responder?.selectionIsExpanded()) {\n        if (this.serializeSelectionToDataTransfer(event.clipboardData)) {\n          event.preventDefault()\n        }\n\n        this.delegate?.inputControllerWillCutText()\n        this.deleteInDirection(\"backward\")\n        if (event.defaultPrevented) {\n          return this.requestRender()\n        }\n      }\n    },\n\n    copy(event) {\n      if (this.responder?.selectionIsExpanded()) {\n        if (this.serializeSelectionToDataTransfer(event.clipboardData)) {\n          event.preventDefault()\n        }\n      }\n    },\n\n    paste(event) {\n      const clipboard = event.clipboardData || event.testClipboardData\n      const paste = { clipboard }\n\n      if (!clipboard || pasteEventIsCrippledSafariHTMLPaste(event)) {\n        this.getPastedHTMLUsingHiddenElement((html) => {\n          paste.type = \"text/html\"\n          paste.html = html\n          this.delegate?.inputControllerWillPaste(paste)\n          this.responder?.insertHTML(paste.html)\n          this.requestRender()\n          return this.delegate?.inputControllerDidPaste(paste)\n        })\n        return\n      }\n\n      const href = clipboard.getData(\"URL\")\n      const html = clipboard.getData(\"text/html\")\n      const name = clipboard.getData(\"public.url-name\")\n\n      if (href) {\n        let string\n        paste.type = \"text/html\"\n        if (name) {\n          string = squishBreakableWhitespace(name).trim()\n        } else {\n          string = href\n        }\n        paste.html = this.createLinkHTML(href, string)\n        this.delegate?.inputControllerWillPaste(paste)\n        this.setInputSummary({ textAdded: string, didDelete: this.selectionIsExpanded() })\n        this.responder?.insertHTML(paste.html)\n        this.requestRender()\n        this.delegate?.inputControllerDidPaste(paste)\n      } else if (dataTransferIsPlainText(clipboard)) {\n        paste.type = \"text/plain\"\n        paste.string = clipboard.getData(\"text/plain\")\n        this.delegate?.inputControllerWillPaste(paste)\n        this.setInputSummary({ textAdded: paste.string, didDelete: this.selectionIsExpanded() })\n        this.responder?.insertString(paste.string)\n        this.requestRender()\n        this.delegate?.inputControllerDidPaste(paste)\n      } else if (html) {\n        paste.type = \"text/html\"\n        paste.html = html\n        this.delegate?.inputControllerWillPaste(paste)\n        this.responder?.insertHTML(paste.html)\n        this.requestRender()\n        this.delegate?.inputControllerDidPaste(paste)\n      } else if (Array.from(clipboard.types).includes(\"Files\")) {\n        const file = clipboard.items?.[0]?.getAsFile?.()\n        if (file) {\n          const extension = extensionForFile(file)\n          if (!file.name && extension) {\n            file.name = `pasted-file-${++pastedFileCount}.${extension}`\n          }\n          paste.type = \"File\"\n          paste.file = file\n          this.delegate?.inputControllerWillAttachFiles()\n          this.responder?.insertFile(paste.file)\n          this.requestRender()\n          this.delegate?.inputControllerDidPaste(paste)\n        }\n      }\n\n      event.preventDefault()\n    },\n\n    compositionstart(event) {\n      return this.getCompositionInput().start(event.data)\n    },\n\n    compositionupdate(event) {\n      return this.getCompositionInput().update(event.data)\n    },\n\n    compositionend(event) {\n      return this.getCompositionInput().end(event.data)\n    },\n\n    beforeinput(event) {\n      this.inputSummary.didInput = true\n    },\n\n    input(event) {\n      this.inputSummary.didInput = true\n      return event.stopPropagation()\n    },\n  }\n\n  static keys = {\n    backspace(event) {\n      this.delegate?.inputControllerWillPerformTyping()\n      return this.deleteInDirection(\"backward\", event)\n    },\n\n    delete(event) {\n      this.delegate?.inputControllerWillPerformTyping()\n      return this.deleteInDirection(\"forward\", event)\n    },\n\n    return(event) {\n      this.setInputSummary({ preferDocument: true })\n      this.delegate?.inputControllerWillPerformTyping()\n      return this.responder?.insertLineBreak()\n    },\n\n    tab(event) {\n      if (this.responder?.canIncreaseNestingLevel()) {\n        this.responder?.increaseNestingLevel()\n        this.requestRender()\n        event.preventDefault()\n      }\n    },\n\n    left(event) {\n      if (this.selectionIsInCursorTarget()) {\n        event.preventDefault()\n        return this.responder?.moveCursorInDirection(\"backward\")\n      }\n    },\n\n    right(event) {\n      if (this.selectionIsInCursorTarget()) {\n        event.preventDefault()\n        return this.responder?.moveCursorInDirection(\"forward\")\n      }\n    },\n\n    control: {\n      d(event) {\n        this.delegate?.inputControllerWillPerformTyping()\n        return this.deleteInDirection(\"forward\", event)\n      },\n\n      h(event) {\n        this.delegate?.inputControllerWillPerformTyping()\n        return this.deleteInDirection(\"backward\", event)\n      },\n\n      o(event) {\n        event.preventDefault()\n        this.delegate?.inputControllerWillPerformTyping()\n        this.responder?.insertString(\"\\n\", { updatePosition: false })\n        return this.requestRender()\n      },\n    },\n\n    shift: {\n      return(event) {\n        this.delegate?.inputControllerWillPerformTyping()\n        this.responder?.insertString(\"\\n\")\n        this.requestRender()\n        event.preventDefault()\n      },\n\n      tab(event) {\n        if (this.responder?.canDecreaseNestingLevel()) {\n          this.responder?.decreaseNestingLevel()\n          this.requestRender()\n          event.preventDefault()\n        }\n      },\n\n      left(event) {\n        if (this.selectionIsInCursorTarget()) {\n          event.preventDefault()\n          return this.expandSelectionInDirection(\"backward\")\n        }\n      },\n\n      right(event) {\n        if (this.selectionIsInCursorTarget()) {\n          event.preventDefault()\n          return this.expandSelectionInDirection(\"forward\")\n        }\n      },\n    },\n\n    alt: {\n      backspace(event) {\n        this.setInputSummary({ preferDocument: false })\n        return this.delegate?.inputControllerWillPerformTyping()\n      },\n    },\n\n    meta: {\n      backspace(event) {\n        this.setInputSummary({ preferDocument: false })\n        return this.delegate?.inputControllerWillPerformTyping()\n      },\n    },\n  }\n\n  constructor() {\n    super(...arguments)\n    this.resetInputSummary()\n  }\n\n  setInputSummary(summary = {}) {\n    this.inputSummary.eventName = this.eventName\n    for (const key in summary) {\n      const value = summary[key]\n      this.inputSummary[key] = value\n    }\n    return this.inputSummary\n  }\n\n  resetInputSummary() {\n    this.inputSummary = {}\n  }\n\n  reset() {\n    this.resetInputSummary()\n    return selectionChangeObserver.reset()\n  }\n\n  // Mutation observer delegate\n\n  elementDidMutate(mutationSummary) {\n    if (this.isComposing()) {\n      return this.delegate?.inputControllerDidAllowUnhandledInput?.()\n    } else {\n      return this.handleInput(function() {\n        if (this.mutationIsSignificant(mutationSummary)) {\n          if (this.mutationIsExpected(mutationSummary)) {\n            this.requestRender()\n          } else {\n            this.requestReparse()\n          }\n        }\n        return this.reset()\n      })\n    }\n  }\n\n  mutationIsExpected({ textAdded, textDeleted }) {\n    if (this.inputSummary.preferDocument) {\n      return true\n    }\n\n    const mutationAdditionMatchesSummary =\n      textAdded != null ? textAdded === this.inputSummary.textAdded : !this.inputSummary.textAdded\n    const mutationDeletionMatchesSummary =\n      textDeleted != null ? this.inputSummary.didDelete : !this.inputSummary.didDelete\n\n    const unexpectedNewlineAddition = [ \"\\n\", \" \\n\" ].includes(textAdded) && !mutationAdditionMatchesSummary\n    const unexpectedNewlineDeletion = textDeleted === \"\\n\" && !mutationDeletionMatchesSummary\n    const singleUnexpectedNewline =\n      unexpectedNewlineAddition && !unexpectedNewlineDeletion ||\n      unexpectedNewlineDeletion && !unexpectedNewlineAddition\n\n    if (singleUnexpectedNewline) {\n      const range = this.getSelectedRange()\n      if (range) {\n        const offset = unexpectedNewlineAddition ? textAdded.replace(/\\n$/, \"\").length || -1 : textAdded?.length || 1\n        if (this.responder?.positionIsBlockBreak(range[1] + offset)) {\n          return true\n        }\n      }\n    }\n\n    return mutationAdditionMatchesSummary && mutationDeletionMatchesSummary\n  }\n\n  mutationIsSignificant(mutationSummary) {\n    const textChanged = Object.keys(mutationSummary).length > 0\n    const composedEmptyString = this.compositionInput?.getEndData() === \"\"\n    return textChanged || !composedEmptyString\n  }\n\n  // Private\n\n  getCompositionInput() {\n    if (this.isComposing()) {\n      return this.compositionInput\n    } else {\n      this.compositionInput = new CompositionInput(this)\n    }\n  }\n\n  isComposing() {\n    return this.compositionInput && !this.compositionInput.isEnded()\n  }\n\n  deleteInDirection(direction, event) {\n    if (this.responder?.deleteInDirection(direction) === false) {\n      if (event) {\n        event.preventDefault()\n        return this.requestRender()\n      }\n    } else {\n      return this.setInputSummary({ didDelete: true })\n    }\n  }\n\n  serializeSelectionToDataTransfer(dataTransfer) {\n    if (!dataTransferIsWritable(dataTransfer)) return\n    const document = this.responder?.getSelectedDocument().toSerializableDocument()\n\n    dataTransfer.setData(\"application/x-trix-document\", JSON.stringify(document))\n    dataTransfer.setData(\"text/html\", DocumentView.render(document).innerHTML)\n    dataTransfer.setData(\"text/plain\", document.toString().replace(/\\n$/, \"\"))\n    return true\n  }\n\n  canAcceptDataTransfer(dataTransfer) {\n    const types = {}\n    Array.from(dataTransfer?.types || []).forEach((type) => {\n      types[type] = true\n    })\n    return types.Files || types[\"application/x-trix-document\"] || types[\"text/html\"] || types[\"text/plain\"]\n  }\n\n  getPastedHTMLUsingHiddenElement(callback) {\n    const selectedRange = this.getSelectedRange()\n\n    const style = {\n      position: \"absolute\",\n      left: `${window.pageXOffset}px`,\n      top: `${window.pageYOffset}px`,\n      opacity: 0,\n    }\n\n    const element = makeElement({ style, tagName: \"div\", editable: true })\n    document.body.appendChild(element)\n    element.focus()\n\n    return requestAnimationFrame(() => {\n      const html = element.innerHTML\n      removeNode(element)\n      this.setSelectedRange(selectedRange)\n      return callback(html)\n    })\n  }\n}\n\nLevel0InputController.proxyMethod(\"responder?.getSelectedRange\")\nLevel0InputController.proxyMethod(\"responder?.setSelectedRange\")\nLevel0InputController.proxyMethod(\"responder?.expandSelectionInDirection\")\nLevel0InputController.proxyMethod(\"responder?.selectionIsInCursorTarget\")\nLevel0InputController.proxyMethod(\"responder?.selectionIsExpanded\")\n\nconst extensionForFile = (file) => file.type?.match(/\\/(\\w+)$/)?.[1]\n\nconst hasStringCodePointAt = !!\" \".codePointAt?.(0)\n\nconst stringFromKeyEvent = function(event) {\n  if (event.key && hasStringCodePointAt && event.key.codePointAt(0) === event.keyCode) {\n    return event.key\n  } else {\n    let code\n    if (event.which === null) {\n      code = event.keyCode\n    } else if (event.which !== 0 && event.charCode !== 0) {\n      code = event.charCode\n    }\n\n    if (code != null && keyNames[code] !== \"escape\") {\n      return UTF16String.fromCodepoints([ code ]).toString()\n    }\n  }\n}\n\nconst pasteEventIsCrippledSafariHTMLPaste = function(event) {\n  const paste = event.clipboardData\n  if (paste) {\n    if (paste.types.includes(\"text/html\")) {\n      // Answer is yes if there's any possibility of Paste and Match Style in Safari,\n      // which is nearly impossible to detect confidently: https://bugs.webkit.org/show_bug.cgi?id=174165\n      for (const type of paste.types) {\n        const hasPasteboardFlavor = /^CorePasteboardFlavorType/.test(type)\n        const hasReadableDynamicData = /^dyn\\./.test(type) && paste.getData(type)\n        const mightBePasteAndMatchStyle = hasPasteboardFlavor || hasReadableDynamicData\n        if (mightBePasteAndMatchStyle) {\n          return true\n        }\n      }\n      return false\n    } else {\n      const isExternalHTMLPaste = paste.types.includes(\"com.apple.webarchive\")\n      const isExternalRichTextPaste = paste.types.includes(\"com.apple.flat-rtfd\")\n      return isExternalHTMLPaste || isExternalRichTextPaste\n    }\n  }\n}\n\nclass CompositionInput extends BasicObject {\n  constructor(inputController) {\n    super(...arguments)\n    this.inputController = inputController\n    this.responder = this.inputController.responder\n    this.delegate = this.inputController.delegate\n    this.inputSummary = this.inputController.inputSummary\n    this.data = {}\n  }\n\n  start(data) {\n    this.data.start = data\n\n    if (this.isSignificant()) {\n      if (this.inputSummary.eventName === \"keypress\" && this.inputSummary.textAdded) {\n        this.responder?.deleteInDirection(\"left\")\n      }\n\n      if (!this.selectionIsExpanded()) {\n        this.insertPlaceholder()\n        this.requestRender()\n      }\n\n      this.range = this.responder?.getSelectedRange()\n    }\n  }\n\n  update(data) {\n    this.data.update = data\n\n    if (this.isSignificant()) {\n      const range = this.selectPlaceholder()\n      if (range) {\n        this.forgetPlaceholder()\n        this.range = range\n      }\n    }\n  }\n\n  end(data) {\n    this.data.end = data\n\n    if (this.isSignificant()) {\n      this.forgetPlaceholder()\n\n      if (this.canApplyToDocument()) {\n        this.setInputSummary({ preferDocument: true, didInput: false })\n        this.delegate?.inputControllerWillPerformTyping()\n        this.responder?.setSelectedRange(this.range)\n        this.responder?.insertString(this.data.end)\n        return this.responder?.setSelectedRange(this.range[0] + this.data.end.length)\n      } else if (this.data.start != null || this.data.update != null) {\n        this.requestReparse()\n        return this.inputController.reset()\n      }\n    } else {\n      return this.inputController.reset()\n    }\n  }\n\n  getEndData() {\n    return this.data.end\n  }\n\n  isEnded() {\n    return this.getEndData() != null\n  }\n\n  isSignificant() {\n    if (browser.composesExistingText) {\n      return this.inputSummary.didInput\n    } else {\n      return true\n    }\n  }\n\n  // Private\n\n  canApplyToDocument() {\n    return this.data.start?.length === 0 && this.data.end?.length > 0 && this.range\n  }\n}\n\nCompositionInput.proxyMethod(\"inputController.setInputSummary\")\nCompositionInput.proxyMethod(\"inputController.requestRender\")\nCompositionInput.proxyMethod(\"inputController.requestReparse\")\nCompositionInput.proxyMethod(\"responder?.selectionIsExpanded\")\nCompositionInput.proxyMethod(\"responder?.insertPlaceholder\")\nCompositionInput.proxyMethod(\"responder?.selectPlaceholder\")\nCompositionInput.proxyMethod(\"responder?.forgetPlaceholder\")\n", "import { getAllAttributeNames, shouldRenderInmmediatelyToDealWithIOSDictation, squishBreakableWhitespace } from \"trix/core/helpers\"\nimport InputController from \"trix/controllers/input_controller\"\nimport * as config from \"trix/config\"\n\nimport { dataTransferIsMsOfficePaste, dataTransferIsPlainText, keyEventIsKeyboardCommand, objectsAreEqual } from \"trix/core/helpers\"\n\nimport { selectionChangeObserver } from \"trix/observers/selection_change_observer\"\n\nexport default class Level2InputController extends InputController {\n  constructor(...args) {\n    super(...args)\n    this.render = this.render.bind(this)\n  }\n\n  static events = {\n    keydown(event) {\n      if (keyEventIsKeyboardCommand(event)) {\n        const command = keyboardCommandFromKeyEvent(event)\n        if (this.delegate?.inputControllerDidReceiveKeyboardCommand(command)) {\n          event.preventDefault()\n        }\n      } else {\n        let name = event.key\n        if (event.altKey) {\n          name += \"+Alt\"\n        }\n        if (event.shiftKey) {\n          name += \"+Shift\"\n        }\n        const handler = this.constructor.keys[name]\n        if (handler) {\n          return this.withEvent(event, handler)\n        }\n      }\n    },\n\n    // Handle paste event to work around beforeinput.insertFromPaste browser bugs.\n    // Safe to remove each condition once fixed upstream.\n    paste(event) {\n      // https://bugs.webkit.org/show_bug.cgi?id=194921\n      let paste\n      const href = event.clipboardData?.getData(\"URL\")\n      if (pasteEventHasFilesOnly(event)) {\n        event.preventDefault()\n        return this.attachFiles(event.clipboardData.files)\n\n        // https://bugs.chromium.org/p/chromium/issues/detail?id=934448\n      } else if (pasteEventHasPlainTextOnly(event)) {\n        event.preventDefault()\n        paste = {\n          type: \"text/plain\",\n          string: event.clipboardData.getData(\"text/plain\"),\n        }\n        this.delegate?.inputControllerWillPaste(paste)\n        this.responder?.insertString(paste.string)\n        this.render()\n        return this.delegate?.inputControllerDidPaste(paste)\n\n        // https://bugs.webkit.org/show_bug.cgi?id=196702\n      } else if (href) {\n        event.preventDefault()\n        paste = {\n          type: \"text/html\",\n          html: this.createLinkHTML(href),\n        }\n        this.delegate?.inputControllerWillPaste(paste)\n        this.responder?.insertHTML(paste.html)\n        this.render()\n        return this.delegate?.inputControllerDidPaste(paste)\n      }\n    },\n\n    beforeinput(event) {\n      const handler = this.constructor.inputTypes[event.inputType]\n\n      const immmediateRender = shouldRenderInmmediatelyToDealWithIOSDictation(event)\n\n      if (handler) {\n        this.withEvent(event, handler)\n\n        if (!immmediateRender) {\n          this.scheduleRender()\n        }\n      }\n\n      if (immmediateRender) {\n        this.render()\n      }\n    },\n\n    input(event) {\n      selectionChangeObserver.reset()\n    },\n\n    dragstart(event) {\n      if (this.responder?.selectionContainsAttachments()) {\n        event.dataTransfer.setData(\"application/x-trix-dragging\", true)\n\n        this.dragging = {\n          range: this.responder?.getSelectedRange(),\n          point: pointFromEvent(event),\n        }\n      }\n    },\n\n    dragenter(event) {\n      if (dragEventHasFiles(event)) {\n        event.preventDefault()\n      }\n    },\n\n    dragover(event) {\n      if (this.dragging) {\n        event.preventDefault()\n        const point = pointFromEvent(event)\n        if (!objectsAreEqual(point, this.dragging.point)) {\n          this.dragging.point = point\n          return this.responder?.setLocationRangeFromPointRange(point)\n        }\n      } else if (dragEventHasFiles(event)) {\n        event.preventDefault()\n      }\n    },\n\n    drop(event) {\n      if (this.dragging) {\n        event.preventDefault()\n        this.delegate?.inputControllerWillMoveText()\n        this.responder?.moveTextFromRange(this.dragging.range)\n        this.dragging = null\n        return this.scheduleRender()\n      } else if (dragEventHasFiles(event)) {\n        event.preventDefault()\n        const point = pointFromEvent(event)\n        this.responder?.setLocationRangeFromPointRange(point)\n        return this.attachFiles(event.dataTransfer.files)\n      }\n    },\n\n    dragend() {\n      if (this.dragging) {\n        this.responder?.setSelectedRange(this.dragging.range)\n        this.dragging = null\n      }\n    },\n\n    compositionend(event) {\n      if (this.composing) {\n        this.composing = false\n        if (!config.browser.recentAndroid) this.scheduleRender()\n      }\n    },\n  }\n\n  static keys = {\n    ArrowLeft() {\n      if (this.responder?.shouldManageMovingCursorInDirection(\"backward\")) {\n        this.event.preventDefault()\n        return this.responder?.moveCursorInDirection(\"backward\")\n      }\n    },\n\n    ArrowRight() {\n      if (this.responder?.shouldManageMovingCursorInDirection(\"forward\")) {\n        this.event.preventDefault()\n        return this.responder?.moveCursorInDirection(\"forward\")\n      }\n    },\n\n    Backspace() {\n      if (this.responder?.shouldManageDeletingInDirection(\"backward\")) {\n        this.event.preventDefault()\n        this.delegate?.inputControllerWillPerformTyping()\n        this.responder?.deleteInDirection(\"backward\")\n        return this.render()\n      }\n    },\n\n    Tab() {\n      if (this.responder?.canIncreaseNestingLevel()) {\n        this.event.preventDefault()\n        this.responder?.increaseNestingLevel()\n        return this.render()\n      }\n    },\n\n    \"Tab+Shift\"() {\n      if (this.responder?.canDecreaseNestingLevel()) {\n        this.event.preventDefault()\n        this.responder?.decreaseNestingLevel()\n        return this.render()\n      }\n    },\n  }\n\n  static inputTypes = {\n    deleteByComposition() {\n      return this.deleteInDirection(\"backward\", { recordUndoEntry: false })\n    },\n\n    deleteByCut() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteByDrag() {\n      this.event.preventDefault()\n      return this.withTargetDOMRange(function() {\n        this.deleteByDragRange = this.responder?.getSelectedRange()\n      })\n    },\n\n    deleteCompositionText() {\n      return this.deleteInDirection(\"backward\", { recordUndoEntry: false })\n    },\n\n    deleteContent() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteContentBackward() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteContentForward() {\n      return this.deleteInDirection(\"forward\")\n    },\n\n    deleteEntireSoftLine() {\n      return this.deleteInDirection(\"forward\")\n    },\n\n    deleteHardLineBackward() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteHardLineForward() {\n      return this.deleteInDirection(\"forward\")\n    },\n\n    deleteSoftLineBackward() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteSoftLineForward() {\n      return this.deleteInDirection(\"forward\")\n    },\n\n    deleteWordBackward() {\n      return this.deleteInDirection(\"backward\")\n    },\n\n    deleteWordForward() {\n      return this.deleteInDirection(\"forward\")\n    },\n\n    formatBackColor() {\n      return this.activateAttributeIfSupported(\"backgroundColor\", this.event.data)\n    },\n\n    formatBold() {\n      return this.toggleAttributeIfSupported(\"bold\")\n    },\n\n    formatFontColor() {\n      return this.activateAttributeIfSupported(\"color\", this.event.data)\n    },\n\n    formatFontName() {\n      return this.activateAttributeIfSupported(\"font\", this.event.data)\n    },\n\n    formatIndent() {\n      if (this.responder?.canIncreaseNestingLevel()) {\n        return this.withTargetDOMRange(function() {\n          return this.responder?.increaseNestingLevel()\n        })\n      }\n    },\n\n    formatItalic() {\n      return this.toggleAttributeIfSupported(\"italic\")\n    },\n\n    formatJustifyCenter() {\n      return this.toggleAttributeIfSupported(\"justifyCenter\")\n    },\n\n    formatJustifyFull() {\n      return this.toggleAttributeIfSupported(\"justifyFull\")\n    },\n\n    formatJustifyLeft() {\n      return this.toggleAttributeIfSupported(\"justifyLeft\")\n    },\n\n    formatJustifyRight() {\n      return this.toggleAttributeIfSupported(\"justifyRight\")\n    },\n\n    formatOutdent() {\n      if (this.responder?.canDecreaseNestingLevel()) {\n        return this.withTargetDOMRange(function() {\n          return this.responder?.decreaseNestingLevel()\n        })\n      }\n    },\n\n    formatRemove() {\n      this.withTargetDOMRange(function() {\n        for (const attributeName in this.responder?.getCurrentAttributes()) {\n          this.responder?.removeCurrentAttribute(attributeName)\n        }\n      })\n    },\n\n    formatSetBlockTextDirection() {\n      return this.activateAttributeIfSupported(\"blockDir\", this.event.data)\n    },\n\n    formatSetInlineTextDirection() {\n      return this.activateAttributeIfSupported(\"textDir\", this.event.data)\n    },\n\n    formatStrikeThrough() {\n      return this.toggleAttributeIfSupported(\"strike\")\n    },\n\n    formatSubscript() {\n      return this.toggleAttributeIfSupported(\"sub\")\n    },\n\n    formatSuperscript() {\n      return this.toggleAttributeIfSupported(\"sup\")\n    },\n\n    formatUnderline() {\n      return this.toggleAttributeIfSupported(\"underline\")\n    },\n\n    historyRedo() {\n      return this.delegate?.inputControllerWillPerformRedo()\n    },\n\n    historyUndo() {\n      return this.delegate?.inputControllerWillPerformUndo()\n    },\n\n    insertCompositionText() {\n      this.composing = true\n      return this.insertString(this.event.data)\n    },\n\n    insertFromComposition() {\n      this.composing = false\n      return this.insertString(this.event.data)\n    },\n\n    insertFromDrop() {\n      const range = this.deleteByDragRange\n      if (range) {\n        this.deleteByDragRange = null\n        this.delegate?.inputControllerWillMoveText()\n        return this.withTargetDOMRange(function() {\n          return this.responder?.moveTextFromRange(range)\n        })\n      }\n    },\n\n    insertFromPaste() {\n      const { dataTransfer } = this.event\n      const paste = { dataTransfer }\n\n      const href = dataTransfer.getData(\"URL\")\n      const html = dataTransfer.getData(\"text/html\")\n\n      if (href) {\n        let string\n        this.event.preventDefault()\n        paste.type = \"text/html\"\n        const name = dataTransfer.getData(\"public.url-name\")\n        if (name) {\n          string = squishBreakableWhitespace(name).trim()\n        } else {\n          string = href\n        }\n        paste.html = this.createLinkHTML(href, string)\n        this.delegate?.inputControllerWillPaste(paste)\n        this.withTargetDOMRange(function() {\n          return this.responder?.insertHTML(paste.html)\n        })\n        this.afterRender = () => {\n          return this.delegate?.inputControllerDidPaste(paste)\n        }\n      } else if (dataTransferIsPlainText(dataTransfer)) {\n        paste.type = \"text/plain\"\n        paste.string = dataTransfer.getData(\"text/plain\")\n        this.delegate?.inputControllerWillPaste(paste)\n        this.withTargetDOMRange(function() {\n          return this.responder?.insertString(paste.string)\n        })\n\n        this.afterRender = () => {\n          return this.delegate?.inputControllerDidPaste(paste)\n        }\n      } else if (processableFilePaste(this.event)) {\n        paste.type = \"File\"\n        paste.file = dataTransfer.files[0]\n        this.delegate?.inputControllerWillPaste(paste)\n        this.withTargetDOMRange(function() {\n          return this.responder?.insertFile(paste.file)\n        })\n\n        this.afterRender = () => {\n          return this.delegate?.inputControllerDidPaste(paste)\n        }\n      } else if (html) {\n        this.event.preventDefault()\n        paste.type = \"text/html\"\n        paste.html = html\n        this.delegate?.inputControllerWillPaste(paste)\n        this.withTargetDOMRange(function() {\n          return this.responder?.insertHTML(paste.html)\n        })\n        this.afterRender = () => {\n          return this.delegate?.inputControllerDidPaste(paste)\n        }\n      }\n    },\n\n    insertFromYank() {\n      return this.insertString(this.event.data)\n    },\n\n    insertLineBreak() {\n      return this.insertString(\"\\n\")\n    },\n\n    insertLink() {\n      return this.activateAttributeIfSupported(\"href\", this.event.data)\n    },\n\n    insertOrderedList() {\n      return this.toggleAttributeIfSupported(\"number\")\n    },\n\n    insertParagraph() {\n      this.delegate?.inputControllerWillPerformTyping()\n      return this.withTargetDOMRange(function() {\n        return this.responder?.insertLineBreak()\n      })\n    },\n\n    insertReplacementText() {\n      const replacement = this.event.dataTransfer.getData(\"text/plain\")\n      const domRange = this.event.getTargetRanges()[0]\n\n      this.withTargetDOMRange(domRange, () => {\n        this.insertString(replacement, { updatePosition: false })\n      })\n    },\n\n    insertText() {\n      return this.insertString(this.event.data || this.event.dataTransfer?.getData(\"text/plain\"))\n    },\n\n    insertTranspose() {\n      return this.insertString(this.event.data)\n    },\n\n    insertUnorderedList() {\n      return this.toggleAttributeIfSupported(\"bullet\")\n    },\n  }\n\n  elementDidMutate() {\n    if (this.scheduledRender) {\n      if (this.composing) {\n        return this.delegate?.inputControllerDidAllowUnhandledInput?.()\n      }\n    } else {\n      return this.reparse()\n    }\n  }\n\n  scheduleRender() {\n    return this.scheduledRender ? this.scheduledRender : this.scheduledRender = requestAnimationFrame(this.render)\n  }\n\n  render() {\n    cancelAnimationFrame(this.scheduledRender)\n    this.scheduledRender = null\n    if (!this.composing) {\n      this.delegate?.render()\n    }\n    this.afterRender?.()\n    this.afterRender = null\n  }\n\n  reparse() {\n    return this.delegate?.reparse()\n  }\n\n  // Responder helpers\n\n  insertString(string = \"\", options) {\n    this.delegate?.inputControllerWillPerformTyping()\n    return this.withTargetDOMRange(function() {\n      return this.responder?.insertString(string, options)\n    })\n  }\n\n  toggleAttributeIfSupported(attributeName) {\n    if (getAllAttributeNames().includes(attributeName)) {\n      this.delegate?.inputControllerWillPerformFormatting(attributeName)\n      return this.withTargetDOMRange(function() {\n        return this.responder?.toggleCurrentAttribute(attributeName)\n      })\n    }\n  }\n\n  activateAttributeIfSupported(attributeName, value) {\n    if (getAllAttributeNames().includes(attributeName)) {\n      this.delegate?.inputControllerWillPerformFormatting(attributeName)\n      return this.withTargetDOMRange(function() {\n        return this.responder?.setCurrentAttribute(attributeName, value)\n      })\n    }\n  }\n\n  deleteInDirection(direction, { recordUndoEntry } = { recordUndoEntry: true }) {\n    if (recordUndoEntry) {\n      this.delegate?.inputControllerWillPerformTyping()\n    }\n    const perform = () => this.responder?.deleteInDirection(direction)\n    const domRange = this.getTargetDOMRange({ minLength: this.composing ? 1 : 2 })\n    if (domRange) {\n      return this.withTargetDOMRange(domRange, perform)\n    } else {\n      return perform()\n    }\n  }\n\n  // Selection helpers\n\n  withTargetDOMRange(domRange, fn) {\n    if (typeof domRange === \"function\") {\n      fn = domRange\n      domRange = this.getTargetDOMRange()\n    }\n    if (domRange) {\n      return this.responder?.withTargetDOMRange(domRange, fn.bind(this))\n    } else {\n      selectionChangeObserver.reset()\n      return fn.call(this)\n    }\n  }\n\n  getTargetDOMRange({ minLength } = { minLength: 0 }) {\n    const targetRanges = this.event.getTargetRanges?.()\n    if (targetRanges) {\n      if (targetRanges.length) {\n        const domRange = staticRangeToRange(targetRanges[0])\n        if (minLength === 0 || domRange.toString().length >= minLength) {\n          return domRange\n        }\n      }\n    }\n  }\n\n  withEvent(event, fn) {\n    let result\n    this.event = event\n    try {\n      result = fn.call(this)\n    } finally {\n      this.event = null\n    }\n    return result\n  }\n}\n\nconst staticRangeToRange = function(staticRange) {\n  const range = document.createRange()\n  range.setStart(staticRange.startContainer, staticRange.startOffset)\n  range.setEnd(staticRange.endContainer, staticRange.endOffset)\n  return range\n}\n\n// Event helpers\n\nconst dragEventHasFiles = (event) => Array.from(event.dataTransfer?.types || []).includes(\"Files\")\n\nconst processableFilePaste = (event) => {\n  // Paste events that only have files are handled by the paste event handler,\n  // to work around Safari not supporting beforeinput.insertFromPaste for files.\n\n  // MS Office text pastes include a file with a screenshot of the text, but we should\n  // handle them as text pastes.\n  return event.dataTransfer.files?.[0] && !pasteEventHasFilesOnly(event) && !dataTransferIsMsOfficePaste(event)\n}\n\nconst pasteEventHasFilesOnly = function(event) {\n  const clipboard = event.clipboardData\n  if (clipboard) {\n    const fileTypes = Array.from(clipboard.types).filter((type) => type.match(/file/i)) // \"Files\", \"application/x-moz-file\"\n    return fileTypes.length === clipboard.types.length && clipboard.files.length >= 1\n  }\n}\n\nconst pasteEventHasPlainTextOnly = function(event) {\n  const clipboard = event.clipboardData\n  if (clipboard) {\n    return clipboard.types.includes(\"text/plain\") && clipboard.types.length === 1\n  }\n}\n\nconst keyboardCommandFromKeyEvent = function(event) {\n  const command = []\n  if (event.altKey) {\n    command.push(\"alt\")\n  }\n  if (event.shiftKey) {\n    command.push(\"shift\")\n  }\n  command.push(event.key)\n  return command\n}\n\nconst pointFromEvent = (event) => ({\n  x: event.clientX,\n  y: event.clientY,\n})\n", "import BasicObject from \"trix/core/basic_object\"\n\nimport { findClosestElementFromNode, handleEvent, triggerEvent } from \"trix/core/helpers\"\n\nconst attributeButtonSelector = \"[data-trix-attribute]\"\nconst actionButtonSelector = \"[data-trix-action]\"\nconst toolbarButtonSelector = `${attributeButtonSelector}, ${actionButtonSelector}`\nconst dialogSelector = \"[data-trix-dialog]\"\nconst activeDialogSelector = `${dialogSelector}[data-trix-active]`\nconst dialogButtonSelector = `${dialogSelector} [data-trix-method]`\nconst dialogInputSelector = `${dialogSelector} [data-trix-input]`\nconst getInputForDialog = (element, attributeName) => {\n  if (!attributeName) { attributeName = getAttributeName(element) }\n  return element.querySelector(`[data-trix-input][name='${attributeName}']`)\n}\nconst getActionName = (element) => element.getAttribute(\"data-trix-action\")\nconst getAttributeName = (element) => {\n  return element.getAttribute(\"data-trix-attribute\") || element.getAttribute(\"data-trix-dialog-attribute\")\n}\nconst getDialogName = (element) => element.getAttribute(\"data-trix-dialog\")\n\nexport default class ToolbarController extends BasicObject {\n  constructor(element) {\n    super(element)\n    this.didClickActionButton = this.didClickActionButton.bind(this)\n    this.didClickAttributeButton = this.didClickAttributeButton.bind(this)\n    this.didClickDialogButton = this.didClickDialogButton.bind(this)\n    this.didKeyDownDialogInput = this.didKeyDownDialogInput.bind(this)\n    this.element = element\n    this.attributes = {}\n    this.actions = {}\n    this.resetDialogInputs()\n\n    handleEvent(\"mousedown\", {\n      onElement: this.element,\n      matchingSelector: actionButtonSelector,\n      withCallback: this.didClickActionButton,\n    })\n    handleEvent(\"mousedown\", {\n      onElement: this.element,\n      matchingSelector: attributeButtonSelector,\n      withCallback: this.didClickAttributeButton,\n    })\n    handleEvent(\"click\", { onElement: this.element, matchingSelector: toolbarButtonSelector, preventDefault: true })\n    handleEvent(\"click\", {\n      onElement: this.element,\n      matchingSelector: dialogButtonSelector,\n      withCallback: this.didClickDialogButton,\n    })\n    handleEvent(\"keydown\", {\n      onElement: this.element,\n      matchingSelector: dialogInputSelector,\n      withCallback: this.didKeyDownDialogInput,\n    })\n  }\n\n  // Event handlers\n\n  didClickActionButton(event, element) {\n    this.delegate?.toolbarDidClickButton()\n    event.preventDefault()\n    const actionName = getActionName(element)\n\n    if (this.getDialog(actionName)) {\n      return this.toggleDialog(actionName)\n    } else {\n      return this.delegate?.toolbarDidInvokeAction(actionName, element)\n    }\n  }\n\n  didClickAttributeButton(event, element) {\n    this.delegate?.toolbarDidClickButton()\n    event.preventDefault()\n    const attributeName = getAttributeName(element)\n\n    if (this.getDialog(attributeName)) {\n      this.toggleDialog(attributeName)\n    } else {\n      this.delegate?.toolbarDidToggleAttribute(attributeName)\n    }\n\n    return this.refreshAttributeButtons()\n  }\n\n  didClickDialogButton(event, element) {\n    const dialogElement = findClosestElementFromNode(element, { matchingSelector: dialogSelector })\n    const method = element.getAttribute(\"data-trix-method\")\n    return this[method].call(this, dialogElement)\n  }\n\n  didKeyDownDialogInput(event, element) {\n    if (event.keyCode === 13) {\n      // Enter key\n      event.preventDefault()\n      const attribute = element.getAttribute(\"name\")\n      const dialog = this.getDialog(attribute)\n      this.setAttribute(dialog)\n    }\n    if (event.keyCode === 27) {\n      // Escape key\n      event.preventDefault()\n      return this.hideDialog()\n    }\n  }\n\n  // Action buttons\n\n  updateActions(actions) {\n    this.actions = actions\n    return this.refreshActionButtons()\n  }\n\n  refreshActionButtons() {\n    return this.eachActionButton((element, actionName) => {\n      element.disabled = this.actions[actionName] === false\n    })\n  }\n\n  eachActionButton(callback) {\n    return Array.from(this.element.querySelectorAll(actionButtonSelector)).map((element) =>\n      callback(element, getActionName(element))\n    )\n  }\n\n  // Attribute buttons\n\n  updateAttributes(attributes) {\n    this.attributes = attributes\n    return this.refreshAttributeButtons()\n  }\n\n  refreshAttributeButtons() {\n    return this.eachAttributeButton((element, attributeName) => {\n      element.disabled = this.attributes[attributeName] === false\n      if (this.attributes[attributeName] || this.dialogIsVisible(attributeName)) {\n        element.setAttribute(\"data-trix-active\", \"\")\n        return element.classList.add(\"trix-active\")\n      } else {\n        element.removeAttribute(\"data-trix-active\")\n        return element.classList.remove(\"trix-active\")\n      }\n    })\n  }\n\n  eachAttributeButton(callback) {\n    return Array.from(this.element.querySelectorAll(attributeButtonSelector)).map((element) =>\n      callback(element, getAttributeName(element))\n    )\n  }\n\n  applyKeyboardCommand(keys) {\n    const keyString = JSON.stringify(keys.sort())\n    for (const button of Array.from(this.element.querySelectorAll(\"[data-trix-key]\"))) {\n      const buttonKeys = button.getAttribute(\"data-trix-key\").split(\"+\")\n      const buttonKeyString = JSON.stringify(buttonKeys.sort())\n      if (buttonKeyString === keyString) {\n        triggerEvent(\"mousedown\", { onElement: button })\n        return true\n      }\n    }\n    return false\n  }\n\n  // Dialogs\n\n  dialogIsVisible(dialogName) {\n    const element = this.getDialog(dialogName)\n    if (element) {\n      return element.hasAttribute(\"data-trix-active\")\n    }\n  }\n\n  toggleDialog(dialogName) {\n    if (this.dialogIsVisible(dialogName)) {\n      return this.hideDialog()\n    } else {\n      return this.showDialog(dialogName)\n    }\n  }\n\n  showDialog(dialogName) {\n    this.hideDialog()\n    this.delegate?.toolbarWillShowDialog()\n\n    const element = this.getDialog(dialogName)\n    element.setAttribute(\"data-trix-active\", \"\")\n    element.classList.add(\"trix-active\")\n\n    Array.from(element.querySelectorAll(\"input[disabled]\")).forEach((disabledInput) => {\n      disabledInput.removeAttribute(\"disabled\")\n    })\n\n    const attributeName = getAttributeName(element)\n    if (attributeName) {\n      const input = getInputForDialog(element, dialogName)\n      if (input) {\n        input.value = this.attributes[attributeName] || \"\"\n        input.select()\n      }\n    }\n\n    return this.delegate?.toolbarDidShowDialog(dialogName)\n  }\n\n  setAttribute(dialogElement) {\n    const attributeName = getAttributeName(dialogElement)\n    const input = getInputForDialog(dialogElement, attributeName)\n    if (input.willValidate && !input.checkValidity()) {\n      input.setAttribute(\"data-trix-validate\", \"\")\n      input.classList.add(\"trix-validate\")\n      return input.focus()\n    } else {\n      this.delegate?.toolbarDidUpdateAttribute(attributeName, input.value)\n      return this.hideDialog()\n    }\n  }\n\n  removeAttribute(dialogElement) {\n    const attributeName = getAttributeName(dialogElement)\n    this.delegate?.toolbarDidRemoveAttribute(attributeName)\n    return this.hideDialog()\n  }\n\n  hideDialog() {\n    const element = this.element.querySelector(activeDialogSelector)\n    if (element) {\n      element.removeAttribute(\"data-trix-active\")\n      element.classList.remove(\"trix-active\")\n      this.resetDialogInputs()\n      return this.delegate?.toolbarDidHideDialog(getDialogName(element))\n    }\n  }\n\n  resetDialogInputs() {\n    Array.from(this.element.querySelectorAll(dialogInputSelector)).forEach((input) => {\n      input.setAttribute(\"disabled\", \"disabled\")\n      input.removeAttribute(\"data-trix-validate\")\n      input.classList.remove(\"trix-validate\")\n    })\n  }\n\n  getDialog(dialogName) {\n    return this.element.querySelector(`[data-trix-dialog=${dialogName}]`)\n  }\n}\n", "/* eslint-disable\n    id-length,\n*/\nimport * as config from \"trix/config\"\n\nimport { serializeToContentType } from \"trix/core/serialization\"\n\nimport Controller from \"trix/controllers/controller\"\nimport Level0InputController from \"trix/controllers/level_0_input_controller\"\nimport Level2InputController from \"trix/controllers/level_2_input_controller\"\nimport CompositionController from \"trix/controllers/composition_controller\"\nimport ToolbarController from \"trix/controllers/toolbar_controller\"\nimport Composition from \"trix/models/composition\"\nimport Editor from \"trix/models/editor\"\nimport AttachmentManager from \"trix/models/attachment_manager\"\nimport SelectionManager from \"trix/models/selection_manager\"\n\nimport { getBlockConfig, objectsAreEqual, rangeIsCollapsed, rangesAreEqual } from \"trix/core/helpers\"\nimport { selectionChangeObserver } from \"trix/observers/selection_change_observer\"\n\nconst snapshotsAreEqual = (a, b) => rangesAreEqual(a.selectedRange, b.selectedRange) && a.document.isEqualTo(b.document)\n\nexport default class EditorController extends Controller {\n  static actions = {\n    undo: {\n      test() {\n        return this.editor.canUndo()\n      },\n      perform() {\n        return this.editor.undo()\n      },\n    },\n    redo: {\n      test() {\n        return this.editor.canRedo()\n      },\n      perform() {\n        return this.editor.redo()\n      },\n    },\n    link: {\n      test() {\n        return this.editor.canActivateAttribute(\"href\")\n      },\n    },\n    increaseNestingLevel: {\n      test() {\n        return this.editor.canIncreaseNestingLevel()\n      },\n      perform() {\n        return this.editor.increaseNestingLevel() && this.render()\n      },\n    },\n    decreaseNestingLevel: {\n      test() {\n        return this.editor.canDecreaseNestingLevel()\n      },\n      perform() {\n        return this.editor.decreaseNestingLevel() && this.render()\n      },\n    },\n    attachFiles: {\n      test() {\n        return true\n      },\n      perform() {\n        return config.input.pickFiles(this.editor.insertFiles)\n      },\n    },\n  }\n\n  constructor({ editorElement, document, html }) {\n    super(...arguments)\n    this.editorElement = editorElement\n    this.selectionManager = new SelectionManager(this.editorElement)\n    this.selectionManager.delegate = this\n\n    this.composition = new Composition()\n    this.composition.delegate = this\n\n    this.attachmentManager = new AttachmentManager(this.composition.getAttachments())\n    this.attachmentManager.delegate = this\n\n    this.inputController =\n      config.input.getLevel() === 2\n        ? new Level2InputController(this.editorElement)\n        : new Level0InputController(this.editorElement)\n\n    this.inputController.delegate = this\n    this.inputController.responder = this.composition\n\n    this.compositionController = new CompositionController(this.editorElement, this.composition)\n    this.compositionController.delegate = this\n\n    this.toolbarController = new ToolbarController(this.editorElement.toolbarElement)\n    this.toolbarController.delegate = this\n\n    this.editor = new Editor(this.composition, this.selectionManager, this.editorElement)\n    if (document) {\n      this.editor.loadDocument(document)\n    } else {\n      this.editor.loadHTML(html)\n    }\n  }\n\n  registerSelectionManager() {\n    return selectionChangeObserver.registerSelectionManager(this.selectionManager)\n  }\n\n  unregisterSelectionManager() {\n    return selectionChangeObserver.unregisterSelectionManager(this.selectionManager)\n  }\n\n  render() {\n    return this.compositionController.render()\n  }\n\n  reparse() {\n    return this.composition.replaceHTML(this.editorElement.innerHTML)\n  }\n\n  // Composition delegate\n\n  compositionDidChangeDocument(document) {\n    this.notifyEditorElement(\"document-change\")\n    if (!this.handlingInput) {\n      return this.render()\n    }\n  }\n\n  compositionDidChangeCurrentAttributes(currentAttributes) {\n    this.currentAttributes = currentAttributes\n    this.toolbarController.updateAttributes(this.currentAttributes)\n    this.updateCurrentActions()\n    return this.notifyEditorElement(\"attributes-change\", { attributes: this.currentAttributes })\n  }\n\n  compositionDidPerformInsertionAtRange(range) {\n    if (this.pasting) {\n      this.pastedRange = range\n    }\n  }\n\n  compositionShouldAcceptFile(file) {\n    return this.notifyEditorElement(\"file-accept\", { file })\n  }\n\n  compositionDidAddAttachment(attachment) {\n    const managedAttachment = this.attachmentManager.manageAttachment(attachment)\n    return this.notifyEditorElement(\"attachment-add\", { attachment: managedAttachment })\n  }\n\n  compositionDidEditAttachment(attachment) {\n    this.compositionController.rerenderViewForObject(attachment)\n    const managedAttachment = this.attachmentManager.manageAttachment(attachment)\n    this.notifyEditorElement(\"attachment-edit\", { attachment: managedAttachment })\n    return this.notifyEditorElement(\"change\")\n  }\n\n  compositionDidChangeAttachmentPreviewURL(attachment) {\n    this.compositionController.invalidateViewForObject(attachment)\n    return this.notifyEditorElement(\"change\")\n  }\n\n  compositionDidRemoveAttachment(attachment) {\n    const managedAttachment = this.attachmentManager.unmanageAttachment(attachment)\n    return this.notifyEditorElement(\"attachment-remove\", { attachment: managedAttachment })\n  }\n\n  compositionDidStartEditingAttachment(attachment, options) {\n    this.attachmentLocationRange = this.composition.document.getLocationRangeOfAttachment(attachment)\n    this.compositionController.installAttachmentEditorForAttachment(attachment, options)\n    return this.selectionManager.setLocationRange(this.attachmentLocationRange)\n  }\n\n  compositionDidStopEditingAttachment(attachment) {\n    this.compositionController.uninstallAttachmentEditor()\n    this.attachmentLocationRange = null\n  }\n\n  compositionDidRequestChangingSelectionToLocationRange(locationRange) {\n    if (this.loadingSnapshot && !this.isFocused()) return\n    this.requestedLocationRange = locationRange\n    this.compositionRevisionWhenLocationRangeRequested = this.composition.revision\n    if (!this.handlingInput) {\n      return this.render()\n    }\n  }\n\n  compositionWillLoadSnapshot() {\n    this.loadingSnapshot = true\n  }\n\n  compositionDidLoadSnapshot() {\n    this.compositionController.refreshViewCache()\n    this.render()\n    this.loadingSnapshot = false\n  }\n\n  getSelectionManager() {\n    return this.selectionManager\n  }\n\n  // Attachment manager delegate\n\n  attachmentManagerDidRequestRemovalOfAttachment(attachment) {\n    return this.removeAttachment(attachment)\n  }\n\n  // Document controller delegate\n\n  compositionControllerWillSyncDocumentView() {\n    this.inputController.editorWillSyncDocumentView()\n    this.selectionManager.lock()\n    return this.selectionManager.clearSelection()\n  }\n\n  compositionControllerDidSyncDocumentView() {\n    this.inputController.editorDidSyncDocumentView()\n    this.selectionManager.unlock()\n    this.updateCurrentActions()\n    return this.notifyEditorElement(\"sync\")\n  }\n\n  compositionControllerDidRender() {\n    if (this.requestedLocationRange) {\n      if (this.compositionRevisionWhenLocationRangeRequested === this.composition.revision) {\n        this.selectionManager.setLocationRange(this.requestedLocationRange)\n      }\n      this.requestedLocationRange = null\n      this.compositionRevisionWhenLocationRangeRequested = null\n    }\n\n    if (this.renderedCompositionRevision !== this.composition.revision) {\n      this.runEditorFilters()\n      this.composition.updateCurrentAttributes()\n      this.notifyEditorElement(\"render\")\n    }\n\n    this.renderedCompositionRevision = this.composition.revision\n  }\n\n  compositionControllerDidFocus() {\n    if (this.isFocusedInvisibly()) {\n      this.setLocationRange({ index: 0, offset: 0 })\n    }\n    this.toolbarController.hideDialog()\n    return this.notifyEditorElement(\"focus\")\n  }\n\n  compositionControllerDidBlur() {\n    return this.notifyEditorElement(\"blur\")\n  }\n\n  compositionControllerDidSelectAttachment(attachment, options) {\n    this.toolbarController.hideDialog()\n    return this.composition.editAttachment(attachment, options)\n  }\n\n  compositionControllerDidRequestDeselectingAttachment(attachment) {\n    const locationRange = this.attachmentLocationRange || this.composition.document.getLocationRangeOfAttachment(attachment)\n    return this.selectionManager.setLocationRange(locationRange[1])\n  }\n\n  compositionControllerWillUpdateAttachment(attachment) {\n    return this.editor.recordUndoEntry(\"Edit Attachment\", { context: attachment.id, consolidatable: true })\n  }\n\n  compositionControllerDidRequestRemovalOfAttachment(attachment) {\n    return this.removeAttachment(attachment)\n  }\n\n  // Input controller delegate\n\n  inputControllerWillHandleInput() {\n    this.handlingInput = true\n    this.requestedRender = false\n  }\n\n  inputControllerDidRequestRender() {\n    this.requestedRender = true\n  }\n\n  inputControllerDidHandleInput() {\n    this.handlingInput = false\n    if (this.requestedRender) {\n      this.requestedRender = false\n      return this.render()\n    }\n  }\n\n  inputControllerDidAllowUnhandledInput() {\n    return this.notifyEditorElement(\"change\")\n  }\n\n  inputControllerDidRequestReparse() {\n    return this.reparse()\n  }\n\n  inputControllerWillPerformTyping() {\n    return this.recordTypingUndoEntry()\n  }\n\n  inputControllerWillPerformFormatting(attributeName) {\n    return this.recordFormattingUndoEntry(attributeName)\n  }\n\n  inputControllerWillCutText() {\n    return this.editor.recordUndoEntry(\"Cut\")\n  }\n\n  inputControllerWillPaste(paste) {\n    this.editor.recordUndoEntry(\"Paste\")\n    this.pasting = true\n    return this.notifyEditorElement(\"before-paste\", { paste })\n  }\n\n  inputControllerDidPaste(paste) {\n    paste.range = this.pastedRange\n    this.pastedRange = null\n    this.pasting = null\n    return this.notifyEditorElement(\"paste\", { paste })\n  }\n\n  inputControllerWillMoveText() {\n    return this.editor.recordUndoEntry(\"Move\")\n  }\n\n  inputControllerWillAttachFiles() {\n    return this.editor.recordUndoEntry(\"Drop Files\")\n  }\n\n  inputControllerWillPerformUndo() {\n    return this.editor.undo()\n  }\n\n  inputControllerWillPerformRedo() {\n    return this.editor.redo()\n  }\n\n  inputControllerDidReceiveKeyboardCommand(keys) {\n    return this.toolbarController.applyKeyboardCommand(keys)\n  }\n\n  inputControllerDidStartDrag() {\n    this.locationRangeBeforeDrag = this.selectionManager.getLocationRange()\n  }\n\n  inputControllerDidReceiveDragOverPoint(point) {\n    return this.selectionManager.setLocationRangeFromPointRange(point)\n  }\n\n  inputControllerDidCancelDrag() {\n    this.selectionManager.setLocationRange(this.locationRangeBeforeDrag)\n    this.locationRangeBeforeDrag = null\n  }\n\n  // Selection manager delegate\n\n  locationRangeDidChange(locationRange) {\n    this.composition.updateCurrentAttributes()\n    this.updateCurrentActions()\n    if (this.attachmentLocationRange && !rangesAreEqual(this.attachmentLocationRange, locationRange)) {\n      this.composition.stopEditingAttachment()\n    }\n    return this.notifyEditorElement(\"selection-change\")\n  }\n\n  // Toolbar controller delegate\n\n  toolbarDidClickButton() {\n    if (!this.getLocationRange()) {\n      return this.setLocationRange({ index: 0, offset: 0 })\n    }\n  }\n\n  toolbarDidInvokeAction(actionName, invokingElement) {\n    return this.invokeAction(actionName, invokingElement)\n  }\n\n  toolbarDidToggleAttribute(attributeName) {\n    this.recordFormattingUndoEntry(attributeName)\n    this.composition.toggleCurrentAttribute(attributeName)\n    this.render()\n    if (!this.selectionFrozen) {\n      return this.editorElement.focus()\n    }\n  }\n\n  toolbarDidUpdateAttribute(attributeName, value) {\n    this.recordFormattingUndoEntry(attributeName)\n    this.composition.setCurrentAttribute(attributeName, value)\n    this.render()\n    if (!this.selectionFrozen) {\n      return this.editorElement.focus()\n    }\n  }\n\n  toolbarDidRemoveAttribute(attributeName) {\n    this.recordFormattingUndoEntry(attributeName)\n    this.composition.removeCurrentAttribute(attributeName)\n    this.render()\n    if (!this.selectionFrozen) {\n      return this.editorElement.focus()\n    }\n  }\n\n  toolbarWillShowDialog(dialogElement) {\n    this.composition.expandSelectionForEditing()\n    return this.freezeSelection()\n  }\n\n  toolbarDidShowDialog(dialogName) {\n    return this.notifyEditorElement(\"toolbar-dialog-show\", { dialogName })\n  }\n\n  toolbarDidHideDialog(dialogName) {\n    this.thawSelection()\n    this.editorElement.focus()\n    return this.notifyEditorElement(\"toolbar-dialog-hide\", { dialogName })\n  }\n\n  // Selection\n\n  freezeSelection() {\n    if (!this.selectionFrozen) {\n      this.selectionManager.lock()\n      this.composition.freezeSelection()\n      this.selectionFrozen = true\n      return this.render()\n    }\n  }\n\n  thawSelection() {\n    if (this.selectionFrozen) {\n      this.composition.thawSelection()\n      this.selectionManager.unlock()\n      this.selectionFrozen = false\n      return this.render()\n    }\n  }\n\n  canInvokeAction(actionName) {\n    if (this.actionIsExternal(actionName)) {\n      return true\n    } else {\n      return !!this.actions[actionName]?.test?.call(this)\n    }\n  }\n\n  invokeAction(actionName, invokingElement) {\n    if (this.actionIsExternal(actionName)) {\n      return this.notifyEditorElement(\"action-invoke\", { actionName, invokingElement })\n    } else {\n      return this.actions[actionName]?.perform?.call(this)\n    }\n  }\n\n  actionIsExternal(actionName) {\n    return /^x-./.test(actionName)\n  }\n\n  getCurrentActions() {\n    const result = {}\n    for (const actionName in this.actions) {\n      result[actionName] = this.canInvokeAction(actionName)\n    }\n    return result\n  }\n\n  updateCurrentActions() {\n    const currentActions = this.getCurrentActions()\n    if (!objectsAreEqual(currentActions, this.currentActions)) {\n      this.currentActions = currentActions\n      this.toolbarController.updateActions(this.currentActions)\n      return this.notifyEditorElement(\"actions-change\", { actions: this.currentActions })\n    }\n  }\n\n  // Editor filters\n\n  runEditorFilters() {\n    let snapshot = this.composition.getSnapshot()\n\n    Array.from(this.editor.filters).forEach((filter) => {\n      const { document, selectedRange } = snapshot\n      snapshot = filter.call(this.editor, snapshot) || {}\n      if (!snapshot.document) {\n        snapshot.document = document\n      }\n      if (!snapshot.selectedRange) {\n        snapshot.selectedRange = selectedRange\n      }\n    })\n\n    if (!snapshotsAreEqual(snapshot, this.composition.getSnapshot())) {\n      return this.composition.loadSnapshot(snapshot)\n    }\n  }\n\n  // Private\n\n  updateInputElement() {\n    const element = this.compositionController.getSerializableElement()\n    const value = serializeToContentType(element, \"text/html\")\n    return this.editorElement.setFormValue(value)\n  }\n\n  notifyEditorElement(message, data) {\n    switch (message) {\n      case \"document-change\":\n        this.documentChangedSinceLastRender = true\n        break\n      case \"render\":\n        if (this.documentChangedSinceLastRender) {\n          this.documentChangedSinceLastRender = false\n          this.notifyEditorElement(\"change\")\n        }\n        break\n      case \"change\":\n      case \"attachment-add\":\n      case \"attachment-edit\":\n      case \"attachment-remove\":\n        this.updateInputElement()\n        break\n    }\n\n    return this.editorElement.notify(message, data)\n  }\n\n  removeAttachment(attachment) {\n    this.editor.recordUndoEntry(\"Delete Attachment\")\n    this.composition.removeAttachment(attachment)\n    return this.render()\n  }\n\n  recordFormattingUndoEntry(attributeName) {\n    const blockConfig = getBlockConfig(attributeName)\n    const locationRange = this.selectionManager.getLocationRange()\n    if (blockConfig || !rangeIsCollapsed(locationRange)) {\n      return this.editor.recordUndoEntry(\"Formatting\", { context: this.getUndoContext(), consolidatable: true })\n    }\n  }\n\n  recordTypingUndoEntry() {\n    return this.editor.recordUndoEntry(\"Typing\", {\n      context: this.getUndoContext(this.currentAttributes),\n      consolidatable: true,\n    })\n  }\n\n  getUndoContext(...context) {\n    return [ this.getLocationContext(), this.getTimeContext(), ...Array.from(context) ]\n  }\n\n  getLocationContext() {\n    const locationRange = this.selectionManager.getLocationRange()\n    if (rangeIsCollapsed(locationRange)) {\n      return locationRange[0].index\n    } else {\n      return locationRange\n    }\n  }\n\n  getTimeContext() {\n    if (config.undo.interval > 0) {\n      return Math.floor(new Date().getTime() / config.undo.interval)\n    } else {\n      return 0\n    }\n  }\n\n  isFocused() {\n    return this.editorElement === this.editorElement.ownerDocument?.activeElement\n  }\n\n  // Detect \"Cursor disappears sporadically\" Firefox bug.\n  // - https://bugzilla.mozilla.org/show_bug.cgi?id=226301\n  isFocusedInvisibly() {\n    return this.isFocused() && !this.getLocationRange()\n  }\n\n  get actions() {\n    return this.constructor.actions\n  }\n}\n\nEditorController.proxyMethod(\"getSelectionManager().setLocationRange\")\nEditorController.proxyMethod(\"getSelectionManager().getLocationRange\")\n", "import * as config from \"trix/config\"\n\nimport { installDefaultCSSForTagName } from \"trix/core/helpers\"\n\ninstallDefaultCSSForTagName(\"trix-toolbar\", `\\\n%t {\n  display: block;\n}\n\n%t {\n  white-space: nowrap;\n}\n\n%t [data-trix-dialog] {\n  display: none;\n}\n\n%t [data-trix-dialog][data-trix-active] {\n  display: block;\n}\n\n%t [data-trix-dialog] [data-trix-validate]:invalid {\n  background-color: #ffdddd;\n}`)\n\nexport default class TrixToolbarElement extends HTMLElement {\n\n  // Element lifecycle\n\n  connectedCallback() {\n    if (this.innerHTML === \"\") {\n      this.innerHTML = config.toolbar.getDefaultHTML()\n    }\n  }\n}\n", "import * as config from \"trix/config\"\n\nimport {\n  findClosestElementFromNode,\n  handleEvent,\n  handleEventOnce,\n  installDefaultCSSForTagName,\n  makeElement,\n  triggerEvent,\n} from \"trix/core/helpers\"\n\nimport { attachmentSelector } from \"trix/config/attachments\"\nimport EditorController from \"trix/controllers/editor_controller\"\nimport \"trix/elements/trix_toolbar_element\"\n\nlet id = 0\n\n// Contenteditable support helpers\n\nconst autofocus = function(element) {\n  if (!document.querySelector(\":focus\")) {\n    if (element.hasAttribute(\"autofocus\") && document.querySelector(\"[autofocus]\") === element) {\n      return element.focus()\n    }\n  }\n}\n\nconst makeEditable = function(element) {\n  if (element.hasAttribute(\"contenteditable\")) {\n    return\n  }\n  element.setAttribute(\"contenteditable\", \"\")\n  return handleEventOnce(\"focus\", {\n    onElement: element,\n    withCallback() {\n      return configureContentEditable(element)\n    },\n  })\n}\n\nconst configureContentEditable = function(element) {\n  disableObjectResizing(element)\n  return setDefaultParagraphSeparator(element)\n}\n\nconst disableObjectResizing = function(element) {\n  if (document.queryCommandSupported?.(\"enableObjectResizing\")) {\n    document.execCommand(\"enableObjectResizing\", false, false)\n    return handleEvent(\"mscontrolselect\", { onElement: element, preventDefault: true })\n  }\n}\n\nconst setDefaultParagraphSeparator = function(element) {\n  if (document.queryCommandSupported?.(\"DefaultParagraphSeparator\")) {\n    const { tagName } = config.blockAttributes.default\n    if ([ \"div\", \"p\" ].includes(tagName)) {\n      return document.execCommand(\"DefaultParagraphSeparator\", false, tagName)\n    }\n  }\n}\n\n// Accessibility helpers\n\nconst addAccessibilityRole = function(element) {\n  if (element.hasAttribute(\"role\")) {\n    return\n  }\n  return element.setAttribute(\"role\", \"textbox\")\n}\n\nconst ensureAriaLabel = function(element) {\n  if (element.hasAttribute(\"aria-label\") || element.hasAttribute(\"aria-labelledby\")) {\n    return\n  }\n\n  const update = function() {\n    const texts = Array.from(element.labels).map((label) => {\n      if (!label.contains(element)) return label.textContent\n    }).filter(text => text)\n\n    const text = texts.join(\" \")\n    if (text) {\n      return element.setAttribute(\"aria-label\", text)\n    } else {\n      return element.removeAttribute(\"aria-label\")\n    }\n  }\n  update()\n  return handleEvent(\"focus\", { onElement: element, withCallback: update })\n}\n\n// Style\n\nconst cursorTargetStyles = (function() {\n  if (config.browser.forcesObjectResizing) {\n    return {\n      display: \"inline\",\n      width: \"auto\",\n    }\n  } else {\n    return {\n      display: \"inline-block\",\n      width: \"1px\",\n    }\n  }\n})()\n\ninstallDefaultCSSForTagName(\"trix-editor\", `\\\n%t {\n    display: block;\n}\n\n%t:empty::before {\n    content: attr(placeholder);\n    color: graytext;\n    cursor: text;\n    pointer-events: none;\n    white-space: pre-line;\n}\n\n%t a[contenteditable=false] {\n    cursor: text;\n}\n\n%t img {\n    max-width: 100%;\n    height: auto;\n}\n\n%t ${attachmentSelector} figcaption textarea {\n    resize: none;\n}\n\n%t ${attachmentSelector} figcaption textarea.trix-autoresize-clone {\n    position: absolute;\n    left: -9999px;\n    max-height: 0px;\n}\n\n%t ${attachmentSelector} figcaption[data-trix-placeholder]:empty::before {\n    content: attr(data-trix-placeholder);\n    color: graytext;\n}\n\n%t [data-trix-cursor-target] {\n    display: ${cursorTargetStyles.display} !important;\n    width: ${cursorTargetStyles.width} !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    border: none !important;\n}\n\n%t [data-trix-cursor-target=left] {\n    vertical-align: top !important;\n    margin-left: -1px !important;\n}\n\n%t [data-trix-cursor-target=right] {\n    vertical-align: bottom !important;\n    margin-right: -1px !important;\n}`)\n\nclass ElementInternalsDelegate {\n  #internals\n\n  constructor(element) {\n    this.element = element\n    this.#internals = element.attachInternals()\n  }\n\n  connectedCallback() {\n    this.#validate()\n  }\n\n  disconnectedCallback() {\n  }\n\n  get labels() {\n    return this.#internals.labels\n  }\n\n  get disabled() {\n    return this.element.inputElement?.disabled\n  }\n\n  set disabled(value) {\n    this.element.toggleAttribute(\"disabled\", value)\n  }\n\n  get required() {\n    return this.element.hasAttribute(\"required\")\n  }\n\n  set required(value) {\n    this.element.toggleAttribute(\"required\", value)\n    this.#validate()\n  }\n\n  get validity() {\n    return this.#internals.validity\n  }\n\n  get validationMessage() {\n    return this.#internals.validationMessage\n  }\n\n  get willValidate() {\n    return this.#internals.willValidate\n  }\n\n  setFormValue(value) {\n    this.#validate()\n  }\n\n  checkValidity() {\n    return this.#internals.checkValidity()\n  }\n\n  reportValidity() {\n    return this.#internals.reportValidity()\n  }\n\n  setCustomValidity(validationMessage) {\n    this.#validate(validationMessage)\n  }\n\n  #validate(customValidationMessage = \"\") {\n    const { required, value } = this.element\n    const valueMissing = required && !value\n    const customError = !!customValidationMessage\n    const input = makeElement(\"input\", { required })\n    const validationMessage = customValidationMessage || input.validationMessage\n\n    this.#internals.setValidity({ valueMissing, customError }, validationMessage)\n  }\n}\n\nclass LegacyDelegate {\n  #focusHandler\n\n  constructor(element) {\n    this.element = element\n  }\n\n  connectedCallback() {\n    this.#focusHandler = ensureAriaLabel(this.element)\n    window.addEventListener(\"reset\", this.#resetBubbled, false)\n    window.addEventListener(\"click\", this.#clickBubbled, false)\n  }\n\n  disconnectedCallback() {\n    this.#focusHandler?.destroy()\n    window.removeEventListener(\"reset\", this.#resetBubbled, false)\n    window.removeEventListener(\"click\", this.#clickBubbled, false)\n  }\n\n  get labels() {\n    const labels = []\n    if (this.element.id && this.element.ownerDocument) {\n      labels.push(...Array.from(this.element.ownerDocument.querySelectorAll(`label[for='${this.element.id}']`) || []))\n    }\n\n    const label = findClosestElementFromNode(this.element, { matchingSelector: \"label\" })\n    if (label) {\n      if ([ this.element, null ].includes(label.control)) {\n        labels.push(label)\n      }\n    }\n\n    return labels\n  }\n\n  get disabled() {\n    console.warn(\"This browser does not support the [disabled] attribute for trix-editor elements.\")\n\n    return false\n  }\n\n  set disabled(value) {\n    console.warn(\"This browser does not support the [disabled] attribute for trix-editor elements.\")\n  }\n\n  get required() {\n    console.warn(\"This browser does not support the [required] attribute for trix-editor elements.\")\n\n    return false\n  }\n\n  set required(value) {\n    console.warn(\"This browser does not support the [required] attribute for trix-editor elements.\")\n  }\n\n  get validity() {\n    console.warn(\"This browser does not support the validity property for trix-editor elements.\")\n    return null\n  }\n\n  get validationMessage() {\n    console.warn(\"This browser does not support the validationMessage property for trix-editor elements.\")\n\n    return \"\"\n  }\n\n  get willValidate() {\n    console.warn(\"This browser does not support the willValidate property for trix-editor elements.\")\n\n    return false\n  }\n\n  setFormValue(value) {\n  }\n\n  checkValidity() {\n    console.warn(\"This browser does not support checkValidity() for trix-editor elements.\")\n\n    return true\n  }\n\n  reportValidity() {\n    console.warn(\"This browser does not support reportValidity() for trix-editor elements.\")\n\n    return true\n  }\n\n  setCustomValidity(validationMessage) {\n    console.warn(\"This browser does not support setCustomValidity(validationMessage) for trix-editor elements.\")\n  }\n\n  #resetBubbled = (event) => {\n    if (event.defaultPrevented) return\n    if (event.target !== this.element.form) return\n    this.element.reset()\n  }\n\n  #clickBubbled = (event) => {\n    if (event.defaultPrevented) return\n    if (this.element.contains(event.target)) return\n\n    const label = findClosestElementFromNode(event.target, { matchingSelector: \"label\" })\n    if (!label) return\n\n    if (!Array.from(this.labels).includes(label)) return\n\n    this.element.focus()\n  }\n}\n\nexport default class TrixEditorElement extends HTMLElement {\n  static formAssociated = \"ElementInternals\" in window\n\n  #delegate\n\n  constructor() {\n    super()\n    this.#delegate = this.constructor.formAssociated ?\n      new ElementInternalsDelegate(this) :\n      new LegacyDelegate(this)\n  }\n\n  // Properties\n\n  get trixId() {\n    if (this.hasAttribute(\"trix-id\")) {\n      return this.getAttribute(\"trix-id\")\n    } else {\n      this.setAttribute(\"trix-id\", ++id)\n      return this.trixId\n    }\n  }\n\n  get labels() {\n    return this.#delegate.labels\n  }\n\n  get disabled() {\n    return this.#delegate.disabled\n  }\n\n  set disabled(value) {\n    this.#delegate.disabled = value\n  }\n\n  get required() {\n    return this.#delegate.required\n  }\n\n  set required(value) {\n    this.#delegate.required = value\n  }\n\n  get validity() {\n    return this.#delegate.validity\n  }\n\n  get validationMessage() {\n    return this.#delegate.validationMessage\n  }\n\n  get willValidate() {\n    return this.#delegate.willValidate\n  }\n\n  get type() {\n    return this.localName\n  }\n\n  get toolbarElement() {\n    if (this.hasAttribute(\"toolbar\")) {\n      return this.ownerDocument?.getElementById(this.getAttribute(\"toolbar\"))\n    } else if (this.parentNode) {\n      const toolbarId = `trix-toolbar-${this.trixId}`\n      this.setAttribute(\"toolbar\", toolbarId)\n      const element = makeElement(\"trix-toolbar\", { id: toolbarId })\n      this.parentNode.insertBefore(element, this)\n      return element\n    } else {\n      return undefined\n    }\n  }\n\n  get form() {\n    return this.inputElement?.form\n  }\n\n  get inputElement() {\n    if (this.hasAttribute(\"input\")) {\n      return this.ownerDocument?.getElementById(this.getAttribute(\"input\"))\n    } else if (this.parentNode) {\n      const inputId = `trix-input-${this.trixId}`\n      this.setAttribute(\"input\", inputId)\n      const element = makeElement(\"input\", { type: \"hidden\", id: inputId })\n      this.parentNode.insertBefore(element, this.nextElementSibling)\n      return element\n    } else {\n      return undefined\n    }\n  }\n\n  get editor() {\n    return this.editorController?.editor\n  }\n\n  get name() {\n    return this.inputElement?.name\n  }\n\n  get value() {\n    return this.inputElement?.value\n  }\n\n  set value(defaultValue) {\n    this.defaultValue = defaultValue\n    this.editor?.loadHTML(this.defaultValue)\n  }\n\n  // Controller delegate methods\n\n  notify(message, data) {\n    if (this.editorController) {\n      return triggerEvent(`trix-${message}`, { onElement: this, attributes: data })\n    }\n  }\n\n  setFormValue(value) {\n    if (this.inputElement) {\n      this.inputElement.value = value\n      this.#delegate.setFormValue(value)\n    }\n  }\n\n  // Element lifecycle\n\n  connectedCallback() {\n    if (!this.hasAttribute(\"data-trix-internal\")) {\n      makeEditable(this)\n      addAccessibilityRole(this)\n\n      if (!this.editorController) {\n        triggerEvent(\"trix-before-initialize\", { onElement: this })\n        this.editorController = new EditorController({\n          editorElement: this,\n          html: this.defaultValue = this.value,\n        })\n        requestAnimationFrame(() => triggerEvent(\"trix-initialize\", { onElement: this }))\n      }\n      this.editorController.registerSelectionManager()\n      this.#delegate.connectedCallback()\n      autofocus(this)\n    }\n  }\n\n  disconnectedCallback() {\n    this.editorController?.unregisterSelectionManager()\n    this.#delegate.disconnectedCallback()\n  }\n\n  // Form support\n\n  checkValidity() {\n    return this.#delegate.checkValidity()\n  }\n\n  reportValidity() {\n    return this.#delegate.reportValidity()\n  }\n\n  setCustomValidity(validationMessage) {\n    this.#delegate.setCustomValidity(validationMessage)\n  }\n\n  formDisabledCallback(disabled) {\n    if (this.inputElement) {\n      this.inputElement.disabled = disabled\n    }\n    this.toggleAttribute(\"contenteditable\", !disabled)\n  }\n\n  formResetCallback() {\n    this.reset()\n  }\n\n  reset() {\n    this.value = this.defaultValue\n  }\n}\n", "import { version } from \"../../package.json\"\n\nimport * as config from \"trix/config\"\nimport * as core from \"trix/core\"\nimport * as models from \"trix/models\"\nimport * as views from \"trix/views\"\nimport * as controllers from \"trix/controllers\"\nimport * as observers from \"trix/observers\"\nimport * as operations from \"trix/operations\"\nimport * as elements from \"trix/elements\"\nimport * as filters from \"trix/filters\"\n\nconst Trix = {\n  VERSION: version,\n  config,\n  core,\n  models,\n  views,\n  controllers,\n  observers,\n  operations,\n  elements,\n  filters\n}\n\n// Expose models under the Trix constant for compatibility with v1\nObject.assign(Trix, models)\n\nfunction start() {\n  if (!customElements.get(\"trix-toolbar\")) {\n    customElements.define(\"trix-toolbar\", elements.TrixToolbarElement)\n  }\n\n  if (!customElements.get(\"trix-editor\")) {\n    customElements.define(\"trix-editor\", elements.TrixEditorElement)\n  }\n}\n\nwindow.Trix = Trix\nsetTimeout(start, 0)\n\nexport default Trix\n", "var sparkMd5 = {\n  exports: {}\n};\n\n(function(module, exports) {\n  (function(factory) {\n    {\n      module.exports = factory();\n    }\n  })((function(undefined$1) {\n    var hex_chr = [ \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\" ];\n    function md5cycle(x, k) {\n      var a = x[0], b = x[1], c = x[2], d = x[3];\n      a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[10] - 42063 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b ^ c ^ d) + k[5] - 378558 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      x[0] = a + x[0] | 0;\n      x[1] = b + x[1] | 0;\n      x[2] = c + x[2] | 0;\n      x[3] = d + x[3] | 0;\n    }\n    function md5blk(s) {\n      var md5blks = [], i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n      }\n      return md5blks;\n    }\n    function md5blk_array(a) {\n      var md5blks = [], i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n      }\n      return md5blks;\n    }\n    function md51(s) {\n      var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk(s.substring(i - 64, i)));\n      }\n      s = s.substring(i - 64);\n      length = s.length;\n      tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function md51_array(a) {\n      var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n      }\n      a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n      length = a.length;\n      tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= a[i] << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function rhex(n) {\n      var s = \"\", j;\n      for (j = 0; j < 4; j += 1) {\n        s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n      }\n      return s;\n    }\n    function hex(x) {\n      var i;\n      for (i = 0; i < x.length; i += 1) {\n        x[i] = rhex(x[i]);\n      }\n      return x.join(\"\");\n    }\n    if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n    if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n      (function() {\n        function clamp(val, length) {\n          val = val | 0 || 0;\n          if (val < 0) {\n            return Math.max(val + length, 0);\n          }\n          return Math.min(val, length);\n        }\n        ArrayBuffer.prototype.slice = function(from, to) {\n          var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n          if (to !== undefined$1) {\n            end = clamp(to, length);\n          }\n          if (begin > end) {\n            return new ArrayBuffer(0);\n          }\n          num = end - begin;\n          target = new ArrayBuffer(num);\n          targetArray = new Uint8Array(target);\n          sourceArray = new Uint8Array(this, begin, num);\n          targetArray.set(sourceArray);\n          return target;\n        };\n      })();\n    }\n    function toUtf8(str) {\n      if (/[\\u0080-\\uFFFF]/.test(str)) {\n        str = unescape(encodeURIComponent(str));\n      }\n      return str;\n    }\n    function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n      var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n      for (i = 0; i < length; i += 1) {\n        arr[i] = str.charCodeAt(i);\n      }\n      return returnUInt8Array ? arr : buff;\n    }\n    function arrayBuffer2Utf8Str(buff) {\n      return String.fromCharCode.apply(null, new Uint8Array(buff));\n    }\n    function concatenateArrayBuffers(first, second, returnUInt8Array) {\n      var result = new Uint8Array(first.byteLength + second.byteLength);\n      result.set(new Uint8Array(first));\n      result.set(new Uint8Array(second), first.byteLength);\n      return returnUInt8Array ? result : result.buffer;\n    }\n    function hexToBinaryString(hex) {\n      var bytes = [], length = hex.length, x;\n      for (x = 0; x < length - 1; x += 2) {\n        bytes.push(parseInt(hex.substr(x, 2), 16));\n      }\n      return String.fromCharCode.apply(String, bytes);\n    }\n    function SparkMD5() {\n      this.reset();\n    }\n    SparkMD5.prototype.append = function(str) {\n      this.appendBinary(toUtf8(str));\n      return this;\n    };\n    SparkMD5.prototype.appendBinary = function(contents) {\n      this._buff += contents;\n      this._length += contents.length;\n      var length = this._buff.length, i;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n      }\n      this._buff = this._buff.substring(i - 64);\n      return this;\n    };\n    SparkMD5.prototype.end = function(raw) {\n      var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD5.prototype.reset = function() {\n      this._buff = \"\";\n      this._length = 0;\n      this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n      return this;\n    };\n    SparkMD5.prototype.getState = function() {\n      return {\n        buff: this._buff,\n        length: this._length,\n        hash: this._hash.slice()\n      };\n    };\n    SparkMD5.prototype.setState = function(state) {\n      this._buff = state.buff;\n      this._length = state.length;\n      this._hash = state.hash;\n      return this;\n    };\n    SparkMD5.prototype.destroy = function() {\n      delete this._hash;\n      delete this._buff;\n      delete this._length;\n    };\n    SparkMD5.prototype._finish = function(tail, length) {\n      var i = length, tmp, lo, hi;\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(this._hash, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = this._length * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(this._hash, tail);\n    };\n    SparkMD5.hash = function(str, raw) {\n      return SparkMD5.hashBinary(toUtf8(str), raw);\n    };\n    SparkMD5.hashBinary = function(content, raw) {\n      var hash = md51(content), ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    SparkMD5.ArrayBuffer = function() {\n      this.reset();\n    };\n    SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n      var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n      this._length += arr.byteLength;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n      }\n      this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n      return this;\n    };\n    SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n      var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff[i] << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD5.ArrayBuffer.prototype.reset = function() {\n      this._buff = new Uint8Array(0);\n      this._length = 0;\n      this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n      return this;\n    };\n    SparkMD5.ArrayBuffer.prototype.getState = function() {\n      var state = SparkMD5.prototype.getState.call(this);\n      state.buff = arrayBuffer2Utf8Str(state.buff);\n      return state;\n    };\n    SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n      state.buff = utf8Str2ArrayBuffer(state.buff, true);\n      return SparkMD5.prototype.setState.call(this, state);\n    };\n    SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n    SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n    SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n      var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    return SparkMD5;\n  }));\n})(sparkMd5);\n\nvar SparkMD5 = sparkMd5.exports;\n\nconst fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\nclass FileChecksum {\n  static create(file, callback) {\n    const instance = new FileChecksum(file);\n    instance.create(callback);\n  }\n  constructor(file) {\n    this.file = file;\n    this.chunkSize = 2097152;\n    this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n    this.chunkIndex = 0;\n  }\n  create(callback) {\n    this.callback = callback;\n    this.md5Buffer = new SparkMD5.ArrayBuffer;\n    this.fileReader = new FileReader;\n    this.fileReader.addEventListener(\"load\", (event => this.fileReaderDidLoad(event)));\n    this.fileReader.addEventListener(\"error\", (event => this.fileReaderDidError(event)));\n    this.readNextChunk();\n  }\n  fileReaderDidLoad(event) {\n    this.md5Buffer.append(event.target.result);\n    if (!this.readNextChunk()) {\n      const binaryDigest = this.md5Buffer.end(true);\n      const base64digest = btoa(binaryDigest);\n      this.callback(null, base64digest);\n    }\n  }\n  fileReaderDidError(event) {\n    this.callback(`Error reading ${this.file.name}`);\n  }\n  readNextChunk() {\n    if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n      const start = this.chunkIndex * this.chunkSize;\n      const end = Math.min(start + this.chunkSize, this.file.size);\n      const bytes = fileSlice.call(this.file, start, end);\n      this.fileReader.readAsArrayBuffer(bytes);\n      this.chunkIndex++;\n      return true;\n    } else {\n      return false;\n    }\n  }\n}\n\nfunction getMetaValue(name) {\n  const element = findElement(document.head, `meta[name=\"${name}\"]`);\n  if (element) {\n    return element.getAttribute(\"content\");\n  }\n}\n\nfunction findElements(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  const elements = root.querySelectorAll(selector);\n  return toArray(elements);\n}\n\nfunction findElement(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  return root.querySelector(selector);\n}\n\nfunction dispatchEvent(element, type, eventInit = {}) {\n  const {disabled: disabled} = element;\n  const {bubbles: bubbles, cancelable: cancelable, detail: detail} = eventInit;\n  const event = document.createEvent(\"Event\");\n  event.initEvent(type, bubbles || true, cancelable || true);\n  event.detail = detail || {};\n  try {\n    element.disabled = false;\n    element.dispatchEvent(event);\n  } finally {\n    element.disabled = disabled;\n  }\n  return event;\n}\n\nfunction toArray(value) {\n  if (Array.isArray(value)) {\n    return value;\n  } else if (Array.from) {\n    return Array.from(value);\n  } else {\n    return [].slice.call(value);\n  }\n}\n\nclass BlobRecord {\n  constructor(file, checksum, url, customHeaders = {}) {\n    this.file = file;\n    this.attributes = {\n      filename: file.name,\n      content_type: file.type || \"application/octet-stream\",\n      byte_size: file.size,\n      checksum: checksum\n    };\n    this.xhr = new XMLHttpRequest;\n    this.xhr.open(\"POST\", url, true);\n    this.xhr.responseType = \"json\";\n    this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n    this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n    this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n    Object.keys(customHeaders).forEach((headerKey => {\n      this.xhr.setRequestHeader(headerKey, customHeaders[headerKey]);\n    }));\n    const csrfToken = getMetaValue(\"csrf-token\");\n    if (csrfToken != undefined) {\n      this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n    }\n    this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n    this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n  }\n  get status() {\n    return this.xhr.status;\n  }\n  get response() {\n    const {responseType: responseType, response: response} = this.xhr;\n    if (responseType == \"json\") {\n      return response;\n    } else {\n      return JSON.parse(response);\n    }\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(JSON.stringify({\n      blob: this.attributes\n    }));\n  }\n  requestDidLoad(event) {\n    if (this.status >= 200 && this.status < 300) {\n      const {response: response} = this;\n      const {direct_upload: direct_upload} = response;\n      delete response.direct_upload;\n      this.attributes = response;\n      this.directUploadData = direct_upload;\n      this.callback(null, this.toJSON());\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error creating Blob for \"${this.file.name}\". Status: ${this.status}`);\n  }\n  toJSON() {\n    const result = {};\n    for (const key in this.attributes) {\n      result[key] = this.attributes[key];\n    }\n    return result;\n  }\n}\n\nclass BlobUpload {\n  constructor(blob) {\n    this.blob = blob;\n    this.file = blob.file;\n    const {url: url, headers: headers} = blob.directUploadData;\n    this.xhr = new XMLHttpRequest;\n    this.xhr.open(\"PUT\", url, true);\n    this.xhr.responseType = \"text\";\n    for (const key in headers) {\n      this.xhr.setRequestHeader(key, headers[key]);\n    }\n    this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n    this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(this.file.slice());\n  }\n  requestDidLoad(event) {\n    const {status: status, response: response} = this.xhr;\n    if (status >= 200 && status < 300) {\n      this.callback(null, response);\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error storing \"${this.file.name}\". Status: ${this.xhr.status}`);\n  }\n}\n\nlet id = 0;\n\nclass DirectUpload {\n  constructor(file, url, delegate, customHeaders = {}) {\n    this.id = ++id;\n    this.file = file;\n    this.url = url;\n    this.delegate = delegate;\n    this.customHeaders = customHeaders;\n  }\n  create(callback) {\n    FileChecksum.create(this.file, ((error, checksum) => {\n      if (error) {\n        callback(error);\n        return;\n      }\n      const blob = new BlobRecord(this.file, checksum, this.url, this.customHeaders);\n      notify(this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n      blob.create((error => {\n        if (error) {\n          callback(error);\n        } else {\n          const upload = new BlobUpload(blob);\n          notify(this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n          upload.create((error => {\n            if (error) {\n              callback(error);\n            } else {\n              callback(null, blob.toJSON());\n            }\n          }));\n        }\n      }));\n    }));\n  }\n}\n\nfunction notify(object, methodName, ...messages) {\n  if (object && typeof object[methodName] == \"function\") {\n    return object[methodName](...messages);\n  }\n}\n\nclass DirectUploadController {\n  constructor(input, file) {\n    this.input = input;\n    this.file = file;\n    this.directUpload = new DirectUpload(this.file, this.url, this);\n    this.dispatch(\"initialize\");\n  }\n  start(callback) {\n    const hiddenInput = document.createElement(\"input\");\n    hiddenInput.type = \"hidden\";\n    hiddenInput.name = this.input.name;\n    this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n    this.dispatch(\"start\");\n    this.directUpload.create(((error, attributes) => {\n      if (error) {\n        hiddenInput.parentNode.removeChild(hiddenInput);\n        this.dispatchError(error);\n      } else {\n        hiddenInput.value = attributes.signed_id;\n      }\n      this.dispatch(\"end\");\n      callback(error);\n    }));\n  }\n  uploadRequestDidProgress(event) {\n    const progress = event.loaded / event.total * 100;\n    if (progress) {\n      this.dispatch(\"progress\", {\n        progress: progress\n      });\n    }\n  }\n  get url() {\n    return this.input.getAttribute(\"data-direct-upload-url\");\n  }\n  dispatch(name, detail = {}) {\n    detail.file = this.file;\n    detail.id = this.directUpload.id;\n    return dispatchEvent(this.input, `direct-upload:${name}`, {\n      detail: detail\n    });\n  }\n  dispatchError(error) {\n    const event = this.dispatch(\"error\", {\n      error: error\n    });\n    if (!event.defaultPrevented) {\n      alert(error);\n    }\n  }\n  directUploadWillCreateBlobWithXHR(xhr) {\n    this.dispatch(\"before-blob-request\", {\n      xhr: xhr\n    });\n  }\n  directUploadWillStoreFileWithXHR(xhr) {\n    this.dispatch(\"before-storage-request\", {\n      xhr: xhr\n    });\n    xhr.upload.addEventListener(\"progress\", (event => this.uploadRequestDidProgress(event)));\n  }\n}\n\nconst inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\nclass DirectUploadsController {\n  constructor(form) {\n    this.form = form;\n    this.inputs = findElements(form, inputSelector).filter((input => input.files.length));\n  }\n  start(callback) {\n    const controllers = this.createDirectUploadControllers();\n    const startNextController = () => {\n      const controller = controllers.shift();\n      if (controller) {\n        controller.start((error => {\n          if (error) {\n            callback(error);\n            this.dispatch(\"end\");\n          } else {\n            startNextController();\n          }\n        }));\n      } else {\n        callback();\n        this.dispatch(\"end\");\n      }\n    };\n    this.dispatch(\"start\");\n    startNextController();\n  }\n  createDirectUploadControllers() {\n    const controllers = [];\n    this.inputs.forEach((input => {\n      toArray(input.files).forEach((file => {\n        const controller = new DirectUploadController(input, file);\n        controllers.push(controller);\n      }));\n    }));\n    return controllers;\n  }\n  dispatch(name, detail = {}) {\n    return dispatchEvent(this.form, `direct-uploads:${name}`, {\n      detail: detail\n    });\n  }\n}\n\nconst processingAttribute = \"data-direct-uploads-processing\";\n\nconst submitButtonsByForm = new WeakMap;\n\nlet started = false;\n\nfunction start() {\n  if (!started) {\n    started = true;\n    document.addEventListener(\"click\", didClick, true);\n    document.addEventListener(\"submit\", didSubmitForm, true);\n    document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n  }\n}\n\nfunction didClick(event) {\n  const button = event.target.closest(\"button, input\");\n  if (button && button.type === \"submit\" && button.form) {\n    submitButtonsByForm.set(button.form, button);\n  }\n}\n\nfunction didSubmitForm(event) {\n  handleFormSubmissionEvent(event);\n}\n\nfunction didSubmitRemoteElement(event) {\n  if (event.target.tagName == \"FORM\") {\n    handleFormSubmissionEvent(event);\n  }\n}\n\nfunction handleFormSubmissionEvent(event) {\n  const form = event.target;\n  if (form.hasAttribute(processingAttribute)) {\n    event.preventDefault();\n    return;\n  }\n  const controller = new DirectUploadsController(form);\n  const {inputs: inputs} = controller;\n  if (inputs.length) {\n    event.preventDefault();\n    form.setAttribute(processingAttribute, \"\");\n    inputs.forEach(disable);\n    controller.start((error => {\n      form.removeAttribute(processingAttribute);\n      if (error) {\n        inputs.forEach(enable);\n      } else {\n        submitForm(form);\n      }\n    }));\n  }\n}\n\nfunction submitForm(form) {\n  let button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n  if (button) {\n    const {disabled: disabled} = button;\n    button.disabled = false;\n    button.focus();\n    button.click();\n    button.disabled = disabled;\n  } else {\n    button = document.createElement(\"input\");\n    button.type = \"submit\";\n    button.style.display = \"none\";\n    form.appendChild(button);\n    button.click();\n    form.removeChild(button);\n  }\n  submitButtonsByForm.delete(form);\n}\n\nfunction disable(input) {\n  input.disabled = true;\n}\n\nfunction enable(input) {\n  input.disabled = false;\n}\n\nfunction autostart() {\n  if (window.ActiveStorage) {\n    start();\n  }\n}\n\nsetTimeout(autostart, 1);\n\nclass AttachmentUpload {\n  constructor(attachment, element) {\n    this.attachment = attachment;\n    this.element = element;\n    this.directUpload = new DirectUpload(attachment.file, this.directUploadUrl, this);\n  }\n  start() {\n    this.directUpload.create(this.directUploadDidComplete.bind(this));\n    this.dispatch(\"start\");\n  }\n  directUploadWillStoreFileWithXHR(xhr) {\n    xhr.upload.addEventListener(\"progress\", (event => {\n      const progress = event.loaded / event.total * 100;\n      this.attachment.setUploadProgress(progress);\n      if (progress) {\n        this.dispatch(\"progress\", {\n          progress: progress\n        });\n      }\n    }));\n  }\n  directUploadDidComplete(error, attributes) {\n    if (error) {\n      this.dispatchError(error);\n    } else {\n      this.attachment.setAttributes({\n        sgid: attributes.attachable_sgid,\n        url: this.createBlobUrl(attributes.signed_id, attributes.filename)\n      });\n      this.dispatch(\"end\");\n    }\n  }\n  createBlobUrl(signedId, filename) {\n    return this.blobUrlTemplate.replace(\":signed_id\", signedId).replace(\":filename\", encodeURIComponent(filename));\n  }\n  dispatch(name, detail = {}) {\n    detail.attachment = this.attachment;\n    return dispatchEvent(this.element, `direct-upload:${name}`, {\n      detail: detail\n    });\n  }\n  dispatchError(error) {\n    const event = this.dispatch(\"error\", {\n      error: error\n    });\n    if (!event.defaultPrevented) {\n      alert(error);\n    }\n  }\n  get directUploadUrl() {\n    return this.element.dataset.directUploadUrl;\n  }\n  get blobUrlTemplate() {\n    return this.element.dataset.blobUrlTemplate;\n  }\n}\n\naddEventListener(\"trix-attachment-add\", (event => {\n  const {attachment: attachment, target: target} = event;\n  if (attachment.file) {\n    const upload = new AttachmentUpload(attachment, target);\n    upload.start();\n  }\n}));\n"],
  "mappings": "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",
  "names": ["consumer", "error", "consumer", "s", "consumer", "s", "subscription", "a", "submitter", "i", "_", "fn", "config", "location", "error", "cookie", "id", "x", "y", "morphChildren", "potentialMatch", "session", "visit", "recentRequests", "Turbo", "document", "e", "c", "createConsumer", "m", "x", "submitter", "application", "error", "_", "e", "match", "oldValue", "_", "error", "constructor", "extend", "a", "b", "application", "element", "c", "n", "k", "v", "t", "s", "e", "a", "o", "r", "attachmentSelector", "attachments", "preview", "presentation", "caption", "name", "size", "file", "attributes", "default", "tagName", "parse", "quote", "nestable", "heading1", "terminal", "breakOnReturn", "group", "code", "htmlAttributes", "text", "plaintext", "bulletList", "bullet", "listAttribute", "test", "element", "parentNode", "this", "numberList", "number", "attachmentGallery", "exclusive", "_element$tagName", "toLowerCase", "androidVersionMatch", "navigator", "userAgent", "match", "androidVersion", "parseInt", "browser$1", "composesExistingText", "recentAndroid", "samsungAndroid", "forcesObjectResizing", "supportsInputEvents", "InputEvent", "every", "prop", "prototype", "lang$1", "attachFiles", "bold", "bullets", "byte", "bytes", "captionPlaceholder", "indent", "italic", "link", "numbers", "outdent", "redo", "remove", "strike", "undo", "unlink", "url", "urlPlaceholder", "GB", "KB", "MB", "PB", "TB", "sizes", "lang", "file_size_formatting", "prefix", "precision", "formatter", "concat", "base", "exp", "Math", "floor", "log", "withoutInsignificantZeros", "pow", "toFixed", "replace", "ZERO_WIDTH_SPACE", "NON_BREAKING_SPACE", "extend", "properties", "key", "value", "html", "document", "documentElement", "matches", "handleEvent", "eventName", "onElement", "matchingSelector", "withCallback", "inPhase", "preventDefault", "times", "arguments", "length", "undefined", "selector", "useCapture", "handler", "event", "destroy", "target", "findClosestElementFromNode", "call", "removeEventListener", "addEventListener", "triggerEvent", "bubbles", "cancelable", "createEvent", "initEvent", "dispatchEvent", "elementMatchesSelector", "nodeType", "node", "untilNode", "Node", "ELEMENT_NODE", "closest", "innerElementIsActive", "activeElement", "elementContainsNode", "findChildIndexOfNode", "_node", "childIndex", "previousSibling", "removeNode", "_node$parentNode", "removeChild", "walkTree", "tree", "onlyNodesOfType", "usingFilter", "expandEntityReferences", "whatToShow", "NodeFilter", "SHOW_ELEMENT", "SHOW_TEXT", "SHOW_COMMENT", "SHOW_ALL", "createTreeWalker", "makeElement", "tag", "options", "createElement", "editable", "contenteditable", "setAttribute", "style", "data", "dataset", "className", "split", "forEach", "classList", "add", "textContent", "childNodes", "childNode", "appendChild", "blockTagNames", "getBlockTagNames", "blockAttributes", "push", "nodeIsBlockContainer", "nodeIsBlockStartComment", "firstChild", "nodeIsBlockStart", "strict", "includes", "nodeIsCommentNode", "COMMENT_NODE", "nodeIsCursorTarget", "nodeIsTextNode", "trixCursorTarget", "nodeIsAttachmentElement", "nodeIsEmptyTextNode", "TEXT_NODE", "input", "level2Enabled", "getLevel", "browser", "pickFiles", "callback", "type", "multiple", "hidden", "id", "fileInputId", "files", "getElementById", "body", "click", "parser", "removeBlankTableCells", "tableCellSeparator", "tableRowSeparator", "text_attributes", "inheritable", "window", "getComputedStyle", "fontWeight", "fontStyle", "href", "groupTagName", "getAttribute", "frozen", "backgroundColor", "toolbar", "getDefaultHTML", "interval", "i", "n", "attachment", "attachmentCaption", "attachmentCaptionEditor", "attachmentMetadata", "attachmentMetadataContainer", "attachmentName", "attachmentProgress", "attachmentSize", "attachmentToolbar", "u", "l", "V", "BasicObject", "expression", "toMethod", "toProperty", "optional", "parseProxyMethodExpression", "subject", "object", "_this$toMethod", "_object", "apply", "proxyMethodExpressionPattern", "Error", "args", "Function", "RegExp", "UTF16String", "box", "fromUCS2String", "toString", "ucs2String", "ucs2decode", "codepoints", "ucs2encode", "constructor", "super", "ucs2Length", "offsetToUCS2Offset", "offset", "slice", "max", "offsetFromUCS2Offset", "ucs2Offset", "fromCodepoints", "charAt", "isEqualTo", "toJSON", "getCacheKey", "hasArrayFrom", "_Array$from", "Array", "from", "hasStringCodePointAt", "_$codePointAt", "codePointAt", "hasStringFromCodePoint", "_String$fromCodePoint", "String", "fromCodePoint", "string", "map", "char", "output", "counter", "charCodeAt", "extra", "array", "result", "fromCharCode", "join", "TrixObject", "jsonString", "fromJSON", "JSON", "hasSameConstructorAs", "inspect", "parts", "contents", "contentsForInspection", "toJSONString", "stringify", "toUTF16String", "arraysAreEqual", "a", "b", "index", "spliceArray", "_len", "_key", "splice", "RTL_PATTERN", "getDirection", "dir", "dirName", "textArea", "form", "supportsDirName", "FormData", "has", "error", "supportsDirSelector", "get", "trim", "allAttributeNames", "blockAttributeNames", "textAttributeNames", "listAttributeNames", "getAllAttributeNames", "getTextAttributeNames", "getBlockAttributeNames", "getBlockConfig", "attributeName", "config", "Object", "keys", "getTextConfig", "installDefaultCSSForTagName", "defaultCSS", "insertStyleElementForTagName", "nonce", "getCSPNonce", "head", "insertBefore", "getMetaElement", "content", "querySelector", "testTransferData", "dataTransferIsPlainText", "dataTransfer", "getData", "DOMParser", "parseFromString", "keyEventIsKeyboardCommand", "platform", "metaKey", "ctrlKey", "defer", "fn", "setTimeout", "copyObject", "objectsAreEqual", "normalizeRange", "range", "isArray", "copyValue", "rangeIsCollapsed", "start", "end", "rangeValuesAreEqual", "rangesAreEqual", "leftRange", "rightRange", "leftStart", "leftEnd", "rightStart", "rightEnd", "left", "right", "SelectionChangeObserver", "update", "bind", "selectionManagers", "started", "stop", "registerSelectionManager", "selectionManager", "unregisterSelectionManager", "filter", "sm", "notifySelectionManagersOfSelectionChange", "selectionDidChange", "reset", "selectionChangeObserver", "getDOMSelection", "selection", "getSelection", "rangeCount", "getDOMRange", "_getDOMSelection", "domRange", "getRangeAt", "domRangeIsPrivate", "setDOMRange", "removeAllRanges", "addRange", "nodeIsPrivate", "startContainer", "endContainer", "getPrototypeOf", "normalizeSpaces", "breakableWhitespacePattern", "squishBreakableWhitespace", "source", "utf16StringDifferences", "diffA", "utf16StringDifference", "utf16String", "diffB", "leftIndex", "rightIndexA", "rightIndexB", "Hash", "fromCommonAttributesOfObjects", "objects", "hash", "getKeys", "getKeysCommonToHash", "values", "copy", "merge", "unbox", "toArray", "isEmpty", "toObject", "keyToRemove", "sort", "ObjectGroup", "groupObjects", "ungroupedObjects", "depth", "asTree", "_object$canBeGrouped2", "_object$canBeGrouped", "_group$canBeGroupedWi", "_group", "canBeGrouped", "canBeGroupedWith", "getObjects", "getDepth", "ObjectMap", "find", "ElementStore", "elements", "getKey", "trixStoreKey", "Operation", "isPerforming", "performing", "hasPerformed", "performed", "hasSucceeded", "succeeded", "hasFailed", "getPromise", "promise", "Promise", "resolve", "reject", "perform", "release", "_this$promise", "_this$promise$cancel", "cancel", "proxyMethod", "ObjectView", "childViews", "rootView", "getNodes", "nodes", "createNodes", "cloneNode", "invalidate", "_this$parentView", "parentView", "invalidateViewForObject", "_this$findViewForObje", "findViewForObject", "findOrCreateCachedChildView", "viewClass", "view", "getCachedViewForObject", "recordChildView", "createChildView", "cacheViewForObject", "ObjectGroupView", "getAllChildViews", "views", "childView", "findElement", "findElementForObject", "getViewCache", "isViewCachingEnabled", "viewCache", "shouldCacheViews", "enableViewCaching", "disableViewCaching", "_this$getViewCache", "cache", "garbageCollectCachedViews", "objectKeys", "objectGroup", "getChildViews", "createContainerElement", "DEFAULT_ALLOWED_ATTRIBUTES", "DEFAULT_FORBIDDEN_PROTOCOLS", "DEFAULT_FORBIDDEN_ELEMENTS", "HTMLSanitizer", "sanitizedElement", "sanitize", "sanitizedHtml", "getHTML", "outerHTML", "innerHTML", "sanitizer", "allowedAttributes", "forbiddenProtocols", "forbiddenElements", "createBodyElementForHTML", "sanitizeElements", "normalizeListElementNesting", "getBody", "walker", "nodesToRemove", "nextNode", "currentNode", "elementIsRemovable", "sanitizeElement", "hasAttribute", "protocol", "removeAttribute", "_ref", "indexOf", "querySelectorAll", "listElement", "previousElement", "previousElementSibling", "elementIsForbidden", "elementIsntSerializable", "doc", "implementation", "createHTMLDocument", "css", "AttachmentView", "uploadProgressDelegate", "attachmentPiece", "piece", "createContentNodes", "innerElement", "figure", "getClassName", "getHref", "tabindex", "hasContent", "setHTML", "getContent", "createCaptionElement", "isPending", "progressElement", "class", "getUploadProgress", "trixMutable", "createCursorTarget", "figcaption", "getCaption", "captionConfig", "getCaptionConfig", "getFilename", "getFormattedFilesize", "nameElement", "createTextNode", "sizeElement", "names", "getType", "extension", "getExtension", "trixAttachment", "trixContentType", "getContentType", "trixId", "trixAttributes", "trixSerialize", "htmlContainsTagName", "_config$attachments$t", "findProgressElement", "_this$findElement", "attachmentDidChangeUploadProgress", "div", "PreviewableAttachmentView", "previewDelegate", "image", "src", "refresh", "updateAttributesForImage", "getURL", "previewURL", "getPreviewURL", "serializedAttributes", "width", "getWidth", "height", "getHeight", "storeKey", "attachmentDidChangeAttributes", "PieceView", "getAttributes", "textConfig", "context", "createAttachmentNodes", "createStringNodes", "_element", "firstElementChild", "isPreviewable", "_this$textConfig", "iterable", "substring", "preserveSpaces", "styles", "pendingElement", "styleProperty", "isLast", "isFirst", "followsWhitespace", "TextView", "pieces", "getPieces", "lastIndex", "endsWithWhitespace", "previousPiece", "BlockView", "block", "createComment", "_getBlockConfig", "getLastAttribute", "textView", "shouldAddExtraNewlineElement", "isRTL", "assign", "getBlockBreakPosition", "entries", "DocumentView", "render", "sync", "elementStore", "setDocument", "shadowElement", "getBlocks", "isSynced", "elementsHaveEqualHTML", "fragment", "createDocumentFragmentForSync", "lastChild", "didSync", "findStoredElements", "createDocumentFragment", "storedElement", "replaceChild", "otherElement", "ignoreSpaces", "t", "e", "o", "s", "r", "Piece", "types", "pieceJSON", "copyWithAttributes", "getValue", "copyWithAdditionalAttributes", "copyWithoutAttribute", "attribute", "getAttributesHash", "hasSameStringValueAsPiece", "hasSameAttributesAsPiece", "isBlockBreak", "isSerializable", "getLength", "canBeConsolidatedWith", "_defineProperty", "ImagePreloadOperation", "Image", "onload", "naturalWidth", "naturalHeight", "onerror", "Attachment", "attributesForFile", "setFile", "filename", "filesize", "contentType", "attachmentJSON", "releaseFile", "didChangeAttributes", "setAttributes", "newAttributes", "_this$previewDelegate", "_this$previewDelegate2", "_this$delegate", "_this$delegate$attach", "delegate", "preloadURL", "previewablePattern", "getFilesize", "_this$getFilename$mat", "getFile", "preloadFile", "releasePreloadedFile", "uploadProgress", "setUploadProgress", "_this$uploadProgressD", "_this$uploadProgressD2", "preloadingURL", "setPreviewURL", "_this$previewDelegate3", "_this$previewDelegate4", "_this$delegate2", "_this$delegate2$attac", "attachmentDidChangePreviewURL", "preload", "fileObjectURL", "URL", "createObjectURL", "revokeObjectURL", "then", "catch", "AttachmentPiece", "ensureAttachmentExclusivelyHasAttribute", "removeProhibitedAttributes", "permittedAttributes", "_piece$attachment", "json", "toConsole", "registerType", "StringPiece", "consolidateWith", "splitAtOffset", "SplittableList", "eachObject", "insertObjectAtIndex", "insertSplittableListAtIndex", "splittableList", "insertSplittableListAtPosition", "position", "splitObjectAtPosition", "editObjectAtIndex", "replaceObjectAtIndex", "removeObjectAtIndex", "getObjectAtIndex", "getSplittableListInRange", "rightIndex", "splitObjectsAtRange", "selectSplittableList", "removeObjectsInRange", "transformObjectsInRange", "transform", "transformedObjects", "rightOuterIndex", "leftInnerIndex", "startOfRange", "endOfRange", "getObjectAtPosition", "findIndexAndOffsetAtPosition", "splitIndex", "splitOffset", "leftObject", "rightObject", "consolidate", "pendingObject", "_pendingObject$canBeC", "_pendingObject", "consolidateFromIndexToIndex", "startIndex", "endIndex", "objectsInRange", "consolidatedInRange", "currentPosition", "nextPosition", "findPositionAtIndexAndOffset", "currentIndex", "getEndPosition", "endPosition", "objectArraysAreEqual", "Text", "textJSON", "notEmpty", "pieceList", "copyWithPieceList", "copyUsingObjectMap", "objectMap", "appendText", "insertTextAtPosition", "removeTextAtRange", "replaceTextAtRange", "moveTextFromRangeToPosition", "getTextAtRange", "addAttributeAtRange", "addAttributesAtRange", "removeAttributeAtRange", "setAttributesAtRange", "getAttributesAtPosition", "_this$pieceList$getOb", "getCommonAttributes", "getCommonAttributesAtRange", "getExpandedRangeForAttributeAtOffset", "getStringAtRange", "getStringAtPosition", "startsWithString", "endsWithString", "getAttachmentPieces", "getAttachments", "getAttachmentAndPositionById", "attachmentId", "getAttachmentById", "getRangeOfAttachment", "attachmentAndPosition", "updateAttributesForAttachment", "_text$pieceList", "eachPiece", "getPieceAtPosition", "toSerializableText", "Block", "blockJSON", "applyBlockBreakToText", "copyWithText", "copyWithoutText", "copyWithoutAttributes", "mappedText", "addAttribute", "expandAttribute", "addHTMLAttribute", "removeLastValue", "removeLastAttribute", "getLastElement", "getAttributeLevel", "getAttributeAtLevel", "level", "hasAttributes", "getLastNestableAttribute", "getNestableAttributes", "getNestingLevel", "decreaseNestingLevel", "increaseNestingLevel", "lastIndexOf", "getListItemAttributes", "isListItem", "isTerminalBlock", "_getBlockConfig2", "breaksOnReturn", "_getBlockConfig3", "findLineBreakInDirectionFromPosition", "direction", "newlineText", "textForStringWithAttributes", "getTextWithoutBlockBreak", "textEndsInBlockBreak", "otherBlock", "otherAttributes", "otherAttribute", "getListAttributeNames", "unmarkExistingInnerBlockBreaksInText", "addBlockBreakToText", "modified", "innerPieces", "lastPiece", "unmarkBlockBreakPiece", "blockBreakText", "blockBreak", "Document", "documentJSON", "textAttributes", "blocks", "blockList", "getBlockAtIndex", "consolidateBlocks", "copyUsingObjectsFromDocument", "sourceDocument", "copyWithBaseBlockAttributes", "replaceBlock", "oldBlock", "newBlock", "insertDocumentAtRange", "locationFromPosition", "getBlockAtPosition", "mergeDocumentAtRange", "formattedDocument", "startPosition", "startLocation", "baseBlockAttributes", "getBaseBlockAttributes", "trailingBlockAttributes", "leadingBlockAttributes", "blockCount", "getBlockCount", "firstBlock", "firstText", "insertTextAtRange", "leftPosition", "rightPosition", "leftLocation", "rightLocation", "locationRangeFromRange", "leftOffset", "leftBlock", "rightOffset", "rightBlock", "leftText", "rightText", "affectedBlockCount", "getDocumentAtRange", "movingRightward", "eachBlockAtRange", "textRange", "eachBlock", "getTextAtIndex", "removeAttributeForAttachment", "setHTMLAttributeAtPosition", "updatedBlock", "insertBlockBreakAtRange", "applyBlockAttributeAtRange", "expanded", "expandRangeToLineBreaksAndSplitBlocks", "blockConfig", "removeLastListAttributeAtRange", "exceptAttributeName", "converted", "convertLineBreaksToBlockBreaksInRange", "removeBlockAttributesAtRange", "removeLastTerminalAttributeAtRange", "consolidateBlocksAtRange", "lastAttributeName", "endLocation", "startBlock", "positionFromLocation", "endBlock", "_this$getBlockAtIndex", "getTextAtPosition", "getCharacterAtPosition", "getEditCount", "editCount", "getCommonAttributesAtPosition", "attributesForBlock", "commonAttributes", "attributesLeft", "inheritableAttributes", "getRangeOfCommonAttributeAtPosition", "startOffset", "endOffset", "blockIndex", "lastAttributeIndex", "min", "attachmentPieces", "getLocationRangeOfAttachment", "getAttachmentPieceForAttachment", "findRangesForBlockAttribute", "ranges", "findRangesForTextAttribute", "withValue", "location", "locationRangeFromPosition", "rangeFromLocationRange", "locationRange", "getTexts", "toSerializableDocument", "pieceForString", "parseTrixDataAttribute", "HTMLParser", "referenceElement", "blockElements", "processedElements", "getDocument", "createHiddenContainer", "containerElement", "nodeFilter", "processNode", "translateBlockElementMarginsToNewlines", "removeHiddenContainer", "display", "nextSibling", "isInsignificantTextNode", "appendBlockForTextNode", "processTextNode", "appendBlockForElement", "processElement", "currentBlockElement", "isBlockElement", "appendStringWithAttributes", "_this$currentBlock", "getBlockAttributes", "getBlockHTMLAttributes", "currentBlock", "appendBlockForAttributesWithElement", "elementIsBlockElement", "currentBlockContainsElement", "parentBlockElement", "findParentBlockElement", "appendEmptyBlock", "parentElement", "_node$previousSibling", "elementCanDisplayPreformattedText", "stringEndsWithWhitespace", "leftTrimBreakableWhitespace", "getTextAttributes", "appendAttachmentWithAttributes", "isExtraBR", "dimensions", "needsTableSeparator", "appendPiece", "appendStringToTextAtIndex", "prependStringToTextAtIndex", "unshift", "configAttr", "attributeInheritedFromBlock", "blockElement", "findBlockElementAncestors", "attrConfig", "_attrConfig$test", "reverse", "settings", "ancestors", "stringIsAllBreakableWhitespace", "nodeEndsWithNonWhitespace", "_element$previousSibl", "defaultMargin", "getMarginOfDefaultBlockElement", "margin", "getMarginOfBlockElementAtIndex", "top", "bottom", "getBlockElementMargin", "whiteSpace", "marginTop", "marginBottom", "FILTER_REJECT", "FILTER_ACCEPT", "unserializableAttributeNames", "serializedAttributesAttribute", "serializedAttributesSelector", "blockCommentPattern", "serializers", "serializable", "HTMLElement", "el", "ManagedAttachment", "attachmentManager", "requestRemovalOfAttachment", "AttachmentManager", "managedAttachments", "manageAttachment", "attachmentIsManaged", "attachmentManagerDidRequestRemovalOfAttachment", "unmanageAttachment", "managedAttachment", "LineBreakInsertion", "composition", "selectedRange", "getSelectedRange", "previousCharacter", "nextCharacter", "shouldInsertBlockBreak", "shouldBreakFormattedBlock", "shouldDecreaseListLevel", "shouldPrependListItem", "shouldRemoveLastBlockAttribute", "Composition", "currentAttributes", "revision", "_this$delegate$compos", "refreshAttachments", "compositionDidChangeDocument", "getSnapshot", "loadSnapshot", "_this$delegate2$compo", "_this$delegate3", "_this$delegate3$compo", "compositionWillLoadSnapshot", "setSelection", "compositionDidLoadSnapshot", "insertText", "updatePosition", "notifyDelegateOfInsertionAtRange", "insertBlock", "insertDocument", "insertString", "getCurrentTextAttributes", "insertBlockBreak", "insertLineBreak", "insertion", "decreaseListLevel", "removeLastBlockAttribute", "breakFormattedBlock", "insertHTML", "replaceHTML", "getLocationRange", "insertFile", "insertFiles", "_this$delegate4", "compositionShouldAcceptFile", "attachmentForFile", "insertAttachments", "insertAttachment", "attachmentText", "textForAttachmentWithAttributes", "shouldManageDeletingInDirection", "shouldManageMovingCursorInDirection", "deleteInDirection", "deletingIntoPreviousBlock", "selectionSpansBlocks", "selectionIsCollapsed", "canDecreaseBlockAttributeLevel", "getBlock", "decreaseBlockAttributeLevel", "getExpandedRangeInDirection", "getAttachmentAtRange", "editAttachment", "moveTextFromRange", "removeAttachment", "stopEditingAttachment", "removeCurrentAttribute", "insertPlaceholder", "placeholderPosition", "getPosition", "selectPlaceholder", "setSelectedRange", "PLACEHOLDER", "forgetPlaceholder", "hasCurrentAttribute", "toggleCurrentAttribute", "setCurrentAttribute", "canSetCurrentAttribute", "canSetCurrentBlockAttribute", "canSetCurrentTextAttribute", "getSelectedDocument", "setBlockAttribute", "setTextAttribute", "notifyDelegateOfCurrentAttributesChange", "setHTMLAtributeAtPosition", "allowedHTMLAttributes", "newDocument", "removeBlockAttribute", "updateCurrentAttributes", "removeTextAttribute", "canDecreaseNestingLevel", "_this$getBlock", "canIncreaseNestingLevel", "previousBlock", "getPreviousBlock", "_this$getBlock2", "_this$getBlock3", "attributeLevel", "ignoreLock", "getCurrentAttributes", "freezeSelection", "thawSelection", "hasFrozenSelection", "_this$delegate5", "compositionDidRequestChangingSelectionToLocationRange", "getSelectionManager", "setLocationRange", "targetLocationRange", "withTargetLocationRange", "withTargetRange", "withTargetDOMRange", "createLocationRangeFromDOMRange", "translateUTF16PositionFromOffset", "editingAttachment", "moveCursorInDirection", "canEditAttachment", "expandSelectionInDirection", "expandSelectionForEditing", "expandSelectionAroundCommonAttribute", "selectionContainsAttachments", "_this$getSelectedAtta", "getSelectedAttachments", "selectionIsInCursorTarget", "positionIsCursorTarget", "locationIsCursorTarget", "positionIsBlockBreak", "_this$document$getPie", "_this$getSelectedDocu", "added", "removed", "oldArray", "newArray", "existingValues", "Set", "currentValues", "_this$delegate6", "_this$delegate6$compo", "compositionDidRemoveAttachment", "_this$delegate7", "_this$delegate7$compo", "compositionDidAddAttachment", "_this$delegate8", "_this$delegate8$compo", "compositionDidEditAttachment", "_this$delegate9", "_this$delegate9$compo", "compositionDidChangeAttachmentPreviewURL", "_this$delegate10", "_this$delegate10$comp", "compositionDidStartEditingAttachment", "_this$delegate11", "_this$delegate11$comp", "compositionDidStopEditingAttachment", "_this$delegate12", "_this$delegate12$comp", "compositionDidChangeCurrentAttributes", "_this$delegate13", "_this$delegate13$comp", "compositionDidPerformInsertionAtRange", "utf16string", "utf16position", "UndoManager", "undoEntries", "redoEntries", "recordUndoEntry", "description", "consolidatable", "previousEntry", "entryHasDescriptionAndContext", "undoEntry", "createEntry", "pop", "redoEntry", "snapshot", "canUndo", "canRedo", "entry", "BLOCK_ATTRIBUTE_NAME", "Filter", "applyBlockAttribute", "findRangesOfBlocks", "findRangesOfPieces", "moveSelectedRangeForward", "attachmentGalleryFilter", "DEFAULT_FILTERS", "Editor", "undoManager", "filters", "loadDocument", "loadHTML", "loadJSON", "getClientRectAtPosition", "getClientRectAtLocationRange", "activateAttribute", "attributeIsActive", "canActivateAttribute", "deactivateAttribute", "LocationMapper", "findLocationFromContainerAndOffset", "container", "foundBlock", "attachmentElement", "findAttachmentElementParentForNode", "rejectAttachmentContents", "nodeLength", "findContainerAndOffsetFromLocation", "nodeOffset", "findNodeAndOffsetFromLocation", "getSignificantNodesForIndex", "acceptSignificantNodes", "recordingNodes", "rejectEmptyTextNodes", "PointMapper", "createDOMRangeFromPoint", "x", "y", "caretPositionFromPoint", "offsetNode", "createRange", "setStart", "caretRangeFromPoint", "createTextRange", "originalDOMRange", "moveToPoint", "select", "getClientRectsForDOMRange", "getClientRects", "SelectionManager", "didMouseDown", "locationMapper", "pointMapper", "lockCount", "currentLocationRange", "lockedLocationRange", "createDOMRangeFromLocationRange", "updateCurrentLocationRange", "setLocationRangeFromPointRange", "pointRange", "getLocationAtPoint", "lock", "unlock", "clearSelection", "_getDOMRange", "collapsed", "selectionIsExpanded", "domRangeWithinElement", "pauseTemporarily", "resumeHandlers", "paused", "resume", "clearTimeout", "resumeTimeout", "_this$delegate$locati", "locationRangeDidChange", "rangeStart", "rangeEnd", "setEnd", "point", "_this$createLocationR", "keyNames", "undoable", "commands", "do", "undos", "AttachmentEditorController", "title", "trixAction", "didClickToolbar", "didClickActionButton", "textarea", "placeholder", "textareaClone", "tabIndex", "autoresize", "scrollHeight", "didInputCaption", "didKeyDownCaption", "didChangeCaption", "didBlurCaption", "editingFigcaption", "editCaption", "focus", "install", "makeElementMutable", "addToolbar", "installCaptionEditor", "uninstall", "savePendingCaption", "didUninstallAttachmentEditor", "pendingCaption", "_this$delegate3$attac", "attachmentEditorDidRequestUpdatingAttributesForAttachment", "attachmentEditorDidRequestRemovingAttributeForAttachment", "stopPropagation", "attachmentEditorDidRequestRemovalOfAttachment", "_this$delegate5$attac", "keyCode", "attachmentEditorDidRequestDeselectingAttachment", "CompositionController", "didFocus", "didBlur", "didClickAttachment", "documentView", "_this$blurPromise", "focused", "compositionControllerDidFocus", "blurPromise", "compositionControllerDidBlur", "findAttachmentForElement", "compositionControllerDidSelectAttachment", "getSerializableElement", "isEditingAttachment", "_this$delegate4$compo", "_this$delegate5$compo", "canSyncDocumentView", "compositionControllerWillSyncDocumentView", "compositionControllerDidSyncDocumentView", "compositionControllerDidRender", "rerenderViewForObject", "refreshViewCache", "attachmentEditor", "installAttachmentEditorForAttachment", "_this$attachmentEdito", "uninstallAttachmentEditor", "_this$attachmentEdito2", "compositionControllerWillUpdateAttachment", "compositionControllerDidRequestRemovalOfAttachment", "compositionControllerDidRequestDeselectingAttachment", "Controller", "mutableAttributeName", "mutableSelector", "childList", "characterData", "characterDataOldValue", "subtree", "MutationObserver", "didMutate", "observer", "observe", "disconnect", "mutations", "_this$delegate$elemen", "findSignificantMutations", "elementDidMutate", "getMutationSummary", "mutation", "mutationIsSignificant", "nodeIsMutable", "nodesModifiedByMutation", "nodeIsSignificant", "addedNodes", "removedNodes", "getTextMutationSummary", "additions", "deletions", "getTextChangesFromCharacterData", "textChanges", "getTextChangesFromChildList", "addition", "summary", "textAdded", "deleted", "textDeleted", "getMutationsByType", "textRemoved", "getTextForNodes", "characterMutations", "startMutation", "endMutation", "summarized", "oldString", "newString", "oldValue", "FileVerificationOperation", "reader", "FileReader", "abort", "readAsArrayBuffer", "FlakyAndroidKeyboardDetector", "shouldIgnore", "previousEvent", "checkSamsungKeyboardBuggyModeStart", "checkSamsungKeyboardBuggyModeEnd", "buggyMode", "insertingLongTextAfterUnidentifiedChar", "differsInWhitespace", "innerText", "inputType", "_this$event$data", "isBeforeInputInsertText", "previousEventWasUnidentifiedKeydown", "_this$previousEvent", "_this$previousEvent2", "text1", "text2", "normalize", "whiteSpaceNormalizerRegexp", "InputController", "mutationObserver", "flakyKeyboardDetector", "events", "handlerFor", "mutationSummary", "editorWillSyncDocumentView", "editorDidSyncDocumentView", "requestRender", "_this$delegate$inputC", "inputControllerDidRequestRender", "requestReparse", "_this$delegate2$input", "inputControllerDidRequestReparse", "operations", "all", "handleInput", "_this$responder", "inputControllerWillAttachFiles", "responder", "defaultPrevented", "inputControllerWillHandleInput", "inputControllerDidHandleInput", "createLinkHTML", "pastedFileCount", "Level0InputController", "resetInputSummary", "setInputSummary", "inputSummary", "isComposing", "inputControllerDidAllowUnhandledInput", "mutationIsExpected", "preferDocument", "mutationAdditionMatchesSummary", "mutationDeletionMatchesSummary", "didDelete", "unexpectedNewlineAddition", "unexpectedNewlineDeletion", "_this$compositionInpu", "textChanged", "composedEmptyString", "compositionInput", "getEndData", "getCompositionInput", "CompositionInput", "isEnded", "_this$responder2", "serializeSelectionToDataTransfer", "_this$responder3", "setData", "canAcceptDataTransfer", "Files", "getPastedHTMLUsingHiddenElement", "pageXOffset", "pageYOffset", "opacity", "requestAnimationFrame", "keydown", "didInput", "keyName", "_context2", "modifier", "_context", "character", "inputControllerDidReceiveKeyboardCommand", "keypress", "altKey", "stringFromKeyEvent", "_this$responder9", "inputControllerWillPerformTyping", "textInput", "toUpperCase", "_this$responder10", "dragenter", "dragstart", "_this$delegate5$input", "draggedRange", "inputControllerDidStartDrag", "dragover", "draggingPoint", "clientX", "clientY", "_this$delegate6$input", "inputControllerDidReceiveDragOverPoint", "dragend", "_this$delegate7$input", "inputControllerDidCancelDrag", "drop", "_event$dataTransfer", "_this$responder11", "_this$responder12", "inputControllerWillMoveText", "_this$responder13", "fromJSONString", "cut", "_this$responder14", "clipboardData", "inputControllerWillCutText", "_this$responder15", "paste", "clipboard", "testClipboardData", "pasteEventIsCrippledSafariHTMLPaste", "_this$responder16", "inputControllerWillPaste", "inputControllerDidPaste", "_this$responder17", "_this$delegate14", "_this$responder18", "_this$delegate15", "_this$delegate16", "_this$responder19", "_this$delegate17", "_clipboard$items", "_clipboard$items$getA", "items", "getAsFile", "_this$delegate18", "_this$responder20", "_this$delegate19", "extensionForFile", "compositionstart", "compositionupdate", "compositionend", "beforeinput", "backspace", "_this$delegate20", "delete", "_this$delegate21", "return", "_this$delegate22", "_this$responder21", "tab", "_this$responder22", "_this$responder23", "_this$responder24", "_this$responder25", "control", "d", "_this$delegate23", "h", "_this$delegate24", "_this$delegate25", "_this$responder26", "shift", "_this$delegate26", "_this$responder27", "_this$responder28", "_this$responder29", "alt", "_this$delegate27", "meta", "_this$delegate28", "_file$type", "which", "charCode", "hasPasteboardFlavor", "hasReadableDynamicData", "isExternalHTMLPaste", "isExternalRichTextPaste", "inputController", "isSignificant", "_this$responder5", "_this$responder4", "canApplyToDocument", "_this$responder6", "_this$responder7", "_this$responder8", "_this$data$start", "_this$data$end", "Level2InputController", "scheduledRender", "composing", "reparse", "scheduleRender", "_this$afterRender", "cancelAnimationFrame", "afterRender", "toggleAttributeIfSupported", "inputControllerWillPerformFormatting", "activateAttributeIfSupported", "getTargetDOMRange", "minLength", "_this$event$getTarget", "_this$event", "targetRanges", "getTargetRanges", "staticRangeToRange", "withEvent", "command", "keyboardCommandFromKeyEvent", "shiftKey", "_event$clipboardData", "pasteEventHasFilesOnly", "pasteEventHasPlainTextOnly", "inputTypes", "immmediateRender", "inputEvent", "dragging", "pointFromEvent", "dragEventHasFiles", "ArrowLeft", "ArrowRight", "Backspace", "Tab", "deleteByComposition", "deleteByCut", "deleteByDrag", "deleteByDragRange", "deleteCompositionText", "deleteContent", "deleteContentBackward", "deleteContentForward", "deleteEntireSoftLine", "deleteHardLineBackward", "deleteHardLineForward", "deleteSoftLineBackward", "deleteSoftLineForward", "deleteWordBackward", "deleteWordForward", "formatBackColor", "formatBold", "formatFontColor", "formatFontName", "formatIndent", "formatItalic", "formatJustifyCenter", "formatJustifyFull", "formatJustifyLeft", "formatJustifyRight", "formatOutdent", "formatRemove", "_this$responder30", "formatSetBlockTextDirection", "formatSetInlineTextDirection", "formatStrikeThrough", "formatSubscript", "formatSuperscript", "formatUnderline", "historyRedo", "inputControllerWillPerformRedo", "historyUndo", "inputControllerWillPerformUndo", "insertCompositionText", "insertFromComposition", "insertFromDrop", "_this$responder31", "insertFromPaste", "_this$responder32", "_this$responder33", "processableFilePaste", "_this$responder34", "_this$responder35", "insertFromYank", "insertLink", "insertOrderedList", "insertParagraph", "_this$responder36", "insertReplacementText", "replacement", "_this$event$dataTrans", "insertTranspose", "insertUnorderedList", "staticRange", "_event$dataTransfer$f", "attributeButtonSelector", "actionButtonSelector", "toolbarButtonSelector", "dialogSelector", "activeDialogSelector", "dialogButtonSelector", "dialogInputSelector", "getInputForDialog", "getAttributeName", "getActionName", "ToolbarController", "didClickAttributeButton", "didClickDialogButton", "didKeyDownDialogInput", "actions", "resetDialogInputs", "toolbarDidClickButton", "actionName", "getDialog", "toggleDialog", "toolbarDidInvokeAction", "toolbarDidToggleAttribute", "refreshAttributeButtons", "dialogElement", "dialog", "hideDialog", "updateActions", "refreshActionButtons", "eachActionButton", "disabled", "updateAttributes", "eachAttributeButton", "dialogIsVisible", "applyKeyboardCommand", "keyString", "button", "buttonKeys", "dialogName", "showDialog", "toolbarWillShowDialog", "disabledInput", "toolbarDidShowDialog", "willValidate", "checkValidity", "toolbarDidUpdateAttribute", "toolbarDidRemoveAttribute", "toolbarDidHideDialog", "EditorController", "editorElement", "compositionController", "toolbarController", "toolbarElement", "editor", "notifyEditorElement", "handlingInput", "updateCurrentActions", "pasting", "pastedRange", "attachmentLocationRange", "loadingSnapshot", "isFocused", "requestedLocationRange", "compositionRevisionWhenLocationRangeRequested", "renderedCompositionRevision", "runEditorFilters", "isFocusedInvisibly", "requestedRender", "recordTypingUndoEntry", "recordFormattingUndoEntry", "locationRangeBeforeDrag", "invokingElement", "invokeAction", "selectionFrozen", "canInvokeAction", "actionIsExternal", "_this$actions$actionN", "_this$actions$actionN2", "getCurrentActions", "currentActions", "snapshotsAreEqual", "updateInputElement", "serializer", "setFormValue", "message", "documentChangedSinceLastRender", "notify", "getUndoContext", "getLocationContext", "getTimeContext", "Date", "getTime", "_this$editorElement$o", "ownerDocument", "TrixToolbarElement", "connectedCallback", "makeEditable", "configureContentEditable", "disableObjectResizing", "setDefaultParagraphSeparator", "_document$queryComman", "_document", "queryCommandSupported", "execCommand", "_document$queryComman2", "_document2", "cursorTargetStyles", "_internals", "WeakMap", "_validate", "WeakSet", "ElementInternalsDelegate", "_classPrivateFieldInitSpec", "writable", "_classPrivateFieldSet", "attachInternals", "_classPrivateMethodGet", "_validate2", "disconnectedCallback", "labels", "_classPrivateFieldGet", "_this$element$inputEl", "inputElement", "toggleAttribute", "required", "validity", "validationMessage", "reportValidity", "setCustomValidity", "customValidationMessage", "valueMissing", "customError", "setValidity", "_focusHandler", "_resetBubbled", "_clickBubbled", "LegacyDelegate", "contains", "label", "texts", "_classPrivateFieldGet2", "console", "warn", "_delegate", "TrixEditorElement", "formAssociated", "localName", "_this$ownerDocument", "toolbarId", "_this$inputElement", "_this$ownerDocument2", "inputId", "nextElementSibling", "_this$editorControlle", "editorController", "_this$inputElement2", "_this$inputElement3", "defaultValue", "_this$editor", "_this$editorControlle2", "formDisabledCallback", "formResetCallback", "Trix", "VERSION", "version", "core", "models", "controllers", "observers", "customElements", "define", "x", "k", "a", "b", "c", "d", "s", "i", "n", "hi", "j", "hex", "SparkMD5", "start", "dispatchEvent", "error"]
}