{
  "version": 3,
  "sources": ["../../../node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@rails/actioncable/src/index.js", "../../../node_modules/@popperjs/core/lib/enums.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/math.js", "../../../node_modules/@popperjs/core/lib/utils/userAgent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../node_modules/@popperjs/core/lib/utils/within.js", "../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../../node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../../node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../../node_modules/@popperjs/core/lib/modifiers/flip.js", "../../../node_modules/@popperjs/core/lib/modifiers/hide.js", "../../../node_modules/@popperjs/core/lib/modifiers/offset.js", "../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../../node_modules/@popperjs/core/lib/modifiers/index.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../node_modules/@popperjs/core/lib/utils/debounce.js", "../../../node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../node_modules/@popperjs/core/lib/createPopper.js", "../../../node_modules/@popperjs/core/lib/popper-lite.js", "../../../node_modules/@popperjs/core/lib/popper.js", "../../../node_modules/@popperjs/core/lib/index.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../../node_modules/trix/src/trix/config/attachments.js", "../../../node_modules/trix/src/trix/config/block_attributes.js", "../../../node_modules/trix/src/trix/config/browser.js", "../../../node_modules/trix/src/trix/config/dompurify.js", "../../../node_modules/trix/src/trix/config/lang.js", "../../../node_modules/trix/src/trix/config/file_size_formatting.js", "../../../node_modules/trix/src/trix/constants.js", "../../../node_modules/trix/src/trix/core/helpers/extend.js", "../../../node_modules/trix/src/trix/core/helpers/dom.js", "../../../node_modules/trix/src/trix/config/input.js", "../../../node_modules/trix/src/trix/config/key_names.js", "../../../node_modules/trix/src/trix/config/parser.js", "../../../node_modules/trix/src/trix/config/text_attributes.js", "../../../node_modules/trix/src/trix/config/toolbar.js", "../../../node_modules/trix/src/trix/config/undo.js", "../../../node_modules/trix/src/trix/config/css.js", "../../../node_modules/trix/src/trix/core/basic_object.js", "../../../node_modules/trix/src/trix/core/utilities/utf16_string.js", "../../../node_modules/trix/src/trix/core/object.js", "../../../node_modules/trix/src/trix/core/helpers/arrays.js", "../../../node_modules/trix/src/trix/core/helpers/bidi.js", "../../../node_modules/trix/src/trix/core/helpers/config.js", "../../../node_modules/trix/src/trix/core/helpers/custom_elements.js", "../../../node_modules/trix/src/trix/core/helpers/events.js", "../../../node_modules/trix/src/trix/core/helpers/functions.js", "../../../node_modules/trix/src/trix/core/helpers/objects.js", "../../../node_modules/trix/src/trix/core/helpers/ranges.js", "../../../node_modules/trix/src/trix/observers/selection_change_observer.js", "../../../node_modules/trix/src/trix/core/helpers/strings.js", "../../../node_modules/trix/src/trix/core/collections/hash.js", "../../../node_modules/trix/src/trix/core/collections/object_group.js", "../../../node_modules/trix/src/trix/core/collections/object_map.js", "../../../node_modules/trix/src/trix/core/collections/element_store.js", "../../../node_modules/trix/src/trix/core/utilities/operation.js", "../../../node_modules/trix/src/trix/views/object_view.js", "../../../node_modules/trix/node_modules/dompurify/dist/purify.es.mjs", "../../../node_modules/trix/src/trix/models/html_sanitizer.js", "../../../node_modules/trix/src/trix/views/attachment_view.js", "../../../node_modules/trix/src/trix/views/previewable_attachment_view.js", "../../../node_modules/trix/src/trix/views/piece_view.js", "../../../node_modules/trix/src/trix/views/text_view.js", "../../../node_modules/trix/src/trix/views/block_view.js", "../../../node_modules/trix/src/trix/views/document_view.js", "../../../node_modules/trix/src/trix/models/piece.js", "../../../node_modules/trix/src/trix/operations/image_preload_operation.js", "../../../node_modules/trix/src/trix/models/attachment.js", "../../../node_modules/trix/src/trix/models/attachment_piece.js", "../../../node_modules/trix/src/trix/models/string_piece.js", "../../../node_modules/trix/src/trix/models/splittable_list.js", "../../../node_modules/trix/src/trix/models/text.js", "../../../node_modules/trix/src/trix/models/block.js", "../../../node_modules/trix/src/trix/models/document.js", "../../../node_modules/trix/src/trix/models/html_parser.js", "../../../node_modules/trix/src/trix/core/serialization.js", "../../../node_modules/trix/src/trix/models/managed_attachment.js", "../../../node_modules/trix/src/trix/models/attachment_manager.js", "../../../node_modules/trix/src/trix/models/line_break_insertion.js", "../../../node_modules/trix/src/trix/models/composition.js", "../../../node_modules/trix/src/trix/models/undo_manager.js", "../../../node_modules/trix/src/trix/filters/filter.js", "../../../node_modules/trix/src/trix/filters/attachment_gallery_filter.js", "../../../node_modules/trix/src/trix/models/editor.js", "../../../node_modules/trix/src/trix/models/location_mapper.js", "../../../node_modules/trix/src/trix/models/point_mapper.js", "../../../node_modules/trix/src/trix/models/selection_manager.js", "../../../node_modules/trix/src/trix/controllers/attachment_editor_controller.js", "../../../node_modules/trix/src/trix/controllers/composition_controller.js", "../../../node_modules/trix/src/trix/controllers/controller.js", "../../../node_modules/trix/src/trix/observers/mutation_observer.js", "../../../node_modules/trix/src/trix/operations/file_verification_operation.js", "../../../node_modules/trix/src/trix/models/flaky_android_keyboard_detector.js", "../../../node_modules/trix/src/trix/controllers/input_controller.js", "../../../node_modules/trix/src/trix/controllers/level_0_input_controller.js", "../../../node_modules/trix/src/trix/controllers/level_2_input_controller.js", "../../../node_modules/trix/src/trix/controllers/toolbar_controller.js", "../../../node_modules/trix/src/trix/controllers/editor_controller.js", "../../../node_modules/trix/src/trix/elements/trix_toolbar_element.js", "../../../node_modules/trix/src/trix/elements/trix_editor_element.js", "../../../node_modules/trix/src/trix/trix.js", "../../../node_modules/@rails/actiontext/app/assets/javascripts/actiontext.esm.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.js", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/errors.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/namespace.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/default-format-localization.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/datetime.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/service-locator.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/calendar-modes.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/optionsStore.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/validation.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/event-emitter.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/default-options.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/typeChecker.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/optionProcessor.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/optionConverter.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/dates.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/action-types.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/calendar/date-display.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/calendar/month-display.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/calendar/year-display.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/calendar/decade-display.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/time/time-display.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/time/hour-display.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/time/minute-display.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/time/second-display.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/collapse.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/index.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/actions.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/tempus-dominus.ts", "../../javascript/controllers/datepicker_controller.js", "../../javascript/controllers/empty_controller.js", "../../../node_modules/@rails/request.js/src/fetch_response.js", "../../../node_modules/@rails/request.js/src/request_interceptor.js", "../../../node_modules/@rails/request.js/src/lib/utils.js", "../../../node_modules/@rails/request.js/src/fetch_request.js", "../../../node_modules/@rails/request.js/src/verbs.js", "../../javascript/controllers/forms_controller.js", "../../javascript/controllers/profile_loader_controller.js", "../../javascript/controllers/items_positions_controller.js", "../../javascript/controllers/matches_controller.js", "../../../node_modules/stimulus-rails-nested-form/dist/stimulus-rails-nested-form.mjs", "../../javascript/controllers/nested_form_controller.js", "../../javascript/controllers/players_controller.js", "../../javascript/controllers/reports_controller.js", "../../javascript/controllers/routes_controller.js", "../../../node_modules/slim-select/src/slim-select/classes.ts", "../../../node_modules/slim-select/src/slim-select/animations.ts", "../../../node_modules/slim-select/src/slim-select/settings.ts", "../../../node_modules/slim-select/src/slim-select/helpers.ts", "../../../node_modules/slim-select/src/slim-select/events.ts", "../../../node_modules/slim-select/src/slim-select/lifecycle.ts", "../../../node_modules/slim-select/src/slim-select/store.ts", "../../../node_modules/slim-select/src/slim-select/render.ts", "../../../node_modules/slim-select/src/slim-select/mutations.ts", "../../../node_modules/slim-select/src/slim-select/select.ts", "../../../node_modules/slim-select/src/slim-select/sync.ts", "../../../node_modules/slim-select/src/slim-select/index.ts", "../../javascript/controllers/selectable_controller.js", "../../javascript/controllers/transfer_windows_controller.js", "../../javascript/controllers/index.js", "../../../node_modules/bootstrap/js/src/dom/data.js", "../../../node_modules/bootstrap/js/src/util/index.js", "../../../node_modules/bootstrap/js/src/dom/event-handler.js", "../../../node_modules/bootstrap/js/src/dom/manipulator.js", "../../../node_modules/bootstrap/js/src/util/config.js", "../../../node_modules/bootstrap/js/src/base-component.js", "../../../node_modules/bootstrap/js/src/dom/selector-engine.js", "../../../node_modules/bootstrap/js/src/util/component-functions.js", "../../../node_modules/bootstrap/js/src/alert.js", "../../../node_modules/bootstrap/js/src/button.js", "../../../node_modules/bootstrap/js/src/util/swipe.js", "../../../node_modules/bootstrap/js/src/carousel.js", "../../../node_modules/bootstrap/js/src/collapse.js", "../../../node_modules/bootstrap/js/src/dropdown.js", "../../../node_modules/bootstrap/js/src/util/backdrop.js", "../../../node_modules/bootstrap/js/src/util/focustrap.js", "../../../node_modules/bootstrap/js/src/util/scrollbar.js", "../../../node_modules/bootstrap/js/src/modal.js", "../../../node_modules/bootstrap/js/src/offcanvas.js", "../../../node_modules/bootstrap/js/src/util/sanitizer.js", "../../../node_modules/bootstrap/js/src/util/template-factory.js", "../../../node_modules/bootstrap/js/src/tooltip.js", "../../../node_modules/bootstrap/js/src/popover.js", "../../../node_modules/bootstrap/js/src/scrollspy.js", "../../../node_modules/bootstrap/js/src/tab.js", "../../../node_modules/bootstrap/js/src/toast.js", "../../javascript/application.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 logger from \"./logger\"\nimport Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\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 // eslint-disable-line\n    a.protocol = a.protocol.replace(\"http\", \"ws\")\n    return a.href\n  } else {\n    return url\n  }\n}\n", "import adapters from \"./adapters\"\nimport Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\nimport Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport Subscriptions from \"./subscriptions\"\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", "export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];", "export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}", "export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}", "import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };", "import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};", "import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}", "export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;", "export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}", "import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}", "import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}", "import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}", "import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}", "import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}", "import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}", "import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}", "import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}", "export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}", "import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}", "export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}", "import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}", "export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};", "export default function getVariation(placement) {\n  return placement.split('-')[1];\n}", "import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n  var x = _ref.x,\n      y = _ref.y;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }, getWindow(popper)) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};", "import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};", "var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}", "var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}", "import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}", "import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}", "import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}", "import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}", "import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}", "import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}", "export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}", "import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}", "import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}", "import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}", "import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}", "import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases \u2013 research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};", "import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};", "import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};", "export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}", "import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};", "export { default as applyStyles } from \"./applyStyles.js\";\nexport { default as arrow } from \"./arrow.js\";\nexport { default as computeStyles } from \"./computeStyles.js\";\nexport { default as eventListeners } from \"./eventListeners.js\";\nexport { default as flip } from \"./flip.js\";\nexport { default as hide } from \"./hide.js\";\nexport { default as offset } from \"./offset.js\";\nexport { default as popperOffsets } from \"./popperOffsets.js\";\nexport { default as preventOverflow } from \"./preventOverflow.js\";", "export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}", "import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}", "import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}", "export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}", "export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}", "import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        });\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update \u2013 it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update \u2013 it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref) {\n        var name = _ref.name,\n            _ref$options = _ref.options,\n            options = _ref$options === void 0 ? {} : _ref$options,\n            effect = _ref.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";", "export * from \"./enums.js\";\nexport * from \"./modifiers/index.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { popperGenerator, detectOverflow, createPopper as createPopperBase } from \"./createPopper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper } from \"./popper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\";", "/*!\nTurbo 8.0.23\nCopyright \u00A9 2026 37signals LLC\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 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() * 16).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  const link = findClosestRecursively(target, \"a[href], a[xlink\\\\:href]\");\n\n  if (!link) return null\n  if (link.href.startsWith(\"#\")) return null\n  if (link.hasAttribute(\"download\")) return null\n\n  const linkTarget = link.getAttribute(\"target\");\n  if (linkTarget && linkTarget !== \"_self\") return null\n\n  return link\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 = addTrailingSlash(url.origin + url.pathname);\n  return addTrailingSlash(baseURL.href) === prefix || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n  return isPrefixedBy(location, rootLocation) && !config.drive.unvisitableExtensions.has(getExtension(location))\n}\n\nfunction getLocationForLink(link) {\n  return expandURL(link.getAttribute(\"href\") || \"\")\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 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\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 window.fetch(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 identity = key => key;\n\nclass LRUCache {\n  keys = []\n  entries = {}\n  #toCacheKey\n\n  constructor(size, toCacheKey = identity) {\n    this.size = size;\n    this.#toCacheKey = toCacheKey;\n  }\n\n  has(key) {\n    return this.#toCacheKey(key) in this.entries\n  }\n\n  get(key) {\n    if (this.has(key)) {\n      const entry = this.read(key);\n      this.touch(key);\n      return entry\n    }\n  }\n\n  put(key, entry) {\n    this.write(key, entry);\n    this.touch(key);\n    return entry\n  }\n\n  clear() {\n    for (const key of Object.keys(this.entries)) {\n      this.evict(key);\n    }\n  }\n\n  // Private\n\n  read(key) {\n    return this.entries[this.#toCacheKey(key)]\n  }\n\n  write(key, entry) {\n    this.entries[this.#toCacheKey(key)] = entry;\n  }\n\n  touch(key) {\n    key = this.#toCacheKey(key);\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      this.evict(key);\n    }\n  }\n\n  evict(key) {\n    delete this.entries[key];\n  }\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache extends LRUCache {\n  #prefetchTimeout = null\n  #maxAges = {}\n\n  constructor(size = 1, prefetchDelay = PREFETCH_DELAY) {\n    super(size, toCacheKey);\n    this.prefetchDelay = prefetchDelay;\n  }\n\n  putLater(url, request, ttl) {\n    this.#prefetchTimeout = setTimeout(() => {\n      request.perform();\n      this.put(url, request, ttl);\n      this.#prefetchTimeout = null;\n    }, this.prefetchDelay);\n  }\n\n  put(url, request, ttl = cacheTtl) {\n    super.put(url, request);\n    this.#maxAges[toCacheKey(url)] = new Date(new Date().getTime() + ttl);\n  }\n\n  clear() {\n    super.clear();\n    if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n  }\n\n  evict(key) {\n    super.evict(key);\n    delete this.#maxAges[key];\n  }\n\n  has(key) {\n    if (super.has(key)) {\n      const maxAge = this.#maxAges[toCacheKey(key)];\n\n      return maxAge && maxAge > Date.now()\n    } else {\n      return false\n    }\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.focusElement(element);\n      this.scrollToElement(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/**\n * @typedef {object} ConfigHead\n *\n * @property {'merge' | 'append' | 'morph' | 'none'} [style]\n * @property {boolean} [block]\n * @property {boolean} [ignore]\n * @property {function(Element): boolean} [shouldPreserve]\n * @property {function(Element): boolean} [shouldReAppend]\n * @property {function(Element): boolean} [shouldRemove]\n * @property {function(Element, {added: Node[], kept: Element[], removed: Element[]}): void} [afterHeadMorphed]\n */\n\n/**\n * @typedef {object} ConfigCallbacks\n *\n * @property {function(Node): boolean} [beforeNodeAdded]\n * @property {function(Node): void} [afterNodeAdded]\n * @property {function(Element, Node): boolean} [beforeNodeMorphed]\n * @property {function(Element, Node): void} [afterNodeMorphed]\n * @property {function(Element): boolean} [beforeNodeRemoved]\n * @property {function(Element): void} [afterNodeRemoved]\n * @property {function(string, Element, \"update\" | \"remove\"): boolean} [beforeAttributeUpdated]\n */\n\n/**\n * @typedef {object} Config\n *\n * @property {'outerHTML' | 'innerHTML'} [morphStyle]\n * @property {boolean} [ignoreActive]\n * @property {boolean} [ignoreActiveValue]\n * @property {boolean} [restoreFocus]\n * @property {ConfigCallbacks} [callbacks]\n * @property {ConfigHead} [head]\n */\n\n/**\n * @typedef {function} NoOp\n *\n * @returns {void}\n */\n\n/**\n * @typedef {object} ConfigHeadInternal\n *\n * @property {'merge' | 'append' | 'morph' | 'none'} style\n * @property {boolean} [block]\n * @property {boolean} [ignore]\n * @property {(function(Element): boolean) | NoOp} shouldPreserve\n * @property {(function(Element): boolean) | NoOp} shouldReAppend\n * @property {(function(Element): boolean) | NoOp} shouldRemove\n * @property {(function(Element, {added: Node[], kept: Element[], removed: Element[]}): void) | NoOp} afterHeadMorphed\n */\n\n/**\n * @typedef {object} ConfigCallbacksInternal\n *\n * @property {(function(Node): boolean) | NoOp} beforeNodeAdded\n * @property {(function(Node): void) | NoOp} afterNodeAdded\n * @property {(function(Node, Node): boolean) | NoOp} beforeNodeMorphed\n * @property {(function(Node, Node): void) | NoOp} afterNodeMorphed\n * @property {(function(Node): boolean) | NoOp} beforeNodeRemoved\n * @property {(function(Node): void) | NoOp} afterNodeRemoved\n * @property {(function(string, Element, \"update\" | \"remove\"): boolean) | NoOp} beforeAttributeUpdated\n */\n\n/**\n * @typedef {object} ConfigInternal\n *\n * @property {'outerHTML' | 'innerHTML'} morphStyle\n * @property {boolean} [ignoreActive]\n * @property {boolean} [ignoreActiveValue]\n * @property {boolean} [restoreFocus]\n * @property {ConfigCallbacksInternal} callbacks\n * @property {ConfigHeadInternal} head\n */\n\n/**\n * @typedef {Object} IdSets\n * @property {Set<string>} persistentIds\n * @property {Map<Node, Set<string>>} idMap\n */\n\n/**\n * @typedef {Function} Morph\n *\n * @param {Element | Document} oldNode\n * @param {Element | Node | HTMLCollection | Node[] | string | null} newContent\n * @param {Config} [config]\n * @returns {undefined | Node[]}\n */\n\n// base IIFE to define idiomorph\n/**\n *\n * @type {{defaults: ConfigInternal, morph: Morph}}\n */\nvar Idiomorph = (function () {\n\n  /**\n   * @typedef {object} MorphContext\n   *\n   * @property {Element} target\n   * @property {Element} newContent\n   * @property {ConfigInternal} config\n   * @property {ConfigInternal['morphStyle']} morphStyle\n   * @property {ConfigInternal['ignoreActive']} ignoreActive\n   * @property {ConfigInternal['ignoreActiveValue']} ignoreActiveValue\n   * @property {ConfigInternal['restoreFocus']} restoreFocus\n   * @property {Map<Node, Set<string>>} idMap\n   * @property {Set<string>} persistentIds\n   * @property {ConfigInternal['callbacks']} callbacks\n   * @property {ConfigInternal['head']} head\n   * @property {HTMLDivElement} pantry\n   * @property {Element[]} activeElementAndParents\n   */\n\n  //=============================================================================\n  // AND NOW IT BEGINS...\n  //=============================================================================\n\n  const noOp = () => {};\n  /**\n   * Default configuration values, updatable by users now\n   * @type {ConfigInternal}\n   */\n  const 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    head: {\n      style: \"merge\",\n      shouldPreserve: (elt) => elt.getAttribute(\"im-preserve\") === \"true\",\n      shouldReAppend: (elt) => elt.getAttribute(\"im-re-append\") === \"true\",\n      shouldRemove: noOp,\n      afterHeadMorphed: noOp,\n    },\n    restoreFocus: true,\n  };\n\n  /**\n   * Core idiomorph function for morphing one DOM tree to another\n   *\n   * @param {Element | Document} oldNode\n   * @param {Element | Node | HTMLCollection | Node[] | string | null} newContent\n   * @param {Config} [config]\n   * @returns {Promise<Node[]> | Node[]}\n   */\n  function morph(oldNode, newContent, config = {}) {\n    oldNode = normalizeElement(oldNode);\n    const newNode = normalizeParent(newContent);\n    const ctx = createMorphContext(oldNode, newNode, config);\n\n    const morphedNodes = saveAndRestoreFocus(ctx, () => {\n      return withHeadBlocking(\n        ctx,\n        oldNode,\n        newNode,\n        /** @param {MorphContext} ctx */ (ctx) => {\n          if (ctx.morphStyle === \"innerHTML\") {\n            morphChildren(ctx, oldNode, newNode);\n            return Array.from(oldNode.childNodes);\n          } else {\n            return morphOuterHTML(ctx, oldNode, newNode);\n          }\n        },\n      );\n    });\n\n    ctx.pantry.remove();\n    return morphedNodes;\n  }\n\n  /**\n   * Morph just the outerHTML of the oldNode to the newContent\n   * We have to be careful because the oldNode could have siblings which need to be untouched\n   * @param {MorphContext} ctx\n   * @param {Element} oldNode\n   * @param {Element} newNode\n   * @returns {Node[]}\n   */\n  function morphOuterHTML(ctx, oldNode, newNode) {\n    const oldParent = normalizeParent(oldNode);\n    morphChildren(\n      ctx,\n      oldParent,\n      newNode,\n      // these two optional params are the secret sauce\n      oldNode, // start point for iteration\n      oldNode.nextSibling, // end point for iteration\n    );\n    // this is safe even with siblings, because normalizeParent returns a SlicedParentNode if needed.\n    return Array.from(oldParent.childNodes);\n  }\n\n  /**\n   * @param {MorphContext} ctx\n   * @param {Function} fn\n   * @returns {Promise<Node[]> | Node[]}\n   */\n  function saveAndRestoreFocus(ctx, fn) {\n    if (!ctx.config.restoreFocus) return fn();\n    let activeElement =\n      /** @type {HTMLInputElement|HTMLTextAreaElement|null} */ (\n        document.activeElement\n      );\n\n    // don't bother if the active element is not an input or textarea\n    if (\n      !(\n        activeElement instanceof HTMLInputElement ||\n        activeElement instanceof HTMLTextAreaElement\n      )\n    ) {\n      return fn();\n    }\n\n    const { id: activeElementId, selectionStart, selectionEnd } = activeElement;\n\n    const results = fn();\n\n    if (\n      activeElementId &&\n      activeElementId !== document.activeElement?.getAttribute(\"id\")\n    ) {\n      activeElement = ctx.target.querySelector(`[id=\"${activeElementId}\"]`);\n      activeElement?.focus();\n    }\n    if (activeElement && !activeElement.selectionEnd && selectionEnd) {\n      activeElement.setSelectionRange(selectionStart, selectionEnd);\n    }\n\n    return results;\n  }\n\n  const morphChildren = (function () {\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:\n     * - for each node in the new content:\n     *   - search self and siblings for an id set match, falling back to a soft match\n     *   - if match found\n     *     - remove any nodes up to the match:\n     *       - pantry persistent nodes\n     *       - delete the rest\n     *     - morph the match\n     *   - elsif no match found, and node is persistent\n     *     - find its match by querying the old root (future) and pantry (past)\n     *     - move it and its children here\n     *     - morph it\n     *   - else\n     *     - create a new node from scratch as a last result\n     *\n     * @param {MorphContext} ctx the merge context\n     * @param {Element} oldParent the old content that we are merging the new content into\n     * @param {Element} newParent the parent element of the new content\n     * @param {Node|null} [insertionPoint] the point in the DOM we start morphing at (defaults to first child)\n     * @param {Node|null} [endPoint] the point in the DOM we stop morphing at (defaults to after last child)\n     */\n    function morphChildren(\n      ctx,\n      oldParent,\n      newParent,\n      insertionPoint = null,\n      endPoint = null,\n    ) {\n      // normalize\n      if (\n        oldParent instanceof HTMLTemplateElement &&\n        newParent instanceof HTMLTemplateElement\n      ) {\n        // @ts-ignore we can pretend the DocumentFragment is an Element\n        oldParent = oldParent.content;\n        // @ts-ignore ditto\n        newParent = newParent.content;\n      }\n      insertionPoint ||= oldParent.firstChild;\n\n      // run through all the new content\n      for (const newChild of newParent.childNodes) {\n        // once we reach the end of the old parent content skip to the end and insert the rest\n        if (insertionPoint && insertionPoint != endPoint) {\n          const bestMatch = findBestMatch(\n            ctx,\n            newChild,\n            insertionPoint,\n            endPoint,\n          );\n          if (bestMatch) {\n            // if the node to morph is not at the insertion point then remove/move up to it\n            if (bestMatch !== insertionPoint) {\n              removeNodesBetween(ctx, insertionPoint, bestMatch);\n            }\n            morphNode(bestMatch, newChild, ctx);\n            insertionPoint = bestMatch.nextSibling;\n            continue;\n          }\n        }\n\n        // if the matching node is elsewhere in the original content\n        if (newChild instanceof Element) {\n          // we can pretend the id is non-null because the next `.has` line will reject it if not\n          const newChildId = /** @type {String} */ (\n            newChild.getAttribute(\"id\")\n          );\n          if (ctx.persistentIds.has(newChildId)) {\n            // move it and all its children here and morph\n            const movedChild = moveBeforeById(\n              oldParent,\n              newChildId,\n              insertionPoint,\n              ctx,\n            );\n            morphNode(movedChild, newChild, ctx);\n            insertionPoint = movedChild.nextSibling;\n            continue;\n          }\n        }\n\n        // last resort: insert the new node from scratch\n        const insertedNode = createNode(\n          oldParent,\n          newChild,\n          insertionPoint,\n          ctx,\n        );\n        // could be null if beforeNodeAdded prevented insertion\n        if (insertedNode) {\n          insertionPoint = insertedNode.nextSibling;\n        }\n      }\n\n      // remove any remaining old nodes that didn't match up with new content\n      while (insertionPoint && insertionPoint != endPoint) {\n        const tempNode = insertionPoint;\n        insertionPoint = insertionPoint.nextSibling;\n        removeNode(ctx, tempNode);\n      }\n    }\n\n    /**\n     * This performs the action of inserting a new node while handling situations where the node contains\n     * elements with persistent ids and possible state info we can still preserve by moving in and then morphing\n     *\n     * @param {Element} oldParent\n     * @param {Node} newChild\n     * @param {Node|null} insertionPoint\n     * @param {MorphContext} ctx\n     * @returns {Node|null}\n     */\n    function createNode(oldParent, newChild, insertionPoint, ctx) {\n      if (ctx.callbacks.beforeNodeAdded(newChild) === false) return null;\n      if (ctx.idMap.has(newChild)) {\n        // node has children with ids with possible state so create a dummy elt of same type and apply full morph algorithm\n        const newEmptyChild = document.createElement(\n          /** @type {Element} */ (newChild).tagName,\n        );\n        oldParent.insertBefore(newEmptyChild, insertionPoint);\n        morphNode(newEmptyChild, newChild, ctx);\n        ctx.callbacks.afterNodeAdded(newEmptyChild);\n        return newEmptyChild;\n      } else {\n        // optimisation: no id state to preserve so we can just insert a clone of the newChild and its descendants\n        const newClonedChild = document.importNode(newChild, true); // importNode to not mutate newParent\n        oldParent.insertBefore(newClonedChild, insertionPoint);\n        ctx.callbacks.afterNodeAdded(newClonedChild);\n        return newClonedChild;\n      }\n    }\n\n    //=============================================================================\n    // Matching Functions\n    //=============================================================================\n    const findBestMatch = (function () {\n      /**\n       * Scans forward from the startPoint to the endPoint looking for a match\n       * for the node. It looks for an id set match first, then a soft match.\n       * We abort softmatching if we find two future soft matches, to reduce churn.\n       * @param {Node} node\n       * @param {MorphContext} ctx\n       * @param {Node | null} startPoint\n       * @param {Node | null} endPoint\n       * @returns {Node | null}\n       */\n      function findBestMatch(ctx, node, startPoint, endPoint) {\n        let softMatch = null;\n        let nextSibling = node.nextSibling;\n        let siblingSoftMatchCount = 0;\n\n        let cursor = startPoint;\n        while (cursor && cursor != endPoint) {\n          // soft matching is a prerequisite for id set matching\n          if (isSoftMatch(cursor, node)) {\n            if (isIdSetMatch(ctx, cursor, node)) {\n              return cursor; // found an id set match, we're done!\n            }\n\n            // we haven't yet saved a soft match fallback\n            if (softMatch === null) {\n              // the current soft match will hard match something else in the future, leave it\n              if (!ctx.idMap.has(cursor)) {\n                // save this as the fallback if we get through the loop without finding a hard match\n                softMatch = cursor;\n              }\n            }\n          }\n          if (\n            softMatch === null &&\n            nextSibling &&\n            isSoftMatch(cursor, nextSibling)\n          ) {\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, block soft matching for this node to allow\n            // future siblings to soft match. This is to reduce churn in the DOM when an element\n            // is prepended.\n            if (siblingSoftMatchCount >= 2) {\n              softMatch = undefined;\n            }\n          }\n\n          // if the current node contains active element, stop looking for better future matches,\n          // because if one is found, this node will be moved to the pantry, reparenting it and thus losing focus\n          // @ts-ignore pretend cursor is Element rather than Node, we're just testing for array inclusion\n          if (ctx.activeElementAndParents.includes(cursor)) break;\n\n          cursor = cursor.nextSibling;\n        }\n\n        return softMatch || null;\n      }\n\n      /**\n       *\n       * @param {MorphContext} ctx\n       * @param {Node} oldNode\n       * @param {Node} newNode\n       * @returns {boolean}\n       */\n      function isIdSetMatch(ctx, oldNode, newNode) {\n        let oldSet = ctx.idMap.get(oldNode);\n        let newSet = ctx.idMap.get(newNode);\n\n        if (!newSet || !oldSet) return false;\n\n        for (const id of oldSet) {\n          // a potential match is an id in the new and old nodes that\n          // has not already been merged into the DOM\n          // But the newNode content we call this on has not been\n          // merged yet and we don't allow duplicate IDs so it is simple\n          if (newSet.has(id)) {\n            return true;\n          }\n        }\n        return false;\n      }\n\n      /**\n       *\n       * @param {Node} oldNode\n       * @param {Node} newNode\n       * @returns {boolean}\n       */\n      function isSoftMatch(oldNode, newNode) {\n        // ok to cast: if one is not element, `id` and `tagName` will be undefined and we'll just compare that.\n        const oldElt = /** @type {Element} */ (oldNode);\n        const newElt = /** @type {Element} */ (newNode);\n\n        return (\n          oldElt.nodeType === newElt.nodeType &&\n          oldElt.tagName === newElt.tagName &&\n          // If oldElt has an `id` with possible state and it doesn't match newElt.id then avoid morphing.\n          // We'll still match an anonymous node with an IDed newElt, though, because if it got this far,\n          // its not persistent, and new nodes can't have any hidden state.\n          // We can't use .id because of form input shadowing, and we can't count on .getAttribute's presence because it could be a document-fragment\n          (!oldElt.getAttribute?.(\"id\") ||\n            oldElt.getAttribute?.(\"id\") === newElt.getAttribute?.(\"id\"))\n        );\n      }\n\n      return findBestMatch;\n    })();\n\n    //=============================================================================\n    // DOM Manipulation Functions\n    //=============================================================================\n\n    /**\n     * Gets rid of an unwanted DOM node; strategy depends on nature of its reuse:\n     * - Persistent nodes will be moved to the pantry for later reuse\n     * - Other nodes will have their hooks called, and then are removed\n     * @param {MorphContext} ctx\n     * @param {Node} node\n     */\n    function removeNode(ctx, node) {\n      // are we going to id set match this later?\n      if (ctx.idMap.has(node)) {\n        // skip callbacks and move to pantry\n        moveBefore(ctx.pantry, node, null);\n      } else {\n        // remove for realsies\n        if (ctx.callbacks.beforeNodeRemoved(node) === false) return;\n        node.parentNode?.removeChild(node);\n        ctx.callbacks.afterNodeRemoved(node);\n      }\n    }\n\n    /**\n     * Remove nodes between the start and end nodes\n     * @param {MorphContext} ctx\n     * @param {Node} startInclusive\n     * @param {Node} endExclusive\n     * @returns {Node|null}\n     */\n    function removeNodesBetween(ctx, startInclusive, endExclusive) {\n      /** @type {Node | null} */\n      let cursor = startInclusive;\n      // remove nodes until the endExclusive node\n      while (cursor && cursor !== endExclusive) {\n        let tempNode = /** @type {Node} */ (cursor);\n        cursor = cursor.nextSibling;\n        removeNode(ctx, tempNode);\n      }\n      return cursor;\n    }\n\n    /**\n     * Search for an element by id within the document and pantry, and move it using moveBefore.\n     *\n     * @param {Element} parentNode - The parent node to which the element will be moved.\n     * @param {string} id - The ID of the element to be moved.\n     * @param {Node | null} after - The reference node to insert the element before.\n     *                              If `null`, the element is appended as the last child.\n     * @param {MorphContext} ctx\n     * @returns {Element} The found element\n     */\n    function moveBeforeById(parentNode, id, after, ctx) {\n      const target =\n        /** @type {Element} - will always be found */\n        (\n          // ctx.target.id unsafe because of form input shadowing\n          // ctx.target could be a document fragment which doesn't have `getAttribute`\n          (ctx.target.getAttribute?.(\"id\") === id && ctx.target) ||\n            ctx.target.querySelector(`[id=\"${id}\"]`) ||\n            ctx.pantry.querySelector(`[id=\"${id}\"]`)\n        );\n      removeElementFromAncestorsIdMaps(target, ctx);\n      moveBefore(parentNode, target, after);\n      return target;\n    }\n\n    /**\n     * Removes an element from its ancestors' id maps. This is needed when an element is moved from the\n     * \"future\" via `moveBeforeId`. Otherwise, its erstwhile ancestors could be mistakenly moved to the\n     * pantry rather than being deleted, preventing their removal hooks from being called.\n     *\n     * @param {Element} element - element to remove from its ancestors' id maps\n     * @param {MorphContext} ctx\n     */\n    function removeElementFromAncestorsIdMaps(element, ctx) {\n      // we know id is non-null String, because this function is only called on elements with ids\n      const id = /** @type {String} */ (element.getAttribute(\"id\"));\n      /** @ts-ignore - safe to loop in this way **/\n      while ((element = element.parentNode)) {\n        let idSet = ctx.idMap.get(element);\n        if (idSet) {\n          idSet.delete(id);\n          if (!idSet.size) {\n            ctx.idMap.delete(element);\n          }\n        }\n      }\n    }\n\n    /**\n     * Moves an element before another element within the same parent.\n     * Uses the proposed `moveBefore` API if available (and working), otherwise falls back to `insertBefore`.\n     * This is essentialy a forward-compat wrapper.\n     *\n     * @param {Element} parentNode - The parent node containing the after element.\n     * @param {Node} element - The element to be moved.\n     * @param {Node | null} after - The reference node to insert `element` before.\n     *                              If `null`, `element` is appended as the last child.\n     */\n    function moveBefore(parentNode, element, after) {\n      // @ts-ignore - use proposed moveBefore feature\n      if (parentNode.moveBefore) {\n        try {\n          // @ts-ignore - use proposed moveBefore feature\n          parentNode.moveBefore(element, after);\n        } catch (e) {\n          // fall back to insertBefore as some browsers may fail on moveBefore when trying to move Dom disconnected nodes to pantry\n          parentNode.insertBefore(element, after);\n        }\n      } else {\n        parentNode.insertBefore(element, after);\n      }\n    }\n\n    return morphChildren;\n  })();\n\n  //=============================================================================\n  // Single Node Morphing Code\n  //=============================================================================\n  const morphNode = (function () {\n    /**\n     * @param {Node} oldNode root node to merge content into\n     * @param {Node} newContent new content to merge\n     * @param {MorphContext} ctx the merge context\n     * @returns {Node | null} the element that ended up in the DOM\n     */\n    function morphNode(oldNode, newContent, ctx) {\n      if (ctx.ignoreActive && oldNode === document.activeElement) {\n        // don't morph focused element\n        return null;\n      }\n\n      if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) {\n        return oldNode;\n      }\n\n      if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (\n        oldNode instanceof HTMLHeadElement &&\n        ctx.head.style !== \"morph\"\n      ) {\n        // ok to cast: if newContent wasn't also a <head>, it would've got caught in the `!isSoftMatch` branch above\n        handleHeadElement(\n          oldNode,\n          /** @type {HTMLHeadElement} */ (newContent),\n          ctx,\n        );\n      } else {\n        morphAttributes(oldNode, newContent, ctx);\n        if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n          // @ts-ignore newContent can be a node here because .firstChild will be null\n          morphChildren(ctx, oldNode, newContent);\n        }\n      }\n      ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n      return oldNode;\n    }\n\n    /**\n     * syncs the oldNode to the newNode, copying over all attributes and\n     * inner element state from the newNode to the oldNode\n     *\n     * @param {Node} oldNode the node to copy attributes & state to\n     * @param {Node} newNode the node to copy attributes & state from\n     * @param {MorphContext} ctx the merge context\n     */\n    function morphAttributes(oldNode, newNode, ctx) {\n      let type = newNode.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 oldElt = /** @type {Element} */ (oldNode);\n        const newElt = /** @type {Element} */ (newNode);\n\n        const oldAttributes = oldElt.attributes;\n        const newAttributes = newElt.attributes;\n        for (const newAttribute of newAttributes) {\n          if (ignoreAttribute(newAttribute.name, oldElt, \"update\", ctx)) {\n            continue;\n          }\n          if (oldElt.getAttribute(newAttribute.name) !== newAttribute.value) {\n            oldElt.setAttribute(newAttribute.name, newAttribute.value);\n          }\n        }\n        // iterate backwards to avoid skipping over items when a delete occurs\n        for (let i = oldAttributes.length - 1; 0 <= i; i--) {\n          const oldAttribute = oldAttributes[i];\n\n          // toAttributes is a live NamedNodeMap, so iteration+mutation is unsafe\n          // e.g. custom element attribute callbacks can remove other attributes\n          if (!oldAttribute) continue;\n\n          if (!newElt.hasAttribute(oldAttribute.name)) {\n            if (ignoreAttribute(oldAttribute.name, oldElt, \"remove\", ctx)) {\n              continue;\n            }\n            oldElt.removeAttribute(oldAttribute.name);\n          }\n        }\n\n        if (!ignoreValueOfActiveElement(oldElt, ctx)) {\n          syncInputValue(oldElt, newElt, ctx);\n        }\n      }\n\n      // sync text nodes\n      if (type === 8 /* comment */ || type === 3 /* text */) {\n        if (oldNode.nodeValue !== newNode.nodeValue) {\n          oldNode.nodeValue = newNode.nodeValue;\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 {Element} oldElement the element to sync the input value to\n     * @param {Element} newElement the element to sync the input value from\n     * @param {MorphContext} ctx the merge context\n     */\n    function syncInputValue(oldElement, newElement, ctx) {\n      if (\n        oldElement instanceof HTMLInputElement &&\n        newElement instanceof HTMLInputElement &&\n        newElement.type !== \"file\"\n      ) {\n        let newValue = newElement.value;\n        let oldValue = oldElement.value;\n\n        // sync boolean attributes\n        syncBooleanAttribute(oldElement, newElement, \"checked\", ctx);\n        syncBooleanAttribute(oldElement, newElement, \"disabled\", ctx);\n\n        if (!newElement.hasAttribute(\"value\")) {\n          if (!ignoreAttribute(\"value\", oldElement, \"remove\", ctx)) {\n            oldElement.value = \"\";\n            oldElement.removeAttribute(\"value\");\n          }\n        } else if (oldValue !== newValue) {\n          if (!ignoreAttribute(\"value\", oldElement, \"update\", ctx)) {\n            oldElement.setAttribute(\"value\", newValue);\n            oldElement.value = newValue;\n          }\n        }\n        // TODO: QUESTION(1cg): this used to only check `newElement` unlike the other branches -- why?\n        // did I break something?\n      } else if (\n        oldElement instanceof HTMLOptionElement &&\n        newElement instanceof HTMLOptionElement\n      ) {\n        syncBooleanAttribute(oldElement, newElement, \"selected\", ctx);\n      } else if (\n        oldElement instanceof HTMLTextAreaElement &&\n        newElement instanceof HTMLTextAreaElement\n      ) {\n        let newValue = newElement.value;\n        let oldValue = oldElement.value;\n        if (ignoreAttribute(\"value\", oldElement, \"update\", ctx)) {\n          return;\n        }\n        if (newValue !== oldValue) {\n          oldElement.value = newValue;\n        }\n        if (\n          oldElement.firstChild &&\n          oldElement.firstChild.nodeValue !== newValue\n        ) {\n          oldElement.firstChild.nodeValue = newValue;\n        }\n      }\n    }\n\n    /**\n     * @param {Element} oldElement element to write the value to\n     * @param {Element} newElement element to read the value from\n     * @param {string} attributeName the attribute name\n     * @param {MorphContext} ctx the merge context\n     */\n    function syncBooleanAttribute(oldElement, newElement, attributeName, ctx) {\n      // @ts-ignore this function is only used on boolean attrs that are reflected as dom properties\n      const newLiveValue = newElement[attributeName],\n        // @ts-ignore ditto\n        oldLiveValue = oldElement[attributeName];\n      if (newLiveValue !== oldLiveValue) {\n        const ignoreUpdate = ignoreAttribute(\n          attributeName,\n          oldElement,\n          \"update\",\n          ctx,\n        );\n        if (!ignoreUpdate) {\n          // update attribute's associated DOM property\n          // @ts-ignore this function is only used on boolean attrs that are reflected as dom properties\n          oldElement[attributeName] = newElement[attributeName];\n        }\n        if (newLiveValue) {\n          if (!ignoreUpdate) {\n            // https://developer.mozilla.org/en-US/docs/Glossary/Boolean/HTML\n            // this is the correct way to set a boolean attribute to \"true\"\n            oldElement.setAttribute(attributeName, \"\");\n          }\n        } else {\n          if (!ignoreAttribute(attributeName, oldElement, \"remove\", ctx)) {\n            oldElement.removeAttribute(attributeName);\n          }\n        }\n      }\n    }\n\n    /**\n     * @param {string} attr the attribute to be mutated\n     * @param {Element} element the element that is going to be updated\n     * @param {\"update\" | \"remove\"} updateType\n     * @param {MorphContext} ctx the merge context\n     * @returns {boolean} true if the attribute should be ignored, false otherwise\n     */\n    function ignoreAttribute(attr, element, updateType, ctx) {\n      if (\n        attr === \"value\" &&\n        ctx.ignoreActiveValue &&\n        element === document.activeElement\n      ) {\n        return true;\n      }\n      return (\n        ctx.callbacks.beforeAttributeUpdated(attr, element, updateType) ===\n        false\n      );\n    }\n\n    /**\n     * @param {Node} possibleActiveElement\n     * @param {MorphContext} ctx\n     * @returns {boolean}\n     */\n    function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n      return (\n        !!ctx.ignoreActiveValue &&\n        possibleActiveElement === document.activeElement &&\n        possibleActiveElement !== document.body\n      );\n    }\n\n    return morphNode;\n  })();\n\n  //=============================================================================\n  // Head Management Functions\n  //=============================================================================\n  /**\n   * @param {MorphContext} ctx\n   * @param {Element} oldNode\n   * @param {Element} newNode\n   * @param {function} callback\n   * @returns {Node[] | Promise<Node[]>}\n   */\n  function withHeadBlocking(ctx, oldNode, newNode, callback) {\n    if (ctx.head.block) {\n      const oldHead = oldNode.querySelector(\"head\");\n      const newHead = newNode.querySelector(\"head\");\n      if (oldHead && newHead) {\n        const promises = handleHeadElement(oldHead, newHead, ctx);\n        // when head promises resolve, proceed ignoring the head tag\n        return Promise.all(promises).then(() => {\n          const newCtx = Object.assign(ctx, {\n            head: {\n              block: false,\n              ignore: true,\n            },\n          });\n          return callback(newCtx);\n        });\n      }\n    }\n    // just proceed if we not head blocking\n    return callback(ctx);\n  }\n\n  /**\n   *  The HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n   *\n   * @param {Element} oldHead\n   * @param {Element} newHead\n   * @param {MorphContext} ctx\n   * @returns {Promise<void>[]}\n   */\n  function handleHeadElement(oldHead, newHead, ctx) {\n    let added = [];\n    let removed = [];\n    let preserved = [];\n    let nodesToAppend = [];\n\n    // put all new head elements into a Map, by their outerHTML\n    let srcToNewHeadNodes = new Map();\n    for (const newHeadChild of newHead.children) {\n      srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n    }\n\n    // for each elt in the current head\n    for (const currentHeadElt of oldHead.children) {\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 (ctx.head.style === \"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      // TODO: This could theoretically be null, based on type\n      let newElt = /** @type {ChildNode} */ (\n        document.createRange().createContextualFragment(newNode.outerHTML)\n          .firstChild\n      );\n      if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n        if (\n          (\"href\" in newElt && newElt.href) ||\n          (\"src\" in newElt && newElt.src)\n        ) {\n          /** @type {(result?: any) => void} */ let resolve;\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        oldHead.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        oldHead.removeChild(removedElement);\n        ctx.callbacks.afterNodeRemoved(removedElement);\n      }\n    }\n\n    ctx.head.afterHeadMorphed(oldHead, {\n      added: added,\n      kept: preserved,\n      removed: removed,\n    });\n    return promises;\n  }\n\n  //=============================================================================\n  // Create Morph Context Functions\n  //=============================================================================\n  const createMorphContext = (function () {\n    /**\n     *\n     * @param {Element} oldNode\n     * @param {Element} newContent\n     * @param {Config} config\n     * @returns {MorphContext}\n     */\n    function createMorphContext(oldNode, newContent, config) {\n      const { persistentIds, idMap } = createIdMaps(oldNode, newContent);\n\n      const mergedConfig = mergeDefaults(config);\n      const morphStyle = mergedConfig.morphStyle || \"outerHTML\";\n      if (![\"innerHTML\", \"outerHTML\"].includes(morphStyle)) {\n        throw `Do not understand how to morph style ${morphStyle}`;\n      }\n\n      return {\n        target: oldNode,\n        newContent: newContent,\n        config: mergedConfig,\n        morphStyle: morphStyle,\n        ignoreActive: mergedConfig.ignoreActive,\n        ignoreActiveValue: mergedConfig.ignoreActiveValue,\n        restoreFocus: mergedConfig.restoreFocus,\n        idMap: idMap,\n        persistentIds: persistentIds,\n        pantry: createPantry(),\n        activeElementAndParents: createActiveElementAndParents(oldNode),\n        callbacks: mergedConfig.callbacks,\n        head: mergedConfig.head,\n      };\n    }\n\n    /**\n     * Deep merges the config object and the Idiomorph.defaults object to\n     * produce a final configuration object\n     * @param {Config} config\n     * @returns {ConfigInternal}\n     */\n    function mergeDefaults(config) {\n      let finalConfig = Object.assign({}, defaults);\n\n      // copy top level stuff into final config\n      Object.assign(finalConfig, config);\n\n      // copy callbacks into final config (do this to deep merge the callbacks)\n      finalConfig.callbacks = Object.assign(\n        {},\n        defaults.callbacks,\n        config.callbacks,\n      );\n\n      // copy head config into final config  (do this to deep merge the head)\n      finalConfig.head = Object.assign({}, defaults.head, config.head);\n\n      return finalConfig;\n    }\n\n    /**\n     * @returns {HTMLDivElement}\n     */\n    function createPantry() {\n      const pantry = document.createElement(\"div\");\n      pantry.hidden = true;\n      document.body.insertAdjacentElement(\"afterend\", pantry);\n      return pantry;\n    }\n\n    /**\n     * @param {Element} oldNode\n     * @returns {Element[]}\n     */\n    function createActiveElementAndParents(oldNode) {\n      /** @type {Element[]} */\n      let activeElementAndParents = [];\n      let elt = document.activeElement;\n      if (elt?.tagName !== \"BODY\" && oldNode.contains(elt)) {\n        while (elt) {\n          activeElementAndParents.push(elt);\n          if (elt === oldNode) break;\n          elt = elt.parentElement;\n        }\n      }\n      return activeElementAndParents;\n    }\n\n    /**\n     * Returns all elements with an ID contained within the root element and its descendants\n     *\n     * @param {Element} root\n     * @returns {Element[]}\n     */\n    function findIdElements(root) {\n      let elements = Array.from(root.querySelectorAll(\"[id]\"));\n      // root could be a document fragment which doesn't have `getAttribute`\n      if (root.getAttribute?.(\"id\")) {\n        elements.push(root);\n      }\n      return elements;\n    }\n\n    /**\n     * A bottom-up algorithm that populates a map of Element -> IdSet.\n     * The idSet for a given element is the set of all IDs contained within its subtree.\n     * As an optimzation, we filter these IDs through the given list of persistent IDs,\n     * because we don't need to bother considering IDed elements that won't be in the new content.\n     *\n     * @param {Map<Node, Set<string>>} idMap\n     * @param {Set<string>} persistentIds\n     * @param {Element} root\n     * @param {Element[]} elements\n     */\n    function populateIdMapWithTree(idMap, persistentIds, root, elements) {\n      for (const elt of elements) {\n        // we can pretend id is non-null String, because the .has line will reject it immediately if not\n        const id = /** @type {String} */ (elt.getAttribute(\"id\"));\n        if (persistentIds.has(id)) {\n          /** @type {Element|null} */\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) {\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(id);\n\n            if (current === root) break;\n            current = current.parentElement;\n          }\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 {IdSets}\n     */\n    function createIdMaps(oldContent, newContent) {\n      const oldIdElements = findIdElements(oldContent);\n      const newIdElements = findIdElements(newContent);\n\n      const persistentIds = createPersistentIds(oldIdElements, newIdElements);\n\n      /** @type {Map<Node, Set<string>>} */\n      let idMap = new Map();\n      populateIdMapWithTree(idMap, persistentIds, oldContent, oldIdElements);\n\n      /** @ts-ignore - if newContent is a duck-typed parent, pass its single child node as the root to halt upwards iteration */\n      const newRoot = newContent.__idiomorphRoot || newContent;\n      populateIdMapWithTree(idMap, persistentIds, newRoot, newIdElements);\n\n      return { persistentIds, idMap };\n    }\n\n    /**\n     * This function computes the set of ids that persist between the two contents excluding duplicates\n     *\n     * @param {Element[]} oldIdElements\n     * @param {Element[]} newIdElements\n     * @returns {Set<string>}\n     */\n    function createPersistentIds(oldIdElements, newIdElements) {\n      let duplicateIds = new Set();\n\n      /** @type {Map<string, string>} */\n      let oldIdTagNameMap = new Map();\n      for (const { id, tagName } of oldIdElements) {\n        if (oldIdTagNameMap.has(id)) {\n          duplicateIds.add(id);\n        } else {\n          oldIdTagNameMap.set(id, tagName);\n        }\n      }\n\n      let persistentIds = new Set();\n      for (const { id, tagName } of newIdElements) {\n        if (persistentIds.has(id)) {\n          duplicateIds.add(id);\n        } else if (oldIdTagNameMap.get(id) === tagName) {\n          persistentIds.add(id);\n        }\n        // skip if tag types mismatch because its not possible to morph one tag into another\n      }\n\n      for (const id of duplicateIds) {\n        persistentIds.delete(id);\n      }\n      return persistentIds;\n    }\n\n    return createMorphContext;\n  })();\n\n  //=============================================================================\n  // HTML Normalization Functions\n  //=============================================================================\n  const { normalizeElement, normalizeParent } = (function () {\n    /** @type {WeakSet<Node>} */\n    const generatedByIdiomorph = new WeakSet();\n\n    /**\n     *\n     * @param {Element | Document} content\n     * @returns {Element}\n     */\n    function normalizeElement(content) {\n      if (content instanceof Document) {\n        return content.documentElement;\n      } else {\n        return content;\n      }\n    }\n\n    /**\n     *\n     * @param {null | string | Node | HTMLCollection | Node[] | Document & {generatedByIdiomorph:boolean}} newContent\n     * @returns {Element}\n     */\n    function normalizeParent(newContent) {\n      if (newContent == null) {\n        return document.createElement(\"div\"); // dummy parent element\n      } else if (typeof newContent === \"string\") {\n        return normalizeParent(parseContent(newContent));\n      } else if (\n        generatedByIdiomorph.has(/** @type {Element} */ (newContent))\n      ) {\n        // the template tag created by idiomorph parsing can serve as a dummy parent\n        return /** @type {Element} */ (newContent);\n      } else if (newContent instanceof Node) {\n        if (newContent.parentNode) {\n          // we can't use the parent directly because newContent may have siblings\n          // that we don't want in the morph, and reparenting might be expensive (TODO is it?),\n          // so instead we create a fake parent node that only sees a slice of its children.\n          /** @type {Element} */\n          return /** @type {any} */ (new SlicedParentNode(newContent));\n        } else {\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        }\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    /**\n     * A fake duck-typed parent element to wrap a single node, without actually reparenting it.\n     * This is useful because the node may have siblings that we don't want in the morph, and it may also be moved\n     * or replaced with one or more elements during the morph. This class effectively allows us a window into\n     * a slice of a node's children.\n     * \"If it walks like a duck, and quacks like a duck, then it must be a duck!\" -- James Whitcomb Riley (1849\u20131916)\n     */\n    class SlicedParentNode {\n      /** @param {Node} node */\n      constructor(node) {\n        this.originalNode = node;\n        this.realParentNode = /** @type {Element} */ (node.parentNode);\n        this.previousSibling = node.previousSibling;\n        this.nextSibling = node.nextSibling;\n      }\n\n      /** @returns {Node[]} */\n      get childNodes() {\n        // return slice of realParent's current childNodes, based on previousSibling and nextSibling\n        const nodes = [];\n        let cursor = this.previousSibling\n          ? this.previousSibling.nextSibling\n          : this.realParentNode.firstChild;\n        while (cursor && cursor != this.nextSibling) {\n          nodes.push(cursor);\n          cursor = cursor.nextSibling;\n        }\n        return nodes;\n      }\n\n      /**\n       * @param {string} selector\n       * @returns {Element[]}\n       */\n      querySelectorAll(selector) {\n        return this.childNodes.reduce((results, node) => {\n          if (node instanceof Element) {\n            if (node.matches(selector)) results.push(node);\n            const nodeList = node.querySelectorAll(selector);\n            for (let i = 0; i < nodeList.length; i++) {\n              results.push(nodeList[i]);\n            }\n          }\n          return results;\n        }, /** @type {Element[]} */ ([]));\n      }\n\n      /**\n       * @param {Node} node\n       * @param {Node} referenceNode\n       * @returns {Node}\n       */\n      insertBefore(node, referenceNode) {\n        return this.realParentNode.insertBefore(node, referenceNode);\n      }\n\n      /**\n       * @param {Node} node\n       * @param {Node} referenceNode\n       * @returns {Node}\n       */\n      moveBefore(node, referenceNode) {\n        // @ts-ignore - use new moveBefore feature\n        return this.realParentNode.moveBefore(node, referenceNode);\n      }\n\n      /**\n       * for later use with populateIdMapWithTree to halt upwards iteration\n       * @returns {Node}\n       */\n      get __idiomorphRoot() {\n        return this.originalNode;\n      }\n    }\n\n    /**\n     *\n     * @param {string} newContent\n     * @returns {Node | null | DocumentFragment}\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(\n        /<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim,\n        \"\",\n      );\n\n      // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n      if (\n        contentWithSvgsRemoved.match(/<\\/html>/) ||\n        contentWithSvgsRemoved.match(/<\\/head>/) ||\n        contentWithSvgsRemoved.match(/<\\/body>/)\n      ) {\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          generatedByIdiomorph.add(content);\n          return content;\n        } else {\n          // otherwise return the html element as the parent container\n          let htmlElement = content.firstChild;\n          if (htmlElement) {\n            generatedByIdiomorph.add(htmlElement);\n          }\n          return htmlElement;\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(\n          \"<body><template>\" + newContent + \"</template></body>\",\n          \"text/html\",\n        );\n        let content = /** @type {HTMLTemplateElement} */ (\n          responseDoc.body.querySelector(\"template\")\n        ).content;\n        generatedByIdiomorph.add(content);\n        return content;\n      }\n    }\n\n    return { normalizeElement, normalizeParent };\n  })();\n\n  //=============================================================================\n  // This is what ends up becoming the Idiomorph global object\n  //=============================================================================\n  return {\n    morph,\n    defaults,\n  };\n})();\n\n/**\n * Morph the state of the currentElement based on the attributes and contents of\n * the newElement. Morphing may dispatch turbo:before-morph-element,\n * turbo:before-morph-attribute, and turbo:morph-element events.\n *\n * @param currentElement Element destination of morphing changes\n * @param newElement Element source of morphing changes\n */\nfunction morphElements(currentElement, newElement, { callbacks, ...options } = {}) {\n  Idiomorph.morph(currentElement, newElement, {\n    ...options,\n    callbacks: new DefaultIdiomorphCallbacks(callbacks)\n  });\n}\n\n/**\n * Morph the child elements of the currentElement based on the child elements of\n * the newElement. Morphing children may dispatch turbo:before-morph-element,\n * turbo:before-morph-attribute, and turbo:morph-element events.\n *\n * @param currentElement Element destination of morphing children changes\n * @param newElement Element source of morphing children changes\n */\nfunction morphChildren(currentElement, newElement, options = {}) {\n  morphElements(currentElement, newElement.childNodes, {\n    ...options,\n    morphStyle: \"innerHTML\"\n  });\n}\n\nfunction shouldRefreshFrameWithMorphing(currentFrame, newFrame) {\n  return currentFrame instanceof FrameElement &&\n    currentFrame.shouldReloadWithMorph && (!newFrame || areFramesCompatibleForRefreshing(currentFrame, newFrame)) &&\n    !currentFrame.closest(\"[data-turbo-permanent]\")\n}\n\nfunction areFramesCompatibleForRefreshing(currentFrame, newFrame) {\n  // newFrame cannot yet be an instance of FrameElement because custom\n  // elements don't get initialized until they're attached to the DOM, so\n  // test its Element#nodeName instead\n  return newFrame instanceof Element && newFrame.nodeName === \"TURBO-FRAME\" && currentFrame.id === newFrame.id &&\n  (!newFrame.getAttribute(\"src\") || urlsAreEqual(currentFrame.src, newFrame.getAttribute(\"src\")))\n}\n\nfunction closestFrameReloadableWithMorphing(node) {\n  return node.parentElement.closest(\"turbo-frame[src][refresh=morph]\")\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      callbacks: {\n        beforeNodeMorphed: (node, newNode) => {\n          if (\n            shouldRefreshFrameWithMorphing(node, newNode) &&\n              closestFrameReloadableWithMorphing(node) === currentElement\n          ) {\n            node.reload();\n            return false\n          }\n          return true\n        }\n      }\n    });\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    for (const clonedNoscriptElement of clonedElement.querySelectorAll(\"noscript\")) {\n      clonedNoscriptElement.remove();\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 dir() {\n    return this.documentElement.getAttribute(\"dir\")\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    const viewTransitionEnabled = this.getSetting(\"view-transition\") === \"true\" || this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\";\n    return viewTransitionEnabled && !window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n  }\n\n  get refreshMethod() {\n    return this.getSetting(\"refresh-method\")\n  }\n\n  get refreshScroll() {\n    return this.getSetting(\"refresh-scroll\")\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  refresh: {}\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      refresh\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.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    this.refresh = refresh;\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  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.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  // 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\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  hasPreloadedResponse() {\n    return typeof this.response == \"object\"\n  }\n\n  shouldIssueRequest() {\n    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    this.redirectedToLocation = null;\n\n    visit.loadCachedSnapshot();\n    visit.issueRequest();\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    if (visit.response.redirected) {\n      this.redirectedToLocation = visit.redirectedToLocation;\n    }\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  // Link prefetching\n\n  linkPrefetchingIsEnabledForLocation(location) {\n    return true\n  }\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.redirectedToLocation || 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\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)]\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  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      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      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    const { turbo } = event.state || {};\n    this.location = new URL(window.location.href);\n\n    if (turbo) {\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    } else {\n      this.currentIndex++;\n      this.delegate.historyPoppedWithEmptyState(this.location);\n    }\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        fetchRequest.fetchOptions.priority = \"low\";\n\n        prefetchCache.putLater(location, 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);\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.refreshScroll !== \"preserve\") {\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  // Link prefetching\n\n  linkPrefetchingIsEnabledForLocation(location) {\n    // Not all adapters implement linkPrefetchingIsEnabledForLocation\n    if (typeof this.adapter.linkPrefetchingIsEnabledForLocation === \"function\") {\n      return this.adapter.linkPrefetchingIsEnabledForLocation(location)\n    }\n\n    return true\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  // Same-page links are no longer handled with a Visit.\n  // This method is still needed for Turbo Native adapters.\n  locationWithActionIsSamePage(location, action) {\n    return false\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 { dir, lang } = this.newSnapshot;\n\n    if (lang) {\n      documentElement.setAttribute(\"lang\", lang);\n    } else {\n      documentElement.removeAttribute(\"lang\");\n    }\n    if (dir) {\n      documentElement.setAttribute(\"dir\", dir);\n    } else {\n      documentElement.removeAttribute(\"dir\");\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.removeNoscriptElements();\n    this.activateNewBodyScriptElements();\n  }\n\n  removeNoscriptElements() {\n    for (const noscriptElement of this.newElement.querySelectorAll(\"noscript\")) {\n      noscriptElement.remove();\n    }\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: (node, newNode) => {\n          if (\n            shouldRefreshFrameWithMorphing(node, newNode) &&\n              !closestFrameReloadableWithMorphing(node)\n          ) {\n            node.reload();\n            return false\n          }\n          return true\n        }\n      }\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\nclass SnapshotCache extends LRUCache {\n  constructor(size) {\n    super(size, toCacheKey);\n  }\n\n  get snapshots() {\n    return this.entries\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) && (visit?.refresh?.method || this.snapshot.refreshMethod) === \"morph\";\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) && (visit?.refresh?.scroll || this.snapshot.refreshScroll) === \"preserve\"\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, options = {}) {\n    options = typeof options === \"string\" ? { requestId: options } : options;\n\n    const { method, requestId, scroll } = options;\n    const isRecentRequest = requestId && this.recentRequests.has(requestId);\n    const isCurrentUrl = url === document.baseURI;\n    if (!isRecentRequest && !this.navigator.currentVisit && isCurrentUrl) {\n      this.visit(url, { action: \"replace\", shouldCacheSnapshot: false, refresh: { method, scroll } });\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  historyPoppedWithEmptyState(location) {\n    this.history.replace(location);\n    this.view.lastRenderedLocation = location;\n    this.view.cacheSnapshot();\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      this.navigator.linkPrefetchingIsEnabledForLocation(location)\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.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    this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n  }\n\n  visitCompleted(visit) {\n    this.view.unmarkVisitDirection();\n    clearBusyState(document.documentElement);\n    this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\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    this.notifyApplicationBeforeCachingSnapshot();\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  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);\n\n// Rename `navigator` to avoid shadowing `window.navigator`\nconst { cache, navigator: sessionNavigator } = 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 * 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\n/**\n * Morph the state of the currentBody based on the attributes and contents of\n * the newBody. Morphing body elements may dispatch turbo:morph,\n * turbo:before-morph-element, turbo:before-morph-attribute, and\n * turbo:morph-element events.\n *\n * @param currentBody HTMLBodyElement destination of morphing changes\n * @param newBody HTMLBodyElement source of morphing changes\n */\nfunction morphBodyElements(currentBody, newBody) {\n  MorphingPageRenderer.renderElement(currentBody, newBody);\n}\n\n/**\n * Morph the child elements of the currentFrame based on the child elements of\n * the newFrame. Morphing turbo-frame elements may dispatch turbo:before-frame-morph,\n * turbo:before-morph-element, turbo:before-morph-attribute, and\n * turbo:morph-element events.\n *\n * @param currentFrame FrameElement destination of morphing children changes\n * @param newFrame FrameElement source of morphing children changes\n */\nfunction morphTurboFrameElements(currentFrame, newFrame) {\n  MorphingFrameRenderer.renderElement(currentFrame, newFrame);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  PageRenderer: PageRenderer,\n  PageSnapshot: PageSnapshot,\n  FrameRenderer: FrameRenderer,\n  fetch: fetchWithTurboHeaders,\n  config: config,\n  session: session,\n  cache: cache,\n  navigator: sessionNavigator,\n  start: start,\n  registerAdapter: registerAdapter,\n  visit: visit,\n  connectStreamSource: connectStreamSource,\n  disconnectStreamSource: disconnectStreamSource,\n  renderStreamMessage: renderStreamMessage,\n  setProgressBarDelay: setProgressBarDelay,\n  setConfirmMethod: setConfirmMethod,\n  setFormMode: setFormMode,\n  morphBodyElements: morphBodyElements,\n  morphTurboFrameElements: morphTurboFrameElements,\n  morphChildren: morphChildren,\n  morphElements: morphElements\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      if (!this.element.hasAttribute(\"recurse\")) {\n        this.#currentFetchRequest?.cancel();\n      }\n    }\n  }\n\n  disabledChanged() {\n    if (this.disabled) {\n      this.#currentFetchRequest?.cancel();\n    } else if (this.loadingStyle == FrameLoadingStyle.eager) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLChanged() {\n    if (this.#isIgnoringChangesTo(\"src\")) return\n\n    if (!this.sourceURL) {\n      this.#currentFetchRequest?.cancel();\n    }\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\n    const { fetchRequest } = this.formSubmission;\n    const frame = this.#findFrameElement(element, submitter);\n\n    this.prepareRequest(fetchRequest, frame);\n    this.formSubmission.start();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request, frame = this) {\n    request.headers[\"Turbo-Frame\"] = frame.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    const target = this.#getFrameElementById(id);\n\n    return target instanceof FrameElement ? target : 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 = this.#getFrameElementById(id);\n      if (frameElement) {\n        return !frameElement.disabled\n      } else if (id == \"_parent\") {\n        return false\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 disabled() {\n    return this.element.disabled\n  }\n\n  get enabled() {\n    return !this.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  #getFrameElementById(id) {\n    if (id != null) {\n      const element = id === \"_parent\" ?\n        this.element.parentElement.closest(\"turbo-frame\") :\n        document.getElementById(id);\n      if (element instanceof FrameElement) {\n        return element\n      }\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.removeDuplicateTargetSiblings();\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.removeDuplicateTargetSiblings();\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    const method = this.getAttribute(\"method\");\n    const requestId = this.requestId;\n    const scroll = this.getAttribute(\"scroll\");\n\n    session.refresh(this.baseURI, { method, requestId, scroll });\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.getAttribute(\"id\"));\n    const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.getAttribute(\"id\")).map((c) => c.getAttribute(\"id\"));\n\n    return existingChildren.filter((c) => newChildrenIds.includes(c.getAttribute(\"id\")))\n  }\n\n  /**\n  * Removes duplicate siblings (by ID)\n  */\n  removeDuplicateTargetSiblings() {\n    this.duplicateSiblings.forEach((c) => c.remove());\n  }\n\n  /**\n  * Gets the list of duplicate siblings (i.e. those with the same ID)\n  */\n  get duplicateSiblings() {\n    const existingChildren = this.targetElements.flatMap((e) => [...e.parentElement.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  const scriptElement = document.currentScript;\n  if (!scriptElement) return\n  if (scriptElement.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n  let element = scriptElement.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        scriptElement.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, config, connectStreamSource, disconnectStreamSource, fetchWithTurboHeaders as fetch, fetchEnctypeFromString, fetchMethodFromString, isSafe, morphBodyElements, morphChildren, morphElements, morphTurboFrameElements, sessionNavigator 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", "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  ADD_ATTR: [ \"language\" ],\n  SAFE_FOR_XML: false,\n  RETURN_DOM: true\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 createEvent = function(eventName, { bubbles, cancelable, attributes } = {}) {\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 event\n}\n\nexport const triggerEvent = function(eventName, { onElement, bubbles, cancelable, attributes } = {}) {\n  const element = onElement != null ? onElement : html\n  const event = createEvent(eventName, { bubbles, cancelable, attributes })\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}\" data-trix-validate-href 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", "/*! @license DOMPurify 3.4.2 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.2/LICENSE */\n\nconst {\n  entries,\n  setPrototypeOf,\n  isFrozen,\n  getPrototypeOf,\n  getOwnPropertyDescriptor\n} = Object;\nlet {\n  freeze,\n  seal,\n  create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n  apply,\n  construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n  freeze = function freeze(x) {\n    return x;\n  };\n}\nif (!seal) {\n  seal = function seal(x) {\n    return x;\n  };\n}\nif (!apply) {\n  apply = function apply(func, thisArg) {\n    for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      args[_key - 2] = arguments[_key];\n    }\n    return func.apply(thisArg, args);\n  };\n}\nif (!construct) {\n  construct = function construct(Func) {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n    return new Func(...args);\n  };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst arrayIsArray = Array.isArray;\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst numberToString = unapply(Number.prototype.toString);\nconst booleanToString = unapply(Boolean.prototype.toString);\nconst bigintToString = typeof BigInt === 'undefined' ? null : unapply(BigInt.prototype.toString);\nconst symbolToString = typeof Symbol === 'undefined' ? null : unapply(Symbol.prototype.toString);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst objectToString = unapply(Object.prototype.toString);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n  return function (thisArg) {\n    if (thisArg instanceof RegExp) {\n      thisArg.lastIndex = 0;\n    }\n    for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n      args[_key3 - 1] = arguments[_key3];\n    }\n    return apply(func, thisArg, args);\n  };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(Func) {\n  return function () {\n    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n    return construct(Func, args);\n  };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n  let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n  if (setPrototypeOf) {\n    // Make 'in' and truthy checks like Boolean(set.constructor)\n    // independent of any properties defined on Object.prototype.\n    // Prevent prototype setters from intercepting set as a this value.\n    setPrototypeOf(set, null);\n  }\n  if (!arrayIsArray(array)) {\n    return set;\n  }\n  let l = array.length;\n  while (l--) {\n    let element = array[l];\n    if (typeof element === 'string') {\n      const lcElement = transformCaseFunc(element);\n      if (lcElement !== element) {\n        // Config presets (e.g. tags.js, attrs.js) are immutable.\n        if (!isFrozen(array)) {\n          array[l] = lcElement;\n        }\n        element = lcElement;\n      }\n    }\n    set[element] = true;\n  }\n  return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n  for (let index = 0; index < array.length; index++) {\n    const isPropertyExist = objectHasOwnProperty(array, index);\n    if (!isPropertyExist) {\n      array[index] = null;\n    }\n  }\n  return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n  const newObject = create(null);\n  for (const [property, value] of entries(object)) {\n    const isPropertyExist = objectHasOwnProperty(object, property);\n    if (isPropertyExist) {\n      if (arrayIsArray(value)) {\n        newObject[property] = cleanArray(value);\n      } else if (value && typeof value === 'object' && value.constructor === Object) {\n        newObject[property] = clone(value);\n      } else {\n        newObject[property] = value;\n      }\n    }\n  }\n  return newObject;\n}\n/**\n * Convert non-node values into strings without depending on direct property access.\n *\n * @param value - The value to stringify.\n * @returns A string representation of the provided value.\n */\nfunction stringifyValue(value) {\n  switch (typeof value) {\n    case 'string':\n      {\n        return value;\n      }\n    case 'number':\n      {\n        return numberToString(value);\n      }\n    case 'boolean':\n      {\n        return booleanToString(value);\n      }\n    case 'bigint':\n      {\n        return bigintToString ? bigintToString(value) : '0';\n      }\n    case 'symbol':\n      {\n        return symbolToString ? symbolToString(value) : 'Symbol()';\n      }\n    case 'undefined':\n      {\n        return objectToString(value);\n      }\n    case 'function':\n    case 'object':\n      {\n        if (value === null) {\n          return objectToString(value);\n        }\n        const valueAsRecord = value;\n        const valueToString = lookupGetter(valueAsRecord, 'toString');\n        if (typeof valueToString === 'function') {\n          const stringified = valueToString(valueAsRecord);\n          return typeof stringified === 'string' ? stringified : objectToString(stringified);\n        }\n        return objectToString(value);\n      }\n    default:\n      {\n        return objectToString(value);\n      }\n  }\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n  while (object !== null) {\n    const desc = getOwnPropertyDescriptor(object, prop);\n    if (desc) {\n      if (desc.get) {\n        return unapply(desc.get);\n      }\n      if (typeof desc.value === 'function') {\n        return unapply(desc.value);\n      }\n    }\n    object = getPrototypeOf(object);\n  }\n  function fallbackValue() {\n    return null;\n  }\n  return fallbackValue;\n}\nfunction isRegex(value) {\n  try {\n    regExpTest(value, '');\n    return true;\n  } catch (_unused) {\n    return false;\n  }\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'search', 'section', 'select', 'shadow', 'slot', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'enterkeyhint', 'exportparts', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'inputmode', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'part', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'mask-type', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnalign', 'columnlines', 'columnspacing', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lquote', 'lspace', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    ARIA_ATTR: ARIA_ATTR,\n    ATTR_WHITESPACE: ATTR_WHITESPACE,\n    CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n    DATA_ATTR: DATA_ATTR,\n    DOCTYPE_NAME: DOCTYPE_NAME,\n    ERB_EXPR: ERB_EXPR,\n    IS_ALLOWED_URI: IS_ALLOWED_URI,\n    IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n    MUSTACHE_EXPR: MUSTACHE_EXPR,\n    TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n  element: 1,\n  text: 3,\n  // Deprecated\n  progressingInstruction: 7,\n  comment: 8,\n  document: 9};\nconst getGlobal = function getGlobal() {\n  return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n  if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n    return null;\n  }\n  // Allow the callers to control the unique policy name\n  // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n  // Policy creation with duplicate names throws in Trusted Types.\n  let suffix = null;\n  const ATTR_NAME = 'data-tt-policy-suffix';\n  if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n    suffix = purifyHostElement.getAttribute(ATTR_NAME);\n  }\n  const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n  try {\n    return trustedTypes.createPolicy(policyName, {\n      createHTML(html) {\n        return html;\n      },\n      createScriptURL(scriptUrl) {\n        return scriptUrl;\n      }\n    });\n  } catch (_) {\n    // Policy creation failed (most likely another DOMPurify script has\n    // already run). Skip creating the policy, as this will only cause errors\n    // if TT are enforced.\n    console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n    return null;\n  }\n};\nconst _createHooksMap = function _createHooksMap() {\n  return {\n    afterSanitizeAttributes: [],\n    afterSanitizeElements: [],\n    afterSanitizeShadowDOM: [],\n    beforeSanitizeAttributes: [],\n    beforeSanitizeElements: [],\n    beforeSanitizeShadowDOM: [],\n    uponSanitizeAttribute: [],\n    uponSanitizeElement: [],\n    uponSanitizeShadowNode: []\n  };\n};\nfunction createDOMPurify() {\n  let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n  const DOMPurify = root => createDOMPurify(root);\n  DOMPurify.version = '3.4.2';\n  DOMPurify.removed = [];\n  if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n    // Not running in a browser, provide a factory function\n    // so that you can pass your own Window\n    DOMPurify.isSupported = false;\n    return DOMPurify;\n  }\n  let {\n    document\n  } = window;\n  const originalDocument = document;\n  const currentScript = originalDocument.currentScript;\n  const {\n    DocumentFragment,\n    HTMLTemplateElement,\n    Node,\n    Element,\n    NodeFilter,\n    NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n    HTMLFormElement,\n    DOMParser,\n    trustedTypes\n  } = window;\n  const ElementPrototype = Element.prototype;\n  const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n  const remove = lookupGetter(ElementPrototype, 'remove');\n  const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n  const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n  const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n  // As per issue #47, the web-components registry is inherited by a\n  // new document created via createHTMLDocument. As per the spec\n  // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n  // a new empty registry is used when creating a template contents owner\n  // document, so we use that as our parent document to ensure nothing\n  // is inherited.\n  if (typeof HTMLTemplateElement === 'function') {\n    const template = document.createElement('template');\n    if (template.content && template.content.ownerDocument) {\n      document = template.content.ownerDocument;\n    }\n  }\n  let trustedTypesPolicy;\n  let emptyHTML = '';\n  const {\n    implementation,\n    createNodeIterator,\n    createDocumentFragment,\n    getElementsByTagName\n  } = document;\n  const {\n    importNode\n  } = originalDocument;\n  let hooks = _createHooksMap();\n  /**\n   * Expose whether this browser supports running the full DOMPurify.\n   */\n  DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n  const {\n    MUSTACHE_EXPR,\n    ERB_EXPR,\n    TMPLIT_EXPR,\n    DATA_ATTR,\n    ARIA_ATTR,\n    IS_SCRIPT_OR_DATA,\n    ATTR_WHITESPACE,\n    CUSTOM_ELEMENT\n  } = EXPRESSIONS;\n  let {\n    IS_ALLOWED_URI: IS_ALLOWED_URI$1\n  } = EXPRESSIONS;\n  /**\n   * We consider the elements and attributes below to be safe. Ideally\n   * don't add any new ones but feel free to remove unwanted ones.\n   */\n  /* allowed element names */\n  let ALLOWED_TAGS = null;\n  const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n  /* Allowed attribute names */\n  let ALLOWED_ATTR = null;\n  const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n  /*\n   * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n   * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n   * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n   * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n   */\n  let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n    tagNameCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    attributeNameCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    allowCustomizedBuiltInElements: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: false\n    }\n  }));\n  /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n  let FORBID_TAGS = null;\n  /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n  let FORBID_ATTR = null;\n  /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n  const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n    tagCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    attributeCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    }\n  }));\n  /* Decide if ARIA attributes are okay */\n  let ALLOW_ARIA_ATTR = true;\n  /* Decide if custom data attributes are okay */\n  let ALLOW_DATA_ATTR = true;\n  /* Decide if unknown protocols are okay */\n  let ALLOW_UNKNOWN_PROTOCOLS = false;\n  /* Decide if self-closing tags in attributes are allowed.\n   * Usually removed due to a mXSS issue in jQuery 3.0 */\n  let ALLOW_SELF_CLOSE_IN_ATTR = true;\n  /* Output should be safe for common template engines.\n   * This means, DOMPurify removes data attributes, mustaches and ERB\n   */\n  let SAFE_FOR_TEMPLATES = false;\n  /* Output should be safe even for XML used within HTML and alike.\n   * This means, DOMPurify removes comments when containing risky content.\n   */\n  let SAFE_FOR_XML = true;\n  /* Decide if document with <html>... should be returned */\n  let WHOLE_DOCUMENT = false;\n  /* Track whether config is already set on this instance of DOMPurify. */\n  let SET_CONFIG = false;\n  /* Decide if all elements (e.g. style, script) must be children of\n   * document.body. By default, browsers might move them to document.head */\n  let FORCE_BODY = false;\n  /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n   * string (or a TrustedHTML object if Trusted Types are supported).\n   * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n   */\n  let RETURN_DOM = false;\n  /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n   * string  (or a TrustedHTML object if Trusted Types are supported) */\n  let RETURN_DOM_FRAGMENT = false;\n  /* Try to return a Trusted Type object instead of a string, return a string in\n   * case Trusted Types are not supported  */\n  let RETURN_TRUSTED_TYPE = false;\n  /* Output should be free from DOM clobbering attacks?\n   * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n   */\n  let SANITIZE_DOM = true;\n  /* Achieve full DOM Clobbering protection by isolating the namespace of named\n   * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n   *\n   * HTML/DOM spec rules that enable DOM Clobbering:\n   *   - Named Access on Window (§7.3.3)\n   *   - DOM Tree Accessors (§3.1.5)\n   *   - Form Element Parent-Child Relations (§4.10.3)\n   *   - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n   *   - HTMLCollection (§4.2.10.2)\n   *\n   * Namespace isolation is implemented by prefixing `id` and `name` attributes\n   * with a constant string, i.e., `user-content-`\n   */\n  let SANITIZE_NAMED_PROPS = false;\n  const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n  /* Keep element content when removing element? */\n  let KEEP_CONTENT = true;\n  /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n   * of importing it into a new Document and returning a sanitized copy */\n  let IN_PLACE = false;\n  /* Allow usage of profiles like html, svg and mathMl */\n  let USE_PROFILES = {};\n  /* Tags to ignore content of when KEEP_CONTENT is true */\n  let FORBID_CONTENTS = null;\n  const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n  /* Tags that are safe for data: URIs */\n  let DATA_URI_TAGS = null;\n  const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n  /* Attributes safe for values like \"javascript:\" */\n  let URI_SAFE_ATTRIBUTES = null;\n  const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n  const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n  const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n  const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n  /* Document namespace */\n  let NAMESPACE = HTML_NAMESPACE;\n  let IS_EMPTY_INPUT = false;\n  /* Allowed XHTML+XML namespaces */\n  let ALLOWED_NAMESPACES = null;\n  const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n  let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n  let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n  // Certain elements are allowed in both SVG and HTML\n  // namespace. We need to specify them explicitly\n  // so that they don't get erroneously deleted from\n  // HTML namespace.\n  const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n  /* Parsing of strict XHTML documents */\n  let PARSER_MEDIA_TYPE = null;\n  const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n  const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n  let transformCaseFunc = null;\n  /* Keep a reference to config to pass to hooks */\n  let CONFIG = null;\n  /* Ideally, do not touch anything below this line */\n  /* ______________________________________________ */\n  const formElement = document.createElement('form');\n  const isRegexOrFunction = function isRegexOrFunction(testValue) {\n    return testValue instanceof RegExp || testValue instanceof Function;\n  };\n  /**\n   * _parseConfig\n   *\n   * @param cfg optional config literal\n   */\n  // eslint-disable-next-line complexity\n  const _parseConfig = function _parseConfig() {\n    let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (CONFIG && CONFIG === cfg) {\n      return;\n    }\n    /* Shield configuration object from tampering */\n    if (!cfg || typeof cfg !== 'object') {\n      cfg = {};\n    }\n    /* Shield configuration object from prototype pollution */\n    cfg = clone(cfg);\n    PARSER_MEDIA_TYPE =\n    // eslint-disable-next-line unicorn/prefer-includes\n    SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n    // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n    transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n    /* Set configuration parameters */\n    ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') && arrayIsArray(cfg.ALLOWED_TAGS) ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n    ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') && arrayIsArray(cfg.ALLOWED_ATTR) ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n    ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') && arrayIsArray(cfg.ALLOWED_NAMESPACES) ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n    URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') && arrayIsArray(cfg.ADD_URI_SAFE_ATTR) ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n    DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') && arrayIsArray(cfg.ADD_DATA_URI_TAGS) ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n    FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') && arrayIsArray(cfg.FORBID_CONTENTS) ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n    FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') && arrayIsArray(cfg.FORBID_TAGS) ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n    FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') && arrayIsArray(cfg.FORBID_ATTR) ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n    USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES && typeof cfg.USE_PROFILES === 'object' ? clone(cfg.USE_PROFILES) : cfg.USE_PROFILES : false;\n    ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n    ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n    ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n    ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n    SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n    SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n    WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n    RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n    RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n    RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n    FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n    SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n    SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n    KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n    IN_PLACE = cfg.IN_PLACE || false; // Default false\n    IS_ALLOWED_URI$1 = isRegex(cfg.ALLOWED_URI_REGEXP) ? cfg.ALLOWED_URI_REGEXP : IS_ALLOWED_URI; // Default regexp\n    NAMESPACE = typeof cfg.NAMESPACE === 'string' ? cfg.NAMESPACE : HTML_NAMESPACE; // Default HTML namespace\n    MATHML_TEXT_INTEGRATION_POINTS = objectHasOwnProperty(cfg, 'MATHML_TEXT_INTEGRATION_POINTS') && cfg.MATHML_TEXT_INTEGRATION_POINTS && typeof cfg.MATHML_TEXT_INTEGRATION_POINTS === 'object' ? clone(cfg.MATHML_TEXT_INTEGRATION_POINTS) : addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']); // Default built-in map\n    HTML_INTEGRATION_POINTS = objectHasOwnProperty(cfg, 'HTML_INTEGRATION_POINTS') && cfg.HTML_INTEGRATION_POINTS && typeof cfg.HTML_INTEGRATION_POINTS === 'object' ? clone(cfg.HTML_INTEGRATION_POINTS) : addToSet({}, ['annotation-xml']); // Default built-in map\n    const customElementHandling = objectHasOwnProperty(cfg, 'CUSTOM_ELEMENT_HANDLING') && cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING === 'object' ? clone(cfg.CUSTOM_ELEMENT_HANDLING) : create(null);\n    CUSTOM_ELEMENT_HANDLING = create(null);\n    if (objectHasOwnProperty(customElementHandling, 'tagNameCheck') && isRegexOrFunction(customElementHandling.tagNameCheck)) {\n      CUSTOM_ELEMENT_HANDLING.tagNameCheck = customElementHandling.tagNameCheck; // Default undefined\n    }\n    if (objectHasOwnProperty(customElementHandling, 'attributeNameCheck') && isRegexOrFunction(customElementHandling.attributeNameCheck)) {\n      CUSTOM_ELEMENT_HANDLING.attributeNameCheck = customElementHandling.attributeNameCheck; // Default undefined\n    }\n    if (objectHasOwnProperty(customElementHandling, 'allowCustomizedBuiltInElements') && typeof customElementHandling.allowCustomizedBuiltInElements === 'boolean') {\n      CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = customElementHandling.allowCustomizedBuiltInElements; // Default undefined\n    }\n    if (SAFE_FOR_TEMPLATES) {\n      ALLOW_DATA_ATTR = false;\n    }\n    if (RETURN_DOM_FRAGMENT) {\n      RETURN_DOM = true;\n    }\n    /* Parse profile info */\n    if (USE_PROFILES) {\n      ALLOWED_TAGS = addToSet({}, text);\n      ALLOWED_ATTR = create(null);\n      if (USE_PROFILES.html === true) {\n        addToSet(ALLOWED_TAGS, html$1);\n        addToSet(ALLOWED_ATTR, html);\n      }\n      if (USE_PROFILES.svg === true) {\n        addToSet(ALLOWED_TAGS, svg$1);\n        addToSet(ALLOWED_ATTR, svg);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n      if (USE_PROFILES.svgFilters === true) {\n        addToSet(ALLOWED_TAGS, svgFilters);\n        addToSet(ALLOWED_ATTR, svg);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n      if (USE_PROFILES.mathMl === true) {\n        addToSet(ALLOWED_TAGS, mathMl$1);\n        addToSet(ALLOWED_ATTR, mathMl);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n    }\n    /* Always reset function-based ADD_TAGS / ADD_ATTR checks to prevent\n     * leaking across calls when switching from function to array config */\n    EXTRA_ELEMENT_HANDLING.tagCheck = null;\n    EXTRA_ELEMENT_HANDLING.attributeCheck = null;\n    /* Merge configuration parameters */\n    if (objectHasOwnProperty(cfg, 'ADD_TAGS')) {\n      if (typeof cfg.ADD_TAGS === 'function') {\n        EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n      } else if (arrayIsArray(cfg.ADD_TAGS)) {\n        if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n          ALLOWED_TAGS = clone(ALLOWED_TAGS);\n        }\n        addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n      }\n    }\n    if (objectHasOwnProperty(cfg, 'ADD_ATTR')) {\n      if (typeof cfg.ADD_ATTR === 'function') {\n        EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n      } else if (arrayIsArray(cfg.ADD_ATTR)) {\n        if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n          ALLOWED_ATTR = clone(ALLOWED_ATTR);\n        }\n        addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n      }\n    }\n    if (objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') && arrayIsArray(cfg.ADD_URI_SAFE_ATTR)) {\n      addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n    }\n    if (objectHasOwnProperty(cfg, 'FORBID_CONTENTS') && arrayIsArray(cfg.FORBID_CONTENTS)) {\n      if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n        FORBID_CONTENTS = clone(FORBID_CONTENTS);\n      }\n      addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n    }\n    if (objectHasOwnProperty(cfg, 'ADD_FORBID_CONTENTS') && arrayIsArray(cfg.ADD_FORBID_CONTENTS)) {\n      if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n        FORBID_CONTENTS = clone(FORBID_CONTENTS);\n      }\n      addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n    }\n    /* Add #text in case KEEP_CONTENT is set to true */\n    if (KEEP_CONTENT) {\n      ALLOWED_TAGS['#text'] = true;\n    }\n    /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n    if (WHOLE_DOCUMENT) {\n      addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n    }\n    /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n    if (ALLOWED_TAGS.table) {\n      addToSet(ALLOWED_TAGS, ['tbody']);\n      delete FORBID_TAGS.tbody;\n    }\n    if (cfg.TRUSTED_TYPES_POLICY) {\n      if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n        throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n      }\n      if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n        throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n      }\n      // Overwrite existing TrustedTypes policy.\n      trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n      // Sign local variables required by `sanitize`.\n      emptyHTML = trustedTypesPolicy.createHTML('');\n    } else {\n      // Uninitialized policy, attempt to initialize the internal dompurify policy.\n      if (trustedTypesPolicy === undefined) {\n        trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n      }\n      // If creating the internal policy succeeded sign internal variables.\n      if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n        emptyHTML = trustedTypesPolicy.createHTML('');\n      }\n    }\n    // Prevent further manipulation of configuration.\n    // Not available in IE8, Safari 5, etc.\n    if (freeze) {\n      freeze(cfg);\n    }\n    CONFIG = cfg;\n  };\n  /* Keep track of all possible SVG and MathML tags\n   * so that we can perform the namespace checks\n   * correctly. */\n  const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n  const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n  /**\n   * @param element a DOM element whose namespace is being checked\n   * @returns Return false if the element has a\n   *  namespace that a spec-compliant parser would never\n   *  return. Return true otherwise.\n   */\n  const _checkValidNamespace = function _checkValidNamespace(element) {\n    let parent = getParentNode(element);\n    // In JSDOM, if we're inside shadow DOM, then parentNode\n    // can be null. We just simulate parent in this case.\n    if (!parent || !parent.tagName) {\n      parent = {\n        namespaceURI: NAMESPACE,\n        tagName: 'template'\n      };\n    }\n    const tagName = stringToLowerCase(element.tagName);\n    const parentTagName = stringToLowerCase(parent.tagName);\n    if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return false;\n    }\n    if (element.namespaceURI === SVG_NAMESPACE) {\n      // The only way to switch from HTML namespace to SVG\n      // is via <svg>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'svg';\n      }\n      // The only way to switch from MathML to SVG is via`\n      // svg if parent is either <annotation-xml> or MathML\n      // text integration points.\n      if (parent.namespaceURI === MATHML_NAMESPACE) {\n        return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n      }\n      // We only allow elements that are defined in SVG\n      // spec. All others are disallowed in SVG namespace.\n      return Boolean(ALL_SVG_TAGS[tagName]);\n    }\n    if (element.namespaceURI === MATHML_NAMESPACE) {\n      // The only way to switch from HTML namespace to MathML\n      // is via <math>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'math';\n      }\n      // The only way to switch from SVG to MathML is via\n      // <math> and HTML integration points\n      if (parent.namespaceURI === SVG_NAMESPACE) {\n        return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n      }\n      // We only allow elements that are defined in MathML\n      // spec. All others are disallowed in MathML namespace.\n      return Boolean(ALL_MATHML_TAGS[tagName]);\n    }\n    if (element.namespaceURI === HTML_NAMESPACE) {\n      // The only way to switch from SVG to HTML is via\n      // HTML integration points, and from MathML to HTML\n      // is via MathML text integration points\n      if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n        return false;\n      }\n      if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n        return false;\n      }\n      // We disallow tags that are specific for MathML\n      // or SVG and should never appear in HTML namespace\n      return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n    }\n    // For XHTML and XML documents that support custom namespaces\n    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return true;\n    }\n    // The code should never reach this place (this means\n    // that the element somehow got namespace that is not\n    // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n    // Return false just in case.\n    return false;\n  };\n  /**\n   * _forceRemove\n   *\n   * @param node a DOM node\n   */\n  const _forceRemove = function _forceRemove(node) {\n    arrayPush(DOMPurify.removed, {\n      element: node\n    });\n    try {\n      // eslint-disable-next-line unicorn/prefer-dom-node-remove\n      getParentNode(node).removeChild(node);\n    } catch (_) {\n      remove(node);\n    }\n  };\n  /**\n   * _removeAttribute\n   *\n   * @param name an Attribute name\n   * @param element a DOM node\n   */\n  const _removeAttribute = function _removeAttribute(name, element) {\n    try {\n      arrayPush(DOMPurify.removed, {\n        attribute: element.getAttributeNode(name),\n        from: element\n      });\n    } catch (_) {\n      arrayPush(DOMPurify.removed, {\n        attribute: null,\n        from: element\n      });\n    }\n    element.removeAttribute(name);\n    // We void attribute values for unremovable \"is\" attributes\n    if (name === 'is') {\n      if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n        try {\n          _forceRemove(element);\n        } catch (_) {}\n      } else {\n        try {\n          element.setAttribute(name, '');\n        } catch (_) {}\n      }\n    }\n  };\n  /**\n   * _initDocument\n   *\n   * @param dirty - a string of dirty markup\n   * @return a DOM, filled with the dirty markup\n   */\n  const _initDocument = function _initDocument(dirty) {\n    /* Create a HTML document */\n    let doc = null;\n    let leadingWhitespace = null;\n    if (FORCE_BODY) {\n      dirty = '<remove></remove>' + dirty;\n    } else {\n      /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n      const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n      leadingWhitespace = matches && matches[0];\n    }\n    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n      // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n      dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n    }\n    const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n    /*\n     * Use the DOMParser API by default, fallback later if needs be\n     * DOMParser not work for svg when has multiple root element.\n     */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      try {\n        doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n      } catch (_) {}\n    }\n    /* Use createHTMLDocument in case DOMParser is not available */\n    if (!doc || !doc.documentElement) {\n      doc = implementation.createDocument(NAMESPACE, 'template', null);\n      try {\n        doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n      } catch (_) {\n        // Syntax error if dirtyPayload is invalid xml\n      }\n    }\n    const body = doc.body || doc.documentElement;\n    if (dirty && leadingWhitespace) {\n      body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n    }\n    /* Work on whole document or just its body */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n    }\n    return WHOLE_DOCUMENT ? doc.documentElement : body;\n  };\n  /**\n   * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n   *\n   * @param root The root element or node to start traversing on.\n   * @return The created NodeIterator\n   */\n  const _createNodeIterator = function _createNodeIterator(root) {\n    return createNodeIterator.call(root.ownerDocument || root, root,\n    // eslint-disable-next-line no-bitwise\n    NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n  };\n  /**\n   * _isClobbered\n   *\n   * @param element element to check for clobbering attacks\n   * @return true if clobbered, false if safe\n   */\n  const _isClobbered = function _isClobbered(element) {\n    return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n  };\n  /**\n   * Checks whether the given object is a DOM node.\n   *\n   * @param value object to check whether it's a DOM node\n   * @return true is object is a DOM node\n   */\n  const _isNode = function _isNode(value) {\n    return typeof Node === 'function' && value instanceof Node;\n  };\n  function _executeHooks(hooks, currentNode, data) {\n    arrayForEach(hooks, hook => {\n      hook.call(DOMPurify, currentNode, data, CONFIG);\n    });\n  }\n  /**\n   * _sanitizeElements\n   *\n   * @protect nodeName\n   * @protect textContent\n   * @protect removeChild\n   * @param currentNode to check for permission to exist\n   * @return true if node was killed, false if left alive\n   */\n  const _sanitizeElements = function _sanitizeElements(currentNode) {\n    let content = null;\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n    /* Check if element is clobbered or can clobber */\n    if (_isClobbered(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Now let's check the element's type and name */\n    const tagName = transformCaseFunc(currentNode.nodeName);\n    /* Execute a hook if present */\n    _executeHooks(hooks.uponSanitizeElement, currentNode, {\n      tagName,\n      allowedTags: ALLOWED_TAGS\n    });\n    /* Detect mXSS attempts abusing namespace confusion */\n    if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove risky CSS construction leading to mXSS */\n    if (SAFE_FOR_XML && currentNode.namespaceURI === HTML_NAMESPACE && tagName === 'style' && _isNode(currentNode.firstElementChild)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove any occurrence of processing instructions */\n    if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove any kind of possibly harmful comments */\n    if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove element if anything forbids its presence */\n    if (FORBID_TAGS[tagName] || !(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && !ALLOWED_TAGS[tagName]) {\n      /* Check if we have a custom element to handle */\n      if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n        if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n          return false;\n        }\n        if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n          return false;\n        }\n      }\n      /* Keep content except for bad-listed elements */\n      if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n        const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n        const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n        if (childNodes && parentNode) {\n          const childCount = childNodes.length;\n          for (let i = childCount - 1; i >= 0; --i) {\n            const childClone = cloneNode(childNodes[i], true);\n            parentNode.insertBefore(childClone, getNextSibling(currentNode));\n          }\n        }\n      }\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Check whether element has a valid namespace */\n    if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Make sure that older browsers don't get fallback-tag mXSS */\n    if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Sanitize element content to be template-safe */\n    if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n      /* Get the element's text content */\n      content = currentNode.textContent;\n      arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n        content = stringReplace(content, expr, ' ');\n      });\n      if (currentNode.textContent !== content) {\n        arrayPush(DOMPurify.removed, {\n          element: currentNode.cloneNode()\n        });\n        currentNode.textContent = content;\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n    return false;\n  };\n  /**\n   * _isValidAttribute\n   *\n   * @param lcTag Lowercase tag name of containing element.\n   * @param lcName Lowercase attribute name.\n   * @param value Attribute value.\n   * @return Returns true if `value` is valid, otherwise false.\n   */\n  // eslint-disable-next-line complexity\n  const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n    /* FORBID_ATTR must always win, even if ADD_ATTR predicate would allow it */\n    if (FORBID_ATTR[lcName]) {\n      return false;\n    }\n    /* Make sure attribute cannot clobber */\n    if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n      return false;\n    }\n    const nameIsPermitted = ALLOWED_ATTR[lcName] || EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag);\n    /* Allow valid data-* attributes: At least one character after \"-\"\n        (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n        XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n        We don't need to check the value; it's always URI safe. */\n    if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!nameIsPermitted || FORBID_ATTR[lcName]) {\n      if (\n      // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n      // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n      // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n      _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) ||\n      // Alternative, second condition checks if it's an `is`-attribute, AND\n      // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n      lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n        return false;\n      }\n      /* Check value is safe. First, is attr inert? If so, is safe */\n    } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n      return false;\n    } else ;\n    return true;\n  };\n  /* Names the HTML spec reserves from valid-custom-element-name; these must\n   * never be treated as basic custom elements even when a permissive\n   * CUSTOM_ELEMENT_HANDLING.tagNameCheck is configured. */\n  const RESERVED_CUSTOM_ELEMENT_NAMES = addToSet({}, ['annotation-xml', 'color-profile', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'missing-glyph']);\n  /**\n   * _isBasicCustomElement\n   * checks if at least one dash is included in tagName, and it's not the first char\n   * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n   *\n   * @param tagName name of the tag of the node to sanitize\n   * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n   */\n  const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n    return !RESERVED_CUSTOM_ELEMENT_NAMES[stringToLowerCase(tagName)] && regExpTest(CUSTOM_ELEMENT, tagName);\n  };\n  /**\n   * _sanitizeAttributes\n   *\n   * @protect attributes\n   * @protect nodeName\n   * @protect removeAttribute\n   * @protect setAttribute\n   *\n   * @param currentNode to sanitize\n   */\n  const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n    const {\n      attributes\n    } = currentNode;\n    /* Check if we have attributes; if not we might have a text node */\n    if (!attributes || _isClobbered(currentNode)) {\n      return;\n    }\n    const hookEvent = {\n      attrName: '',\n      attrValue: '',\n      keepAttr: true,\n      allowedAttributes: ALLOWED_ATTR,\n      forceKeepAttr: undefined\n    };\n    let l = attributes.length;\n    /* Go backwards over all attributes; safely remove bad ones */\n    while (l--) {\n      const attr = attributes[l];\n      const {\n        name,\n        namespaceURI,\n        value: attrValue\n      } = attr;\n      const lcName = transformCaseFunc(name);\n      const initValue = attrValue;\n      let value = name === 'value' ? initValue : stringTrim(initValue);\n      /* Execute a hook if present */\n      hookEvent.attrName = lcName;\n      hookEvent.attrValue = value;\n      hookEvent.keepAttr = true;\n      hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n      _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n      value = hookEvent.attrValue;\n      /* Full DOM Clobbering protection via namespace isolation,\n       * Prefix id and name attributes with `user-content-`\n       */\n      if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name') && stringIndexOf(value, SANITIZE_NAMED_PROPS_PREFIX) !== 0) {\n        // Remove the attribute with this value\n        _removeAttribute(name, currentNode);\n        // Prefix the value and later re-create the attribute with the sanitized value\n        value = SANITIZE_NAMED_PROPS_PREFIX + value;\n      }\n      // Else: already prefixed, leave the attribute alone — the prefix is\n      // itself the clobbering protection, and re-applying it is incorrect.\n      /* Work around a security issue with comments inside attributes */\n      if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n      if (lcName === 'attributename' && stringMatch(value, 'href')) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Did the hooks approve of the attribute? */\n      if (hookEvent.forceKeepAttr) {\n        continue;\n      }\n      /* Did the hooks approve of the attribute? */\n      if (!hookEvent.keepAttr) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Work around a security issue in jQuery 3.0 */\n      if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Sanitize attribute content to be template-safe */\n      if (SAFE_FOR_TEMPLATES) {\n        arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n          value = stringReplace(value, expr, ' ');\n        });\n      }\n      /* Is `value` valid for this attribute? */\n      const lcTag = transformCaseFunc(currentNode.nodeName);\n      if (!_isValidAttribute(lcTag, lcName, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Handle attributes that require Trusted Types */\n      if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n        if (namespaceURI) ; else {\n          switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n            case 'TrustedHTML':\n              {\n                value = trustedTypesPolicy.createHTML(value);\n                break;\n              }\n            case 'TrustedScriptURL':\n              {\n                value = trustedTypesPolicy.createScriptURL(value);\n                break;\n              }\n          }\n        }\n      }\n      /* Handle invalid data-* attribute set by try-catching it */\n      if (value !== initValue) {\n        try {\n          if (namespaceURI) {\n            currentNode.setAttributeNS(namespaceURI, name, value);\n          } else {\n            /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n            currentNode.setAttribute(name, value);\n          }\n          if (_isClobbered(currentNode)) {\n            _forceRemove(currentNode);\n          } else {\n            arrayPop(DOMPurify.removed);\n          }\n        } catch (_) {\n          _removeAttribute(name, currentNode);\n        }\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n  };\n  /**\n   * _sanitizeShadowDOM\n   *\n   * @param fragment to iterate over recursively\n   */\n  const _sanitizeShadowDOM2 = function _sanitizeShadowDOM(fragment) {\n    let shadowNode = null;\n    const shadowIterator = _createNodeIterator(fragment);\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n    while (shadowNode = shadowIterator.nextNode()) {\n      /* Execute a hook if present */\n      _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n      /* Sanitize tags and elements */\n      _sanitizeElements(shadowNode);\n      /* Check attributes next */\n      _sanitizeAttributes(shadowNode);\n      /* Deep shadow DOM detected */\n      if (shadowNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM2(shadowNode.content);\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n  };\n  // eslint-disable-next-line complexity\n  DOMPurify.sanitize = function (dirty) {\n    let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let body = null;\n    let importedNode = null;\n    let currentNode = null;\n    let returnNode = null;\n    /* Make sure we have a string to sanitize.\n      DO NOT return early, as this will return the wrong type if\n      the user has requested a DOM object rather than a string */\n    IS_EMPTY_INPUT = !dirty;\n    if (IS_EMPTY_INPUT) {\n      dirty = '<!-->';\n    }\n    /* Stringify, in case dirty is an object */\n    if (typeof dirty !== 'string' && !_isNode(dirty)) {\n      dirty = stringifyValue(dirty);\n      if (typeof dirty !== 'string') {\n        throw typeErrorCreate('dirty is not a string, aborting');\n      }\n    }\n    /* Return dirty HTML if DOMPurify cannot run */\n    if (!DOMPurify.isSupported) {\n      return dirty;\n    }\n    /* Assign config vars */\n    if (!SET_CONFIG) {\n      _parseConfig(cfg);\n    }\n    /* Clean up removed elements */\n    DOMPurify.removed = [];\n    /* Check if dirty is correctly typed for IN_PLACE */\n    if (typeof dirty === 'string') {\n      IN_PLACE = false;\n    }\n    if (IN_PLACE) {\n      /* Do some early pre-sanitization to avoid unsafe root nodes */\n      const nn = dirty.nodeName;\n      if (typeof nn === 'string') {\n        const tagName = transformCaseFunc(nn);\n        if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n          throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n        }\n      }\n    } else if (dirty instanceof Node) {\n      /* If dirty is a DOM element, append to an empty document to avoid\n         elements being stripped by the parser */\n      body = _initDocument('<!---->');\n      importedNode = body.ownerDocument.importNode(dirty, true);\n      if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n        /* Node is already a body, use as is */\n        body = importedNode;\n      } else if (importedNode.nodeName === 'HTML') {\n        body = importedNode;\n      } else {\n        // eslint-disable-next-line unicorn/prefer-dom-node-append\n        body.appendChild(importedNode);\n      }\n    } else {\n      /* Exit directly if we have nothing to do */\n      if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n      // eslint-disable-next-line unicorn/prefer-includes\n      dirty.indexOf('<') === -1) {\n        return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n      }\n      /* Initialize the document to work on */\n      body = _initDocument(dirty);\n      /* Check we have a DOM node from the data */\n      if (!body) {\n        return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n      }\n    }\n    /* Remove first element node (ours) if FORCE_BODY is set */\n    if (body && FORCE_BODY) {\n      _forceRemove(body.firstChild);\n    }\n    /* Get node iterator */\n    const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n    /* Now start iterating over the created document */\n    while (currentNode = nodeIterator.nextNode()) {\n      /* Sanitize tags and elements */\n      _sanitizeElements(currentNode);\n      /* Check attributes next */\n      _sanitizeAttributes(currentNode);\n      /* Shadow DOM detected, sanitize it */\n      if (currentNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM2(currentNode.content);\n      }\n    }\n    /* If we sanitized `dirty` in-place, return it. */\n    if (IN_PLACE) {\n      return dirty;\n    }\n    /* Return sanitized string or DOM */\n    if (RETURN_DOM) {\n      if (SAFE_FOR_TEMPLATES) {\n        body.normalize();\n        let html = body.innerHTML;\n        arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n          html = stringReplace(html, expr, ' ');\n        });\n        body.innerHTML = html;\n      }\n      if (RETURN_DOM_FRAGMENT) {\n        returnNode = createDocumentFragment.call(body.ownerDocument);\n        while (body.firstChild) {\n          // eslint-disable-next-line unicorn/prefer-dom-node-append\n          returnNode.appendChild(body.firstChild);\n        }\n      } else {\n        returnNode = body;\n      }\n      if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n        /*\n          AdoptNode() is not used because internal state is not reset\n          (e.g. the past names map of a HTMLFormElement), this is safe\n          in theory but we would rather not risk another attack vector.\n          The state that is cloned by importNode() is explicitly defined\n          by the specs.\n        */\n        returnNode = importNode.call(originalDocument, returnNode, true);\n      }\n      return returnNode;\n    }\n    let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n    /* Serialize doctype if allowed */\n    if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n      serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n    }\n    /* Sanitize final string template-safe */\n    if (SAFE_FOR_TEMPLATES) {\n      arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n        serializedHTML = stringReplace(serializedHTML, expr, ' ');\n      });\n    }\n    return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n  };\n  DOMPurify.setConfig = function () {\n    let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _parseConfig(cfg);\n    SET_CONFIG = true;\n  };\n  DOMPurify.clearConfig = function () {\n    CONFIG = null;\n    SET_CONFIG = false;\n  };\n  DOMPurify.isValidAttribute = function (tag, attr, value) {\n    /* Initialize shared config vars if necessary. */\n    if (!CONFIG) {\n      _parseConfig({});\n    }\n    const lcTag = transformCaseFunc(tag);\n    const lcName = transformCaseFunc(attr);\n    return _isValidAttribute(lcTag, lcName, value);\n  };\n  DOMPurify.addHook = function (entryPoint, hookFunction) {\n    if (typeof hookFunction !== 'function') {\n      return;\n    }\n    arrayPush(hooks[entryPoint], hookFunction);\n  };\n  DOMPurify.removeHook = function (entryPoint, hookFunction) {\n    if (hookFunction !== undefined) {\n      const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n      return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n    }\n    return arrayPop(hooks[entryPoint]);\n  };\n  DOMPurify.removeHooks = function (entryPoint) {\n    hooks[entryPoint] = [];\n  };\n  DOMPurify.removeAllHooks = function () {\n    hooks = _createHooksMap();\n  };\n  return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n", "import BasicObject from \"trix/core/basic_object\"\n\nimport { nodeIsAttachmentElement, removeNode, tagName, walkTree } from \"trix/core/helpers\"\nimport DOMPurify from \"dompurify\"\nimport * as config from \"trix/config\"\n\nDOMPurify.addHook(\"uponSanitizeAttribute\", function (node, data) {\n  if (data.attrName === \"data-trix-serialized-attributes\") {\n    data.keepAttr = false\n    return\n  }\n\n  const allowedAttributePattern = /^data-trix-/\n  if (allowedAttributePattern.test(data.attrName)) {\n    data.forceKeepAttr = true\n  }\n})\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, options) {\n    const sanitizedElement = new this(html, options).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, purifyOptions } = {}) {\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.purifyOptions = purifyOptions || {}\n    this.body = createBodyElementForHTML(html)\n  }\n\n  sanitize() {\n    this.sanitizeElements()\n    this.normalizeListElementNesting()\n    const purifyConfig = Object.assign({}, config.dompurify, this.purifyOptions)\n    DOMPurify.setConfig(purifyConfig)\n    this.body = DOMPurify.sanitize(this.body)\n\n    return this.body\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\"\nimport DOMPurify from \"dompurify\"\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      const href = this.attachment.getHref()\n      if (href && DOMPurify.isValidAttribute(\"a\", \"href\", href)) {\n        return href\n      }\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    const alt = this.attachment.getAttribute(\"alt\")\n\n    if (width != null) {\n      image.width = width\n    }\n    if (height != null) {\n      image.height = height\n    }\n    if (alt != null) {\n      image.alt = alt\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 { createEvent, 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 render = (element, documentFragment) => {\n      while (element.lastChild) {\n        element.removeChild(element.lastChild)\n      }\n      element.appendChild(documentFragment)\n    }\n\n    const event = createEvent(\"trix-before-render\", { cancelable: false, attributes: { render } })\n    this.element.dispatchEvent(event)\n\n    const fragment = this.createDocumentFragmentForSync()\n    event.render(this.element, 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  setAttribute(attribute, value) {\n    this.setAttributes({ [attribute]: value })\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 DOMPurify from \"dompurify\"\n\nimport Piece from \"trix/models/piece\"\n\nimport { normalizeNewlines } from \"trix/core/helpers\"\n\nexport default class StringPiece extends Piece {\n  static fromJSON(pieceJSON) {\n    const attributes = { ...pieceJSON.attributes }\n    if (attributes.href && !DOMPurify.isValidAttribute(\"a\", \"href\", attributes.href)) {\n      delete attributes.href\n    }\n    return new this(pieceJSON.string, 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, purifyOptions } = {}) {\n    super(...arguments)\n    this.html = html\n    this.referenceElement = referenceElement\n    this.purifyOptions = purifyOptions\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, { purifyOptions: this.purifyOptions })\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.getPreviewURL\")\nManagedAttachment.proxyMethod(\"attachment.setPreviewURL\")\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, { purifyOptions: { SAFE_FOR_XML: true } }).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            if (!strict && nodeIsBlockStart(node, { strict })) {\n              if (foundBlock) {\n                location.index++\n              }\n              location.offset = 0\n              foundBlock = true\n            }\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\nimport DOMPurify from \"dompurify\"\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\n    if (input.willValidate) {\n      input.setCustomValidity(\"\")\n      if (!input.checkValidity() || !this.isSafeAttribute(input)) {\n        input.setCustomValidity(\"Invalid value\")\n        input.setAttribute(\"data-trix-validate\", \"\")\n        input.classList.add(\"trix-validate\")\n        return input.focus()\n      }\n    }\n    this.delegate?.toolbarDidUpdateAttribute(attributeName, input.value)\n    return this.hideDialog()\n  }\n\n  isSafeAttribute(input) {\n    if (input.hasAttribute(\"data-trix-validate-href\")) {\n      return DOMPurify.isValidAttribute(\"a\", \"href\", input.value)\n    } else {\n      return true\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  // Properties\n\n  get editorElements() {\n    if (this.id) {\n      const nodeList = this.ownerDocument?.querySelectorAll(`trix-editor[toolbar=\"${this.id}\"]`)\n\n      return Array.from(nodeList)\n    } else {\n      return []\n    }\n  }\n\n  get editorElement() {\n    const [ editorElement ] = this.editorElements\n\n    return editorElement\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.toggleAttribute(\"contenteditable\", !element.disabled)\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  value = \"\"\n  #internals\n  #formDisabled\n\n  constructor(element) {\n    this.element = element\n    this.#internals = element.attachInternals()\n    this.#formDisabled = false\n  }\n\n  connectedCallback() {\n    this.#validate()\n  }\n\n  disconnectedCallback() {\n  }\n\n  get form() {\n    return this.#internals.form\n  }\n\n  get name() {\n    return this.element.getAttribute(\"name\")\n  }\n\n  set name(value) {\n    this.element.setAttribute(\"name\", value)\n  }\n\n  get labels() {\n    return this.#internals.labels\n  }\n\n  get disabled() {\n    return this.#formDisabled || this.element.hasAttribute(\"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  formDisabledCallback(disabled) {\n    this.#formDisabled = disabled\n  }\n\n  setFormValue(value) {\n    this.value = value\n    this.#validate()\n    this.#internals.setFormValue(this.element.disabled ? undefined : this.value)\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 form() {\n    console.warn(\"This browser does not support the .form property for trix-editor elements.\")\n\n    return null\n  }\n\n  get name() {\n    console.warn(\"This browser does not support the .name property for trix-editor elements.\")\n\n    return null\n  }\n\n  set name(value) {\n    console.warn(\"This browser does not support the .name property for trix-editor elements.\")\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  formDisabledCallback(value) {\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  static observedAttributes = [ \"connected\" ]\n\n  #delegate\n\n  constructor() {\n    super()\n    this.willCreateInput = true\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    const { inputElement } = this\n\n    if (inputElement) {\n      return inputElement.disabled\n    } else {\n      return this.#delegate.disabled\n    }\n  }\n\n  set disabled(value) {\n    const { inputElement } = this\n\n    if (inputElement) {\n      inputElement.disabled = value\n    }\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      this.internalToolbar = makeElement(\"trix-toolbar\", { id: toolbarId })\n      this.parentNode.insertBefore(this.internalToolbar, this)\n      return this.internalToolbar\n    } else {\n      return undefined\n    }\n  }\n\n  get form() {\n    const { inputElement } = this\n\n    if (inputElement) {\n      return inputElement.form\n    } else {\n      return this.#delegate.form\n    }\n  }\n\n  get inputElement() {\n    if (this.hasAttribute(\"input\")) {\n      return this.ownerDocument?.getElementById(this.getAttribute(\"input\"))\n    } else {\n      return undefined\n    }\n  }\n\n  get editor() {\n    return this.editorController?.editor\n  }\n\n  get name() {\n    const { inputElement } = this\n\n    if (inputElement) {\n      return inputElement.name\n    } else {\n      return this.#delegate.name\n    }\n  }\n\n  set name(value) {\n    const { inputElement } = this\n\n    if (inputElement) {\n      inputElement.name = value\n    } else {\n      this.#delegate.name = value\n    }\n  }\n\n  get value() {\n    const { inputElement } = this\n\n    if (inputElement) {\n      return inputElement.value\n    } else {\n      return this.#delegate.value\n    }\n  }\n\n  set value(defaultValue) {\n    this.defaultValue = defaultValue\n    this.editor?.loadHTML(this.defaultValue)\n  }\n\n  // Element callbacks\n\n  attributeChangedCallback(name, oldValue, newValue) {\n    if (name === \"connected\" && this.isConnected && oldValue != null && oldValue !== newValue) {\n      requestAnimationFrame(() => this.reconnect())\n    }\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    const { inputElement } = this\n\n    if (inputElement) {\n      inputElement.value = value\n    }\n    this.#delegate.setFormValue(value)\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.defaultValue = this.inputElement ? this.inputElement.value : this.innerHTML\n        if (!this.hasAttribute(\"input\") && this.parentNode && this.willCreateInput) {\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        }\n        this.editorController = new EditorController({\n          editorElement: this,\n          html: this.defaultValue\n        })\n        requestAnimationFrame(() => triggerEvent(\"trix-initialize\", { onElement: this }))\n      }\n      this.editorController.registerSelectionManager()\n      this.#delegate.connectedCallback()\n\n      this.toggleAttribute(\"connected\", true)\n      autofocus(this)\n    }\n  }\n\n  disconnectedCallback() {\n    this.editorController?.unregisterSelectionManager()\n    this.#delegate.disconnectedCallback()\n    this.toggleAttribute(\"connected\", false)\n  }\n\n  reconnect() {\n    this.removeInternalToolbar()\n    this.disconnectedCallback()\n    this.connectedCallback()\n  }\n\n  removeInternalToolbar() {\n    this.internalToolbar?.remove()\n    this.internalToolbar = null\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    const { inputElement } = this\n\n    if (inputElement) {\n      inputElement.disabled = disabled\n    }\n    this.toggleAttribute(\"contenteditable\", !disabled)\n    this.#delegate.formDisabledCallback(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 * 90;\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    xhr.upload.addEventListener(\"loadend\", (() => {\n      this.simulateResponseProgress(xhr);\n    }));\n  }\n  simulateResponseProgress(xhr) {\n    let progress = 90;\n    const startTime = Date.now();\n    const updateProgress = () => {\n      const elapsed = Date.now() - startTime;\n      const estimatedResponseTime = this.estimateResponseTime();\n      const responseProgress = Math.min(elapsed / estimatedResponseTime, 1);\n      progress = 90 + responseProgress * 9;\n      this.dispatch(\"progress\", {\n        progress: progress\n      });\n      if (xhr.readyState !== XMLHttpRequest.DONE && progress < 99) {\n        requestAnimationFrame(updateProgress);\n      }\n    };\n    xhr.addEventListener(\"loadend\", (() => {\n      this.dispatch(\"progress\", {\n        progress: 100\n      });\n    }));\n    requestAnimationFrame(updateProgress);\n  }\n  estimateResponseTime() {\n    const fileSize = this.file.size;\n    const MB = 1024 * 1024;\n    if (fileSize < MB) {\n      return 1e3;\n    } else if (fileSize < 10 * MB) {\n      return 2e3;\n    } else {\n      return 3e3 + fileSize / MB * 50;\n    }\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, file = attachment.file) {\n    this.attachment = attachment;\n    this.element = element;\n    this.directUpload = new DirectUpload(file, this.directUploadUrl, this);\n    this.file = file;\n  }\n  start() {\n    return new Promise(((resolve, reject) => {\n      this.directUpload.create(((error, attributes) => this.directUploadDidComplete(error, attributes, resolve, reject)));\n      this.dispatch(\"start\");\n    }));\n  }\n  directUploadWillStoreFileWithXHR(xhr) {\n    xhr.upload.addEventListener(\"progress\", (event => {\n      const progress = event.loaded / event.total * 90;\n      if (progress) {\n        this.dispatch(\"progress\", {\n          progress: progress\n        });\n      }\n    }));\n    xhr.upload.addEventListener(\"loadend\", (() => {\n      this.simulateResponseProgress(xhr);\n    }));\n  }\n  simulateResponseProgress(xhr) {\n    let progress = 90;\n    const startTime = Date.now();\n    const updateProgress = () => {\n      const elapsed = Date.now() - startTime;\n      const estimatedResponseTime = this.estimateResponseTime();\n      const responseProgress = Math.min(elapsed / estimatedResponseTime, 1);\n      progress = 90 + responseProgress * 9;\n      this.dispatch(\"progress\", {\n        progress: progress\n      });\n      if (xhr.readyState !== XMLHttpRequest.DONE && progress < 99) {\n        requestAnimationFrame(updateProgress);\n      }\n    };\n    xhr.addEventListener(\"loadend\", (() => {\n      this.dispatch(\"progress\", {\n        progress: 100\n      });\n    }));\n    requestAnimationFrame(updateProgress);\n  }\n  estimateResponseTime() {\n    const fileSize = this.file.size;\n    const MB = 1024 * 1024;\n    if (fileSize < MB) {\n      return 1e3;\n    } else if (fileSize < 10 * MB) {\n      return 2e3;\n    } else {\n      return 3e3 + fileSize / MB * 50;\n    }\n  }\n  directUploadDidComplete(error, attributes, resolve, reject) {\n    if (error) {\n      this.dispatchError(error, reject);\n    } else {\n      resolve({\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, reject) {\n    const event = this.dispatch(\"error\", {\n      error: error\n    });\n    if (!event.defaultPrevented) {\n      reject(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, attachment.file);\n    const onProgress = event => attachment.setUploadProgress(event.detail.progress);\n    target.addEventListener(\"direct-upload:progress\", onProgress);\n    upload.start().then((attributes => attachment.setAttributes(attributes))).catch((error => alert(error))).finally((() => target.removeEventListener(\"direct-upload:progress\", onProgress)));\n  }\n}));\n\nexport { AttachmentUpload };\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", "import { Application } from \"@hotwired/stimulus\"\n\nconst application = Application.start()\n\n// Configure Stimulus development experience\napplication.debug = false\nwindow.Stimulus   = application\n\nexport { application }\n", "export class TdError extends Error {\n  code: number;\n}\n\nexport class ErrorMessages {\n  private base = 'TD:';\n\n  //#region out to console\n\n  /**\n   * Throws an error indicating that a key in the options object is invalid.\n   * @param optionName\n   */\n  unexpectedOption(optionName: string) {\n    const error = new TdError(\n      `${this.base} Unexpected option: ${optionName} does not match a known option.`\n    );\n    error.code = 1;\n    throw error;\n  }\n\n  /**\n   * Throws an error indicating that one more keys in the options object is invalid.\n   * @param optionName\n   */\n  unexpectedOptions(optionName: string[]) {\n    const error = new TdError(`${this.base}: ${optionName.join(', ')}`);\n    error.code = 1;\n    throw error;\n  }\n\n  /**\n   * Throws an error when an option is provide an unsupported value.\n   * For example a value of 'cheese' for toolbarPlacement which only supports\n   * 'top', 'bottom', 'default'.\n   * @param optionName\n   * @param badValue\n   * @param validOptions\n   */\n  unexpectedOptionValue(\n    optionName: string,\n    badValue: string,\n    validOptions: string[]\n  ) {\n    const error = new TdError(\n      `${\n        this.base\n      } Unexpected option value: ${optionName} does not accept a value of \"${badValue}\". Valid values are: ${validOptions.join(\n        ', '\n      )}`\n    );\n    error.code = 2;\n    throw error;\n  }\n\n  /**\n   * Throws an error when an option value is the wrong type.\n   * For example a string value was provided to multipleDates which only\n   * supports true or false.\n   * @param optionName\n   * @param badType\n   * @param expectedType\n   */\n  typeMismatch(optionName: string, badType: string, expectedType: string) {\n    const error = new TdError(\n      `${this.base} Mismatch types: ${optionName} has a type of ${badType} instead of the required ${expectedType}`\n    );\n    error.code = 3;\n    throw error;\n  }\n\n  /**\n   * Throws an error when an option value is  outside of the expected range.\n   * For example restrictions.daysOfWeekDisabled excepts a value between 0 and 6.\n   * @param optionName\n   * @param lower\n   * @param upper\n   */\n  numbersOutOfRange(optionName: string, lower: number, upper: number) {\n    const error = new TdError(\n      `${this.base} ${optionName} expected an array of number between ${lower} and ${upper}.`\n    );\n    error.code = 4;\n    throw error;\n  }\n\n  /**\n   * Throws an error when a value for a date options couldn't be parsed. Either\n   * the option was an invalid string or an invalid Date object.\n   * @param optionName\n   * @param date\n   * @param soft If true, logs a warning instead of an error.\n   */\n  //eslint-disable-next-line @typescript-eslint/no-explicit-any\n  failedToParseDate(optionName: string, date: any, soft = false) {\n    const error = new TdError(\n      `${this.base} Could not correctly parse \"${date}\" to a date for ${optionName}.`\n    );\n    error.code = 5;\n    if (!soft) throw error;\n    console.warn(error);\n  }\n\n  /**\n   * Throws when an element to attach to was not provided in the constructor.\n   */\n  mustProvideElement() {\n    const error = new TdError(`${this.base} No element was provided.`);\n    error.code = 6;\n    throw error;\n  }\n\n  /**\n   * Throws if providing an array for the events to subscribe method doesn't have\n   * the same number of callbacks. E.g., subscribe([1,2], [1])\n   */\n  subscribeMismatch() {\n    const error = new TdError(\n      `${this.base} The subscribed events does not match the number of callbacks`\n    );\n    error.code = 7;\n    throw error;\n  }\n\n  /**\n   * Throws if the configuration has conflicting rules e.g. minDate is after maxDate\n   */\n  conflictingConfiguration(message?: string) {\n    const error = new TdError(\n      `${this.base} A configuration value conflicts with another rule. ${message}`\n    );\n    error.code = 8;\n    throw error;\n  }\n\n  /**\n   * customDateFormat errors\n   */\n  customDateFormatError(message?: string) {\n    const error = new TdError(`${this.base} Custom Date Format: ${message}`);\n    error.code = 9;\n    throw error;\n  }\n\n  /**\n   * Logs a warning if a date option value is provided as a string, instead of\n   * a date/datetime object.\n   */\n  dateString() {\n    console.warn(\n      `${this.base} Using a string for date options is not recommended unless you specify an ISO string or use the customDateFormat plugin.`\n    );\n  }\n\n  deprecatedWarning(message: string, remediation?: string) {\n    console.warn(\n      `${this.base} Warning ${message} is deprecated and will be removed in a future version. ${remediation}`\n    );\n  }\n\n  throwError(message) {\n    const error = new TdError(`${this.base} ${message}`);\n    error.code = 9;\n    throw error;\n  }\n\n  //#endregion\n\n  //#region used with notify.error\n\n  /**\n   * Used with an Error Event type if the user selects a date that\n   * fails restriction validation.\n   */\n  failedToSetInvalidDate = 'Failed to set invalid date';\n\n  /**\n   * Used with an Error Event type when a user changes the value of the\n   * input field directly, and does not provide a valid date.\n   */\n  failedToParseInput = 'Failed parse input field';\n\n  //#endregion\n}\n", "import { ErrorMessages } from './errors';\n// this is not the way I want this to stay but nested classes seemed to blown up once its compiled.\nconst NAME = 'tempus-dominus',\n  dataKey = 'td';\n\n/**\n * Events\n */\nclass Events {\n  key = `.${dataKey}`;\n\n  /**\n   * Change event. Fired when the user selects a date.\n   * See also EventTypes.ChangeEvent\n   */\n  change = `change${this.key}`;\n\n  /**\n   * Emit when the view changes for example from month view to the year view.\n   * See also EventTypes.ViewUpdateEvent\n   */\n  update = `update${this.key}`;\n\n  /**\n   * Emits when a selected date or value from the input field fails to meet the provided validation rules.\n   * See also EventTypes.FailEvent\n   */\n  error = `error${this.key}`;\n\n  /**\n   * Show event\n   * @event Events#show\n   */\n  show = `show${this.key}`;\n\n  /**\n   * Hide event\n   * @event Events#hide\n   */\n  hide = `hide${this.key}`;\n\n  // blur and focus are used in the jQuery provider but are otherwise unused.\n  // keyup/down will be used later for keybinding options\n\n  blur = `blur${this.key}`;\n  focus = `focus${this.key}`;\n  keyup = `keyup${this.key}`;\n  keydown = `keydown${this.key}`;\n}\n\nclass Css {\n  /**\n   * The outer element for the widget.\n   */\n  widget = `${NAME}-widget`;\n\n  /**\n   * Hold the previous, next and switcher divs\n   */\n  calendarHeader = 'calendar-header';\n\n  /**\n   * The element for the action to change the calendar view. E.g. month -> year.\n   */\n  switch = 'picker-switch';\n\n  /**\n   * The elements for all the toolbar options\n   */\n  toolbar = 'toolbar';\n\n  /**\n   * Disables the hover and rounding affect.\n   */\n  noHighlight = 'no-highlight';\n\n  /**\n   * Applied to the widget element when the side by side option is in use.\n   */\n  sideBySide = 'timepicker-sbs';\n\n  /**\n   * The element for the action to change the calendar view, e.g. August -> July\n   */\n  previous = 'previous';\n\n  /**\n   * The element for the action to change the calendar view, e.g. August -> September\n   */\n  next = 'next';\n\n  /**\n   * Applied to any action that would violate any restriction options. ALso applied\n   * to an input field if the disabled function is called.\n   */\n  disabled = 'disabled';\n\n  /**\n   * Applied to any date that is less than requested view,\n   * e.g. the last day of the previous month.\n   */\n  old = 'old';\n\n  /**\n   * Applied to any date that is greater than of requested view,\n   * e.g. the last day of the previous month.\n   */\n  new = 'new';\n\n  /**\n   * Applied to any date that is currently selected.\n   */\n  active = 'active';\n\n  //#region date element\n\n  /**\n   * The outer element for the calendar view.\n   */\n  dateContainer = 'date-container';\n\n  /**\n   * The outer element for the decades view.\n   */\n  decadesContainer = `${this.dateContainer}-decades`;\n\n  /**\n   * Applied to elements within the decade container, e.g. 2020, 2030\n   */\n  decade = 'decade';\n\n  /**\n   * The outer element for the years view.\n   */\n  yearsContainer = `${this.dateContainer}-years`;\n\n  /**\n   * Applied to elements within the years container, e.g. 2021, 2021\n   */\n  year = 'year';\n\n  /**\n   * The outer element for the month view.\n   */\n  monthsContainer = `${this.dateContainer}-months`;\n\n  /**\n   * Applied to elements within the month container, e.g. January, February\n   */\n  month = 'month';\n\n  /**\n   * The outer element for the calendar view.\n   */\n  daysContainer = `${this.dateContainer}-days`;\n\n  /**\n   * Applied to elements within the day container, e.g. 1, 2..31\n   */\n  day = 'day';\n\n  /**\n   * If display.calendarWeeks is enabled, a column displaying the week of year\n   * is shown. This class is applied to each cell in that column.\n   */\n  calendarWeeks = 'cw';\n\n  /**\n   * Applied to the first row of the calendar view, e.g. Sunday, Monday\n   */\n  dayOfTheWeek = 'dow';\n\n  /**\n   * Applied to the current date on the calendar view.\n   */\n  today = 'today';\n\n  /**\n   * Applied to the locale's weekend dates on the calendar view, e.g. Sunday, Saturday\n   */\n  weekend = 'weekend';\n\n  rangeIn = 'range-in';\n  rangeStart = 'range-start';\n  rangeEnd = 'range-end';\n\n  //#endregion\n\n  //#region time element\n\n  /**\n   * The outer element for all time related elements.\n   */\n  timeContainer = 'time-container';\n\n  /**\n   * Applied the separator columns between time elements, e.g. hour *:* minute *:* second\n   */\n  separator = 'separator';\n\n  /**\n   * The outer element for the clock view.\n   */\n  clockContainer = `${this.timeContainer}-clock`;\n\n  /**\n   * The outer element for the hours selection view.\n   */\n  hourContainer = `${this.timeContainer}-hour`;\n\n  /**\n   * The outer element for the minutes selection view.\n   */\n  minuteContainer = `${this.timeContainer}-minute`;\n\n  /**\n   * The outer element for the seconds selection view.\n   */\n  secondContainer = `${this.timeContainer}-second`;\n\n  /**\n   * Applied to each element in the hours selection view.\n   */\n  hour = 'hour';\n\n  /**\n   * Applied to each element in the minutes selection view.\n   */\n  minute = 'minute';\n\n  /**\n   * Applied to each element in the seconds selection view.\n   */\n  second = 'second';\n\n  /**\n   * Applied AM/PM toggle button.\n   */\n  toggleMeridiem = 'toggleMeridiem';\n\n  //#endregion\n\n  //#region collapse\n\n  /**\n   * Applied the element of the current view mode, e.g. calendar or clock.\n   */\n  show = 'show';\n\n  /**\n   * Applied to the currently showing view mode during a transition\n   * between calendar and clock views\n   */\n  collapsing = 'td-collapsing';\n\n  /**\n   * Applied to the currently hidden view mode.\n   */\n  collapse = 'td-collapse';\n\n  //#endregion\n\n  /**\n   * Applied to the widget when the option display.inline is enabled.\n   */\n  inline = 'inline';\n\n  /**\n   * Applied to the widget when the option display.theme is light.\n   */\n  lightTheme = 'light';\n\n  /**\n   * Applied to the widget when the option display.theme is dark.\n   */\n  darkTheme = 'dark';\n\n  /**\n   * Used for detecting if the system color preference is dark mode\n   */\n  isDarkPreferredQuery = '(prefers-color-scheme: dark)';\n}\n\nexport default class Namespace {\n  static NAME = NAME;\n  // noinspection JSUnusedGlobalSymbols\n  static dataKey = dataKey;\n\n  static events = new Events();\n\n  static css = new Css();\n\n  static errorMessages = new ErrorMessages();\n}\n", "import { FormatLocalization } from './options';\n\nconst DefaultFormatLocalization: FormatLocalization = {\n  dateFormats: {\n    LTS: 'h:mm:ss T',\n    LT: 'h:mm T',\n    L: 'MM/dd/yyyy',\n    LL: 'MMMM d, yyyy',\n    LLL: 'MMMM d, yyyy h:mm T',\n    LLLL: 'dddd, MMMM d, yyyy h:mm T',\n  },\n  format: 'L LT',\n  locale: 'default',\n  hourCycle: undefined,\n  ordinal: (n) => {\n    const s = ['th', 'st', 'nd', 'rd'];\n    const v = n % 100;\n    return `[${n}${s[(v - 20) % 10] || s[v] || s[0]}]`;\n  },\n};\n\nexport default { ...DefaultFormatLocalization };\n", "import { FormatLocalization } from './utilities/options';\nimport Namespace from './utilities/namespace';\nimport DefaultFormatLocalization from './utilities/default-format-localization';\n\ntype parsedTime = {\n  afternoon?: boolean;\n  year?: number;\n  month?: number;\n  day?: number;\n  hours?: number;\n  minutes?: number;\n  seconds?: number;\n  milliseconds?: number;\n  zone?: {\n    offset: number;\n  };\n};\n\nexport enum Unit {\n  seconds = 'seconds',\n  minutes = 'minutes',\n  hours = 'hours',\n  date = 'date',\n  month = 'month',\n  year = 'year',\n}\n\nconst twoDigitTemplate = {\n  month: '2-digit',\n  day: '2-digit',\n  year: 'numeric',\n  hour: '2-digit',\n  minute: '2-digit',\n  second: '2-digit',\n};\n\nexport interface DateTimeFormatOptions extends Intl.DateTimeFormatOptions {\n  timeStyle?: 'short' | 'medium' | 'long';\n  dateStyle?: 'short' | 'medium' | 'long' | 'full';\n  numberingSystem?: string;\n}\n\n/**\n * Returns an Intl format object based on the provided object\n * @param unit\n */\nexport const getFormatByUnit = (unit: Unit): object => {\n  switch (unit) {\n    case 'date':\n      return { dateStyle: 'short' };\n    case 'month':\n      return {\n        month: 'numeric',\n        year: 'numeric',\n      };\n    case 'year':\n      return { year: 'numeric' };\n  }\n};\n\n/**\n * Attempts to guess the hour cycle of the given local\n * @param locale\n */\nexport const guessHourCycle = (locale: string): Intl.LocaleHourCycleKey => {\n  if (!locale) return 'h12';\n\n  // noinspection SpellCheckingInspection\n  const template = {\n    hour: '2-digit',\n    minute: '2-digit',\n    numberingSystem: 'latn',\n  };\n\n  const dt = new DateTime().setLocalization({ locale });\n  dt.hours = 0;\n\n  const start = dt.parts(undefined, template).hour;\n\n  //midnight is 12 so en-US style 12 AM\n  if (start === '12') return 'h12';\n  //midnight is 24 is from 00-24\n  if (start === '24') return 'h24';\n\n  dt.hours = 23;\n  const end = dt.parts(undefined, template).hour;\n\n  //if midnight is 00 and hour 23 is 11 then\n  if (start === '00' && end === '11') return 'h11';\n\n  if (start === '00' && end === '23') return 'h23';\n\n  console.warn(\n    `couldn't determine hour cycle for ${locale}. start: ${start}. end: ${end}`\n  );\n\n  return undefined;\n};\n\ninterface FormatMatch {\n  parser: (obj: parsedTime, input: number) => void;\n  pattern?: RegExp;\n}\n\ninterface FormatMatchString {\n  parser: (obj: parsedTime, input: string) => void;\n  pattern?: RegExp;\n}\n\ninterface FormatExpression {\n  t: FormatMatchString;\n  T: FormatMatchString;\n  fff: FormatMatch;\n  s: FormatMatch;\n  ss: FormatMatch;\n  m: FormatMatch;\n  mm: FormatMatch;\n  H: FormatMatch;\n  h: FormatMatch;\n  HH: FormatMatch;\n  hh: FormatMatch;\n  d: FormatMatch;\n  dd: FormatMatch;\n  Do: FormatMatchString;\n  M: FormatMatch;\n  MM: FormatMatch;\n  MMM: FormatMatchString;\n  MMMM: FormatMatchString;\n  y: FormatMatch;\n  yy: FormatMatch;\n  yyyy: FormatMatch;\n}\n\n/**\n * For the most part this object behaves exactly the same way\n * as the native Date object with a little extra spice.\n */\nexport class DateTime extends Date {\n  localization: FormatLocalization = DefaultFormatLocalization;\n\n  /**\n   * Chainable way to set the {@link locale}\n   * @param value\n   * @deprecated use setLocalization with a FormatLocalization object instead\n   */\n  setLocale(value: string): this {\n    if (!this.localization) {\n      this.localization = DefaultFormatLocalization;\n      this.localization.locale = value;\n    }\n    return this;\n  }\n\n  /**\n   * Chainable way to set the {@link localization}\n   * @param value\n   */\n  setLocalization(value: FormatLocalization): this {\n    this.localization = value;\n    return this;\n  }\n\n  /**\n   * Converts a plain JS date object to a DateTime object.\n   * Doing this allows access to format, etc.\n   * @param  date\n   * @param locale this parameter is deprecated. Use formatLocalization instead.\n   * @param formatLocalization\n   */\n  static convert(\n    date: Date,\n    locale = 'default',\n    formatLocalization: FormatLocalization = undefined\n  ): DateTime {\n    if (!date) throw new Error(`A date is required`);\n\n    if (!formatLocalization) {\n      formatLocalization = DefaultFormatLocalization;\n      formatLocalization.locale = locale;\n    }\n\n    return new DateTime(\n      date.getFullYear(),\n      date.getMonth(),\n      date.getDate(),\n      date.getHours(),\n      date.getMinutes(),\n      date.getSeconds(),\n      date.getMilliseconds()\n    ).setLocalization(formatLocalization);\n  }\n\n  /**\n   * Native date manipulations are not pure functions. This function creates a duplicate of the DateTime object.\n   */\n  get clone() {\n    return new DateTime(\n      this.year,\n      this.month,\n      this.date,\n      this.hours,\n      this.minutes,\n      this.seconds,\n      this.getMilliseconds()\n    ).setLocalization(this.localization);\n  }\n\n  static isValid(d): boolean {\n    if (d === undefined || JSON.stringify(d) === 'null') return false;\n    if (d.constructor.name === DateTime.name) return true;\n    return false;\n  }\n\n  /**\n   * Sets the current date to the start of the {@link unit} provided\n   * Example: Consider a date of \"April 30, 2021, 11:45:32.984 AM\" => new DateTime(2021, 3, 30, 11, 45, 32, 984).startOf('month')\n   * would return April 1, 2021, 12:00:00.000 AM (midnight)\n   * @param unit\n   * @param startOfTheWeek Allows for the changing the start of the week.\n   */\n  startOf(unit: Unit | 'weekDay', startOfTheWeek = 0): this {\n    if (this[unit] === undefined)\n      throw new Error(`Unit '${unit}' is not valid`);\n    switch (unit) {\n      case 'seconds':\n        this.setMilliseconds(0);\n        break;\n      case 'minutes':\n        this.setSeconds(0, 0);\n        break;\n      case 'hours':\n        this.setMinutes(0, 0, 0);\n        break;\n      case 'date':\n        this.setHours(0, 0, 0, 0);\n        break;\n      case 'weekDay': {\n        this.startOf(Unit.date);\n        if (this.weekDay === startOfTheWeek) break;\n        const goBack = (this.weekDay - startOfTheWeek + 7) % 7;\n        this.manipulate(goBack * -1, Unit.date);\n        break;\n      }\n      case 'month':\n        this.startOf(Unit.date);\n        this.setDate(1);\n        break;\n      case 'year':\n        this.startOf(Unit.date);\n        this.setMonth(0, 1);\n        break;\n    }\n    return this;\n  }\n\n  /**\n   * Sets the current date to the end of the {@link unit} provided\n   * Example: Consider a date of \"April 30, 2021, 11:45:32.984 AM\" => new DateTime(2021, 3, 30, 11, 45, 32, 984).endOf('month')\n   * would return April 30, 2021, 11:59:59.999 PM\n   * @param unit\n   * @param startOfTheWeek\n   */\n  endOf(unit: Unit | 'weekDay', startOfTheWeek = 0): this {\n    if (this[unit] === undefined)\n      throw new Error(`Unit '${unit}' is not valid`);\n    switch (unit) {\n      case 'seconds':\n        this.setMilliseconds(999);\n        break;\n      case 'minutes':\n        this.setSeconds(59, 999);\n        break;\n      case 'hours':\n        this.setMinutes(59, 59, 999);\n        break;\n      case 'date':\n        this.setHours(23, 59, 59, 999);\n        break;\n      case 'weekDay': {\n        this.endOf(Unit.date);\n        const endOfWeek = 6 + startOfTheWeek;\n        if (this.weekDay === endOfWeek) break;\n        this.manipulate(endOfWeek - this.weekDay, Unit.date);\n        break;\n      }\n      case 'month':\n        this.endOf(Unit.date);\n        this.manipulate(1, Unit.month);\n        this.setDate(0);\n        break;\n      case 'year':\n        this.endOf(Unit.date);\n        this.setMonth(11, 31);\n        break;\n    }\n    return this;\n  }\n\n  /**\n   * Change a {@link unit} value. Value can be positive or negative\n   * Example: Consider a date of \"April 30, 2021, 11:45:32.984 AM\" => new DateTime(2021, 3, 30, 11, 45, 32, 984).manipulate(1, 'month')\n   * would return May 30, 2021, 11:45:32.984 AM\n   * @param value A positive or negative number\n   * @param unit\n   */\n  manipulate(value: number, unit: Unit): this {\n    if (this[unit] === undefined)\n      throw new Error(`Unit '${unit}' is not valid`);\n    this[unit] += value;\n    return this;\n  }\n\n  /**\n   * Return true if {@link compare} is before this date\n   * @param compare The Date/DateTime to compare\n   * @param unit If provided, uses {@link startOf} for\n   * comparison.\n   */\n  isBefore(compare: DateTime, unit?: Unit): boolean {\n    // If the comparisons is undefined, return false\n    if (!DateTime.isValid(compare)) return false;\n\n    if (!unit) return this.valueOf() < compare.valueOf();\n    if (this[unit] === undefined)\n      throw new Error(`Unit '${unit}' is not valid`);\n    return (\n      this.clone.startOf(unit).valueOf() < compare.clone.startOf(unit).valueOf()\n    );\n  }\n\n  /**\n   * Return true if {@link compare} is after this date\n   * @param compare The Date/DateTime to compare\n   * @param unit If provided, uses {@link startOf} for\n   * comparison.\n   */\n  isAfter(compare: DateTime, unit?: Unit): boolean {\n    // If the comparisons is undefined, return false\n    if (!DateTime.isValid(compare)) return false;\n\n    if (!unit) return this.valueOf() > compare.valueOf();\n    if (this[unit] === undefined)\n      throw new Error(`Unit '${unit}' is not valid`);\n    return (\n      this.clone.startOf(unit).valueOf() > compare.clone.startOf(unit).valueOf()\n    );\n  }\n\n  /**\n   * Return true if {@link compare} is same this date\n   * @param compare The Date/DateTime to compare\n   * @param unit If provided, uses {@link startOf} for\n   * comparison.\n   */\n  isSame(compare: DateTime, unit?: Unit): boolean {\n    // If the comparisons is undefined, return false\n    if (!DateTime.isValid(compare)) return false;\n\n    if (!unit) return this.valueOf() === compare.valueOf();\n    if (this[unit] === undefined)\n      throw new Error(`Unit '${unit}' is not valid`);\n    compare = DateTime.convert(compare);\n    return (\n      this.clone.startOf(unit).valueOf() === compare.startOf(unit).valueOf()\n    );\n  }\n\n  /**\n   * Check if this is between two other DateTimes, optionally looking at unit scale. The match is exclusive.\n   * @param left\n   * @param right\n   * @param unit.\n   * @param inclusivity. A [ indicates inclusion of a value. A ( indicates exclusion.\n   * If the inclusivity parameter is used, both indicators must be passed.\n   */\n  isBetween(\n    left: DateTime,\n    right: DateTime,\n    unit?: Unit,\n    inclusivity: '()' | '[]' | '(]' | '[)' = '()'\n  ): boolean {\n    // If one of the comparisons is undefined, return false\n    if (!DateTime.isValid(left) || !DateTime.isValid(right)) return false;\n    // If a unit is provided and is not a valid property of the DateTime object, throw an error\n    if (unit && this[unit] === undefined) {\n      throw new Error(`Unit '${unit}' is not valid`);\n    }\n\n    const leftInclusivity = inclusivity[0] === '(';\n    const rightInclusivity = inclusivity[1] === ')';\n\n    const isLeftInRange = leftInclusivity\n      ? this.isAfter(left, unit)\n      : !this.isBefore(left, unit);\n    const isRightInRange = rightInclusivity\n      ? this.isBefore(right, unit)\n      : !this.isAfter(right, unit);\n\n    return isLeftInRange && isRightInRange;\n  }\n\n  /**\n   * Returns flattened object of the date. Does not include literals\n   * @param locale\n   * @param template\n   */\n  parts(\n    locale = this.localization.locale,\n    template: Record<string, unknown> = { dateStyle: 'full', timeStyle: 'long' }\n  ): Record<string, string> {\n    const parts = {};\n    new Intl.DateTimeFormat(locale, template)\n      .formatToParts(this)\n      .filter((x) => x.type !== 'literal')\n      .forEach((x) => (parts[x.type] = x.value));\n    return parts;\n  }\n\n  /**\n   * Shortcut to Date.getSeconds()\n   */\n  get seconds(): number {\n    return this.getSeconds();\n  }\n\n  /**\n   * Shortcut to Date.setSeconds()\n   */\n  set seconds(value: number) {\n    this.setSeconds(value);\n  }\n\n  /**\n   * Returns two digit hours\n   */\n  get secondsFormatted(): string {\n    return this.parts(undefined, twoDigitTemplate).second;\n  }\n\n  /**\n   * Shortcut to Date.getMinutes()\n   */\n  get minutes(): number {\n    return this.getMinutes();\n  }\n\n  /**\n   * Shortcut to Date.setMinutes()\n   */\n  set minutes(value: number) {\n    this.setMinutes(value);\n  }\n\n  /**\n   * Returns two digit minutes\n   */\n  get minutesFormatted(): string {\n    return this.parts(undefined, twoDigitTemplate).minute;\n  }\n\n  /**\n   * Shortcut to Date.getHours()\n   */\n  get hours(): number {\n    return this.getHours();\n  }\n\n  /**\n   * Shortcut to Date.setHours()\n   */\n  set hours(value: number) {\n    this.setHours(value);\n  }\n\n  /**\n   * Returns two digit hour, e.g. 01...10\n   * @param hourCycle Providing an hour cycle will change 00 to 24 depending on the given value.\n   */\n  getHoursFormatted(hourCycle: Intl.LocaleHourCycleKey = 'h12') {\n    return this.parts(undefined, { ...twoDigitTemplate, hourCycle: hourCycle })\n      .hour;\n  }\n\n  /**\n   * Get the meridiem of the date. E.g. AM or PM.\n   * If the {@link locale} provides a \"dayPeriod\" then this will be returned,\n   * otherwise it will return AM or PM.\n   * @param locale\n   */\n  meridiem(locale: string = this.localization.locale): string {\n    return new Intl.DateTimeFormat(locale, {\n      hour: 'numeric',\n      hour12: true,\n    })\n      .formatToParts(this)\n      .find((p) => p.type === 'dayPeriod')?.value;\n  }\n\n  /**\n   * Shortcut to Date.getDate()\n   */\n  get date(): number {\n    return this.getDate();\n  }\n\n  /**\n   * Shortcut to Date.setDate()\n   */\n  set date(value: number) {\n    this.setDate(value);\n  }\n\n  /**\n   * Return two digit date\n   */\n  get dateFormatted(): string {\n    return this.parts(undefined, twoDigitTemplate).day;\n  }\n\n  /**\n   * Shortcut to Date.getDay()\n   */\n  get weekDay(): number {\n    return this.getDay();\n  }\n\n  /**\n   * Shortcut to Date.getMonth()\n   */\n  get month(): number {\n    return this.getMonth();\n  }\n\n  /**\n   * Shortcut to Date.setMonth()\n   */\n  set month(value: number) {\n    const targetMonth = new Date(this.year, value + 1);\n    targetMonth.setDate(0);\n    const endOfMonth = targetMonth.getDate();\n    if (this.date > endOfMonth) {\n      this.date = endOfMonth;\n    }\n    this.setMonth(value);\n  }\n\n  /**\n   * Return two digit, human expected month. E.g. January = 1, December = 12\n   */\n  get monthFormatted(): string {\n    return this.parts(undefined, twoDigitTemplate).month;\n  }\n\n  /**\n   * Shortcut to Date.getFullYear()\n   */\n  get year(): number {\n    return this.getFullYear();\n  }\n\n  /**\n   * Shortcut to Date.setFullYear()\n   */\n  set year(value: number) {\n    this.setFullYear(value);\n  }\n\n  // borrowed a bunch of stuff from Luxon\n  /**\n   * Gets the week of the year\n   */\n  get week(): number {\n    const ordinal = this.computeOrdinal(),\n      weekday = this.getUTCDay();\n\n    let weekNumber = Math.floor((ordinal - weekday + 10) / 7);\n\n    if (weekNumber < 1) {\n      weekNumber = this.weeksInWeekYear();\n    } else if (weekNumber > this.weeksInWeekYear()) {\n      weekNumber = 1;\n    }\n\n    return weekNumber;\n  }\n\n  /**\n   * Returns the number of weeks in the year\n   */\n  weeksInWeekYear() {\n    const p1 =\n        (this.year +\n          Math.floor(this.year / 4) -\n          Math.floor(this.year / 100) +\n          Math.floor(this.year / 400)) %\n        7,\n      last = this.year - 1,\n      p2 =\n        (last +\n          Math.floor(last / 4) -\n          Math.floor(last / 100) +\n          Math.floor(last / 400)) %\n        7;\n    return p1 === 4 || p2 === 3 ? 53 : 52;\n  }\n\n  dateToDataValue(): string {\n    if (!DateTime.isValid(this)) return '';\n\n    return `${this.year}-${this.month.toString().padStart(2, '0')}-${this.date\n      .toString()\n      .padStart(2, '0')}`;\n  }\n\n  /**\n   * Returns true or false depending on if the year is a leap year or not.\n   */\n  get isLeapYear() {\n    return (\n      this.year % 4 === 0 && (this.year % 100 !== 0 || this.year % 400 === 0)\n    );\n  }\n\n  private computeOrdinal() {\n    return (\n      this.date +\n      (this.isLeapYear ? this.leapLadder : this.nonLeapLadder)[this.month]\n    );\n  }\n\n  private nonLeapLadder = [\n    0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334,\n  ];\n  private leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\n  //#region CDF stuff\n\n  private dateTimeRegex =\n    //is regex cannot be simplified beyond what it already is\n    /(\\[[^[\\]]*])|y{1,4}|M{1,4}|d{1,4}|H{1,2}|h{1,2}|t|T|m{1,2}|s{1,2}|f{3}/g; //NOSONAR\n\n  private formattingTokens =\n    /(\\[[^[\\]]*])|([-_:/.,()\\s]+)|(T|t|yyyy|yy?|MM?M?M?|Do|dd?d?d?|hh?|HH?|mm?|ss?)/g; //NOSONAR is regex cannot be simplified beyond what it already is\n\n  /**\n   * Returns a list of month values based on the current locale\n   */\n  private getAllMonths(\n    format: '2-digit' | 'numeric' | 'long' | 'short' | 'narrow' = 'long'\n  ) {\n    const applyFormat = new Intl.DateTimeFormat(this.localization.locale, {\n      month: format,\n    }).format;\n    return [...Array(12).keys()].map((m) => applyFormat(new Date(2021, m)));\n  }\n\n  /**\n   * Replaces an expanded token set (e.g. LT/LTS)\n   */\n  private replaceTokens(formatStr, formats) {\n    /***\n     * _ => match\n     * a => first capture group. Anything between [ and ]\n     * b => second capture group\n     */\n    return formatStr.replace(\n      /(\\[[^[\\]]*])|(LTS?|l{1,4}|L{1,4})/g,\n      (_, a, b) => {\n        const B = b && b.toUpperCase();\n        return a || formats[B] || DefaultFormatLocalization.dateFormats[B];\n      }\n    );\n  }\n\n  private match2 = /\\d\\d/; // 00 - 99\n  private match3 = /\\d{3}/; // 000 - 999\n  private match4 = /\\d{4}/; // 0000 - 9999\n  private match1to2 = /\\d\\d?/; // 0 - 99\n  private matchSigned = /[+-]?\\d+/; // -inf - inf\n  private matchOffset = /[+-]\\d\\d:?(\\d\\d)?|Z/; // +00:00 -00:00 +0000 or -0000 +00 or Z\n  private matchWord = /[^\\d_:/,\\-()\\s]+/; // Word\n\n  private parseTwoDigitYear(input: number) {\n    return input + (input > 68 ? 1900 : 2000);\n  }\n\n  private offsetFromString(input: string) {\n    if (!input) return 0;\n    if (input === 'Z') return 0;\n    const [first, second, third] = input.match(/([+-]|\\d\\d)/g);\n    const minutes = +second * 60 + (+third || 0);\n    const signed = first === '+' ? -minutes : minutes;\n    return minutes === 0 ? 0 : signed; // eslint-disable-line no-nested-ternary\n  }\n\n  /**\n   * z = -4, zz = -04, zzz = -0400\n   * @param date\n   * @param style\n   * @private\n   */\n  private zoneInformation(date: DateTime, style: 'z' | 'zz' | 'zzz') {\n    let name = date\n      .parts(this.localization.locale, { timeZoneName: 'longOffset' })\n      .timeZoneName.replace('GMT', '')\n      .replace(':', '');\n\n    const negative = name.includes('-');\n\n    name = name.replace('-', '');\n\n    if (style === 'z') name = name.substring(1, 2);\n    else if (style === 'zz') name = name.substring(0, 2);\n\n    return `${negative ? '-' : ''}${name}`;\n  }\n\n  private zoneExpressions = [\n    this.matchOffset,\n    (obj, input) => {\n      obj.offset = this.offsetFromString(input);\n    },\n  ];\n\n  private addInput(property) {\n    return (obj, input) => {\n      obj[property] = +input;\n    };\n  }\n\n  private getLocaleAfternoon(): string {\n    return new Intl.DateTimeFormat(this.localization.locale, {\n      hour: 'numeric',\n      hour12: true,\n    })\n      .formatToParts(new Date(2022, 3, 4, 13))\n      .find((p) => p.type === 'dayPeriod')\n      ?.value?.replace(/\\s+/g, ' ');\n  }\n\n  private meridiemMatch(input: string) {\n    return input.toLowerCase() === this.getLocaleAfternoon().toLowerCase();\n  }\n\n  private expressions: FormatExpression = {\n    t: {\n      pattern: undefined, //this.matchWord,\n      parser: (obj, input) => {\n        obj.afternoon = this.meridiemMatch(input);\n      },\n    },\n    T: {\n      pattern: undefined, //this.matchWord,\n      parser: (obj, input) => {\n        obj.afternoon = this.meridiemMatch(input);\n      },\n    },\n    fff: {\n      pattern: this.match3,\n      parser: (obj, input) => {\n        obj.milliseconds = +input;\n      },\n    },\n    s: {\n      pattern: this.match1to2,\n      parser: this.addInput('seconds'),\n    },\n    ss: {\n      pattern: this.match1to2,\n      parser: this.addInput('seconds'),\n    },\n    m: {\n      pattern: this.match1to2,\n      parser: this.addInput('minutes'),\n    },\n    mm: {\n      pattern: this.match1to2,\n      parser: this.addInput('minutes'),\n    },\n    H: {\n      pattern: this.match1to2,\n      parser: this.addInput('hours'),\n    },\n    h: {\n      pattern: this.match1to2,\n      parser: this.addInput('hours'),\n    },\n    HH: {\n      pattern: this.match1to2,\n      parser: this.addInput('hours'),\n    },\n    hh: {\n      pattern: this.match1to2,\n      parser: this.addInput('hours'),\n    },\n    d: {\n      pattern: this.match1to2,\n      parser: this.addInput('day'),\n    },\n    dd: {\n      pattern: this.match2,\n      parser: this.addInput('day'),\n    },\n    Do: {\n      pattern: this.matchWord,\n      parser: (obj, input) => {\n        obj.day = +(input.match(/\\d+/)[0] || 1);\n        if (!this.localization.ordinal) return;\n        for (let i = 1; i <= 31; i += 1) {\n          if (this.localization.ordinal(i).replace(/[[\\]]/g, '') === input) {\n            obj.day = i;\n          }\n        }\n      },\n    },\n    M: {\n      pattern: this.match1to2,\n      parser: this.addInput('month'),\n    },\n    MM: {\n      pattern: this.match2,\n      parser: this.addInput('month'),\n    },\n    MMM: {\n      pattern: this.matchWord,\n      parser: (obj, input) => {\n        const months = this.getAllMonths();\n        const monthsShort = this.getAllMonths('short');\n        const matchIndex =\n          (monthsShort || months.map((_) => _.slice(0, 3))).indexOf(input) + 1;\n        if (matchIndex < 1) {\n          throw new Error();\n        }\n        obj.month = matchIndex % 12 || matchIndex;\n      },\n    },\n    MMMM: {\n      pattern: this.matchWord,\n      parser: (obj, input) => {\n        const months = this.getAllMonths();\n        const matchIndex = months.indexOf(input) + 1;\n        if (matchIndex < 1) {\n          throw new Error();\n        }\n        obj.month = matchIndex % 12 || matchIndex;\n      },\n    },\n    y: {\n      pattern: this.matchSigned,\n      parser: this.addInput('year'),\n    },\n    yy: {\n      pattern: this.match2,\n      parser: (obj, input) => {\n        obj.year = this.parseTwoDigitYear(+input);\n      },\n    },\n    yyyy: {\n      pattern: this.match4,\n      parser: this.addInput('year'),\n    },\n    // z: this.zoneExpressions,\n    // zz: this.zoneExpressions,\n    // zzz: this.zoneExpressions\n  };\n\n  private correctHours(time) {\n    const { afternoon } = time;\n    if (afternoon !== undefined) {\n      const { hours } = time;\n      if (afternoon) {\n        if (hours < 12) {\n          time.hours += 12;\n        }\n      } else if (hours === 12) {\n        time.hours = 0;\n      }\n      delete time.afternoon;\n    }\n  }\n\n  private makeParser(format: string) {\n    format = this.replaceTokens(format, this.localization.dateFormats);\n    const matchArray = format.match(this.formattingTokens);\n    const { length } = matchArray;\n    const expressionArray: (FormatMatch | string)[] = [];\n    for (let i = 0; i < length; i += 1) {\n      const token = matchArray[i];\n      const expression = this.expressions[token] as FormatMatch;\n      if (expression?.parser) {\n        expressionArray[i] = expression;\n      } else {\n        expressionArray[i] = (token as string).replace(/^\\[[^[\\]]*]$/g, '');\n      }\n    }\n\n    return (input: string): parsedTime => {\n      const time = {\n        hours: 0,\n        minutes: 0,\n        seconds: 0,\n        milliseconds: 0,\n      };\n      for (let i = 0, start = 0; i < length; i += 1) {\n        const token = expressionArray[i];\n        if (typeof token === 'string') {\n          start += token.length;\n        } else {\n          const part = input.slice(start);\n          let value = part;\n\n          if (token.pattern) {\n            const match = token.pattern.exec(part);\n            value = match[0];\n          }\n          token.parser.call(this, time, value);\n          input = input.replace(value, '');\n        }\n      }\n      this.correctHours(time);\n      return time;\n    };\n  }\n\n  /**\n   * Attempts to create a DateTime from a string.\n   * @param input date as string\n   * @param localization provides the date template the string is in via the format property\n   */\n  //eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static fromString(input: string, localization: FormatLocalization): DateTime {\n    if (!localization?.format) {\n      Namespace.errorMessages.customDateFormatError('No format was provided');\n    }\n    try {\n      const dt = new DateTime();\n      dt.setLocalization(localization);\n      if (['x', 'X'].indexOf(localization.format) > -1)\n        return new DateTime((localization.format === 'X' ? 1000 : 1) * +input);\n\n      input = input.replace(/\\s+/g, ' ');\n      const parser = dt.makeParser(localization.format);\n      const { year, month, day, hours, minutes, seconds, milliseconds, zone } =\n        parser(input);\n      const d = day || (!year && !month ? dt.getDate() : 1);\n      const y = year || dt.getFullYear();\n      let M = 0;\n      if (!(year && !month)) {\n        M = month > 0 ? month - 1 : dt.getMonth();\n      }\n      if (zone) {\n        return new DateTime(\n          Date.UTC(\n            y,\n            M,\n            d,\n            hours,\n            minutes,\n            seconds,\n            milliseconds + zone.offset * 60 * 1000\n          )\n        );\n      }\n      return new DateTime(y, M, d, hours, minutes, seconds, milliseconds);\n    } catch (e) {\n      Namespace.errorMessages.customDateFormatError(\n        `Unable to parse provided input: ${input}, format: ${localization.format}`\n      );\n    }\n  }\n\n  /**\n   * Returns a string format.\n   * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat\n   * for valid templates and locale objects\n   * @param template An optional object. If provided, method will use Intl., otherwise the localizations format properties\n   * @param locale Can be a string or an array of strings. Uses browser defaults otherwise.\n   */\n  format(\n    template?: DateTimeFormatOptions | string,\n    locale = this.localization.locale\n  ): string {\n    if (template && typeof template === 'object')\n      return new Intl.DateTimeFormat(locale, template).format(this);\n\n    const formatString = this.replaceTokens(\n      //try template first\n      template ||\n        //otherwise try localization format\n        this.localization.format ||\n        //otherwise try date + time\n        `${DefaultFormatLocalization.dateFormats.L}, ${DefaultFormatLocalization.dateFormats.LT}`,\n      this.localization.dateFormats\n    );\n\n    const formatter = (template) =>\n      new Intl.DateTimeFormat(this.localization.locale, template).format(this);\n\n    if (!this.localization.hourCycle)\n      this.localization.hourCycle = guessHourCycle(this.localization.locale);\n\n    //if the format asks for a twenty-four-hour string but the hour cycle is not, then make a base guess\n    const HHCycle = this.localization.hourCycle.startsWith('h1')\n      ? 'h24'\n      : this.localization.hourCycle;\n    const hhCycle = this.localization.hourCycle.startsWith('h2')\n      ? 'h12'\n      : this.localization.hourCycle;\n\n    const matches = {\n      y: this.year,\n      yy: formatter({ year: '2-digit' }),\n      yyyy: this.year,\n      M: formatter({ month: 'numeric' }),\n      MM: this.monthFormatted,\n      MMM: this.getAllMonths('short')[this.getMonth()],\n      MMMM: this.getAllMonths()[this.getMonth()],\n      d: this.date,\n      dd: this.dateFormatted,\n      ddd: formatter({ weekday: 'short' }),\n      dddd: formatter({ weekday: 'long' }),\n      H: this.getHours(),\n      HH: this.getHoursFormatted(HHCycle),\n      h: this.hours > 12 ? this.hours - 12 : this.hours,\n      hh: this.getHoursFormatted(hhCycle),\n      t: this.meridiem(),\n      T: this.meridiem().toUpperCase(),\n      m: this.minutes,\n      mm: this.minutesFormatted,\n      s: this.seconds,\n      ss: this.secondsFormatted,\n      fff: this.getMilliseconds(),\n      // z: this.zoneInformation(dateTime, 'z'), //-4\n      // zz: this.zoneInformation(dateTime, 'zz'), //-04\n      // zzz: this.zoneInformation(dateTime, 'zzz') //-0400\n    };\n\n    return formatString\n      .replace(this.dateTimeRegex, (match, $1) => {\n        return $1 || matches[match];\n      })\n      .replace(/\\[/g, '')\n      .replace(/]/g, '');\n  }\n\n  //#endregion CDF stuff\n}\n", "//eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport declare type Constructable<T> = new (...args: any[]) => T;\n\nclass ServiceLocator {\n  private cache: Map<Constructable<unknown>, unknown | symbol> = new Map();\n\n  locate<T>(identifier: Constructable<T>): T {\n    const service = this.cache.get(identifier);\n    if (service) return service as T;\n    const value = new identifier();\n    this.cache.set(identifier, value);\n    return value;\n  }\n}\nexport const setupServiceLocator = () => {\n  serviceLocator = new ServiceLocator();\n};\n\nexport let serviceLocator: ServiceLocator;\n", "import { Unit } from '../datetime';\nimport Namespace from './namespace';\nimport ViewMode from './view-mode';\n\nconst CalendarModes: {\n  name: keyof ViewMode;\n  className: string;\n  unit: Unit;\n  step: number;\n}[] = [\n  {\n    name: 'calendar',\n    className: Namespace.css.daysContainer,\n    unit: Unit.month,\n    step: 1,\n  },\n  {\n    name: 'months',\n    className: Namespace.css.monthsContainer,\n    unit: Unit.year,\n    step: 1,\n  },\n  {\n    name: 'years',\n    className: Namespace.css.yearsContainer,\n    unit: Unit.year,\n    step: 10,\n  },\n  {\n    name: 'decades',\n    className: Namespace.css.decadesContainer,\n    unit: Unit.year,\n    step: 100,\n  },\n];\n\nexport default CalendarModes;\n", "import { DateTime } from '../datetime';\nimport CalendarModes from './calendar-modes';\nimport ViewMode from './view-mode';\nimport Options from './options';\n\nexport class OptionsStore {\n  options: Options;\n  element: HTMLElement;\n  toggle: HTMLElement;\n  input: HTMLInputElement;\n  unset: boolean;\n  private _currentCalendarViewMode = 0;\n\n  get currentCalendarViewMode() {\n    return this._currentCalendarViewMode;\n  }\n\n  set currentCalendarViewMode(value) {\n    this._currentCalendarViewMode = value;\n    this.currentView = CalendarModes[value].name;\n  }\n\n  _viewDate = new DateTime();\n\n  get viewDate() {\n    return this._viewDate;\n  }\n\n  set viewDate(v) {\n    this._viewDate = v;\n    if (this.options) this.options.viewDate = v;\n  }\n\n  /**\n   * When switching back to the calendar from the clock,\n   * this sets currentView to the correct calendar view.\n   */\n  refreshCurrentView() {\n    this.currentView = CalendarModes[this.currentCalendarViewMode].name;\n  }\n\n  minimumCalendarViewMode = 0;\n  currentView: keyof ViewMode = 'calendar';\n\n  get isTwelveHour() {\n    return ['h12', 'h11'].includes(this.options.localization.hourCycle);\n  }\n}\n", "import { DateTime, Unit } from './datetime';\nimport { serviceLocator } from './utilities/service-locator';\nimport { OptionsStore } from './utilities/optionsStore';\n\n/**\n * Main class for date validation rules based on the options provided.\n */\nexport default class Validation {\n  private optionsStore: OptionsStore;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n  }\n\n  /**\n   * Checks to see if the target date is valid based on the rules provided in the options.\n   * Granularity can be provided to check portions of the date instead of the whole.\n   * @param targetDate\n   * @param granularity\n   */\n  isValid(targetDate: DateTime, granularity?: Unit): boolean {\n    if (!this._enabledDisabledDatesIsValid(granularity, targetDate))\n      return false;\n\n    if (\n      granularity !== Unit.month &&\n      granularity !== Unit.year &&\n      this.optionsStore.options.restrictions.daysOfWeekDisabled?.length > 0 &&\n      this.optionsStore.options.restrictions.daysOfWeekDisabled.indexOf(\n        targetDate.weekDay\n      ) !== -1\n    )\n      return false;\n\n    if (!this._minMaxIsValid(granularity, targetDate)) return false;\n\n    if (\n      granularity === Unit.hours ||\n      granularity === Unit.minutes ||\n      granularity === Unit.seconds\n    ) {\n      if (!this._enabledDisabledHoursIsValid(targetDate)) return false;\n\n      if (\n        this.optionsStore.options.restrictions.disabledTimeIntervals?.filter(\n          (internal) => targetDate.isBetween(internal.from, internal.to)\n        ).length !== 0\n      )\n        return false;\n    }\n\n    return true;\n  }\n\n  private _enabledDisabledDatesIsValid(\n    granularity: Unit,\n    targetDate: DateTime\n  ): boolean {\n    if (granularity !== Unit.date) return true;\n\n    if (\n      this.optionsStore.options.restrictions.disabledDates.length > 0 &&\n      this._isInDisabledDates(targetDate)\n    ) {\n      return false;\n    }\n\n    // noinspection RedundantIfStatementJS\n    if (\n      this.optionsStore.options.restrictions.enabledDates.length > 0 &&\n      !this._isInEnabledDates(targetDate)\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Checks to see if the disabledDates option is in use and returns true (meaning invalid)\n   * if the `testDate` is with in the array. Granularity is by date.\n   * @param testDate\n   * @private\n   */\n  private _isInDisabledDates(testDate: DateTime) {\n    if (\n      !this.optionsStore.options.restrictions.disabledDates ||\n      this.optionsStore.options.restrictions.disabledDates.length === 0\n    )\n      return false;\n\n    return !!this.optionsStore.options.restrictions.disabledDates.find((x) =>\n      x.isSame(testDate, Unit.date)\n    );\n  }\n\n  /**\n   * Checks to see if the enabledDates option is in use and returns true (meaning valid)\n   * if the `testDate` is with in the array. Granularity is by date.\n   * @param testDate\n   * @private\n   */\n  private _isInEnabledDates(testDate: DateTime) {\n    if (\n      !this.optionsStore.options.restrictions.enabledDates ||\n      this.optionsStore.options.restrictions.enabledDates.length === 0\n    )\n      return true;\n\n    return !!this.optionsStore.options.restrictions.enabledDates.find((x) =>\n      x.isSame(testDate, Unit.date)\n    );\n  }\n\n  private _minMaxIsValid(granularity: Unit, targetDate: DateTime) {\n    if (\n      this.optionsStore.options.restrictions.minDate &&\n      targetDate.isBefore(\n        this.optionsStore.options.restrictions.minDate,\n        granularity\n      )\n    ) {\n      return false;\n    }\n\n    // noinspection RedundantIfStatementJS\n    if (\n      this.optionsStore.options.restrictions.maxDate &&\n      targetDate.isAfter(\n        this.optionsStore.options.restrictions.maxDate,\n        granularity\n      )\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  private _enabledDisabledHoursIsValid(targetDate: DateTime) {\n    if (\n      this.optionsStore.options.restrictions.disabledHours.length > 0 &&\n      this._isInDisabledHours(targetDate)\n    ) {\n      return false;\n    }\n\n    // noinspection RedundantIfStatementJS\n    if (\n      this.optionsStore.options.restrictions.enabledHours.length > 0 &&\n      !this._isInEnabledHours(targetDate)\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Checks to see if the disabledHours option is in use and returns true (meaning invalid)\n   * if the `testDate` is with in the array. Granularity is by hours.\n   * @param testDate\n   * @private\n   */\n  private _isInDisabledHours(testDate: DateTime) {\n    if (\n      !this.optionsStore.options.restrictions.disabledHours ||\n      this.optionsStore.options.restrictions.disabledHours.length === 0\n    )\n      return false;\n\n    const formattedDate = testDate.hours;\n    return this.optionsStore.options.restrictions.disabledHours.includes(\n      formattedDate\n    );\n  }\n\n  /**\n   * Checks to see if the enabledHours option is in use and returns true (meaning valid)\n   * if the `testDate` is with in the array. Granularity is by hours.\n   * @param testDate\n   * @private\n   */\n  private _isInEnabledHours(testDate: DateTime) {\n    if (\n      !this.optionsStore.options.restrictions.enabledHours ||\n      this.optionsStore.options.restrictions.enabledHours.length === 0\n    )\n      return true;\n\n    const formattedDate = testDate.hours;\n    return this.optionsStore.options.restrictions.enabledHours.includes(\n      formattedDate\n    );\n  }\n\n  dateRangeIsValid(dates: DateTime[], index: number, target: DateTime) {\n    // if we're not using the option, then return valid\n    if (!this.optionsStore.options.dateRange) return true;\n\n    // if we've only selected 0..1 dates, and we're not setting the end date\n    // then return valid. We only want to validate the range if both are selected,\n    // because the other validation on the target has already occurred.\n    if (dates.length !== 2 && index !== 1) return true;\n\n    // initialize start date\n    const start = dates[0].clone;\n    // check if start date is not the same as target date\n    if (start.isSame(target, Unit.date)) return true;\n\n    // add one day to start; start has already been validated\n    start.manipulate(1, Unit.date);\n\n    // check each date in the range to make sure it's valid\n    while (!start.isSame(target, Unit.date)) {\n      const valid = this.isValid(start, Unit.date);\n      if (!valid) return false;\n      start.manipulate(1, Unit.date);\n    }\n\n    return true;\n  }\n}\n", "import { DateTime, Unit } from '../datetime';\nimport ActionTypes from './action-types';\nimport { BaseEvent } from './event-types';\n\nexport type ViewUpdateValues = Unit | 'decade' | 'clock' | 'calendar' | 'all';\n\nclass EventEmitter<T> {\n  private subscribers: ((value?: T) => void)[] = [];\n\n  subscribe(callback: (value: T) => void) {\n    this.subscribers.push(callback);\n    return this.unsubscribe.bind(this, this.subscribers.length - 1);\n  }\n\n  unsubscribe(index: number) {\n    this.subscribers.splice(index, 1);\n  }\n\n  emit(value?: T) {\n    this.subscribers.forEach((callback) => {\n      callback(value);\n    });\n  }\n\n  destroy() {\n    this.subscribers = null;\n    this.subscribers = [];\n  }\n}\n\nexport class EventEmitters {\n  triggerEvent = new EventEmitter<BaseEvent>();\n  viewUpdate = new EventEmitter();\n  updateDisplay = new EventEmitter<ViewUpdateValues>();\n  action = new EventEmitter<{ e: any; action?: ActionTypes }>(); //eslint-disable-line @typescript-eslint/no-explicit-any\n  updateViewDate = new EventEmitter<DateTime>();\n\n  destroy() {\n    this.triggerEvent.destroy();\n    this.viewUpdate.destroy();\n    this.updateDisplay.destroy();\n    this.action.destroy();\n    this.updateViewDate.destroy();\n  }\n}\n", "import Options, { Localization } from './options';\nimport { DateTime } from '../datetime';\nimport DefaultFormatLocalization from './default-format-localization';\n\nconst defaultEnLocalization: Localization = {\n  clear: 'Clear selection',\n  close: 'Close the picker',\n  dateFormats: DefaultFormatLocalization.dateFormats,\n  dayViewHeaderFormat: { month: 'long', year: '2-digit' },\n  decrementHour: 'Decrement Hour',\n  decrementMinute: 'Decrement Minute',\n  decrementSecond: 'Decrement Second',\n  format: DefaultFormatLocalization.format,\n  hourCycle: DefaultFormatLocalization.hourCycle,\n  incrementHour: 'Increment Hour',\n  incrementMinute: 'Increment Minute',\n  incrementSecond: 'Increment Second',\n  locale: DefaultFormatLocalization.locale,\n  maxWeekdayLength: 0,\n  nextCentury: 'Next Century',\n  nextDecade: 'Next Decade',\n  nextMonth: 'Next Month',\n  nextYear: 'Next Year',\n  ordinal: DefaultFormatLocalization.ordinal,\n  pickHour: 'Pick Hour',\n  pickMinute: 'Pick Minute',\n  pickSecond: 'Pick Second',\n  previousCentury: 'Previous Century',\n  previousDecade: 'Previous Decade',\n  previousMonth: 'Previous Month',\n  previousYear: 'Previous Year',\n  selectDate: 'Select Date',\n  selectDecade: 'Select Decade',\n  selectMonth: 'Select Month',\n  selectTime: 'Select Time',\n  selectYear: 'Select Year',\n  startOfTheWeek: 0,\n  today: 'Go to today',\n  toggleMeridiem: 'Toggle Meridiem',\n  toggleAriaLabel: 'Change date',\n};\n\nconst DefaultOptions: Options = {\n  allowInputToggle: false,\n  container: undefined,\n  dateRange: false,\n  debug: false,\n  defaultDate: undefined,\n  display: {\n    icons: {\n      type: 'icons',\n      time: 'fa-solid fa-clock',\n      date: 'fa-solid fa-calendar',\n      up: 'fa-solid fa-arrow-up',\n      down: 'fa-solid fa-arrow-down',\n      previous: 'fa-solid fa-chevron-left',\n      next: 'fa-solid fa-chevron-right',\n      today: 'fa-solid fa-calendar-check',\n      clear: 'fa-solid fa-trash',\n      close: 'fa-solid fa-xmark',\n    },\n    sideBySide: false,\n    calendarWeeks: false,\n    viewMode: 'calendar',\n    toolbarPlacement: 'bottom',\n    keepOpen: false,\n    buttons: {\n      today: false,\n      clear: false,\n      close: false,\n    },\n    components: {\n      calendar: true,\n      date: true,\n      month: true,\n      year: true,\n      decades: true,\n      clock: true,\n      hours: true,\n      minutes: true,\n      seconds: false,\n      useTwentyfourHour: undefined,\n    },\n    inline: false,\n    theme: 'auto',\n    placement: 'bottom',\n    keyboardNavigation: true,\n  },\n  keepInvalid: false,\n  localization: defaultEnLocalization,\n  meta: {},\n  multipleDates: false,\n  multipleDatesSeparator: '; ',\n  promptTimeOnDateChange: false,\n  promptTimeOnDateChangeTransitionDelay: 200,\n  restrictions: {\n    minDate: undefined,\n    maxDate: undefined,\n    disabledDates: [],\n    enabledDates: [],\n    daysOfWeekDisabled: [],\n    disabledTimeIntervals: [],\n    disabledHours: [],\n    enabledHours: [],\n  },\n  stepping: 1,\n  useCurrent: true,\n  viewDate: new DateTime(),\n};\n\nexport default DefaultOptions;\nexport const DefaultEnLocalization = { ...defaultEnLocalization };\n", "import Namespace from './namespace';\nimport { DateTime } from '../datetime';\nimport { FormatLocalization } from './options';\nimport DefaultFormatLocalization from './default-format-localization';\n\n/**\n * Attempts to prove `d` is a DateTime or Date or can be converted into one.\n * @param d If a string will attempt creating a date from it.\n * @param localization object containing locale and format settings. Only used with the custom formats\n * @private\n */\nexport function tryConvertToDateTime(\n  this: void,\n  d: DateTime | Date | string,\n  localization: FormatLocalization\n): DateTime | null {\n  if (!d) return null;\n  if (d.constructor.name === DateTime.name) return d as DateTime;\n  if (d.constructor.name === Date.name) {\n    return DateTime.convert(d as Date);\n  }\n  if (typeof d === typeof '') {\n    const dateTime = DateTime.fromString(d as unknown as string, localization);\n    if (JSON.stringify(dateTime) === 'null') {\n      return null;\n    }\n    return dateTime;\n  }\n  return null;\n}\n\n/**\n * Attempts to convert `d` to a DateTime object\n * @param d value to convert\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param localization object containing locale and format settings. Only used with the custom formats\n */\nexport function convertToDateTime(\n  this: void,\n  d: DateTime | Date | string,\n  optionName: string,\n  localization: FormatLocalization\n): DateTime {\n  if (typeof d === typeof '' && optionName !== 'input') {\n    Namespace.errorMessages.dateString();\n  }\n\n  const converted = tryConvertToDateTime(d, localization);\n\n  if (!converted) {\n    Namespace.errorMessages.failedToParseDate(\n      optionName,\n      d,\n      optionName === 'input'\n    );\n  }\n  return converted;\n}\n\n/**\n * Type checks that `value` is an array of Date or DateTime\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param value Option value\n * @param providedType Used to provide text to error messages\n * @param localization\n */\nexport function typeCheckDateArray(\n  this: void,\n  optionName: string,\n  value: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n  providedType: string,\n  localization: FormatLocalization = DefaultFormatLocalization\n) {\n  if (!Array.isArray(value)) {\n    Namespace.errorMessages.typeMismatch(\n      optionName,\n      providedType,\n      'array of DateTime or Date'\n    );\n  }\n  for (let i = 0; i < value.length; i++) {\n    const d = value[i];\n    const dateTime = convertToDateTime(d, optionName, localization);\n    dateTime.setLocalization(localization);\n    value[i] = dateTime;\n  }\n}\n\n/**\n * Type checks that `value` is an array of numbers\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param value Option value\n * @param providedType Used to provide text to error messages\n */\nexport function typeCheckNumberArray(\n  this: void,\n  optionName: string,\n  value: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n  providedType: string\n) {\n  if (!Array.isArray(value) || value.some((x) => typeof x !== typeof 0)) {\n    Namespace.errorMessages.typeMismatch(\n      optionName,\n      providedType,\n      'array of numbers'\n    );\n  }\n}\n", "import Namespace from './namespace';\nimport type { FormatLocalization } from './options';\nimport {\n  convertToDateTime,\n  typeCheckNumberArray,\n  typeCheckDateArray,\n} from './typeChecker';\n\ninterface OptionProcessorFunctionArguments {\n  key: string;\n  value: any; //eslint-disable-line @typescript-eslint/no-explicit-any\n  providedType: string;\n  defaultType: string;\n  path: string;\n  localization: FormatLocalization;\n}\n\ntype OptionProcessorFunction = (\n  this: void,\n  args: OptionProcessorFunctionArguments\n) => any; //eslint-disable-line @typescript-eslint/no-explicit-any\n\nfunction mandatoryDate(key: string): OptionProcessorFunction {\n  return ({ value, localization }) => {\n    const dateTime = convertToDateTime(value, key, localization);\n    if (dateTime !== undefined) {\n      dateTime.setLocalization(localization);\n      return dateTime;\n    }\n  };\n}\n\nfunction optionalDate(key: string): OptionProcessorFunction {\n  const mandatory = mandatoryDate(key);\n  return (args) => {\n    if (args.value === undefined) {\n      return args.value;\n    }\n    return mandatory(args);\n  };\n}\n\nfunction numbersInRange(\n  key: string,\n  lower: number,\n  upper: number\n): OptionProcessorFunction {\n  return ({ value, providedType }) => {\n    if (value === undefined) {\n      return [];\n    }\n    typeCheckNumberArray(key, value, providedType);\n    if ((value as number[]).some((x) => x < lower || x > upper))\n      Namespace.errorMessages.numbersOutOfRange(key, lower, upper);\n    return value;\n  };\n}\n\nfunction validHourRange(key: string): OptionProcessorFunction {\n  return numbersInRange(key, 0, 23);\n}\n\nfunction validDateArray(key: string): OptionProcessorFunction {\n  return ({ value, providedType, localization }) => {\n    if (value === undefined) {\n      return [];\n    }\n    typeCheckDateArray(key, value, providedType, localization);\n    return value;\n  };\n}\n\nfunction validKeyOption(keyOptions: string[]): OptionProcessorFunction {\n  return ({ value, path }) => {\n    if (!keyOptions.includes(value))\n      Namespace.errorMessages.unexpectedOptionValue(\n        path.substring(1),\n        value,\n        keyOptions\n      );\n    return value;\n  };\n}\n\nconst optionProcessors: { [key: string]: OptionProcessorFunction } =\n  Object.freeze({\n    defaultDate: mandatoryDate('defaultDate'),\n    viewDate: mandatoryDate('viewDate'),\n    minDate: optionalDate('restrictions.minDate'),\n    maxDate: optionalDate('restrictions.maxDate'),\n    disabledHours: validHourRange('restrictions.disabledHours'),\n    enabledHours: validHourRange('restrictions.enabledHours'),\n    disabledDates: validDateArray('restrictions.disabledDates'),\n    enabledDates: validDateArray('restrictions.enabledDates'),\n    daysOfWeekDisabled: numbersInRange('restrictions.daysOfWeekDisabled', 0, 6),\n    disabledTimeIntervals: ({ key, value, providedType, localization }) => {\n      if (value === undefined) {\n        return [];\n      }\n      if (!Array.isArray(value)) {\n        Namespace.errorMessages.typeMismatch(\n          key,\n          providedType,\n          'array of { from: DateTime|Date, to: DateTime|Date }'\n        );\n      }\n      const valueObject = value as { from: any; to: any }[]; //eslint-disable-line @typescript-eslint/no-explicit-any\n      for (let i = 0; i < valueObject.length; i++) {\n        Object.keys(valueObject[i]).forEach((vk) => {\n          const subOptionName = `${key}[${i}].${vk}`;\n          const d = valueObject[i][vk];\n          const dateTime = convertToDateTime(d, subOptionName, localization);\n          dateTime.setLocalization(localization);\n          valueObject[i][vk] = dateTime;\n        });\n      }\n      return valueObject;\n    },\n    toolbarPlacement: validKeyOption(['top', 'bottom', 'default']),\n    type: validKeyOption(['icons', 'sprites']),\n    viewMode: validKeyOption([\n      'clock',\n      'calendar',\n      'months',\n      'years',\n      'decades',\n    ]),\n    theme: validKeyOption(['light', 'dark', 'auto']),\n    placement: validKeyOption(['top', 'bottom']),\n    meta: ({ value }) => value,\n    dayViewHeaderFormat: ({ value }) => value,\n    container: ({ value, path }) => {\n      if (\n        value &&\n        !(\n          value instanceof HTMLElement ||\n          value instanceof Element ||\n          value?.appendChild\n        )\n      ) {\n        Namespace.errorMessages.typeMismatch(\n          path.substring(1),\n          typeof value,\n          'HTMLElement'\n        );\n      }\n      return value;\n    },\n    useTwentyfourHour: ({ value, path, providedType, defaultType }) => {\n      Namespace.errorMessages.deprecatedWarning(\n        'useTwentyfourHour',\n        'Please use \"options.localization.hourCycle\" instead'\n      );\n      if (value === undefined || providedType === 'boolean') return value;\n      Namespace.errorMessages.typeMismatch(path, providedType, defaultType);\n    },\n    hourCycle: validKeyOption(['h11', 'h12', 'h23', 'h24']),\n  });\n\nconst defaultProcessor: OptionProcessorFunction = ({\n  value,\n  defaultType,\n  providedType,\n  path,\n}) => {\n  switch (defaultType) {\n    case 'boolean':\n      return value === 'true' || value === true;\n    case 'number':\n      return +value;\n    case 'string':\n      return value.toString();\n    case 'object':\n      return {};\n    case 'function':\n      return value;\n    default:\n      Namespace.errorMessages.typeMismatch(path, providedType, defaultType);\n  }\n};\n\nexport function processKey(this: void, args: OptionProcessorFunctionArguments) {\n  return (optionProcessors[args.key] || defaultProcessor)(args);\n}\n", "import Namespace from './namespace';\nimport { DateTime } from '../datetime';\nimport DefaultOptions from './default-options';\nimport Options, { FormatLocalization } from './options';\nimport { processKey } from './optionProcessor';\nimport {\n  convertToDateTime,\n  tryConvertToDateTime,\n  typeCheckDateArray,\n  typeCheckNumberArray,\n} from './typeChecker';\n\nexport class OptionConverter {\n  private static ignoreProperties = [\n    'meta',\n    'dayViewHeaderFormat',\n    'container',\n    'dateForms',\n    'ordinal',\n  ];\n\n  static deepCopy(input): Options {\n    const o = {};\n\n    Object.keys(input).forEach((key) => {\n      const inputElement = input[key];\n\n      if (inputElement instanceof DateTime) {\n        o[key] = inputElement.clone;\n        return;\n      } else if (inputElement instanceof Date) {\n        o[key] = new Date(inputElement.valueOf());\n        return;\n      }\n\n      o[key] = inputElement;\n      if (\n        typeof inputElement !== 'object' ||\n        inputElement instanceof HTMLElement ||\n        inputElement instanceof Element\n      )\n        return;\n      if (!Array.isArray(inputElement)) {\n        o[key] = OptionConverter.deepCopy(inputElement);\n      }\n    });\n\n    return o;\n  }\n\n  private static isValue = (a) => a != null; // everything except undefined + null\n\n  /**\n   * Finds value out of an object based on a string, period delimited, path\n   * @param paths\n   * @param obj\n   */\n  static objectPath(paths: string, obj) {\n    if (paths.charAt(0) === '.') paths = paths.slice(1);\n    if (!paths) return obj;\n    return paths\n      .split('.')\n      .reduce(\n        (value, key) =>\n          OptionConverter.isValue(value) || OptionConverter.isValue(value[key])\n            ? value[key]\n            : undefined,\n        obj\n      );\n  }\n\n  /**\n   * The spread operator caused sub keys to be missing after merging.\n   * This is to fix that issue by using spread on the child objects first.\n   * Also handles complex options like disabledDates\n   * @param provided An option from new providedOptions\n   * @param copyTo Destination object. This was added to prevent reference copies\n   * @param localization\n   * @param path\n   */\n  static spread(provided, copyTo, localization: FormatLocalization, path = '') {\n    const defaultOptions = OptionConverter.objectPath(path, DefaultOptions);\n\n    const unsupportedOptions = Object.keys(provided).filter(\n      (x) => !Object.keys(defaultOptions).includes(x)\n    );\n\n    if (unsupportedOptions.length > 0) {\n      const flattenedOptions = OptionConverter.getFlattenDefaultOptions();\n\n      const errors = unsupportedOptions.map((x) => {\n        const d = path ? '.' : '';\n        let error = `\"${path}${d}${x}\" is not a known option.`;\n        const didYouMean = flattenedOptions.find((y) => y.includes(x));\n        if (didYouMean) error += ` Did you mean \"${didYouMean}\"?`;\n        return error;\n      });\n      Namespace.errorMessages.unexpectedOptions(errors);\n    }\n\n    Object.keys(provided)\n      .filter((key) => key !== '__proto__' && key !== 'constructor')\n      .forEach((key) => {\n        path += `.${key}`;\n        if (path.charAt(0) === '.') path = path.slice(1);\n\n        const defaultOptionValue = defaultOptions[key];\n        const providedType = typeof provided[key];\n        const defaultType = typeof defaultOptionValue;\n        const value = provided[key];\n\n        if (value === undefined || value === null) {\n          copyTo[key] = value;\n          path = path.substring(0, path.lastIndexOf(`.${key}`));\n          return;\n        }\n\n        if (\n          typeof defaultOptionValue === 'object' &&\n          !Array.isArray(provided[key]) &&\n          !(\n            defaultOptionValue instanceof Date ||\n            OptionConverter.ignoreProperties.includes(key)\n          )\n        ) {\n          OptionConverter.spread(\n            provided[key],\n            copyTo[key],\n            localization,\n            path\n          );\n        } else {\n          copyTo[key] = OptionConverter.processKey(\n            key,\n            value,\n            providedType,\n            defaultType,\n            path,\n            localization\n          );\n        }\n\n        path = path.substring(0, path.lastIndexOf(`.${key}`));\n      });\n  }\n\n  static processKey(\n    key: string,\n    value: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n    providedType: string,\n    defaultType: string,\n    path: string,\n    localization: FormatLocalization\n  ) {\n    return processKey({\n      key,\n      value,\n      providedType,\n      defaultType,\n      path,\n      localization,\n    });\n  }\n\n  static _mergeOptions(providedOptions: Options, mergeTo: Options): Options {\n    const newConfig = OptionConverter.deepCopy(mergeTo);\n    //see if the options specify a locale\n    const localization =\n      mergeTo.localization?.locale !== 'default'\n        ? mergeTo.localization\n        : providedOptions?.localization || DefaultOptions.localization;\n\n    OptionConverter.spread(providedOptions, newConfig, localization, '');\n\n    return newConfig;\n  }\n\n  static _dataToOptions(element, options: Options): Options {\n    const eData = JSON.parse(JSON.stringify(element.dataset));\n\n    if (eData?.tdTargetInput) delete eData.tdTargetInput;\n    if (eData?.tdTargetToggle) delete eData.tdTargetToggle;\n\n    if (!eData || Object.keys(eData).length === 0) return options;\n    const dataOptions = {} as Options;\n\n    // because dataset returns camelCase including the 'td' key the option\n    // key won't align\n    const objectToNormalized = (object) => {\n      const lowered = {};\n      Object.keys(object).forEach((x) => {\n        lowered[x.toLowerCase()] = x;\n      });\n\n      return lowered;\n    };\n\n    const normalizeObject = this.normalizeObject(objectToNormalized);\n    const optionsLower = objectToNormalized(options);\n\n    Object.keys(eData)\n      .filter((x) => x.startsWith(Namespace.dataKey))\n      .map((x) => x.substring(2))\n      .forEach((key) => {\n        let keyOption = optionsLower[key.toLowerCase()];\n\n        // dataset merges dashes to camelCase... yay\n        // i.e. key = display_components_seconds\n        if (key.includes('_')) {\n          // [display, components, seconds]\n          const split = key.split('_');\n          // display\n          keyOption = optionsLower[split[0].toLowerCase()];\n          if (\n            keyOption !== undefined &&\n            options[keyOption].constructor === Object\n          ) {\n            dataOptions[keyOption] = normalizeObject(\n              split,\n              1,\n              options[keyOption],\n              eData[`td${key}`]\n            );\n          }\n        }\n        // or key = multipleDate\n        else if (keyOption !== undefined) {\n          dataOptions[keyOption] = eData[`td${key}`];\n        }\n      });\n\n    return this._mergeOptions(dataOptions, options);\n  }\n\n  //todo clean this up\n  private static normalizeObject(objectToNormalized: (object) => object) {\n    const normalizeObject = (\n      split: string[],\n      index: number,\n      optionSubgroup: unknown,\n      value: unknown\n    ) => {\n      // first round = display { ... }\n      const normalizedOptions = objectToNormalized(optionSubgroup);\n\n      const keyOption = normalizedOptions[split[index].toLowerCase()];\n      const internalObject = {};\n\n      if (keyOption === undefined) return internalObject;\n\n      // if this is another object, continue down the rabbit hole\n      if (optionSubgroup[keyOption]?.constructor === Object) {\n        index++;\n        internalObject[keyOption] = normalizeObject(\n          split,\n          index,\n          optionSubgroup[keyOption],\n          value\n        );\n      } else {\n        internalObject[keyOption] = value;\n      }\n      return internalObject;\n    };\n    return normalizeObject;\n  }\n\n  /**\n   * Attempts to prove `d` is a DateTime or Date or can be converted into one.\n   * @param d If a string will attempt creating a date from it.\n   * @param localization object containing locale and format settings. Only used with the custom formats\n   * @private\n   */\n  static _dateTypeCheck(\n    d: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n    localization: FormatLocalization\n  ): DateTime | null {\n    return tryConvertToDateTime(d, localization);\n  }\n\n  /**\n   * Type checks that `value` is an array of Date or DateTime\n   * @param optionName Provides text to error messages e.g. disabledDates\n   * @param value Option value\n   * @param providedType Used to provide text to error messages\n   * @param localization\n   */\n  static _typeCheckDateArray(\n    optionName: string,\n    value,\n    providedType: string,\n    localization: FormatLocalization\n  ) {\n    return typeCheckDateArray(optionName, value, providedType, localization);\n  }\n\n  /**\n   * Type checks that `value` is an array of numbers\n   * @param optionName Provides text to error messages e.g. disabledDates\n   * @param value Option value\n   * @param providedType Used to provide text to error messages\n   */\n  static _typeCheckNumberArray(\n    optionName: string,\n    value,\n    providedType: string\n  ) {\n    return typeCheckNumberArray(optionName, value, providedType);\n  }\n\n  /**\n   * Attempts to convert `d` to a DateTime object\n   * @param d value to convert\n   * @param optionName Provides text to error messages e.g. disabledDates\n   * @param localization object containing locale and format settings. Only used with the custom formats\n   */\n  static dateConversion(\n    d: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n    optionName: string,\n    localization: FormatLocalization\n  ): DateTime {\n    return convertToDateTime(d, optionName, localization);\n  }\n\n  private static _flattenDefaults: string[];\n\n  private static getFlattenDefaultOptions(): string[] {\n    if (this._flattenDefaults) return this._flattenDefaults;\n    const deepKeys = (t, pre = []) => {\n      if (Array.isArray(t)) return [];\n      if (Object(t) === t) {\n        return Object.entries(t).flatMap(([k, v]) => deepKeys(v, [...pre, k]));\n      } else {\n        return pre.join('.');\n      }\n    };\n\n    this._flattenDefaults = deepKeys(DefaultOptions);\n\n    return this._flattenDefaults;\n  }\n\n  /**\n   * Some options conflict like min/max date. Verify that these kinds of options\n   * are set correctly.\n   * @param config\n   */\n  static _validateConflicts(config: Options) {\n    if (\n      config.display.sideBySide &&\n      (!config.display.components.clock ||\n        !(\n          config.display.components.hours ||\n          config.display.components.minutes ||\n          config.display.components.seconds\n        ))\n    ) {\n      Namespace.errorMessages.conflictingConfiguration(\n        'Cannot use side by side mode without the clock components'\n      );\n    }\n\n    if (config.restrictions.minDate && config.restrictions.maxDate) {\n      if (config.restrictions.minDate.isAfter(config.restrictions.maxDate)) {\n        Namespace.errorMessages.conflictingConfiguration(\n          'minDate is after maxDate'\n        );\n      }\n\n      if (config.restrictions.maxDate.isBefore(config.restrictions.minDate)) {\n        Namespace.errorMessages.conflictingConfiguration(\n          'maxDate is before minDate'\n        );\n      }\n    }\n\n    if (config.multipleDates && config.dateRange) {\n      Namespace.errorMessages.conflictingConfiguration(\n        'Cannot uss option \"multipleDates\" with \"dateRange\"'\n      );\n    }\n  }\n}\n", "import { DateTime, getFormatByUnit, Unit } from './datetime';\nimport Namespace from './utilities/namespace';\nimport {\n  ChangeEvent,\n  FailEvent,\n  ParseErrorEvent,\n} from './utilities/event-types';\nimport Validation from './validation';\nimport { serviceLocator } from './utilities/service-locator';\nimport { EventEmitters } from './utilities/event-emitter';\nimport { OptionsStore } from './utilities/optionsStore';\nimport { OptionConverter } from './utilities/optionConverter';\n\nexport default class Dates {\n  private _dates: DateTime[] = [];\n  private optionsStore: OptionsStore;\n  private validation: Validation;\n  private _eventEmitters: EventEmitters;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.validation = serviceLocator.locate(Validation);\n    this._eventEmitters = serviceLocator.locate(EventEmitters);\n  }\n\n  /**\n   * Returns the array of selected dates\n   */\n  get picked(): DateTime[] {\n    return [...this._dates];\n  }\n\n  /**\n   * Returns the last picked value.\n   */\n  get lastPicked(): DateTime {\n    return this._dates[this.lastPickedIndex]?.clone;\n  }\n\n  /**\n   * Returns the length of picked dates -1 or 0 if none are selected.\n   */\n  get lastPickedIndex(): number {\n    if (this._dates.length === 0) return 0;\n    return this._dates.length - 1;\n  }\n\n  /**\n   * Formats a DateTime object to a string. Used when setting the input value.\n   * @param date\n   */\n  formatInput(date: DateTime): string {\n    if (!date) return '';\n    date.localization = this.optionsStore.options.localization;\n    return date.format();\n  }\n\n  /**\n   * parse the value into a DateTime object.\n   * this can be overwritten to supply your own parsing.\n   */\n  //eslint-disable-next-line @typescript-eslint/no-explicit-any\n  parseInput(value: any): DateTime {\n    try {\n      return OptionConverter.dateConversion(\n        value,\n        'input',\n        this.optionsStore.options.localization\n      );\n    } catch (e) {\n      this._eventEmitters.triggerEvent.emit({\n        type: Namespace.events.error,\n        reason: Namespace.errorMessages.failedToParseInput,\n        format: this.optionsStore.options.localization.format,\n        value: value,\n      } as ParseErrorEvent);\n      return undefined;\n    }\n  }\n\n  /**\n   * Tries to convert the provided value to a DateTime object.\n   * If value is null|undefined then clear the value of the provided index (or 0).\n   * @param value Value to convert or null|undefined\n   * @param index When using multidates this is the index in the array\n   */\n  //eslint-disable-next-line @typescript-eslint/no-explicit-any\n  setFromInput(value: any, index?: number) {\n    if (!value) {\n      this.setValue(undefined, index);\n      return;\n    }\n    const converted = this.parseInput(value);\n    if (converted) {\n      converted.setLocalization(this.optionsStore.options.localization);\n      this.setValue(converted, index);\n    }\n  }\n\n  /**\n   * Adds a new DateTime to selected dates array\n   * @param date\n   */\n  add(date: DateTime): void {\n    this._dates.push(date);\n  }\n\n  /**\n   * Returns true if the `targetDate` is part of the selected dates array.\n   * If `unit` is provided then a granularity to that unit will be used.\n   * @param targetDate\n   * @param unit\n   */\n  isPicked(targetDate: DateTime, unit?: Unit): boolean {\n    if (!DateTime.isValid(targetDate)) return false;\n    if (!unit)\n      return this._dates.find((x) => x.isSame(targetDate)) !== undefined;\n\n    const format = getFormatByUnit(unit);\n\n    const innerDateFormatted = targetDate.format(format);\n\n    return (\n      this._dates\n        .map((x) => x.format(format))\n        .find((x) => x === innerDateFormatted) !== undefined\n    );\n  }\n\n  /**\n   * Returns the index at which `targetDate` is in the array.\n   * This is used for updating or removing a date when multi-date is used\n   * If `unit` is provided then a granularity to that unit will be used.\n   * @param targetDate\n   * @param unit\n   */\n  pickedIndex(targetDate: DateTime, unit?: Unit): number {\n    if (!DateTime.isValid(targetDate)) return -1;\n    if (!unit)\n      return this._dates.map((x) => x.valueOf()).indexOf(targetDate.valueOf());\n\n    const format = getFormatByUnit(unit);\n\n    const innerDateFormatted = targetDate.format(format);\n\n    return this._dates.map((x) => x.format(format)).indexOf(innerDateFormatted);\n  }\n\n  /**\n   * Clears all selected dates.\n   */\n  clear() {\n    this.optionsStore.unset = true;\n    this._eventEmitters.triggerEvent.emit({\n      type: Namespace.events.change,\n      date: undefined,\n      oldDate: this.lastPicked,\n      isClear: true,\n      isValid: true,\n    } as ChangeEvent);\n    this._dates = [];\n    if (this.optionsStore.input) this.optionsStore.input.value = '';\n    this._eventEmitters.updateDisplay.emit('all');\n  }\n\n  /**\n   * Find the \"book end\" years given a `year` and a `factor`\n   * @param factor e.g. 100 for decades\n   * @param year e.g. 2021\n   */\n  static getStartEndYear(\n    factor: number,\n    year: number\n  ): [number, number, number] {\n    const step = factor / 10,\n      startYear = Math.floor(year / factor) * factor,\n      endYear = startYear + step * 9,\n      focusValue = Math.floor(year / step) * step;\n    return [startYear, endYear, focusValue];\n  }\n\n  updateInput(target?: DateTime) {\n    if (!this.optionsStore.input) return;\n\n    let newValue = this.formatInput(target);\n    if (\n      this.optionsStore.options.multipleDates ||\n      this.optionsStore.options.dateRange\n    ) {\n      newValue = this._dates\n        .map((d) => this.formatInput(d))\n        .join(this.optionsStore.options.multipleDatesSeparator);\n    }\n    if (this.optionsStore.input.value != newValue)\n      this.optionsStore.input.value = newValue;\n  }\n\n  /**\n   * Attempts to either clear or set the `target` date at `index`.\n   * If the `target` is null then the date will be cleared.\n   * If multi-date is being used then it will be removed from the array.\n   * If `target` is valid and multi-date is used then if `index` is\n   * provided the date at that index will be replaced, otherwise it is appended.\n   * @param target\n   * @param index\n   */\n  setValue(target?: DateTime, index?: number): void {\n    const noIndex = typeof index === 'undefined',\n      isClear = !target && noIndex;\n    let oldDate = this.optionsStore.unset ? null : this._dates[index]?.clone;\n    if (!oldDate && !this.optionsStore.unset && noIndex && isClear) {\n      oldDate = this.lastPicked;\n    }\n\n    if (target && oldDate?.isSame(target)) {\n      this.updateInput(target);\n      return;\n    }\n\n    // case of calling setValue(null)\n    if (!target) {\n      this._setValueNull(isClear, index, oldDate);\n      return;\n    }\n\n    index = index || 0;\n    target = target.clone;\n\n    // minute stepping is being used, force the minute to the closest value\n    if (this.optionsStore.options.stepping !== 1) {\n      target.minutes =\n        Math.round(target.minutes / this.optionsStore.options.stepping) *\n        this.optionsStore.options.stepping;\n      target.startOf(Unit.minutes);\n    }\n\n    const onUpdate = (isValid: boolean) => {\n      this._dates[index] = target;\n      this._eventEmitters.updateViewDate.emit(target.clone);\n\n      this.updateInput(target);\n\n      this.optionsStore.unset = false;\n      this._eventEmitters.updateDisplay.emit('all');\n      this._eventEmitters.triggerEvent.emit({\n        type: Namespace.events.change,\n        date: target,\n        oldDate,\n        isClear,\n        isValid: isValid,\n      } as ChangeEvent);\n    };\n\n    if (\n      this.validation.isValid(target) &&\n      this.validation.dateRangeIsValid(this.picked, index, target)\n    ) {\n      onUpdate(true);\n      return;\n    }\n\n    if (this.optionsStore.options.keepInvalid) {\n      onUpdate(false);\n    }\n\n    this._eventEmitters.triggerEvent.emit({\n      type: Namespace.events.error,\n      reason: Namespace.errorMessages.failedToSetInvalidDate,\n      date: target,\n      oldDate,\n    } as FailEvent);\n  }\n\n  private _setValueNull(isClear: boolean, index: number, oldDate: DateTime) {\n    if (\n      !this.optionsStore.options.multipleDates ||\n      this._dates.length === 1 ||\n      isClear\n    ) {\n      this.optionsStore.unset = true;\n      this._dates = [];\n    } else {\n      this._dates.splice(index, 1);\n    }\n\n    this.updateInput();\n\n    this._eventEmitters.triggerEvent.emit({\n      type: Namespace.events.change,\n      date: undefined,\n      oldDate,\n      isClear,\n      isValid: true,\n    } as ChangeEvent);\n\n    this._eventEmitters.updateDisplay.emit('all');\n  }\n}\n", "enum ActionTypes {\n  next = 'next',\n  previous = 'previous',\n  changeCalendarView = 'changeCalendarView',\n  selectMonth = 'selectMonth',\n  selectYear = 'selectYear',\n  selectDecade = 'selectDecade',\n  selectDay = 'selectDay',\n  selectHour = 'selectHour',\n  selectMinute = 'selectMinute',\n  selectSecond = 'selectSecond',\n  incrementHours = 'incrementHours',\n  incrementMinutes = 'incrementMinutes',\n  incrementSeconds = 'incrementSeconds',\n  decrementHours = 'decrementHours',\n  decrementMinutes = 'decrementMinutes',\n  decrementSeconds = 'decrementSeconds',\n  toggleMeridiem = 'toggleMeridiem',\n  togglePicker = 'togglePicker',\n  showClock = 'showClock',\n  showHours = 'showHours',\n  showMinutes = 'showMinutes',\n  showSeconds = 'showSeconds',\n  clear = 'clear',\n  close = 'close',\n  today = 'today',\n}\n\nexport default ActionTypes;\n", "import { DateTime, Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport Dates from '../../dates';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `date`\n */\nexport default class DateDisplay {\n  private optionsStore: OptionsStore;\n  private dates: Dates;\n  private validation: Validation;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.dates = serviceLocator.locate(Dates);\n    this.validation = serviceLocator.locate(Validation);\n  }\n\n  /**\n   * Build the container html for the display\n   * @private\n   */\n  getPicker(): HTMLElement {\n    const container = document.createElement('div');\n    container.classList.add(Namespace.css.daysContainer);\n    container.role = 'grid';\n\n    container.append(...this._daysOfTheWeek());\n\n    if (this.optionsStore.options.display.calendarWeeks) {\n      const div = document.createElement('div');\n      div.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight);\n      container.appendChild(div);\n    }\n\n    const { rangeHoverEvent, rangeHoverOutEvent } =\n      this.handleMouseEvents(container);\n\n    for (let i = 0; i < 42; i++) {\n      if (i !== 0 && i % 7 === 0) {\n        if (this.optionsStore.options.display.calendarWeeks) {\n          const div = document.createElement('div');\n          div.classList.add(\n            Namespace.css.calendarWeeks,\n            Namespace.css.noHighlight\n          );\n          div.tabIndex = -1;\n          container.appendChild(div);\n        }\n      }\n\n      const div = document.createElement('div');\n      div.setAttribute('data-action', ActionTypes.selectDay);\n      div.role = 'gridcell';\n      div.tabIndex = -1;\n      container.appendChild(div);\n\n      // if hover is supported then add the events\n      if (\n        matchMedia('(hover: hover)').matches &&\n        this.optionsStore.options.dateRange\n      ) {\n        div.addEventListener('mouseover', rangeHoverEvent);\n        div.addEventListener('mouseout', rangeHoverOutEvent);\n      }\n    }\n\n    return container;\n  }\n\n  /**\n   * Populates the grid and updates enabled states\n   * @private\n   */\n  _update(widget: HTMLElement, paint: Paint): void {\n    const container = widget.getElementsByClassName(\n      Namespace.css.daysContainer\n    )[0] as HTMLElement;\n\n    this._updateCalendarView(container);\n\n    const innerDate = this.optionsStore.viewDate.clone\n      .startOf(Unit.month)\n      .startOf('weekDay', this.optionsStore.options.localization.startOfTheWeek)\n      .manipulate(12, Unit.hours);\n\n    this._handleCalendarWeeks(container, innerDate.clone);\n\n    container\n      .querySelectorAll(`[data-action=\"${ActionTypes.selectDay}\"]`)\n      .forEach((element: HTMLElement) => {\n        const classes: string[] = [];\n        classes.push(Namespace.css.day);\n\n        if (innerDate.isBefore(this.optionsStore.viewDate, Unit.month)) {\n          classes.push(Namespace.css.old);\n        }\n        if (innerDate.isAfter(this.optionsStore.viewDate, Unit.month)) {\n          classes.push(Namespace.css.new);\n        }\n\n        if (\n          !this.optionsStore.unset &&\n          !this.optionsStore.options.dateRange &&\n          this.dates.isPicked(innerDate, Unit.date)\n        ) {\n          classes.push(Namespace.css.active);\n        }\n        if (!this.validation.isValid(innerDate, Unit.date)) {\n          classes.push(Namespace.css.disabled);\n        }\n        if (innerDate.isSame(new DateTime(), Unit.date)) {\n          classes.push(Namespace.css.today);\n        }\n        if (innerDate.weekDay === 0 || innerDate.weekDay === 6) {\n          classes.push(Namespace.css.weekend);\n        }\n\n        this._handleDateRange(innerDate, classes);\n\n        paint(Unit.date, innerDate, classes, element);\n\n        element.classList.remove(...element.classList);\n        element.classList.add(...classes);\n        element.setAttribute('data-value', innerDate.dateToDataValue());\n        element.setAttribute('data-day', `${innerDate.date}`);\n        element.innerText = innerDate.parts(undefined, {\n          day: 'numeric',\n        }).day;\n        element.ariaLabel = innerDate.format('MMMM dd, yyyy');\n\n        innerDate.manipulate(1, Unit.date);\n      });\n  }\n\n  private _handleDateRange(innerDate: DateTime, classes: string[]) {\n    const rangeStart = this.dates.picked[0];\n    const rangeEnd = this.dates.picked[1];\n\n    if (this.optionsStore.options.dateRange) {\n      if (innerDate.isBetween(rangeStart, rangeEnd, Unit.date)) {\n        classes.push(Namespace.css.rangeIn);\n      }\n\n      if (innerDate.isSame(rangeStart, Unit.date)) {\n        classes.push(Namespace.css.rangeStart);\n      }\n\n      if (innerDate.isSame(rangeEnd, Unit.date)) {\n        classes.push(Namespace.css.rangeEnd);\n      }\n    }\n  }\n\n  private handleMouseEvents(container: HTMLElement) {\n    const rangeHoverEvent = (e: MouseEvent) => {\n      const currentTarget = e?.currentTarget as HTMLElement;\n\n      // if we have 0 or 2 selected or if the target is disabled then ignore\n      if (\n        this.dates.picked.length !== 1 ||\n        currentTarget.classList.contains(Namespace.css.disabled)\n      )\n        return;\n\n      // select all the date divs\n      const allDays = [...container.querySelectorAll('.day')] as HTMLElement[];\n\n      // get the date value from the element being hovered over\n      const attributeValue = currentTarget.getAttribute('data-value');\n\n      // format the string to a date\n      const innerDate = DateTime.fromString(attributeValue, {\n        format: 'yyyy-MM-dd',\n      });\n\n      // find the position of the target in the date container\n      const dayIndex = allDays.findIndex(\n        (e) => e.getAttribute('data-value') === attributeValue\n      );\n\n      // find the first and second selected dates\n      const rangeStart = this.dates.picked[0];\n      const rangeEnd = this.dates.picked[1];\n\n      //format the start date so that it can be found by the attribute\n      const rangeStartFormatted = rangeStart.dateToDataValue();\n      const rangeStartIndex = allDays.findIndex(\n        (e) => e.getAttribute('data-value') === rangeStartFormatted\n      );\n      const rangeStartElement = allDays[rangeStartIndex];\n\n      //make sure we don't leave start/end classes if we don't need them\n      if (!innerDate.isSame(rangeStart, Unit.date)) {\n        currentTarget.classList.remove(Namespace.css.rangeStart);\n      }\n\n      if (!innerDate.isSame(rangeEnd, Unit.date)) {\n        currentTarget.classList.remove(Namespace.css.rangeEnd);\n      }\n\n      // the following figures out which direct from start date is selected\n      // the selection \"cap\" classes are applied if needed\n      // otherwise all the dates between will get the `rangeIn` class.\n      // We make this selection based on the element's index and the rangeStart index\n\n      let lambda: (_, index: number) => boolean;\n\n      if (innerDate.isBefore(rangeStart)) {\n        currentTarget.classList.add(Namespace.css.rangeStart);\n        rangeStartElement?.classList.remove(Namespace.css.rangeStart);\n        rangeStartElement?.classList.add(Namespace.css.rangeEnd);\n        lambda = (_, index) => index > dayIndex && index < rangeStartIndex;\n      } else {\n        currentTarget.classList.add(Namespace.css.rangeEnd);\n        rangeStartElement?.classList.remove(Namespace.css.rangeEnd);\n        rangeStartElement?.classList.add(Namespace.css.rangeStart);\n        lambda = (_, index) => index < dayIndex && index > rangeStartIndex;\n      }\n\n      allDays.filter(lambda).forEach((e) => {\n        e.classList.add(Namespace.css.rangeIn);\n      });\n    };\n\n    const rangeHoverOutEvent = (e: MouseEvent) => {\n      // find all the dates in the container\n      const allDays = [...container.querySelectorAll('.day')] as HTMLElement[];\n\n      // if only the start is selected, remove all the rangeIn classes\n      // we do this because once the user hovers over a new date the range will be recalculated.\n      if (this.dates.picked.length === 1)\n        allDays.forEach((e) => e.classList.remove(Namespace.css.rangeIn));\n\n      // if we have 0 or 2 dates selected then ignore\n      if (this.dates.picked.length !== 1) return;\n\n      const currentTarget = e?.currentTarget as HTMLElement;\n\n      // get the elements date from the attribute value\n      const innerDate = new DateTime(currentTarget.getAttribute('data-value'));\n\n      // verify selections and remove invalid classes\n      if (!innerDate.isSame(this.dates.picked[0], Unit.date)) {\n        currentTarget.classList.remove(Namespace.css.rangeStart);\n      }\n\n      if (!innerDate.isSame(this.dates.picked[1], Unit.date)) {\n        currentTarget.classList.remove(Namespace.css.rangeEnd);\n      }\n    };\n\n    return { rangeHoverEvent, rangeHoverOutEvent };\n  }\n\n  private _updateCalendarView(container: Element) {\n    if (this.optionsStore.currentView !== 'calendar') return;\n    const [previous, switcher, next] = container.parentElement\n      .getElementsByClassName(Namespace.css.calendarHeader)[0]\n      .getElementsByTagName('div');\n    switcher.setAttribute(\n      Namespace.css.daysContainer,\n      this.optionsStore.viewDate.format(\n        this.optionsStore.options.localization.dayViewHeaderFormat\n      )\n    );\n    this.optionsStore.options.display.components.month\n      ? switcher.classList.remove(Namespace.css.disabled)\n      : switcher.classList.add(Namespace.css.disabled);\n\n    this.validation.isValid(\n      this.optionsStore.viewDate.clone.manipulate(-1, Unit.month),\n      Unit.month\n    )\n      ? previous.classList.remove(Namespace.css.disabled)\n      : previous.classList.add(Namespace.css.disabled);\n    this.validation.isValid(\n      this.optionsStore.viewDate.clone.manipulate(1, Unit.month),\n      Unit.month\n    )\n      ? next.classList.remove(Namespace.css.disabled)\n      : next.classList.add(Namespace.css.disabled);\n  }\n\n  /***\n   * Generates a html row that contains the days of the week.\n   * @private\n   */\n  private _daysOfTheWeek(): HTMLElement[] {\n    const innerDate = this.optionsStore.viewDate.clone\n      .startOf('weekDay', this.optionsStore.options.localization.startOfTheWeek)\n      .startOf(Unit.date);\n    const row = [];\n    document.createElement('div');\n\n    if (this.optionsStore.options.display.calendarWeeks) {\n      const htmlDivElement = document.createElement('div');\n      htmlDivElement.classList.add(\n        Namespace.css.calendarWeeks,\n        Namespace.css.noHighlight\n      );\n      htmlDivElement.innerText = '#';\n      row.push(htmlDivElement);\n    }\n\n    for (let i = 0; i < 7; i++) {\n      const htmlDivElement = document.createElement('div');\n      htmlDivElement.classList.add(\n        Namespace.css.dayOfTheWeek,\n        Namespace.css.noHighlight\n      );\n      let weekDay = innerDate.format({ weekday: 'short' });\n      if (this.optionsStore.options.localization.maxWeekdayLength > 0)\n        weekDay = weekDay.substring(\n          0,\n          this.optionsStore.options.localization.maxWeekdayLength\n        );\n      htmlDivElement.innerText = weekDay;\n      htmlDivElement.ariaLabel = innerDate.format({ weekday: 'long' });\n      innerDate.manipulate(1, Unit.date);\n      row.push(htmlDivElement);\n    }\n\n    return row;\n  }\n\n  private _handleCalendarWeeks(container: HTMLElement, innerDate: DateTime) {\n    [...container.querySelectorAll(`.${Namespace.css.calendarWeeks}`)]\n      .filter((e: HTMLElement) => e.innerText !== '#')\n      .forEach((element: HTMLElement) => {\n        element.innerText = `${innerDate.week}`;\n        innerDate.manipulate(7, Unit.date);\n      });\n  }\n}\n", "import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport Dates from '../../dates';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `month`\n */\nexport default class MonthDisplay {\n  private optionsStore: OptionsStore;\n  private dates: Dates;\n  private validation: Validation;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.dates = serviceLocator.locate(Dates);\n    this.validation = serviceLocator.locate(Validation);\n  }\n  /**\n   * Build the container html for the display\n   * @private\n   */\n  getPicker(): HTMLElement {\n    const container = document.createElement('div');\n    container.classList.add(Namespace.css.monthsContainer);\n\n    for (let i = 0; i < 12; i++) {\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.selectMonth);\n      container.appendChild(div);\n    }\n\n    return container;\n  }\n\n  /**\n   * Populates the grid and updates enabled states\n   * @private\n   */\n  _update(widget: HTMLElement, paint: Paint): void {\n    const container = widget.getElementsByClassName(\n      Namespace.css.monthsContainer\n    )[0] as HTMLElement;\n\n    if (this.optionsStore.currentView === 'months') {\n      const [previous, switcher, next] = container.parentElement\n        .getElementsByClassName(Namespace.css.calendarHeader)[0]\n        .getElementsByTagName('div');\n\n      switcher.setAttribute(\n        Namespace.css.monthsContainer,\n        this.optionsStore.viewDate.format({ year: 'numeric' })\n      );\n\n      this.optionsStore.options.display.components.year\n        ? switcher.classList.remove(Namespace.css.disabled)\n        : switcher.classList.add(Namespace.css.disabled);\n\n      this.validation.isValid(\n        this.optionsStore.viewDate.clone.manipulate(-1, Unit.year),\n        Unit.year\n      )\n        ? previous.classList.remove(Namespace.css.disabled)\n        : previous.classList.add(Namespace.css.disabled);\n\n      this.validation.isValid(\n        this.optionsStore.viewDate.clone.manipulate(1, Unit.year),\n        Unit.year\n      )\n        ? next.classList.remove(Namespace.css.disabled)\n        : next.classList.add(Namespace.css.disabled);\n    }\n\n    const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.year);\n\n    container\n      .querySelectorAll(`[data-action=\"${ActionTypes.selectMonth}\"]`)\n      .forEach((containerClone: HTMLElement, index) => {\n        const classes = [];\n        classes.push(Namespace.css.month);\n\n        if (\n          !this.optionsStore.unset &&\n          this.dates.isPicked(innerDate, Unit.month)\n        ) {\n          classes.push(Namespace.css.active);\n        }\n        if (!this.validation.isValid(innerDate, Unit.month)) {\n          classes.push(Namespace.css.disabled);\n        }\n\n        paint(Unit.month, innerDate, classes, containerClone);\n\n        containerClone.classList.remove(...containerClone.classList);\n        containerClone.classList.add(...classes);\n        containerClone.setAttribute('data-value', `${index}`);\n        containerClone.innerText = `${innerDate.format({ month: 'short' })}`;\n        innerDate.manipulate(1, Unit.month);\n      });\n  }\n}\n", "import { DateTime, Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Dates from '../../dates';\nimport Validation from '../../validation';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `year`\n */\nexport default class YearDisplay {\n  private _startYear: DateTime;\n  private _endYear: DateTime;\n  private optionsStore: OptionsStore;\n  private dates: Dates;\n  private validation: Validation;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.dates = serviceLocator.locate(Dates);\n    this.validation = serviceLocator.locate(Validation);\n  }\n\n  /**\n   * Build the container html for the display\n   * @private\n   */\n  getPicker(): HTMLElement {\n    const container = document.createElement('div');\n    container.classList.add(Namespace.css.yearsContainer);\n\n    for (let i = 0; i < 12; i++) {\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.selectYear);\n      container.appendChild(div);\n    }\n\n    return container;\n  }\n\n  /**\n   * Populates the grid and updates enabled states\n   * @private\n   */\n  _update(widget: HTMLElement, paint: Paint) {\n    this._startYear = this.optionsStore.viewDate.clone.manipulate(\n      -1,\n      Unit.year\n    );\n    this._endYear = this.optionsStore.viewDate.clone.manipulate(10, Unit.year);\n\n    const container = widget.getElementsByClassName(\n      Namespace.css.yearsContainer\n    )[0] as HTMLElement;\n\n    if (this.optionsStore.currentView === 'years') {\n      const [previous, switcher, next] = container.parentElement\n        .getElementsByClassName(Namespace.css.calendarHeader)[0]\n        .getElementsByTagName('div');\n\n      switcher.setAttribute(\n        Namespace.css.yearsContainer,\n        `${this._startYear.format({ year: 'numeric' })}-${this._endYear.format({\n          year: 'numeric',\n        })}`\n      );\n\n      this.optionsStore.options.display.components.decades\n        ? switcher.classList.remove(Namespace.css.disabled)\n        : switcher.classList.add(Namespace.css.disabled);\n\n      this.validation.isValid(this._startYear, Unit.year)\n        ? previous.classList.remove(Namespace.css.disabled)\n        : previous.classList.add(Namespace.css.disabled);\n      this.validation.isValid(this._endYear, Unit.year)\n        ? next.classList.remove(Namespace.css.disabled)\n        : next.classList.add(Namespace.css.disabled);\n    }\n\n    const innerDate = this.optionsStore.viewDate.clone\n      .startOf(Unit.year)\n      .manipulate(-1, Unit.year);\n\n    container\n      .querySelectorAll(`[data-action=\"${ActionTypes.selectYear}\"]`)\n      .forEach((containerClone: HTMLElement) => {\n        const classes = [];\n        classes.push(Namespace.css.year);\n\n        if (\n          !this.optionsStore.unset &&\n          this.dates.isPicked(innerDate, Unit.year)\n        ) {\n          classes.push(Namespace.css.active);\n        }\n        if (!this.validation.isValid(innerDate, Unit.year)) {\n          classes.push(Namespace.css.disabled);\n        }\n\n        paint(Unit.year, innerDate, classes, containerClone);\n\n        containerClone.classList.remove(...containerClone.classList);\n        containerClone.classList.add(...classes);\n        containerClone.setAttribute('data-value', `${innerDate.year}`);\n        containerClone.innerText = innerDate.format({ year: 'numeric' });\n\n        innerDate.manipulate(1, Unit.year);\n      });\n  }\n}\n", "import Dates from '../../dates';\nimport { DateTime, Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `seconds`\n */\nexport default class DecadeDisplay {\n  private _startDecade: DateTime;\n  private _endDecade: DateTime;\n  private optionsStore: OptionsStore;\n  private dates: Dates;\n  private validation: Validation;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.dates = serviceLocator.locate(Dates);\n    this.validation = serviceLocator.locate(Validation);\n  }\n\n  /**\n   * Build the container html for the display\n   * @private\n   */\n  getPicker() {\n    const container = document.createElement('div');\n    container.classList.add(Namespace.css.decadesContainer);\n\n    for (let i = 0; i < 12; i++) {\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.selectDecade);\n      container.appendChild(div);\n    }\n    return container;\n  }\n\n  /**\n   * Populates the grid and updates enabled states\n   * @private\n   */\n  _update(widget: HTMLElement, paint: Paint) {\n    const [start, end] = Dates.getStartEndYear(\n      100,\n      this.optionsStore.viewDate.year\n    );\n    this._startDecade = this.optionsStore.viewDate.clone.startOf(Unit.year);\n    this._startDecade.year = start;\n    this._endDecade = this.optionsStore.viewDate.clone.startOf(Unit.year);\n    this._endDecade.year = end;\n\n    const container = widget.getElementsByClassName(\n      Namespace.css.decadesContainer\n    )[0] as HTMLElement;\n\n    const [previous, switcher, next] = container.parentElement\n      .getElementsByClassName(Namespace.css.calendarHeader)[0]\n      .getElementsByTagName('div');\n\n    const isPreviousEnabled = this.validation.isValid(\n      this._startDecade,\n      Unit.year\n    );\n    if (this.optionsStore.currentView === 'decades') {\n      switcher.setAttribute(\n        Namespace.css.decadesContainer,\n        `${this._startDecade.format({\n          year: 'numeric',\n        })}-${this._endDecade.format({ year: 'numeric' })}`\n      );\n\n      isPreviousEnabled\n        ? previous.classList.remove(Namespace.css.disabled)\n        : previous.classList.add(Namespace.css.disabled);\n      this.validation.isValid(this._endDecade, Unit.year)\n        ? next.classList.remove(Namespace.css.disabled)\n        : next.classList.add(Namespace.css.disabled);\n    }\n\n    const pickedYears = this.dates.picked.map((x) => x.year);\n\n    container\n      .querySelectorAll(`[data-action=\"${ActionTypes.selectDecade}\"]`)\n      .forEach((containerClone: HTMLElement, index) => {\n        if (index === 0) {\n          containerClone.classList.add(Namespace.css.old);\n          if (this._startDecade.year - 10 < 0) {\n            containerClone.textContent = ' ';\n            previous.classList.add(Namespace.css.disabled);\n            containerClone.classList.add(Namespace.css.disabled);\n            containerClone.setAttribute('data-value', '');\n          }\n          return;\n        }\n\n        const classes = [];\n        classes.push(Namespace.css.decade);\n        const startDecadeYear = this._startDecade.year;\n        const endDecadeYear = this._startDecade.year + 9;\n\n        if (\n          !this.optionsStore.unset &&\n          pickedYears.filter((x) => x >= startDecadeYear && x <= endDecadeYear)\n            .length > 0\n        ) {\n          classes.push(Namespace.css.active);\n        }\n        if (\n          !isPreviousEnabled &&\n          !this.validation.isValid(\n            this._startDecade.clone.manipulate(10, Unit.year),\n            Unit.year\n          )\n        ) {\n          classes.push(Namespace.css.disabled);\n        }\n\n        paint('decade', this._startDecade, classes, containerClone);\n\n        containerClone.classList.remove(...containerClone.classList);\n        containerClone.classList.add(...classes);\n        containerClone.setAttribute('data-value', `${this._startDecade.year}`);\n        containerClone.innerText = `${this._startDecade.format({\n          year: 'numeric',\n        })}`;\n\n        this._startDecade.manipulate(10, Unit.year);\n      });\n  }\n}\n", "import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport Dates from '../../dates';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates the clock display\n */\nexport default class TimeDisplay {\n  private _gridColumns = '';\n  private optionsStore: OptionsStore;\n  private validation: Validation;\n  private dates: Dates;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.dates = serviceLocator.locate(Dates);\n    this.validation = serviceLocator.locate(Validation);\n  }\n\n  /**\n   * Build the container html for the clock display\n   * @private\n   */\n  getPicker(iconTag: (iconClass: string) => HTMLElement): HTMLElement {\n    const container = document.createElement('div');\n    container.classList.add(Namespace.css.clockContainer);\n\n    container.append(...this._grid(iconTag));\n\n    return container;\n  }\n\n  /**\n   * Populates the various elements with in the clock display\n   * like the current hour and if the manipulation icons are enabled.\n   * @private\n   */\n  _update(widget: HTMLElement): void {\n    const timesDiv = <HTMLElement>(\n      widget.getElementsByClassName(Namespace.css.clockContainer)[0]\n    );\n\n    let lastPicked = this.dates.lastPicked?.clone;\n    if (!lastPicked && this.optionsStore.options.useCurrent)\n      lastPicked = this.optionsStore.viewDate.clone;\n\n    timesDiv\n      .querySelectorAll('.disabled')\n      .forEach((element) => element.classList.remove(Namespace.css.disabled));\n\n    if (this.optionsStore.options.display.components.hours) {\n      if (\n        !this.validation.isValid(\n          this.optionsStore.viewDate.clone.manipulate(1, Unit.hours),\n          Unit.hours\n        )\n      ) {\n        timesDiv\n          .querySelector(`[data-action=${ActionTypes.incrementHours}]`)\n          .classList.add(Namespace.css.disabled);\n      }\n\n      if (\n        !this.validation.isValid(\n          this.optionsStore.viewDate.clone.manipulate(-1, Unit.hours),\n          Unit.hours\n        )\n      ) {\n        timesDiv\n          .querySelector(`[data-action=${ActionTypes.decrementHours}]`)\n          .classList.add(Namespace.css.disabled);\n      }\n\n      timesDiv.querySelector<HTMLElement>(\n        `[data-time-component=${Unit.hours}]`\n      ).innerText = lastPicked\n        ? lastPicked.getHoursFormatted(\n            this.optionsStore.options.localization.hourCycle\n          )\n        : '--';\n    }\n\n    if (this.optionsStore.options.display.components.minutes) {\n      if (\n        !this.validation.isValid(\n          this.optionsStore.viewDate.clone.manipulate(1, Unit.minutes),\n          Unit.minutes\n        )\n      ) {\n        timesDiv\n          .querySelector(`[data-action=${ActionTypes.incrementMinutes}]`)\n          .classList.add(Namespace.css.disabled);\n      }\n\n      if (\n        !this.validation.isValid(\n          this.optionsStore.viewDate.clone.manipulate(-1, Unit.minutes),\n          Unit.minutes\n        )\n      ) {\n        timesDiv\n          .querySelector(`[data-action=${ActionTypes.decrementMinutes}]`)\n          .classList.add(Namespace.css.disabled);\n      }\n      timesDiv.querySelector<HTMLElement>(\n        `[data-time-component=${Unit.minutes}]`\n      ).innerText = lastPicked ? lastPicked.minutesFormatted : '--';\n    }\n\n    if (this.optionsStore.options.display.components.seconds) {\n      if (\n        !this.validation.isValid(\n          this.optionsStore.viewDate.clone.manipulate(1, Unit.seconds),\n          Unit.seconds\n        )\n      ) {\n        timesDiv\n          .querySelector(`[data-action=${ActionTypes.incrementSeconds}]`)\n          .classList.add(Namespace.css.disabled);\n      }\n\n      if (\n        !this.validation.isValid(\n          this.optionsStore.viewDate.clone.manipulate(-1, Unit.seconds),\n          Unit.seconds\n        )\n      ) {\n        timesDiv\n          .querySelector(`[data-action=${ActionTypes.decrementSeconds}]`)\n          .classList.add(Namespace.css.disabled);\n      }\n      timesDiv.querySelector<HTMLElement>(\n        `[data-time-component=${Unit.seconds}]`\n      ).innerText = lastPicked ? lastPicked.secondsFormatted : '--';\n    }\n\n    if (this.optionsStore.isTwelveHour) {\n      const toggle = timesDiv.querySelector<HTMLElement>(\n        `[data-action=${ActionTypes.toggleMeridiem}]`\n      );\n\n      const meridiemDate = (lastPicked || this.optionsStore.viewDate).clone;\n\n      toggle.innerText = meridiemDate.meridiem();\n\n      if (\n        !this.validation.isValid(\n          meridiemDate.manipulate(\n            meridiemDate.hours >= 12 ? -12 : 12,\n            Unit.hours\n          )\n        )\n      ) {\n        toggle.classList.add(Namespace.css.disabled);\n      } else {\n        toggle.classList.remove(Namespace.css.disabled);\n      }\n    }\n\n    timesDiv.style.gridTemplateAreas = `\"${this._gridColumns}\"`;\n  }\n\n  /**\n   * Creates the table for the clock display depending on what options are selected.\n   * @private\n   */\n  private _grid(iconTag: (iconClass: string) => HTMLElement): HTMLElement[] {\n    this._gridColumns = '';\n    const top = [],\n      middle = [],\n      bottom = [],\n      separator = document.createElement('div'),\n      upIcon = iconTag(this.optionsStore.options.display.icons.up),\n      downIcon = iconTag(this.optionsStore.options.display.icons.down);\n\n    separator.classList.add(Namespace.css.separator, Namespace.css.noHighlight);\n    const separatorColon = <HTMLElement>separator.cloneNode(true);\n    separatorColon.innerHTML = ':';\n\n    const getSeparator = (colon = false): HTMLElement => {\n      return colon\n        ? <HTMLElement>separatorColon.cloneNode(true)\n        : <HTMLElement>separator.cloneNode(true);\n    };\n\n    if (this.optionsStore.options.display.components.hours) {\n      let divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.incrementHour\n      );\n      divElement.setAttribute('data-action', ActionTypes.incrementHours);\n      divElement.appendChild(upIcon.cloneNode(true));\n      top.push(divElement);\n\n      divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.pickHour\n      );\n      divElement.setAttribute('data-action', ActionTypes.showHours);\n      divElement.setAttribute('data-time-component', Unit.hours);\n      middle.push(divElement);\n\n      divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.decrementHour\n      );\n      divElement.setAttribute('data-action', ActionTypes.decrementHours);\n      divElement.appendChild(downIcon.cloneNode(true));\n      bottom.push(divElement);\n      this._gridColumns += 'a';\n    }\n\n    if (this.optionsStore.options.display.components.minutes) {\n      this._gridColumns += ' a';\n      if (this.optionsStore.options.display.components.hours) {\n        top.push(getSeparator());\n        middle.push(getSeparator(true));\n        bottom.push(getSeparator());\n        this._gridColumns += ' a';\n      }\n      let divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.incrementMinute\n      );\n      divElement.setAttribute('data-action', ActionTypes.incrementMinutes);\n      divElement.appendChild(upIcon.cloneNode(true));\n      top.push(divElement);\n\n      divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.pickMinute\n      );\n      divElement.setAttribute('data-action', ActionTypes.showMinutes);\n      divElement.setAttribute('data-time-component', Unit.minutes);\n      middle.push(divElement);\n\n      divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.decrementMinute\n      );\n      divElement.setAttribute('data-action', ActionTypes.decrementMinutes);\n      divElement.appendChild(downIcon.cloneNode(true));\n      bottom.push(divElement);\n    }\n\n    if (this.optionsStore.options.display.components.seconds) {\n      this._gridColumns += ' a';\n      if (this.optionsStore.options.display.components.minutes) {\n        top.push(getSeparator());\n        middle.push(getSeparator(true));\n        bottom.push(getSeparator());\n        this._gridColumns += ' a';\n      }\n      let divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.incrementSecond\n      );\n      divElement.setAttribute('data-action', ActionTypes.incrementSeconds);\n      divElement.appendChild(upIcon.cloneNode(true));\n      top.push(divElement);\n\n      divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.pickSecond\n      );\n      divElement.setAttribute('data-action', ActionTypes.showSeconds);\n      divElement.setAttribute('data-time-component', Unit.seconds);\n      middle.push(divElement);\n\n      divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.decrementSecond\n      );\n      divElement.setAttribute('data-action', ActionTypes.decrementSeconds);\n      divElement.appendChild(downIcon.cloneNode(true));\n      bottom.push(divElement);\n    }\n\n    if (this.optionsStore.isTwelveHour) {\n      this._gridColumns += ' a';\n      let divElement = getSeparator();\n      top.push(divElement);\n\n      const button = document.createElement('button');\n      button.tabIndex = -1;\n      button.setAttribute('type', 'button');\n      button.setAttribute(\n        'title',\n        this.optionsStore.options.localization.toggleMeridiem\n      );\n      button.setAttribute('data-action', ActionTypes.toggleMeridiem);\n      button.setAttribute('tabindex', '-1');\n      if (Namespace.css.toggleMeridiem.includes(',')) {\n        //todo move this to paint function?\n        button.classList.add(...Namespace.css.toggleMeridiem.split(','));\n      } else button.classList.add(Namespace.css.toggleMeridiem);\n\n      divElement = document.createElement('div');\n      divElement.classList.add(Namespace.css.noHighlight);\n      divElement.appendChild(button);\n      middle.push(divElement);\n\n      divElement = getSeparator();\n      bottom.push(divElement);\n    }\n\n    this._gridColumns = this._gridColumns.trim();\n\n    return [...top, ...middle, ...bottom];\n  }\n}\n", "import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport { Paint } from '../index';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\nimport Dates from '../../dates';\n\n/**\n * Creates and updates the grid for `hours`\n */\nexport default class HourDisplay {\n  private optionsStore: OptionsStore;\n  private validation: Validation;\n  private dates: Dates;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.validation = serviceLocator.locate(Validation);\n    this.dates = serviceLocator.locate(Dates);\n  }\n  /**\n   * Build the container html for the display\n   * @private\n   */\n  getPicker(): HTMLElement {\n    const container = document.createElement('div');\n    container.classList.add(Namespace.css.hourContainer);\n\n    for (let i = 0; i < (this.optionsStore.isTwelveHour ? 12 : 24); i++) {\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.selectHour);\n      container.appendChild(div);\n    }\n\n    return container;\n  }\n\n  /**\n   * Populates the grid and updates enabled states\n   * @private\n   */\n  _update(widget: HTMLElement, paint: Paint): void {\n    const container = widget.getElementsByClassName(\n      Namespace.css.hourContainer\n    )[0] as HTMLElement;\n\n    const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.date);\n\n    container\n      .querySelectorAll(`[data-action=\"${ActionTypes.selectHour}\"]`)\n      .forEach((containerClone: HTMLElement) => {\n        const classes = [];\n        classes.push(Namespace.css.hour);\n\n        if (!this.validation.isValid(innerDate, Unit.hours)) {\n          classes.push(Namespace.css.disabled);\n        }\n\n        paint(Unit.hours, innerDate, classes, containerClone);\n\n        containerClone.classList.remove(...containerClone.classList);\n        containerClone.classList.add(...classes);\n        containerClone.setAttribute('data-value', `${innerDate.hours}`);\n        containerClone.innerText = innerDate.getHoursFormatted(\n          this.optionsStore.options.localization.hourCycle\n        );\n        innerDate.manipulate(1, Unit.hours);\n      });\n  }\n}\n", "import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport { Paint } from '../index';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `minutes`\n */\nexport default class MinuteDisplay {\n  private optionsStore: OptionsStore;\n  private validation: Validation;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.validation = serviceLocator.locate(Validation);\n  }\n  /**\n   * Build the container html for the display\n   * @private\n   */\n  getPicker(): HTMLElement {\n    const container = document.createElement('div');\n    container.classList.add(Namespace.css.minuteContainer);\n\n    const step =\n      this.optionsStore.options.stepping === 1\n        ? 5\n        : this.optionsStore.options.stepping;\n    for (let i = 0; i < 60 / step; i++) {\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.selectMinute);\n      container.appendChild(div);\n    }\n\n    return container;\n  }\n\n  /**\n   * Populates the grid and updates enabled states\n   * @private\n   */\n  _update(widget: HTMLElement, paint: Paint): void {\n    const container = widget.getElementsByClassName(\n      Namespace.css.minuteContainer\n    )[0] as HTMLElement;\n\n    const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.hours);\n    const step =\n      this.optionsStore.options.stepping === 1\n        ? 5\n        : this.optionsStore.options.stepping;\n\n    container\n      .querySelectorAll(`[data-action=\"${ActionTypes.selectMinute}\"]`)\n      .forEach((containerClone: HTMLElement) => {\n        const classes = [];\n        classes.push(Namespace.css.minute);\n\n        if (!this.validation.isValid(innerDate, Unit.minutes)) {\n          classes.push(Namespace.css.disabled);\n        }\n\n        paint(Unit.minutes, innerDate, classes, containerClone);\n\n        containerClone.classList.remove(...containerClone.classList);\n        containerClone.classList.add(...classes);\n        containerClone.setAttribute('data-value', `${innerDate.minutes}`);\n        containerClone.innerText = innerDate.minutesFormatted;\n        innerDate.manipulate(step, Unit.minutes);\n      });\n  }\n}\n", "import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport { Paint } from '../index';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `seconds`\n */\nexport default class secondDisplay {\n  private optionsStore: OptionsStore;\n  private validation: Validation;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.validation = serviceLocator.locate(Validation);\n  }\n  /**\n   * Build the container html for the display\n   * @private\n   */\n  getPicker(): HTMLElement {\n    const container = document.createElement('div');\n    container.classList.add(Namespace.css.secondContainer);\n\n    for (let i = 0; i < 12; i++) {\n      const div = document.createElement('div');\n      div.setAttribute('data-action', ActionTypes.selectSecond);\n      div.tabIndex = -1;\n      container.appendChild(div);\n    }\n\n    return container;\n  }\n\n  /**\n   * Populates the grid and updates enabled states\n   * @private\n   */\n  _update(widget: HTMLElement, paint: Paint): void {\n    const container = widget.getElementsByClassName(\n      Namespace.css.secondContainer\n    )[0] as HTMLElement;\n\n    const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.minutes);\n\n    container\n      .querySelectorAll(`[data-action=\"${ActionTypes.selectSecond}\"]`)\n      .forEach((containerClone: HTMLElement) => {\n        const classes = [];\n        classes.push(Namespace.css.second);\n\n        if (!this.validation.isValid(innerDate, Unit.seconds)) {\n          classes.push(Namespace.css.disabled);\n        }\n\n        paint(Unit.seconds, innerDate, classes, containerClone);\n\n        containerClone.classList.remove(...containerClone.classList);\n        containerClone.classList.add(...classes);\n        containerClone.setAttribute('data-value', `${innerDate.seconds}`);\n        containerClone.innerText = innerDate.secondsFormatted;\n        innerDate.manipulate(5, Unit.seconds);\n      });\n  }\n}\n", "import Namespace from '../utilities/namespace';\n\n/**\n * Provides a collapse functionality to the view changes\n */\nexport default class Collapse {\n  /**\n   * Flips the show/hide state of `target`\n   * @param target html element to affect.\n   */\n  static toggle(target: HTMLElement) {\n    if (target.classList.contains(Namespace.css.show)) {\n      this.hide(target);\n    } else {\n      this.show(target);\n    }\n  }\n\n  /**\n   * Skips any animation or timeouts and immediately set the element to show.\n   * @param target\n   */\n  static showImmediately(target: HTMLElement) {\n    target.classList.remove(Namespace.css.collapsing);\n    target.classList.add(Namespace.css.collapse, Namespace.css.show);\n    target.style.height = '';\n  }\n\n  /**\n   * If `target` is not already showing, then show after the animation.\n   * @param target\n   */\n  static show(target: HTMLElement) {\n    if (\n      target.classList.contains(Namespace.css.collapsing) ||\n      target.classList.contains(Namespace.css.show)\n    )\n      return;\n\n    let timeOut = null;\n    const complete = () => {\n      Collapse.showImmediately(target);\n      timeOut = null;\n    };\n\n    target.style.height = '0';\n    target.classList.remove(Namespace.css.collapse);\n    target.classList.add(Namespace.css.collapsing);\n\n    //eslint-disable-next-line @typescript-eslint/no-unused-vars\n    timeOut = setTimeout(\n      complete,\n      this.getTransitionDurationFromElement(target)\n    );\n    target.style.height = `${target.scrollHeight}px`;\n  }\n\n  /**\n   * Skips any animation or timeouts and immediately set the element to hide.\n   * @param target\n   */\n  static hideImmediately(target: HTMLElement) {\n    if (!target) return;\n    target.classList.remove(Namespace.css.collapsing, Namespace.css.show);\n    target.classList.add(Namespace.css.collapse);\n  }\n\n  /**\n   * If `target` is not already hidden, then hide after the animation.\n   * @param target HTML Element\n   */\n  static hide(target: HTMLElement) {\n    if (\n      target.classList.contains(Namespace.css.collapsing) ||\n      !target.classList.contains(Namespace.css.show)\n    )\n      return;\n\n    let timeOut = null;\n    const complete = () => {\n      Collapse.hideImmediately(target);\n      timeOut = null;\n    };\n\n    target.style.height = `${target.getBoundingClientRect()['height']}px`;\n\n    const reflow = (element) => element.offsetHeight;\n\n    reflow(target);\n\n    target.classList.remove(Namespace.css.collapse, Namespace.css.show);\n    target.classList.add(Namespace.css.collapsing);\n    target.style.height = '';\n\n    //eslint-disable-next-line @typescript-eslint/no-unused-vars\n    timeOut = setTimeout(\n      complete,\n      this.getTransitionDurationFromElement(target)\n    );\n  }\n\n  /**\n   * Gets the transition duration from the `element` by getting css properties\n   * `transition-duration` and `transition-delay`\n   * @param element HTML Element\n   */\n  private static getTransitionDurationFromElement = (element: HTMLElement) => {\n    if (!element) {\n      return 0;\n    }\n\n    // Get transition-duration of the element\n    let { transitionDuration, transitionDelay } =\n      window.getComputedStyle(element);\n\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n    // Return 0 if element or transition duration is not found\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    }\n\n    // If multiple durations are defined, take the first\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n\n    return (\n      (Number.parseFloat(transitionDuration) +\n        Number.parseFloat(transitionDelay)) *\n      1000\n    );\n  };\n}\n", "import DateDisplay from './calendar/date-display';\nimport MonthDisplay from './calendar/month-display';\nimport YearDisplay from './calendar/year-display';\nimport DecadeDisplay from './calendar/decade-display';\nimport TimeDisplay from './time/time-display';\nimport HourDisplay from './time/hour-display';\nimport MinuteDisplay from './time/minute-display';\nimport SecondDisplay from './time/second-display';\nimport { DateTime, Unit } from '../datetime';\nimport Namespace from '../utilities/namespace';\nimport { HideEvent } from '../utilities/event-types';\nimport Collapse from './collapse';\nimport Validation from '../validation';\nimport Dates from '../dates';\nimport { EventEmitters, ViewUpdateValues } from '../utilities/event-emitter';\nimport { serviceLocator } from '../utilities/service-locator';\nimport ActionTypes from '../utilities/action-types';\nimport CalendarModes from '../utilities/calendar-modes';\nimport { OptionsStore } from '../utilities/optionsStore';\n\n/**\n * Main class for all things display related.\n */\nexport default class Display {\n  private _widget: HTMLElement;\n  //eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private _popperInstance: any;\n  private _isVisible = false;\n  private optionsStore: OptionsStore;\n  private validation: Validation;\n  private dates: Dates;\n  private _eventEmitters: EventEmitters;\n  private _keyboardEventBound = this._keyboardEvent.bind(this);\n\n  dateDisplay: DateDisplay;\n  monthDisplay: MonthDisplay;\n  yearDisplay: YearDisplay;\n  decadeDisplay: DecadeDisplay;\n  timeDisplay: TimeDisplay;\n  hourDisplay: HourDisplay;\n  minuteDisplay: MinuteDisplay;\n  secondDisplay: SecondDisplay;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.validation = serviceLocator.locate(Validation);\n    this.dates = serviceLocator.locate(Dates);\n\n    this.dateDisplay = serviceLocator.locate(DateDisplay);\n    this.monthDisplay = serviceLocator.locate(MonthDisplay);\n    this.yearDisplay = serviceLocator.locate(YearDisplay);\n    this.decadeDisplay = serviceLocator.locate(DecadeDisplay);\n    this.timeDisplay = serviceLocator.locate(TimeDisplay);\n    this.hourDisplay = serviceLocator.locate(HourDisplay);\n    this.minuteDisplay = serviceLocator.locate(MinuteDisplay);\n    this.secondDisplay = serviceLocator.locate(SecondDisplay);\n    this._eventEmitters = serviceLocator.locate(EventEmitters);\n    this._widget = undefined;\n\n    this._eventEmitters.updateDisplay.subscribe((result: ViewUpdateValues) => {\n      this._update(result);\n    });\n  }\n\n  /**\n   * Returns the widget body or undefined\n   * @private\n   */\n  get widget(): HTMLElement | undefined {\n    return this._widget;\n  }\n\n  get dateContainer(): HTMLElement | undefined {\n    return this.widget?.querySelector(`div.${Namespace.css.dateContainer}`);\n  }\n\n  get timeContainer(): HTMLElement | undefined {\n    return this.widget?.querySelector(`div.${Namespace.css.timeContainer}`);\n  }\n\n  /**\n   * Returns this visible state of the picker (shown)\n   */\n  get isVisible() {\n    return this._isVisible;\n  }\n\n  /**\n   * Updates the table for a particular unit. Used when an option as changed or\n   * whenever the class list might need to be refreshed.\n   * @param unit\n   * @private\n   */\n  _update(unit: ViewUpdateValues): void {\n    if (!this.widget) return;\n    switch (unit) {\n      case Unit.seconds:\n        this.secondDisplay._update(this.widget, this.paint);\n        break;\n      case Unit.minutes:\n        this.minuteDisplay._update(this.widget, this.paint);\n        break;\n      case Unit.hours:\n        this.hourDisplay._update(this.widget, this.paint);\n        break;\n      case Unit.date:\n        this.dateDisplay._update(this.widget, this.paint);\n        break;\n      case Unit.month:\n        this.monthDisplay._update(this.widget, this.paint);\n        break;\n      case Unit.year:\n        this.yearDisplay._update(this.widget, this.paint);\n        break;\n      case 'decade':\n        this.decadeDisplay._update(this.widget, this.paint);\n        break;\n      case 'clock':\n        if (!this._hasTime) break;\n        this.timeDisplay._update(this.widget);\n        this._update(Unit.hours);\n        this._update(Unit.minutes);\n        this._update(Unit.seconds);\n        break;\n      case 'calendar':\n        this._update(Unit.date);\n        this._update(Unit.year);\n        this._update(Unit.month);\n        this.decadeDisplay._update(this.widget, this.paint);\n        this._updateCalendarHeader();\n        break;\n      case 'all':\n        if (this._hasTime) {\n          this._update('clock');\n        }\n        if (this._hasDate) {\n          this._update('calendar');\n        }\n    }\n  }\n\n  // noinspection JSUnusedLocalSymbols\n  /**\n   * Allows developers to add/remove classes from an element.\n   * @param _unit\n   * @param _date\n   * @param _classes\n   * @param _element\n   */\n\n  /* eslint-disable @typescript-eslint/no-unused-vars */\n  paint(\n    _unit: Unit | 'decade',\n    _date: DateTime,\n    _classes: string[],\n    _element: HTMLElement\n  ) {\n    // implemented in plugin\n  }\n\n  /**\n   * Shows the picker and creates a Popper instance if needed.\n   * Add document click event to hide when clicking outside the picker.\n   * fires Events#show\n   */\n  show(): void {\n    if (this.widget == undefined) {\n      this._showSetDefaultIfNeeded();\n\n      this._buildWidget();\n      this._updateTheme();\n\n      this._showSetupViewMode();\n\n      if (!this.optionsStore.options.display.inline) {\n        // If needed to change the parent container\n        const container = this.optionsStore.options?.container || document.body;\n        const placement =\n          this.optionsStore.options?.display?.placement || 'bottom';\n\n        container.appendChild(this.widget);\n        const handleFocus = this._handleFocus.bind(this);\n        this.createPopup(this.optionsStore.element, this.widget, {\n          modifiers: [\n            { name: 'eventListeners', enabled: true },\n            {\n              name: 'focusDate',\n              enabled: true,\n              phase: 'afterWrite',\n              fn() {\n                handleFocus();\n              },\n            },\n          ],\n          //#2400\n          placement:\n            document.documentElement.dir === 'rtl'\n              ? `${placement}-end`\n              : `${placement}-start`,\n        }).then(() => {\n          this._handleFocus();\n        });\n      } else {\n        this.optionsStore.element.appendChild(this.widget);\n      }\n\n      if (this.optionsStore.options.display.viewMode == 'clock') {\n        this._eventEmitters.action.emit({\n          e: null,\n          action: ActionTypes.showClock,\n        });\n      }\n\n      this.widget\n        .querySelectorAll('[data-action]')\n        .forEach((element) =>\n          element.addEventListener('click', this._actionsClickEvent)\n        );\n\n      // show the clock when using sideBySide\n      if (this._hasTime && this.optionsStore.options.display.sideBySide) {\n        this.timeDisplay._update(this.widget);\n        (\n          this.widget.getElementsByClassName(\n            Namespace.css.clockContainer\n          )[0] as HTMLElement\n        ).style.display = 'grid';\n      }\n    }\n\n    this.widget.classList.add(Namespace.css.show);\n    if (!this.optionsStore.options.display.inline) {\n      this.updatePopup();\n      document.addEventListener('click', this._documentClickEvent);\n    }\n    this._eventEmitters.triggerEvent.emit({ type: Namespace.events.show });\n    this._isVisible = true;\n\n    if (this.optionsStore.options.display.keyboardNavigation) {\n      this.widget.addEventListener('keydown', this._keyboardEventBound);\n    }\n  }\n\n  private _showSetupViewMode() {\n    // If modeView is only clock\n    const onlyClock = this._hasTime && !this._hasDate;\n\n    // reset the view to the clock if there's no date components\n    if (onlyClock) {\n      this.optionsStore.currentView = 'clock';\n      this._eventEmitters.action.emit({\n        e: null,\n        action: ActionTypes.showClock,\n      });\n    }\n    // otherwise return to the calendar view\n    else if (!this.optionsStore.currentCalendarViewMode) {\n      this.optionsStore.currentCalendarViewMode =\n        this.optionsStore.minimumCalendarViewMode;\n    }\n\n    if (!onlyClock && this.optionsStore.options.display.viewMode !== 'clock') {\n      if (this._hasTime) {\n        if (!this.optionsStore.options.display.sideBySide) {\n          Collapse.hideImmediately(this.timeContainer);\n        } else {\n          Collapse.show(this.timeContainer);\n        }\n      }\n      Collapse.show(this.dateContainer);\n    }\n\n    if (this._hasDate) {\n      this._showMode();\n    }\n  }\n\n  private _showSetDefaultIfNeeded() {\n    if (this.dates.picked.length != 0) return;\n\n    if (\n      this.optionsStore.options.useCurrent &&\n      !this.optionsStore.options.defaultDate\n    ) {\n      const date = new DateTime().setLocalization(\n        this.optionsStore.options.localization\n      );\n      if (!this.optionsStore.options.keepInvalid) {\n        let tries = 0;\n        let direction = 1;\n        if (this.optionsStore.options.restrictions.maxDate?.isBefore(date)) {\n          direction = -1;\n        }\n        while (!this.validation.isValid(date) && tries > 31) {\n          date.manipulate(direction, Unit.date);\n          tries++;\n        }\n      }\n      this.dates.setValue(date);\n    }\n\n    if (this.optionsStore.options.defaultDate) {\n      this.dates.setValue(this.optionsStore.options.defaultDate);\n    }\n  }\n\n  async createPopup(\n    element: HTMLElement,\n    widget: HTMLElement,\n    //eslint-disable-next-line @typescript-eslint/no-explicit-any\n    options: any\n  ): Promise<void> {\n    let createPopperFunction;\n    //eslint-disable-next-line @typescript-eslint/no-explicit-any\n    if ((window as any)?.Popper) {\n      //eslint-disable-next-line @typescript-eslint/no-explicit-any\n      createPopperFunction = (window as any)?.Popper?.createPopper;\n    } else {\n      const { createPopper } = await import('@popperjs/core');\n      createPopperFunction = createPopper;\n    }\n    if (createPopperFunction) {\n      this._popperInstance = createPopperFunction(element, widget, options);\n    }\n  }\n\n  updatePopup(): void {\n    if (!this._popperInstance) return;\n    this._popperInstance.update();\n    //this._handleFocus();\n  }\n\n  /**\n   * Changes the calendar view mode. E.g. month <-> year\n   * @param direction -/+ number to move currentViewMode\n   * @private\n   */\n  _showMode(direction?: number): void {\n    if (!this.widget) {\n      return;\n    }\n    if (direction) {\n      const max = Math.max(\n        this.optionsStore.minimumCalendarViewMode,\n        Math.min(3, this.optionsStore.currentCalendarViewMode + direction)\n      );\n      if (this.optionsStore.currentCalendarViewMode == max) return;\n      this.optionsStore.currentCalendarViewMode = max;\n    }\n\n    this.widget\n      .querySelectorAll(\n        `.${Namespace.css.dateContainer} > div:not(.${Namespace.css.calendarHeader}), .${Namespace.css.timeContainer} > div:not(.${Namespace.css.clockContainer})`\n      )\n      .forEach((e: HTMLElement) => (e.style.display = 'none'));\n\n    const datePickerMode =\n      CalendarModes[this.optionsStore.currentCalendarViewMode];\n    const picker: HTMLElement = this.widget.querySelector(\n      `.${datePickerMode.className}`\n    );\n\n    switch (datePickerMode.className) {\n      case Namespace.css.decadesContainer:\n        this.decadeDisplay._update(this.widget, this.paint);\n        break;\n      case Namespace.css.yearsContainer:\n        this.yearDisplay._update(this.widget, this.paint);\n        break;\n      case Namespace.css.monthsContainer:\n        this.monthDisplay._update(this.widget, this.paint);\n        break;\n      case Namespace.css.daysContainer:\n        this.dateDisplay._update(this.widget, this.paint);\n        break;\n    }\n\n    picker.style.display = 'grid';\n\n    if (this.optionsStore.options.display.sideBySide)\n      (<HTMLElement>(\n        this.widget.querySelectorAll(`.${Namespace.css.clockContainer}`)[0]\n      )).style.display = 'grid';\n\n    this._updateCalendarHeader();\n    this._eventEmitters.viewUpdate.emit();\n    this.findViewDateElement()?.focus();\n  }\n\n  /**\n   * Changes the theme. E.g. light, dark or auto\n   * @param theme the theme name\n   * @private\n   */\n  _updateTheme(theme?: 'light' | 'dark' | 'auto'): void {\n    if (!this.widget) {\n      return;\n    }\n    if (theme) {\n      if (this.optionsStore.options.display.theme === theme) return;\n      this.optionsStore.options.display.theme = theme;\n    }\n\n    this.widget.classList.remove('light', 'dark');\n    this.widget.classList.add(this._getThemeClass());\n\n    if (this.optionsStore.options.display.theme === 'auto') {\n      window\n        .matchMedia(Namespace.css.isDarkPreferredQuery)\n        .addEventListener('change', () => this._updateTheme());\n    } else {\n      window\n        .matchMedia(Namespace.css.isDarkPreferredQuery)\n        .removeEventListener('change', () => this._updateTheme());\n    }\n  }\n\n  _getThemeClass(): string {\n    const currentTheme = this.optionsStore.options.display.theme || 'auto';\n\n    const isDarkMode =\n      window.matchMedia &&\n      window.matchMedia(Namespace.css.isDarkPreferredQuery).matches;\n\n    switch (currentTheme) {\n      case 'light':\n        return Namespace.css.lightTheme;\n      case 'dark':\n        return Namespace.css.darkTheme;\n      case 'auto':\n        return isDarkMode ? Namespace.css.darkTheme : Namespace.css.lightTheme;\n    }\n  }\n\n  _updateCalendarHeader() {\n    if (!this._hasDate) return;\n    const showing = [\n      ...this.widget.querySelector(\n        `.${Namespace.css.dateContainer} div[style*=\"display: grid\"]`\n      ).classList,\n    ].find((x) => x.startsWith(Namespace.css.dateContainer));\n\n    const [previous, switcher, next] = this.widget\n      .getElementsByClassName(Namespace.css.calendarHeader)[0]\n      .getElementsByTagName('div');\n\n    switch (showing) {\n      case Namespace.css.decadesContainer:\n        previous.setAttribute(\n          'title',\n          this.optionsStore.options.localization.previousCentury\n        );\n        switcher.setAttribute('title', '');\n        next.setAttribute(\n          'title',\n          this.optionsStore.options.localization.nextCentury\n        );\n        break;\n      case Namespace.css.yearsContainer:\n        previous.setAttribute(\n          'title',\n          this.optionsStore.options.localization.previousDecade\n        );\n        switcher.setAttribute(\n          'title',\n          this.optionsStore.options.localization.selectDecade\n        );\n        next.setAttribute(\n          'title',\n          this.optionsStore.options.localization.nextDecade\n        );\n        break;\n      case Namespace.css.monthsContainer:\n        previous.setAttribute(\n          'title',\n          this.optionsStore.options.localization.previousYear\n        );\n        switcher.setAttribute(\n          'title',\n          this.optionsStore.options.localization.selectYear\n        );\n        next.setAttribute(\n          'title',\n          this.optionsStore.options.localization.nextYear\n        );\n        break;\n      case Namespace.css.daysContainer:\n        previous.setAttribute(\n          'title',\n          this.optionsStore.options.localization.previousMonth\n        );\n        switcher.setAttribute(\n          'title',\n          this.optionsStore.options.localization.selectMonth\n        );\n        next.setAttribute(\n          'title',\n          this.optionsStore.options.localization.nextMonth\n        );\n        switcher.setAttribute(\n          showing,\n          this.optionsStore.viewDate.format(\n            this.optionsStore.options.localization.dayViewHeaderFormat\n          )\n        );\n        break;\n    }\n    switcher.innerText = switcher.getAttribute(showing);\n  }\n\n  /**\n   * Hides the picker if needed.\n   * Remove document click event to hide when clicking outside the picker.\n   * fires Events#hide\n   */\n  hide(): void {\n    if (!this.widget || !this._isVisible) return;\n\n    this.widget.classList.remove(Namespace.css.show);\n\n    if (this._isVisible) {\n      this._eventEmitters.triggerEvent.emit({\n        type: Namespace.events.hide,\n        date: this.optionsStore.unset ? null : this.dates.lastPicked?.clone,\n      } as HideEvent);\n      this._isVisible = false;\n    }\n\n    document.removeEventListener('click', this._documentClickEvent);\n    if (this.optionsStore.options.display.keyboardNavigation) {\n      this.widget.removeEventListener('keydown', this._keyboardEventBound);\n    }\n    if (this.optionsStore.toggle) this.optionsStore.toggle.focus();\n    else if (this.optionsStore.input) this.optionsStore.input.focus();\n  }\n\n  /**\n   * Toggles the picker's open state. Fires a show/hide event depending.\n   */\n  toggle() {\n    return this._isVisible ? this.hide() : this.show();\n  }\n\n  /**\n   * Removes document and data-action click listener and reset the widget\n   * @private\n   */\n  _dispose() {\n    document.removeEventListener('click', this._documentClickEvent);\n    if (this._popperInstance) this._popperInstance.destroy();\n    if (!this.widget) return;\n    this.widget\n      .querySelectorAll('[data-action]')\n      .forEach((element) =>\n        element.removeEventListener('click', this._actionsClickEvent)\n      );\n    this.widget.parentNode.removeChild(this.widget);\n    this._widget = undefined;\n  }\n\n  /**\n   * Builds the widgets html template.\n   * @private\n   */\n  private _buildWidget(): HTMLElement {\n    const template = document.createElement('div');\n    template.tabIndex = -1;\n    template.classList.add(Namespace.css.widget);\n    template.setAttribute('role', 'widget');\n\n    const dateView = document.createElement('div');\n    dateView.tabIndex = -1;\n    dateView.classList.add(Namespace.css.dateContainer);\n    dateView.append(\n      this.getHeadTemplate(),\n      this.decadeDisplay.getPicker(),\n      this.yearDisplay.getPicker(),\n      this.monthDisplay.getPicker(),\n      this.dateDisplay.getPicker()\n    );\n\n    const timeView = document.createElement('div');\n    timeView.tabIndex = -1;\n    timeView.classList.add(Namespace.css.timeContainer);\n    timeView.appendChild(this.timeDisplay.getPicker(this._iconTag.bind(this)));\n    timeView.appendChild(this.hourDisplay.getPicker());\n    timeView.appendChild(this.minuteDisplay.getPicker());\n    timeView.appendChild(this.secondDisplay.getPicker());\n\n    const toolbar = document.createElement('div');\n    toolbar.tabIndex = -1;\n    toolbar.classList.add(Namespace.css.toolbar);\n    toolbar.append(...this.getToolbarElements());\n\n    if (this.optionsStore.options.display.inline) {\n      template.classList.add(Namespace.css.inline);\n    }\n\n    if (this.optionsStore.options.display.calendarWeeks) {\n      template.classList.add('calendarWeeks');\n    }\n\n    if (this.optionsStore.options.display.sideBySide && this._hasDateAndTime) {\n      this._buildWidgetSideBySide(template, dateView, timeView, toolbar);\n      return;\n    }\n\n    if (this.optionsStore.options.display.toolbarPlacement === 'top') {\n      template.appendChild(toolbar);\n    }\n\n    const setupComponentView = (\n      hasFirst: boolean,\n      hasSecond: boolean,\n      element: HTMLElement,\n      shouldShow: boolean\n    ) => {\n      if (!hasFirst) return;\n      if (hasSecond) {\n        element.classList.add(Namespace.css.collapse);\n        if (shouldShow) element.classList.add(Namespace.css.show);\n      }\n      template.appendChild(element);\n    };\n\n    setupComponentView(\n      this._hasDate,\n      this._hasTime,\n      dateView,\n      this.optionsStore.options.display.viewMode !== 'clock'\n    );\n\n    setupComponentView(\n      this._hasTime,\n      this._hasDate,\n      timeView,\n      this.optionsStore.options.display.viewMode === 'clock'\n    );\n\n    if (this.optionsStore.options.display.toolbarPlacement === 'bottom') {\n      template.appendChild(toolbar);\n    }\n\n    const arrow = document.createElement('div');\n    arrow.classList.add('arrow');\n    arrow.setAttribute('data-popper-arrow', '');\n    template.appendChild(arrow);\n\n    this._widget = template;\n  }\n\n  private _buildWidgetSideBySide(\n    template: HTMLDivElement,\n    dateView: HTMLDivElement,\n    timeView: HTMLDivElement,\n    toolbar: HTMLDivElement\n  ) {\n    template.classList.add(Namespace.css.sideBySide);\n    if (this.optionsStore.options.display.toolbarPlacement === 'top') {\n      template.appendChild(toolbar);\n    }\n    const row = document.createElement('div');\n    row.classList.add('td-row');\n    dateView.classList.add('td-half');\n    timeView.classList.add('td-half');\n\n    row.appendChild(dateView);\n    row.appendChild(timeView);\n    template.appendChild(row);\n    if (this.optionsStore.options.display.toolbarPlacement === 'bottom') {\n      template.appendChild(toolbar);\n    }\n    this._widget = template;\n  }\n\n  /**\n   * Returns true if the hours, minutes, or seconds component is turned on\n   */\n  get _hasTime(): boolean {\n    return (\n      this.optionsStore.options.display.components.clock &&\n      (this.optionsStore.options.display.components.hours ||\n        this.optionsStore.options.display.components.minutes ||\n        this.optionsStore.options.display.components.seconds)\n    );\n  }\n\n  /**\n   * Returns true if the year, month, or date component is turned on\n   */\n  get _hasDate(): boolean {\n    return (\n      this.optionsStore.options.display.components.calendar &&\n      (this.optionsStore.options.display.components.year ||\n        this.optionsStore.options.display.components.month ||\n        this.optionsStore.options.display.components.date)\n    );\n  }\n\n  get _hasDateAndTime(): boolean {\n    return this._hasDate && this._hasTime;\n  }\n\n  /**\n   * Get the toolbar html based on options like buttons => today\n   * @private\n   */\n  getToolbarElements(): HTMLElement[] {\n    const toolbar = [];\n\n    if (this.optionsStore.options.display.buttons.today) {\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.today);\n      div.setAttribute('title', this.optionsStore.options.localization.today);\n\n      div.appendChild(\n        this._iconTag(this.optionsStore.options.display.icons.today)\n      );\n      toolbar.push(div);\n    }\n    if (\n      !this.optionsStore.options.display.sideBySide &&\n      this._hasDate &&\n      this._hasTime\n    ) {\n      let title, icon;\n      if (this.optionsStore.options.display.viewMode === 'clock') {\n        title = this.optionsStore.options.localization.selectDate;\n        icon = this.optionsStore.options.display.icons.date;\n      } else {\n        title = this.optionsStore.options.localization.selectTime;\n        icon = this.optionsStore.options.display.icons.time;\n      }\n\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.togglePicker);\n      div.setAttribute('title', title);\n\n      div.appendChild(this._iconTag(icon));\n      toolbar.push(div);\n    }\n    if (this.optionsStore.options.display.buttons.clear) {\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.clear);\n      div.setAttribute('title', this.optionsStore.options.localization.clear);\n\n      div.appendChild(\n        this._iconTag(this.optionsStore.options.display.icons.clear)\n      );\n      toolbar.push(div);\n    }\n    if (this.optionsStore.options.display.buttons.close) {\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.close);\n      div.setAttribute('title', this.optionsStore.options.localization.close);\n\n      div.appendChild(\n        this._iconTag(this.optionsStore.options.display.icons.close)\n      );\n      toolbar.push(div);\n    }\n\n    return toolbar;\n  }\n\n  /***\n   * Builds the base header template with next and previous icons\n   * @private\n   */\n  getHeadTemplate(): HTMLElement {\n    const calendarHeader = document.createElement('div');\n    calendarHeader.classList.add(Namespace.css.calendarHeader);\n\n    const previous = document.createElement('div');\n    previous.classList.add(Namespace.css.previous);\n    previous.setAttribute('data-action', ActionTypes.previous);\n    previous.appendChild(\n      this._iconTag(this.optionsStore.options.display.icons.previous)\n    );\n    previous.tabIndex = -1;\n\n    const switcher = document.createElement('div');\n    switcher.classList.add(Namespace.css.switch);\n    switcher.setAttribute('data-action', ActionTypes.changeCalendarView);\n    switcher.tabIndex = -1;\n\n    const next = document.createElement('div');\n    next.classList.add(Namespace.css.next);\n    next.setAttribute('data-action', ActionTypes.next);\n    next.appendChild(\n      this._iconTag(this.optionsStore.options.display.icons.next)\n    );\n    next.tabIndex = -1;\n\n    calendarHeader.append(previous, switcher, next);\n    return calendarHeader;\n  }\n\n  /**\n   * Builds an icon tag as either an `<i>`\n   * or with icons => type is `sprites` then a svg tag instead\n   * @param iconClass\n   * @private\n   */\n  _iconTag(iconClass: string): HTMLElement | SVGElement {\n    if (this.optionsStore.options.display.icons.type === 'sprites') {\n      const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\n      const icon = document.createElementNS(\n        'http://www.w3.org/2000/svg',\n        'use'\n      );\n      icon.setAttribute('xlink:href', iconClass); // Deprecated. Included for backward compatibility\n      icon.setAttribute('href', iconClass);\n      svg.appendChild(icon);\n\n      return svg;\n    }\n    const icon = document.createElement('i');\n    icon.classList.add(...iconClass.split(' '));\n    return icon;\n  }\n\n  /**\n   * A document click event to hide the widget if click is outside\n   * @private\n   * @param e MouseEvent\n   */\n  private _documentClickEvent = (e: MouseEvent) => {\n    if (this.optionsStore.options.debug || (window as any).debug) return; //eslint-disable-line @typescript-eslint/no-explicit-any\n\n    if (\n      this._isVisible &&\n      !e.composedPath().includes(this.widget) && // click inside the widget\n      !e.composedPath()?.includes(this.optionsStore.element) // click on the element\n    ) {\n      this.hide();\n    }\n  };\n\n  /**\n   * Click event for any action like selecting a date\n   * @param e MouseEvent\n   * @private\n   */\n  private _actionsClickEvent = (e: MouseEvent) => {\n    this._eventEmitters.action.emit({ e: e });\n  };\n\n  /**\n   * Causes the widget to get rebuilt on next show. If the picker is already open\n   * then hide and reshow it.\n   * @private\n   */\n  _rebuild() {\n    const wasVisible = this._isVisible;\n    this._dispose();\n    if (wasVisible) this.show();\n  }\n\n  refreshCurrentView() {\n    //if the widget is not showing, just destroy it\n    if (!this._isVisible) this._dispose();\n\n    switch (this.optionsStore.currentView) {\n      case 'clock':\n        this._update('clock');\n        break;\n      case 'calendar':\n        this._update(Unit.date);\n        break;\n      case 'months':\n        this._update(Unit.month);\n        break;\n      case 'years':\n        this._update(Unit.year);\n        break;\n      case 'decades':\n        this._update('decade');\n        break;\n    }\n  }\n\n  private _keyboardEvent(event: KeyboardEvent) {\n    if (this.optionsStore.currentView === 'clock') {\n      this._handleKeyDownClock(event);\n      return;\n    }\n    this._handleKeyDownDate(event);\n    return false;\n  }\n\n  public findViewDateElement(): HTMLElement {\n    let selector = '';\n    let dataValue = '';\n\n    switch (this.optionsStore.currentView) {\n      case 'clock':\n        break;\n      case 'calendar':\n        selector = Namespace.css.daysContainer;\n        dataValue = this.optionsStore.viewDate.dateToDataValue();\n        break;\n      case 'months':\n        selector = Namespace.css.monthsContainer;\n        dataValue = this.optionsStore.viewDate.month.toString();\n        break;\n      case 'years':\n        selector = Namespace.css.yearsContainer;\n        dataValue = this.optionsStore.viewDate.year.toString();\n        break;\n      case 'decades':\n        selector = Namespace.css.decadesContainer;\n        dataValue = (\n          Math.floor(this.optionsStore.viewDate.year / 10) * 10\n        ).toString();\n        break;\n    }\n\n    return this.widget.querySelector(\n      `.${selector} > div[data-value=\"${dataValue}\"]`\n    );\n  }\n\n  private _handleKeyDownDate(event: KeyboardEvent) {\n    let flag = false;\n    const activeElement = document.activeElement as HTMLElement;\n\n    let unit = null;\n    let verticalChange = 7;\n    let horizontalChange = 1;\n    let change = 1;\n    const currentView = this.optionsStore.currentView;\n    switch (currentView) {\n      case 'calendar':\n        unit = Unit.date;\n        break;\n      case 'months':\n        unit = Unit.month;\n        verticalChange = 3;\n        horizontalChange = 1;\n        break;\n      case 'years':\n        unit = Unit.year;\n        verticalChange = 3;\n        horizontalChange = 1;\n        break;\n      case 'decades':\n        unit = Unit.year;\n        verticalChange = 30;\n        horizontalChange = 10;\n        break;\n    }\n\n    switch (event.key) {\n      case 'Esc':\n      case 'Escape':\n        this._eventEmitters.action.emit({ e: null, action: ActionTypes.close });\n        break;\n\n      case ' ':\n      case 'Enter':\n        activeElement.click();\n\n        event.stopPropagation();\n        event.preventDefault();\n        return;\n\n      case 'Tab':\n        this._handleTab(activeElement, event);\n        return;\n\n      case 'Right':\n      case 'ArrowRight':\n        change = horizontalChange;\n        flag = true;\n        break;\n\n      case 'Left':\n      case 'ArrowLeft':\n        flag = true;\n        change = -horizontalChange;\n        break;\n\n      case 'Down':\n      case 'ArrowDown':\n        flag = true;\n        change = verticalChange;\n        break;\n\n      case 'Up':\n      case 'ArrowUp':\n        flag = true;\n        change = -verticalChange;\n        break;\n\n      case 'PageDown':\n        switch (currentView) {\n          case 'calendar':\n            unit = event.shiftKey ? Unit.year : Unit.month;\n            change = 1;\n            break;\n          case 'months':\n            unit = Unit.year;\n            change = event.shiftKey ? 10 : 1;\n            break;\n          case 'years':\n          case 'decades':\n            unit = Unit.year;\n            change = event.shiftKey ? 100 : 10;\n            break;\n        }\n        flag = true;\n        break;\n\n      case 'PageUp':\n        switch (currentView) {\n          case 'calendar':\n            unit = event.shiftKey ? Unit.year : Unit.month;\n            change = -1;\n            break;\n          case 'months':\n            unit = Unit.year;\n            change = -(event.shiftKey ? 10 : 1);\n            break;\n          case 'years':\n          case 'decades':\n            unit = Unit.year;\n            change = -(event.shiftKey ? 100 : 10);\n            break;\n        }\n        flag = true;\n        break;\n\n      case 'Home':\n        this.optionsStore.viewDate = this.optionsStore.viewDate.clone.startOf(\n          'weekDay',\n          this.optionsStore.options.localization.startOfTheWeek\n        );\n        flag = true;\n        unit = null;\n        break;\n\n      case 'End':\n        this.optionsStore.viewDate = this.optionsStore.viewDate.clone.endOf(\n          'weekDay',\n          this.optionsStore.options.localization.startOfTheWeek\n        );\n        flag = true;\n        unit = null;\n        break;\n    }\n\n    if (!flag) return;\n\n    let newViewDate = this.optionsStore.viewDate;\n\n    if (unit) {\n      newViewDate = newViewDate.clone.manipulate(change, unit);\n    }\n\n    this._eventEmitters.updateViewDate.emit(newViewDate);\n\n    const divWithValue = this.findViewDateElement();\n    if (divWithValue) {\n      divWithValue.focus();\n    }\n\n    event.stopPropagation();\n    event.preventDefault();\n  }\n\n  private _handleKeyDownClock(event: KeyboardEvent) {\n    let flag = false;\n    const activeElement = document.activeElement as HTMLElement;\n\n    // Should find which of hour, minute, or seconds sub-windows is open\n    const visibleElement = this.widget.querySelector(\n      `.${Namespace.css.timeContainer} > div[style*=\"display: grid\"]`\n    );\n\n    let subView = Namespace.css.clockContainer;\n\n    if (visibleElement.classList.contains(Namespace.css.hourContainer)) {\n      subView = Namespace.css.hourContainer;\n    }\n    if (visibleElement.classList.contains(Namespace.css.minuteContainer)) {\n      subView = Namespace.css.minuteContainer;\n    }\n    if (visibleElement.classList.contains(Namespace.css.secondContainer)) {\n      subView = Namespace.css.secondContainer;\n    }\n\n    switch (event.key) {\n      case 'Esc':\n      case 'Escape':\n        this._eventEmitters.action.emit({ e: null, action: ActionTypes.close });\n        break;\n\n      case ' ':\n      case 'Enter':\n        activeElement.click();\n\n        event.stopPropagation();\n        event.preventDefault();\n        return;\n\n      case 'Tab':\n        this._handleTab(activeElement, event);\n        return;\n    }\n\n    if (subView === Namespace.css.clockContainer) return;\n\n    const cells = [...visibleElement.querySelectorAll('div')];\n    const currentIndex = cells.indexOf(\n      document.activeElement as HTMLDivElement\n    );\n    const columnCount = 4;\n\n    let targetIndex: number;\n    switch (event.key) {\n      case 'Right':\n      case 'ArrowRight':\n        targetIndex = currentIndex < cells.length - 1 ? currentIndex + 1 : null;\n        flag = true;\n        break;\n\n      case 'Left':\n      case 'ArrowLeft':\n        flag = true;\n        targetIndex = currentIndex > 0 ? currentIndex - 1 : null;\n        break;\n\n      case 'Down':\n      case 'ArrowDown':\n        targetIndex =\n          currentIndex + columnCount < cells.length\n            ? currentIndex + columnCount\n            : null;\n        flag = true;\n        break;\n\n      case 'Up':\n      case 'ArrowUp':\n        targetIndex =\n          currentIndex - columnCount >= 0 ? currentIndex - columnCount : null;\n        flag = true;\n        break;\n    }\n\n    if (!flag) return;\n\n    if (targetIndex !== undefined && targetIndex !== null) {\n      cells[targetIndex].focus();\n    }\n\n    event.stopPropagation();\n    event.preventDefault();\n  }\n\n  private _handleTab(activeElement: HTMLElement, event: KeyboardEvent) {\n    const shiftKey = event.shiftKey;\n    // gather tab targets\n    const addCalendarHeaderTargets = () => {\n      const calendarHeaderItems = this.widget.querySelectorAll(\n        `.${Namespace.css.calendarHeader} > div`\n      ) as NodeListOf<HTMLElement>;\n      tabTargets.push(...calendarHeaderItems);\n    };\n\n    const tabTargets: HTMLElement[] = [];\n    console.log(this.optionsStore.currentView);\n    switch (this.optionsStore.currentView) {\n      case 'clock':\n        {\n          tabTargets.push(\n            ...(this.widget.querySelectorAll(\n              `.${Namespace.css.timeContainer} > div[style*=\"display: grid\"] > div[data-action]`\n            ) as NodeListOf<HTMLElement>)\n          );\n\n          const clock = this.widget.querySelectorAll(\n            `.${Namespace.css.clockContainer}`\n          )[0] as HTMLElement;\n\n          // add meridiem if it's in view\n          if (clock?.style.display === 'grid') {\n            tabTargets.push(\n              ...(this.widget.querySelectorAll(\n                `.${Namespace.css.toggleMeridiem}`\n              ) as NodeListOf<HTMLElement>)\n            );\n          }\n        }\n        break;\n      case 'calendar':\n      case 'months':\n      case 'years':\n      case 'decades':\n        addCalendarHeaderTargets();\n        tabTargets.push(this.findViewDateElement());\n        break;\n    }\n\n    const toolbarItems = this.widget.querySelectorAll(\n      `.${Namespace.css.toolbar} > div`\n    ) as NodeListOf<HTMLElement>;\n    tabTargets.push(...toolbarItems);\n\n    const index = tabTargets.indexOf(activeElement);\n    if (index === -1) return;\n\n    if (shiftKey) {\n      if (index === 0) {\n        tabTargets[tabTargets.length - 1].focus();\n      } else {\n        tabTargets[index - 1].focus();\n      }\n    } else {\n      if (index === tabTargets.length - 1) {\n        tabTargets[0].focus();\n      } else {\n        tabTargets[index + 1].focus();\n      }\n    }\n    event.stopPropagation();\n    event.preventDefault();\n  }\n\n  private _handleFocus() {\n    if (this.optionsStore.currentView === 'clock') this._handleFocusClock();\n    else this.findViewDateElement().focus();\n  }\n\n  private _handleFocusClock() {\n    (\n      this.widget.querySelector(\n        `.${Namespace.css.timeContainer} > div[style*=\"display: grid\"]`\n      ).children[0] as HTMLElement\n    ).focus();\n  }\n}\n\nexport type Paint = (\n  unit: Unit | 'decade',\n  innerDate: DateTime,\n  classes: string[],\n  element: HTMLElement\n) => void;\n", "import { DateTime, Unit } from './datetime';\nimport Collapse from './display/collapse';\nimport Namespace from './utilities/namespace';\nimport Dates from './dates';\nimport Validation from './validation';\nimport Display from './display';\nimport { EventEmitters } from './utilities/event-emitter';\nimport { serviceLocator } from './utilities/service-locator.js';\nimport ActionTypes from './utilities/action-types';\nimport CalendarModes from './utilities/calendar-modes';\nimport { OptionsStore } from './utilities/optionsStore';\n\n/**\n * Logic for various click actions\n */\nexport default class Actions {\n  private optionsStore: OptionsStore;\n  private validation: Validation;\n  private dates: Dates;\n  private display: Display;\n  private _eventEmitters: EventEmitters;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.dates = serviceLocator.locate(Dates);\n    this.validation = serviceLocator.locate(Validation);\n    this.display = serviceLocator.locate(Display);\n    this._eventEmitters = serviceLocator.locate(EventEmitters);\n\n    this._eventEmitters.action.subscribe((result) => {\n      this.do(result.e, result.action);\n    });\n  }\n\n  /**\n   * Performs the selected `action`. See ActionTypes\n   * @param e This is normally a click event\n   * @param action If not provided, then look for a [data-action]\n   */\n  //eslint-disable-next-line @typescript-eslint/no-explicit-any\n  do(e: any, action?: ActionTypes) {\n    const currentTarget = e?.currentTarget as HTMLElement;\n    if (currentTarget?.classList?.contains(Namespace.css.disabled)) return;\n    action = action || (currentTarget?.dataset?.action as ActionTypes);\n    const lastPicked = (this.dates.lastPicked || this.optionsStore.viewDate)\n      .clone;\n\n    switch (action) {\n      case ActionTypes.next:\n      case ActionTypes.previous:\n        this.handleNextPrevious(action);\n        break;\n      case ActionTypes.changeCalendarView:\n        this.display._showMode(1);\n        this.display._updateCalendarHeader();\n        break;\n      case ActionTypes.selectMonth:\n      case ActionTypes.selectYear:\n      case ActionTypes.selectDecade:\n        this.handleSelectCalendarMode(action, currentTarget);\n        break;\n      case ActionTypes.selectDay:\n        this.handleSelectDay(currentTarget);\n        break;\n      case ActionTypes.selectHour: {\n        let hour = +currentTarget.dataset.value;\n        if (lastPicked.hours >= 12 && this.optionsStore.isTwelveHour)\n          hour += 12;\n        lastPicked.hours = hour;\n        this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\n        this.hideOrClock(e);\n        break;\n      }\n      case ActionTypes.selectMinute: {\n        lastPicked.minutes = +currentTarget.dataset.value;\n        this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\n        this.hideOrClock(e);\n        break;\n      }\n      case ActionTypes.selectSecond: {\n        lastPicked.seconds = +currentTarget.dataset.value;\n        this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\n        this.hideOrClock(e);\n        break;\n      }\n      case ActionTypes.incrementHours:\n        this.manipulateAndSet(lastPicked, Unit.hours);\n        break;\n      case ActionTypes.incrementMinutes:\n        this.manipulateAndSet(\n          lastPicked,\n          Unit.minutes,\n          this.optionsStore.options.stepping\n        );\n        break;\n      case ActionTypes.incrementSeconds:\n        this.manipulateAndSet(lastPicked, Unit.seconds);\n        break;\n      case ActionTypes.decrementHours:\n        this.manipulateAndSet(lastPicked, Unit.hours, -1);\n        break;\n      case ActionTypes.decrementMinutes:\n        this.manipulateAndSet(\n          lastPicked,\n          Unit.minutes,\n          this.optionsStore.options.stepping * -1\n        );\n        break;\n      case ActionTypes.decrementSeconds:\n        this.manipulateAndSet(lastPicked, Unit.seconds, -1);\n        break;\n      case ActionTypes.toggleMeridiem:\n        this.manipulateAndSet(\n          lastPicked,\n          Unit.hours,\n          this.dates.lastPicked.hours >= 12 ? -12 : 12\n        );\n        break;\n      case ActionTypes.togglePicker:\n        this.handleToggle(currentTarget);\n        break;\n      case ActionTypes.showClock:\n      case ActionTypes.showHours:\n      case ActionTypes.showMinutes:\n      case ActionTypes.showSeconds:\n        //make sure the clock is actually displaying\n        if (\n          !this.optionsStore.options.display.sideBySide &&\n          this.optionsStore.currentView !== 'clock'\n        ) {\n          //hide calendar\n          Collapse.hideImmediately(this.display.dateContainer);\n          //show clock\n          Collapse.showImmediately(this.display.timeContainer);\n        }\n        this.handleShowClockContainers(action);\n        break;\n      case ActionTypes.clear:\n        this.dates.setValue(null);\n        this.display._updateCalendarHeader();\n        break;\n      case ActionTypes.close:\n        this.display.hide();\n        break;\n      case ActionTypes.today: {\n        const day = new DateTime().setLocalization(\n          this.optionsStore.options.localization\n        );\n        this._eventEmitters.updateViewDate.emit(day);\n\n        if (!this.validation.isValid(day, Unit.date)) break;\n\n        if (this.optionsStore.options.dateRange) this.handleDateRange(day);\n        else if (this.optionsStore.options.multipleDates) {\n          this.handleMultiDate(day);\n        } else {\n          this.dates.setValue(day, this.dates.lastPickedIndex);\n        }\n        break;\n      }\n    }\n  }\n\n  private handleShowClockContainers(action: ActionTypes) {\n    if (!this.display._hasTime) {\n      Namespace.errorMessages.throwError(\n        'Cannot show clock containers when time is disabled.'\n      );\n      /* ignore coverage: should never happen */\n      return;\n    }\n\n    this.optionsStore.currentView = 'clock';\n    this.display.widget\n      .querySelectorAll(`.${Namespace.css.timeContainer} > div`)\n      .forEach(\n        (htmlElement: HTMLElement) => (htmlElement.style.display = 'none')\n      );\n\n    let classToUse = '';\n    switch (action) {\n      case ActionTypes.showClock:\n        classToUse = Namespace.css.clockContainer;\n        this.display._update('clock');\n        break;\n      case ActionTypes.showHours:\n        classToUse = Namespace.css.hourContainer;\n        this.display._update(Unit.hours);\n        break;\n      case ActionTypes.showMinutes:\n        classToUse = Namespace.css.minuteContainer;\n        this.display._update(Unit.minutes);\n        break;\n      case ActionTypes.showSeconds:\n        classToUse = Namespace.css.secondContainer;\n        this.display._update(Unit.seconds);\n        break;\n    }\n\n    const element = this.display.widget.getElementsByClassName(\n      classToUse\n    )[0] as HTMLElement;\n    element.style.display = 'grid';\n    (<HTMLElement>element.children[0])?.focus();\n  }\n\n  private handleNextPrevious(action: ActionTypes) {\n    const { unit, step } =\n      CalendarModes[this.optionsStore.currentCalendarViewMode];\n    if (action === ActionTypes.next)\n      this.optionsStore.viewDate.manipulate(step, unit);\n    else this.optionsStore.viewDate.manipulate(step * -1, unit);\n    this._eventEmitters.viewUpdate.emit();\n\n    this.display._showMode();\n  }\n\n  /**\n   * After setting the value it will either show the clock or hide the widget.\n   * @param e\n   */\n  private hideOrClock(e) {\n    if (\n      !this.optionsStore.isTwelveHour &&\n      !this.optionsStore.options.display.components.minutes &&\n      !this.optionsStore.options.display.keepOpen &&\n      !this.optionsStore.options.display.inline\n    ) {\n      this.display.hide();\n    } else {\n      this.do(e, ActionTypes.showClock);\n    }\n  }\n\n  /**\n   * Common function to manipulate {@link lastPicked} by `unit`.\n   * @param lastPicked\n   * @param unit\n   * @param value Value to change by\n   */\n  private manipulateAndSet(lastPicked: DateTime, unit: Unit, value = 1) {\n    const newDate = lastPicked.manipulate(value, unit);\n    if (this.validation.isValid(newDate, unit)) {\n      this.dates.setValue(newDate, this.dates.lastPickedIndex);\n    }\n  }\n\n  private handleSelectCalendarMode(\n    action:\n      | ActionTypes.selectMonth\n      | ActionTypes.selectYear\n      | ActionTypes.selectDecade,\n    currentTarget: HTMLElement\n  ) {\n    const value = +currentTarget.dataset.value;\n    switch (action) {\n      case ActionTypes.selectMonth:\n        this.optionsStore.viewDate.month = value;\n        break;\n      case ActionTypes.selectYear:\n      case ActionTypes.selectDecade:\n        this.optionsStore.viewDate.year = value;\n        break;\n    }\n\n    if (\n      this.optionsStore.currentCalendarViewMode ===\n      this.optionsStore.minimumCalendarViewMode\n    ) {\n      this.dates.setValue(\n        this.optionsStore.viewDate,\n        this.dates.lastPickedIndex\n      );\n\n      if (!this.optionsStore.options.display.inline) {\n        this.display.hide();\n      }\n    } else {\n      this.display._showMode(-1);\n    }\n  }\n\n  private handleToggle(currentTarget: HTMLElement) {\n    if (\n      currentTarget.getAttribute('title') ===\n      this.optionsStore.options.localization.selectDate\n    ) {\n      currentTarget.setAttribute(\n        'title',\n        this.optionsStore.options.localization.selectTime\n      );\n      currentTarget.innerHTML = this.display._iconTag(\n        this.optionsStore.options.display.icons.time\n      ).outerHTML;\n\n      this.display._updateCalendarHeader();\n      this.optionsStore.refreshCurrentView();\n    } else {\n      currentTarget.setAttribute(\n        'title',\n        this.optionsStore.options.localization.selectDate\n      );\n      currentTarget.innerHTML = this.display._iconTag(\n        this.optionsStore.options.display.icons.date\n      ).outerHTML;\n      if (this.display._hasTime) {\n        this.handleShowClockContainers(ActionTypes.showClock);\n        this.display._update('clock');\n      }\n    }\n\n    this.display.widget\n      .querySelectorAll(\n        `.${Namespace.css.dateContainer}, .${Namespace.css.timeContainer}`\n      )\n      .forEach((htmlElement: HTMLElement) => Collapse.toggle(htmlElement));\n    this._eventEmitters.viewUpdate.emit();\n    const visible = this.display.widget.querySelector(\n      `.${Namespace.css.collapsing} > div[style*=\"display: grid\"]`\n    ) as HTMLElement;\n    visible?.focus();\n  }\n\n  private handleSelectDay(currentTarget: HTMLElement) {\n    const day = this.optionsStore.viewDate.clone;\n    if (currentTarget.classList.contains(Namespace.css.old)) {\n      day.manipulate(-1, Unit.month);\n    }\n    if (currentTarget.classList.contains(Namespace.css.new)) {\n      day.manipulate(1, Unit.month);\n    }\n\n    day.date = +currentTarget.dataset.day;\n    if (this.optionsStore.options.dateRange) this.handleDateRange(day);\n    else if (this.optionsStore.options.multipleDates) {\n      this.handleMultiDate(day);\n    } else {\n      this.dates.setValue(day, this.dates.lastPickedIndex);\n    }\n\n    if (\n      !this.display._hasTime &&\n      !this.optionsStore.options.display.keepOpen &&\n      !this.optionsStore.options.display.inline &&\n      !this.optionsStore.options.multipleDates &&\n      !this.optionsStore.options.dateRange\n    ) {\n      this.display.hide();\n    }\n  }\n\n  private handleMultiDate(day: DateTime) {\n    let index = this.dates.pickedIndex(day, Unit.date);\n    if (index !== -1) {\n      this.dates.setValue(null, index); //deselect multi-date\n    } else {\n      index = this.dates.lastPickedIndex + 1;\n      if (this.dates.picked.length === 0) index = 0;\n\n      this.dates.setValue(day, index);\n    }\n  }\n\n  private handleDateRange(day: DateTime) {\n    switch (this.dates.picked.length) {\n      case 2: {\n        this.dates.clear();\n        break;\n      }\n      case 1: {\n        const other = this.dates.picked[0];\n        if (day.getTime() === other.getTime()) {\n          this.dates.clear();\n          break;\n        }\n        if (day.isBefore(other)) {\n          this.dates.setValue(day, 0);\n          this.dates.setValue(other, 1);\n          return;\n        } else {\n          this.dates.setValue(day, 1);\n          return;\n        }\n      }\n    }\n\n    this.dates.setValue(day, 0);\n  }\n}\n", "import Display from './display/index';\nimport Dates from './dates';\nimport Actions from './actions';\nimport {\n  DateTime,\n  DateTimeFormatOptions,\n  guessHourCycle,\n  Unit,\n} from './datetime';\nimport Namespace from './utilities/namespace';\nimport Options from './utilities/options';\nimport {\n  BaseEvent,\n  ChangeEvent,\n  ViewUpdateEvent,\n} from './utilities/event-types';\nimport { EventEmitters } from './utilities/event-emitter';\nimport {\n  serviceLocator,\n  setupServiceLocator,\n} from './utilities/service-locator';\nimport CalendarModes from './utilities/calendar-modes';\nimport DefaultOptions, {\n  DefaultEnLocalization,\n} from './utilities/default-options';\nimport ActionTypes from './utilities/action-types';\nimport { OptionsStore } from './utilities/optionsStore';\nimport { OptionConverter } from './utilities/optionConverter';\n\n/**\n * A robust and powerful date/time picker component.\n */\nclass TempusDominus {\n  //eslint-disable-next-line @typescript-eslint/no-explicit-any\n  _subscribers: { [key: string]: ((event: any) => Record<string, unknown>)[] } =\n    {};\n  private _isDisabled = false;\n  private _currentPromptTimeTimeout: NodeJS.Timeout;\n  private actions: Actions;\n  private optionsStore: OptionsStore;\n  private _eventEmitters: EventEmitters;\n  display: Display;\n  dates: Dates;\n\n  constructor(element: HTMLElement, options: Options = {} as Options) {\n    setupServiceLocator();\n    this._eventEmitters = serviceLocator.locate(EventEmitters);\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.display = serviceLocator.locate(Display);\n    this.dates = serviceLocator.locate(Dates);\n    this.actions = serviceLocator.locate(Actions);\n\n    if (!element) {\n      Namespace.errorMessages.mustProvideElement();\n    }\n\n    this.optionsStore.element = element;\n    this._initializeOptions(options, DefaultOptions, true);\n    this.optionsStore.viewDate.setLocalization(\n      this.optionsStore.options.localization\n    );\n    this.optionsStore.unset = true;\n\n    this._initializeInput();\n    this._initializeToggle();\n\n    if (this.optionsStore.options.display.inline) this.display.show();\n\n    this._eventEmitters.triggerEvent.subscribe((e) => {\n      this._triggerEvent(e);\n    });\n\n    this._eventEmitters.viewUpdate.subscribe(() => {\n      this._viewUpdate();\n    });\n\n    this._eventEmitters.updateViewDate.subscribe((dateTime) => {\n      this.viewDate = dateTime;\n    });\n  }\n\n  get viewDate() {\n    return this.optionsStore.viewDate;\n  }\n\n  set viewDate(value) {\n    this.optionsStore.viewDate = value;\n    this.optionsStore.viewDate.setLocalization(\n      this.optionsStore.options.localization\n    );\n    this.display._update(\n      this.optionsStore.currentView === 'clock' ? 'clock' : 'calendar'\n    );\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Update the picker options. If `reset` is provide `options` will be merged with DefaultOptions instead.\n   * @param options\n   * @param reset\n   * @public\n   */\n  updateOptions(options, reset = false): void {\n    if (reset) this._initializeOptions(options, DefaultOptions);\n    else this._initializeOptions(options, this.optionsStore.options);\n\n    this.optionsStore.viewDate.setLocalization(\n      this.optionsStore.options.localization\n    );\n    this.display.refreshCurrentView();\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Toggles the picker open or closed. If the picker is disabled, nothing will happen.\n   * @public\n   */\n  toggle(): void {\n    if (this._isDisabled) return;\n    this.display.toggle();\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Shows the picker unless the picker is disabled.\n   * @public\n   */\n  show(): void {\n    if (this._isDisabled) return;\n    this.display.show();\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Hides the picker unless the picker is disabled.\n   * @public\n   */\n  hide(): void {\n    this.display.hide();\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Disables the picker and the target input field.\n   * @public\n   */\n  disable(): void {\n    this._isDisabled = true;\n    // todo this might be undesired. If a dev disables the input field to\n    // only allow using the picker, this will break that.\n    this.optionsStore.input?.setAttribute('disabled', 'disabled');\n    this.display.hide();\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Enables the picker and the target input field.\n   * @public\n   */\n  enable(): void {\n    this._isDisabled = false;\n    this.optionsStore.input?.removeAttribute('disabled');\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Clears all the selected dates\n   * @public\n   */\n  clear(): void {\n    this.optionsStore.input.value = '';\n    this.dates.clear();\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Allows for a direct subscription to picker events, without having to use addEventListener on the element.\n   * @param eventTypes See Namespace.Events\n   * @param callbacks Function to call when event is triggered\n   * @public\n   */\n  subscribe(\n    eventTypes: string | string[],\n    callbacks: (event: any) => void | ((event: any) => void)[] //eslint-disable-line @typescript-eslint/no-explicit-any\n  ): { unsubscribe: () => void } | { unsubscribe: () => void }[] {\n    if (typeof eventTypes === 'string') {\n      eventTypes = [eventTypes];\n    }\n    let callBackArray: any[]; //eslint-disable-line @typescript-eslint/no-explicit-any\n    if (!Array.isArray(callbacks)) {\n      callBackArray = [callbacks];\n    } else {\n      callBackArray = callbacks;\n    }\n\n    if (eventTypes.length !== callBackArray.length) {\n      Namespace.errorMessages.subscribeMismatch();\n    }\n\n    const returnArray = [];\n\n    for (let i = 0; i < eventTypes.length; i++) {\n      const eventType = eventTypes[i];\n      if (!Array.isArray(this._subscribers[eventType])) {\n        this._subscribers[eventType] = [];\n      }\n\n      this._subscribers[eventType].push(callBackArray[i]);\n\n      returnArray.push({\n        unsubscribe: this._unsubscribe.bind(\n          this,\n          eventType,\n          this._subscribers[eventType].length - 1\n        ),\n      });\n\n      if (eventTypes.length === 1) {\n        return returnArray[0];\n      }\n    }\n\n    return returnArray;\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Hides the picker and removes event listeners\n   */\n  dispose() {\n    this.display.hide();\n    // this will clear the document click event listener\n    this.display._dispose();\n    this._eventEmitters.destroy();\n    this.optionsStore.input?.removeEventListener(\n      'change',\n      this._inputChangeEvent\n    );\n    if (this.optionsStore.options.allowInputToggle) {\n      this.optionsStore.input?.removeEventListener(\n        'click',\n        this._openClickEvent\n      );\n      this.optionsStore.input?.removeEventListener(\n        'focus',\n        this._openClickEvent\n      );\n    }\n    this.optionsStore.toggle?.removeEventListener(\n      'click',\n      this._toggleClickEvent\n    );\n    this.optionsStore.toggle?.removeEventListener(\n      'keydown',\n      this._handleToggleKeydown\n    );\n    this._subscribers = {};\n  }\n\n  /**\n   * Updates the options to use the provided language.\n   * THe language file must be loaded first.\n   * @param language\n   */\n  locale(language: string) {\n    const asked = loadedLocales[language];\n    if (!asked) return;\n    this.updateOptions({\n      localization: asked,\n    });\n  }\n\n  /**\n   * Triggers an event like ChangeEvent when the picker has updated the value\n   * of a selected date.\n   * @param event Accepts a BaseEvent object.\n   * @private\n   */\n  private _triggerEvent(event: BaseEvent) {\n    event.viewMode = this.optionsStore.currentView;\n\n    const isChangeEvent = event.type === Namespace.events.change;\n    if (isChangeEvent) {\n      const { date, oldDate, isClear } = event as ChangeEvent;\n      if (\n        (date && oldDate && date.isSame(oldDate)) ||\n        (!isClear && !date && !oldDate)\n      ) {\n        return;\n      }\n      this._handleAfterChangeEvent(event as ChangeEvent);\n\n      this.optionsStore.input?.dispatchEvent(\n        //eslint-disable-next-line @typescript-eslint/no-explicit-any\n        new CustomEvent('change', { detail: event as any })\n      );\n\n      if (this.optionsStore.toggle) {\n        let label = this.optionsStore.options.localization.toggleAriaLabel;\n        if (this.dates.picked.length > 0) {\n          const picked = this.dates.picked.map((x) => x.format()).join(', ');\n          label = `${label}, ${picked}`;\n        }\n\n        this.optionsStore.toggle.ariaLabel = label;\n      }\n    }\n\n    this.optionsStore.element.dispatchEvent(\n      //eslint-disable-next-line @typescript-eslint/no-explicit-any\n      new CustomEvent(event.type, { detail: event as any })\n    );\n\n    //eslint-disable-next-line @typescript-eslint/no-explicit-any\n    if ((window as any).jQuery) {\n      //eslint-disable-next-line @typescript-eslint/no-explicit-any\n      const $ = (window as any).jQuery;\n\n      if (isChangeEvent && this.optionsStore.input) {\n        $(this.optionsStore.input).trigger(event);\n      } else {\n        $(this.optionsStore.element).trigger(event);\n      }\n    }\n\n    this._publish(event);\n  }\n\n  private _publish(event: BaseEvent) {\n    // return if event is not subscribed\n    if (!Array.isArray(this._subscribers[event.type])) {\n      return;\n    }\n\n    // Trigger callback for each subscriber\n    this._subscribers[event.type].forEach((callback) => {\n      callback(event);\n    });\n  }\n\n  /**\n   * Fires a ViewUpdate event when, for example, the month view is changed.\n   * @private\n   */\n  private _viewUpdate() {\n    this._triggerEvent({\n      type: Namespace.events.update,\n      viewDate: this.optionsStore.viewDate.clone,\n    } as ViewUpdateEvent);\n  }\n\n  private _unsubscribe(eventName, index) {\n    this._subscribers[eventName].splice(index, 1);\n  }\n\n  /**\n   * Merges two Option objects together and validates options type\n   * @param config new Options\n   * @param mergeTo Options to merge into\n   * @param includeDataset When true, the elements data-td attributes will be included in the\n   * @private\n   */\n  private _initializeOptions(\n    config: Options,\n    mergeTo: Options,\n    includeDataset = false\n  ): void {\n    let newConfig = OptionConverter.deepCopy(config);\n    newConfig = OptionConverter._mergeOptions(newConfig, mergeTo);\n    if (includeDataset)\n      newConfig = OptionConverter._dataToOptions(\n        this.optionsStore.element,\n        newConfig\n      );\n\n    OptionConverter._validateConflicts(newConfig);\n\n    newConfig.viewDate = newConfig.viewDate.setLocalization(\n      newConfig.localization\n    );\n\n    if (!this.optionsStore.viewDate.isSame(newConfig.viewDate)) {\n      this.optionsStore.viewDate = newConfig.viewDate;\n    }\n\n    /**\n     * Sets the minimum view allowed by the picker. For example the case of only\n     * allowing year and month to be selected but not date.\n     */\n    if (newConfig.display.components.year) {\n      this.optionsStore.minimumCalendarViewMode = 2;\n    }\n    if (newConfig.display.components.month) {\n      this.optionsStore.minimumCalendarViewMode = 1;\n    }\n    if (newConfig.display.components.date) {\n      this.optionsStore.minimumCalendarViewMode = 0;\n    }\n\n    this.optionsStore.currentCalendarViewMode = Math.max(\n      this.optionsStore.minimumCalendarViewMode,\n      this.optionsStore.currentCalendarViewMode\n    );\n\n    // Update view mode if needed\n    if (\n      CalendarModes[this.optionsStore.currentCalendarViewMode].name !==\n      newConfig.display.viewMode\n    ) {\n      this.optionsStore.currentCalendarViewMode = Math.max(\n        CalendarModes.findIndex((x) => x.name === newConfig.display.viewMode),\n        this.optionsStore.minimumCalendarViewMode\n      );\n    }\n\n    if (this.display?.isVisible) {\n      this.display._update('all');\n    }\n\n    if (\n      newConfig.display.components.useTwentyfourHour &&\n      newConfig.localization.hourCycle === undefined\n    )\n      newConfig.localization.hourCycle = 'h24';\n    else if (newConfig.localization.hourCycle === undefined) {\n      newConfig.localization.hourCycle = guessHourCycle(\n        newConfig.localization.locale\n      );\n    }\n\n    this.optionsStore.options = newConfig;\n\n    if (\n      newConfig.restrictions.maxDate &&\n      this.viewDate.isAfter(newConfig.restrictions.maxDate)\n    )\n      this.viewDate = newConfig.restrictions.maxDate.clone;\n\n    if (\n      newConfig.restrictions.minDate &&\n      this.viewDate.isBefore(newConfig.restrictions.minDate)\n    )\n      this.viewDate = newConfig.restrictions.minDate.clone;\n  }\n\n  /**\n   * Checks if an input field is being used, attempts to locate one and sets an\n   * event listener if found.\n   * @private\n   */\n  private _initializeInput() {\n    if (this.optionsStore.element.tagName == 'INPUT') {\n      this.optionsStore.input = this.optionsStore.element as HTMLInputElement;\n    } else {\n      const query = this.optionsStore.element.dataset.tdTargetInput;\n      if (query == undefined || query == 'nearest') {\n        this.optionsStore.input =\n          this.optionsStore.element.querySelector('input');\n      } else {\n        this.optionsStore.input =\n          this.optionsStore.element.querySelector(query);\n      }\n    }\n\n    if (!this.optionsStore.input) return;\n\n    if (!this.optionsStore.input.value && this.optionsStore.options.defaultDate)\n      this.optionsStore.input.value = this.dates.formatInput(\n        this.optionsStore.options.defaultDate\n      );\n\n    this.optionsStore.input.addEventListener('change', this._inputChangeEvent);\n    if (this.optionsStore.options.allowInputToggle) {\n      this.optionsStore.input.addEventListener('click', this._openClickEvent);\n      this.optionsStore.input.addEventListener('focus', this._openClickEvent);\n    }\n\n    if (this.optionsStore.input.value) {\n      this._inputChangeEvent();\n    }\n  }\n\n  /**\n   * Attempts to locate a toggle for the picker and sets an event listener\n   * @private\n   */\n  private _initializeToggle() {\n    if (this.optionsStore.options.display.inline) return;\n    let query = this.optionsStore.element.dataset.tdTargetToggle;\n    if (query == 'nearest') {\n      query = '[data-td-toggle=\"datetimepicker\"]';\n    }\n    this.optionsStore.toggle =\n      query == undefined\n        ? this.optionsStore.element\n        : this.optionsStore.element.querySelector(query);\n\n    if (this.optionsStore.toggle == undefined) return;\n\n    this.optionsStore.toggle.addEventListener('click', this._toggleClickEvent);\n\n    if (this.optionsStore.toggle !== this.optionsStore.element) {\n      this.optionsStore.toggle.addEventListener(\n        'keydown',\n        this._handleToggleKeydown.bind(this)\n      );\n    }\n  }\n\n  /**\n   * If the option is enabled this will render the clock view after a date pick.\n   * @param e change event\n   * @private\n   */\n  private _handleAfterChangeEvent(e: ChangeEvent) {\n    if (\n      // options is disabled\n      !this.optionsStore.options.promptTimeOnDateChange ||\n      this.optionsStore.options.multipleDates ||\n      this.optionsStore.options.display.inline ||\n      this.optionsStore.options.display.sideBySide ||\n      // time is disabled\n      !this.display._hasTime ||\n      // clock component is already showing\n      this.display.widget\n        ?.getElementsByClassName(Namespace.css.show)[0]\n        .classList.contains(Namespace.css.timeContainer)\n    )\n      return;\n\n    // First time ever. If useCurrent option is set to true (default), do nothing\n    // because the first date is selected automatically.\n    // or date didn't change (time did) or date changed because time did.\n    if (\n      (!e.oldDate && this.optionsStore.options.useCurrent) ||\n      (e.oldDate && e.date?.isSame(e.oldDate))\n    ) {\n      return;\n    }\n\n    clearTimeout(this._currentPromptTimeTimeout);\n    this._currentPromptTimeTimeout = setTimeout(() => {\n      if (this.display.widget) {\n        this._eventEmitters.action.emit({\n          e: {\n            currentTarget: this.display.widget.querySelector(\n              '[data-action=\"togglePicker\"]'\n            ),\n          },\n          action: ActionTypes.togglePicker,\n        });\n      }\n    }, this.optionsStore.options.promptTimeOnDateChangeTransitionDelay);\n  }\n\n  /**\n   * Event for when the input field changes. This is a class level method so there's\n   * something for the remove listener function.\n   * @private\n   */\n  //eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private _inputChangeEvent = (event?: any) => {\n    const internallyTriggered = event?.detail;\n    if (internallyTriggered) return;\n\n    const setViewDate = () => {\n      if (this.dates.lastPicked)\n        this.optionsStore.viewDate = this.dates.lastPicked.clone;\n    };\n\n    const value = this.optionsStore.input.value;\n    if (\n      this.optionsStore.options.multipleDates ||\n      this.optionsStore.options.dateRange\n    ) {\n      try {\n        const valueSplit = value.split(\n          this.optionsStore.options.multipleDatesSeparator\n        );\n        for (let i = 0; i < valueSplit.length; i++) {\n          this.dates.setFromInput(valueSplit[i], i);\n        }\n        setViewDate();\n      } catch {\n        console.warn(\n          'TD: Something went wrong trying to set the multipleDates values from the input field.'\n        );\n      }\n    } else {\n      this.dates.setFromInput(value, 0);\n      setViewDate();\n    }\n  };\n\n  /**\n   * Event for when the toggle is clicked. This is a class level method so there's\n   * something for the remove listener function.\n   * @private\n   */\n  private _toggleClickEvent = () => {\n    if (\n      (this.optionsStore.element as HTMLInputElement)?.disabled ||\n      this.optionsStore.input?.disabled ||\n      //if we just have the input and allow input toggle is enabled, then don't cause a toggle\n      (this.optionsStore.toggle.nodeName === 'INPUT' &&\n        (this.optionsStore.toggle as HTMLInputElement)?.type === 'text' &&\n        this.optionsStore.options.allowInputToggle)\n    )\n      return;\n    this.toggle();\n  };\n\n  private _handleToggleKeydown(event: KeyboardEvent) {\n    if (event.key !== ' ' && event.key !== 'Enter') return;\n\n    this.optionsStore.toggle.click();\n\n    event.stopPropagation();\n    event.preventDefault();\n  }\n\n  /**\n   * Event for when the toggle is clicked. This is a class level method so there's\n   * something for the remove listener function.\n   * @private\n   */\n  private _openClickEvent = () => {\n    if (\n      (this.optionsStore.element as HTMLInputElement)?.disabled ||\n      this.optionsStore.input?.disabled\n    )\n      return;\n    if (!this.display.isVisible) this.show();\n  };\n}\n\n/**\n * Whenever a locale is loaded via a plugin then store it here based on the\n * locale name. E.g. loadedLocales['ru']\n */\nconst loadedLocales = {};\n\n// noinspection JSUnusedGlobalSymbols\n/**\n * Called from a locale plugin.\n * @param l locale object for localization options\n */\nconst loadLocale = (l) => {\n  if (loadedLocales[l.name]) return;\n  loadedLocales[l.name] = l.localization;\n};\n\n/**\n * A sets the global localization options to the provided locale name.\n * `loadLocale` MUST be called first.\n * @param l\n */\nconst locale = (l: string) => {\n  const asked = loadedLocales[l];\n  if (!asked) return;\n  DefaultOptions.localization = asked;\n};\n\n// noinspection JSUnusedGlobalSymbols\n/**\n * Called from a plugin to extend or override picker defaults.\n * @param plugin\n * @param option\n */\nconst extend = function (plugin, option = undefined) {\n  if (!plugin) return tempusDominus;\n  if (!plugin.installed) {\n    // install plugin only once\n    plugin(\n      option,\n      { TempusDominus, Dates, Display, DateTime, Namespace },\n      tempusDominus\n    );\n    plugin.installed = true;\n  }\n  return tempusDominus;\n};\n\nconst version = 'v6.10.4';\n\nconst tempusDominus = {\n  TempusDominus,\n  extend,\n  loadLocale,\n  locale,\n  Namespace,\n  DefaultOptions,\n  DateTime,\n  Unit,\n  version,\n  DefaultEnLocalization,\n};\n\nexport {\n  TempusDominus,\n  extend,\n  loadLocale,\n  locale,\n  Namespace,\n  DefaultOptions,\n  DateTime,\n  Unit,\n  version,\n  DateTimeFormatOptions,\n  Options,\n  DefaultEnLocalization,\n};\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { TempusDominus } from \"@eonasdan/tempus-dominus\";\n\n// Connects to data-controller=\"datepicker\"\nexport default class extends Controller {\n  static targets = [\"input\", \"datelist\", \"hidden\", \"clearButton\"]\n  static values = {\n    mode: { type: String, default: \"single\" },\n    separator: { type: String, default: \", \"},\n    time: { type: Boolean, default: false },\n    calendarWeeks: { type: Boolean, default: false },\n  }\n\n  connect() {\n    this.picker = new TempusDominus(this.element, this.options())\n\n    this._onChange = () => {\n      this.renderSelectedDates()\n      this.syncHidden()\n      this.inputTarget?.dispatchEvent(new Event(\"input\", { bubbles: true }))\n      this.inputTarget?.dispatchEvent(new Event(\"change\", { bubbles: true }))\n    }\n\n    this.element.addEventListener(\"change.td\", this._onChange)\n\n    this.renderSelectedDates()\n    this.syncHidden()\n    this.toggleClear()\n  }\n\n  disconnect() {\n    this.element.removeEventListener(\"change.td\", this._onChange)\n    this.picker?.dispose()\n  }\n\n  removeDate(event) {\n    event.preventDefault()\n\n    const index = Number(event.currentTarget.dataset.index)\n    if (Number.isNaN(index)) return\n\n    const dates = this._readDatesFromInput()\n    dates.splice(index, 1)\n\n    this._writeDatesToInput(dates)\n    this.renderSelectedDates()\n\n    this._rebuildPicker()\n  }\n\n  clear(event) {\n    event?.preventDefault()\n    this._writeDatesToInput([])\n    if (this.hasHiddenTarget) this.hiddenTarget.value = \"\"\n\n    this.renderSelectedDates()\n    this._rebuildPicker()\n    this.toggleClear()\n\n    this.inputTarget?.dispatchEvent(new Event(\"change\", { bubbles: true }))\n  }\n\n  toggleClear() {\n    if (!this.hasClearButtonTarget) return\n    const hasValue = (this.inputTarget.value || \"\").trim().length > 0\n    this.clearButtonTarget.classList.toggle(\"d-none\", !hasValue)\n  }\n\n  options() {\n    const multiple = this.modeValue === \"multiple\"\n    const range = this.modeValue === \"range\"\n\n    return {\n      useCurrent: false,\n      keepInvalid: false,\n      localization: {\n        locale: \"es\",\n        startOfTheWeek: 1,\n        format: \"dd/MM/yyyy\",\n        clear: \"Limpiar\",\n        close: \"Cerrar\",\n        today: \"Hoy\",\n      },\n      dateRange: range,\n      multipleDates: multiple,\n      multipleDatesSeparator: this.separatorValue,\n      display: {\n        icons: {\n          type: 'icons',\n          date: 'bi bi-calendar-fill',\n          up: 'bi fa-arrow-up-circle-fill',\n          down: 'bi bi-arrow-down-circle-fill',\n          previous: 'bi bi-arrow-left-circle-fill',\n          next: 'bi bi-arrow-right-circle-fill',\n          today: 'bi bi-calendar-check-fill',\n          close: 'bi bi-x-circle-fill',\n          clear: 'bi bi-trash3-fill',\n        },\n        calendarWeeks: this.calendarWeeksValue,\n        keepOpen: false,\n        components: {\n          calendar: true,\n          date: true,\n          month: true,\n          year: true,\n          decades: true,\n          clock: this.timeValue,\n          hours: this.timeValue,\n          minutes: this.timeValue,\n          seconds: false\n        },\n        keyboardNavigation: true,\n        buttons: {\n          today: true,\n          clear: true,\n          close: true\n        }\n      }\n    }\n  }\n\n  renderSelectedDates() {\n    if (!this.hasDatelistTarget) return\n\n    if (this.modeValue !== \"multiple\") {\n      this.datelistTarget.innerHTML = \"\"\n      return\n    }\n\n    const dates = this._readDatesFromInput()\n\n    this.datelistTarget.innerHTML = \"\"\n\n    dates.forEach((dateStr, idx) => {\n      const li = document.createElement(\"li\")\n      li.classList.add(\"d-flex\", \"align-items-center\", \"gap-2\")\n\n      const text = document.createElement(\"span\")\n      text.textContent = dateStr\n\n      const btn = document.createElement(\"button\")\n      btn.type = \"button\"\n      btn.classList.add(\"btn\", \"btn-sm\", \"btn-outline-danger\")\n      btn.textContent = \"\u00D7\"\n      btn.dataset.index = String(idx)\n      btn.addEventListener(\"click\", (e) => this.removeDate(e))\n\n      li.appendChild(text)\n      li.appendChild(btn)\n\n      this.datelistTarget.appendChild(li)\n    })\n  }\n\n  syncHidden() {\n    if (!this.hasHiddenTarget) return\n\n    const raw = (this.inputTarget.value || \"\").trim()\n\n    if (!raw) {\n      this.hiddenTarget.value = \"\"\n      this.toggleClear()\n      return\n    }\n\n    // Esperamos dd/mm/yyyy\n    const m = raw.match(/^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/)\n    if (!m) {\n      // Si el usuario escribe algo no v\u00E1lido, no mandes basura al backend\n      this.hiddenTarget.value = \"\"\n      this.toggleClear()\n      return\n    }\n\n    const [, dd, mm, yyyy] = m\n    this.hiddenTarget.value = `${yyyy}-${mm}-${dd}`\n\n    this.toggleClear()\n  }\n\n  _readDatesFromInput() {\n    const raw = (this.inputTarget?.value || \"\").trim()\n    if (!raw) return []\n\n    const sep = this.separatorValue\n    const parts = raw.includes(sep) ? raw.split(sep) : raw.split(\",\").map((s) => s.trim())\n\n    return Array.from(new Set(parts.map((s) => s.trim()).filter(Boolean)))\n  }\n\n  _writeDatesToInput(dates) {\n    if (!this.hasInputTarget) return\n    this.inputTarget.value = dates.join(this.separatorValue)\n  }\n\n  _rebuildPicker() {\n    this.element.removeEventListener(\"change.td\", this._onChange)\n    this.picker?.dispose()\n\n    this.picker = new TempusDominus(this.element, this.options())\n    this.element.addEventListener(\"change.td\", this._onChange)\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"empty\"\nexport default class extends Controller {\n  static targets = [\"list\", \"table\", \"empty\"]\n\n  connect() {\n    this.observer = new MutationObserver(this.update.bind(this))\n\n    this.observer.observe(this.element, {\n      childList: true,\n      attributes: false,\n      subtree: true\n    })\n\n    this.update()\n  }\n\n  disconnect() {\n    this.observer.disconnect()\n  }\n\n  update() {\n    if (this.listTarget.children.length > 0) {\n      this.tableTarget.classList.remove(\"d-none\")\n      this.emptyTarget.classList.add(\"d-none\")\n    } else {\n      this.tableTarget.classList.add(\"d-none\")\n      this.emptyTarget.classList.remove(\"d-none\")\n    }\n  }\n}\n", "export class FetchResponse {\n  constructor (response) {\n    this.response = response\n  }\n\n  get statusCode () {\n    return this.response.status\n  }\n\n  get redirected () {\n    return this.response.redirected\n  }\n\n  get ok () {\n    return this.response.ok\n  }\n\n  get unauthenticated () {\n    return this.statusCode === 401\n  }\n\n  get unprocessableEntity () {\n    return this.statusCode === 422\n  }\n\n  get authenticationURL () {\n    return this.response.headers.get('WWW-Authenticate')\n  }\n\n  get contentType () {\n    const contentType = this.response.headers.get('Content-Type') || ''\n\n    return contentType.replace(/;.*$/, '')\n  }\n\n  get headers () {\n    return this.response.headers\n  }\n\n  get html () {\n    if (this.contentType.match(/^(application|text)\\/(html|xhtml\\+xml)$/)) {\n      return this.text\n    }\n\n    return Promise.reject(new Error(`Expected an HTML response but got \"${this.contentType}\" instead`))\n  }\n\n  get json () {\n    if (this.contentType.match(/^application\\/.*json$/)) {\n      return this.responseJson || (this.responseJson = this.response.json())\n    }\n\n    return Promise.reject(new Error(`Expected a JSON response but got \"${this.contentType}\" instead`))\n  }\n\n  get text () {\n    return this.responseText || (this.responseText = this.response.text())\n  }\n\n  get isTurboStream () {\n    return this.contentType.match(/^text\\/vnd\\.turbo-stream\\.html/)\n  }\n\n  get isScript () {\n    return this.contentType.match(/\\b(?:java|ecma)script\\b/)\n  }\n\n  async renderTurboStream () {\n    if (this.isTurboStream) {\n      if (window.Turbo) {\n        await window.Turbo.renderStreamMessage(await this.text)\n      } else {\n        console.warn('You must set `window.Turbo = Turbo` to automatically process Turbo Stream events with request.js')\n      }\n    } else {\n      return Promise.reject(new Error(`Expected a Turbo Stream response but got \"${this.contentType}\" instead`))\n    }\n  }\n\n  async activeScript () {\n    if (this.isScript) {\n      const script = document.createElement('script')\n      const metaTag = document.querySelector('meta[name=csp-nonce]')\n      if (metaTag) {\n        const nonce = metaTag.nonce === '' ? metaTag.content : metaTag.nonce\n        if (nonce) { script.setAttribute('nonce', nonce) }\n      }\n      script.innerHTML = await this.text\n      document.body.appendChild(script)\n    } else {\n      return Promise.reject(new Error(`Expected a Script response but got \"${this.contentType}\" instead`))\n    }\n  }\n}\n", "export class RequestInterceptor {\n  static register (interceptor) {\n    this.interceptor = interceptor\n  }\n\n  static get () {\n    return this.interceptor\n  }\n\n  static reset () {\n    this.interceptor = undefined\n  }\n}\n", "export function getCookie (name) {\n  const cookies = document.cookie ? document.cookie.split('; ') : []\n  const prefix = `${encodeURIComponent(name)}=`\n  const cookie = cookies.find(cookie => cookie.startsWith(prefix))\n\n  if (cookie) {\n    const value = cookie.split('=').slice(1).join('=')\n\n    if (value) {\n      return decodeURIComponent(value)\n    }\n  }\n}\n\nexport function compact (object) {\n  const result = {}\n\n  for (const key in object) {\n    const value = object[key]\n    if (value !== undefined) {\n      result[key] = value\n    }\n  }\n\n  return result\n}\n\nexport function metaContent (name) {\n  const element = document.head.querySelector(`meta[name=\"${name}\"]`)\n  return element && element.content\n}\n\nexport function stringEntriesFromFormData (formData) {\n  return [...formData].reduce((entries, [name, value]) => {\n    return entries.concat(typeof value === 'string' ? [[name, value]] : [])\n  }, [])\n}\n\nexport function mergeEntries (searchParams, entries) {\n  for (const [name, value] of entries) {\n    if (value instanceof window.File) continue\n\n    if (searchParams.has(name) && !name.includes('[]')) {\n      searchParams.delete(name)\n      searchParams.set(name, value)\n    } else {\n      searchParams.append(name, value)\n    }\n  }\n}\n", "import { FetchResponse } from './fetch_response'\nimport { RequestInterceptor } from './request_interceptor'\nimport { getCookie, compact, metaContent, stringEntriesFromFormData, mergeEntries } from './lib/utils'\n\nexport class FetchRequest {\n  constructor (method, url, options = {}) {\n    this.method = method\n    this.options = options\n    this.originalUrl = url.toString()\n  }\n\n  async perform () {\n    try {\n      const requestInterceptor = RequestInterceptor.get()\n      if (requestInterceptor) {\n        await requestInterceptor(this)\n      }\n    } catch (error) {\n      console.error(error)\n    }\n\n    const fetch = window.Turbo ? window.Turbo.fetch : window.fetch\n    const response = new FetchResponse(await fetch(this.url, this.fetchOptions))\n\n    if (response.unauthenticated && response.authenticationURL) {\n      return Promise.reject(window.location.href = response.authenticationURL)\n    }\n\n    if (response.isScript) {\n      await response.activeScript()\n    }\n\n    const responseStatusIsTurboStreamable = response.ok || response.unprocessableEntity\n\n    if (responseStatusIsTurboStreamable && response.isTurboStream) {\n      await response.renderTurboStream()\n    }\n\n    return response\n  }\n\n  addHeader (key, value) {\n    const headers = this.additionalHeaders\n    headers[key] = value\n    this.options.headers = headers\n  }\n\n  sameHostname () {\n    if (!this.originalUrl.startsWith('http:') && !this.originalUrl.startsWith('https:')) {\n      return true\n    }\n\n    try {\n      return new URL(this.originalUrl).hostname === window.location.hostname\n    } catch (_) {\n      return true\n    }\n  }\n\n  get fetchOptions () {\n    return {\n      method: this.method.toUpperCase(),\n      headers: this.headers,\n      body: this.formattedBody,\n      signal: this.signal,\n      credentials: this.credentials,\n      redirect: this.redirect,\n      keepalive: this.keepalive\n    }\n  }\n\n  get headers () {\n    const baseHeaders = {\n      'X-Requested-With': 'XMLHttpRequest',\n      'Content-Type': this.contentType,\n      Accept: this.accept\n    }\n\n    if (this.sameHostname()) {\n      baseHeaders['X-CSRF-Token'] = this.csrfToken\n    }\n\n    return compact(\n      Object.assign(baseHeaders, this.additionalHeaders)\n    )\n  }\n\n  get csrfToken () {\n    return getCookie(metaContent('csrf-param')) || metaContent('csrf-token')\n  }\n\n  get contentType () {\n    if (this.options.contentType) {\n      return this.options.contentType\n    } else if (this.body == null || this.body instanceof window.FormData) {\n      return undefined\n    } else if (this.body instanceof window.File) {\n      return this.body.type\n    }\n\n    return 'application/json'\n  }\n\n  get accept () {\n    switch (this.responseKind) {\n      case 'html':\n        return 'text/html, application/xhtml+xml'\n      case 'turbo-stream':\n        return 'text/vnd.turbo-stream.html, text/html, application/xhtml+xml'\n      case 'json':\n        return 'application/json, application/vnd.api+json'\n      case 'script':\n        return 'text/javascript, application/javascript'\n      default:\n        return '*/*'\n    }\n  }\n\n  get body () {\n    return this.options.body\n  }\n\n  get query () {\n    const originalQuery = (this.originalUrl.split('?')[1] || '').split('#')[0]\n    const params = new URLSearchParams(originalQuery)\n\n    let requestQuery = this.options.query\n    if (requestQuery instanceof window.FormData) {\n      requestQuery = stringEntriesFromFormData(requestQuery)\n    } else if (requestQuery instanceof window.URLSearchParams) {\n      requestQuery = requestQuery.entries()\n    } else {\n      requestQuery = Object.entries(requestQuery || {})\n    }\n\n    mergeEntries(params, requestQuery)\n\n    const query = params.toString()\n    return (query.length > 0 ? `?${query}` : '')\n  }\n\n  get url () {\n    return (this.originalUrl.split('?')[0]).split('#')[0] + this.query\n  }\n\n  get responseKind () {\n    return this.options.responseKind || 'html'\n  }\n\n  get signal () {\n    return this.options.signal\n  }\n\n  get redirect () {\n    return this.options.redirect || 'follow'\n  }\n\n  get credentials () {\n    return this.options.credentials || 'same-origin'\n  }\n\n  get keepalive () {\n    return this.options.keepalive || false\n  }\n\n  get additionalHeaders () {\n    return this.options.headers || {}\n  }\n\n  get formattedBody () {\n    const bodyIsAString = Object.prototype.toString.call(this.body) === '[object String]'\n    const contentTypeIsJson = this.headers['Content-Type'] === 'application/json'\n\n    if (contentTypeIsJson && !bodyIsAString) {\n      return JSON.stringify(this.body)\n    }\n\n    return this.body\n  }\n}\n", "import { FetchRequest } from './fetch_request'\n\nasync function get (url, options) {\n  const request = new FetchRequest('get', url, options)\n  return request.perform()\n}\n\nasync function post (url, options) {\n  const request = new FetchRequest('post', url, options)\n  return request.perform()\n}\n\nasync function put (url, options) {\n  const request = new FetchRequest('put', url, options)\n  return request.perform()\n}\n\nasync function patch (url, options) {\n  const request = new FetchRequest('patch', url, options)\n  return request.perform()\n}\n\nasync function destroy (url, options) {\n  const request = new FetchRequest('delete', url, options)\n  return request.perform()\n}\n\nexport { get, post, put, patch, destroy }\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { get, patch } from \"@rails/request.js\"\n\n// Connects to data-controller=\"forms\"\nexport default class extends Controller {\n  static targets = [\"input\", \"checkbox\", \"form\"]\n  static values = { model: String, url: String, method: String, object: Object }\n\n  initialize() {\n    console.log(\"initialize forms controller\")\n  }\n\n  next(event) {\n    console.log(\"next\")\n    event.preventDefault()\n\n    if (event.detail.success) {\n      let { url } = event.detail.fetchResponse.response\n      history.pushState({ data_turbo_history: \"replace\" }, \"\", url)\n      Turbo.navigator.history.push(url)\n    }\n  }\n\n  showSectionBySelectedValue(event) {\n    console.log(\"show section by selected value\")\n    event.preventDefault()\n\n    this.toggle(event)\n  }\n\n  toggle(event) {\n    console.log(\"toggle\")\n    event.preventDefault()\n\n    const id = Object.keys(event.params).length ? event.params.targetId : `${event.target.value.toLowerCase()}`\n    const element = document.getElementById(id)\n    const checkboxes = element.getElementsByClassName('form-check-input')\n    // if (element.classList.contains('d-none')) element.classList.remove(\"d-none\")\n    // else element.classList.add(\"d-none\");\n\n    if (element && element.classList.contains('d-none')) {\n      element.classList.remove(\"d-none\")\n      for (let i = 0; i < checkboxes.length; i++) {\n        checkboxes[i].removeAttribute('disabled')\n      }\n    } else {\n      for (let i = 0; i < checkboxes.length; i++) {\n        checkboxes[i].setAttribute('disabled', true)\n      }\n      event.target.name = event.target.name.replace(event.params.modelName, '')\n      element && element.classList.add(\"d-none\");\n    }\n  }\n\n  levelsToggle(event) {\n    console.log(\"levels toggle\")\n    event.preventDefault()\n\n    const id = Object.keys(event.params).length ? event.params.targetId : `${event.target.value.toLowerCase()}`\n    const element = document.getElementById(id)\n\n    if ((event.params && event.params.level && event.params.level === 3) || event.target.value === \"3\") {\n      if (element.classList.contains('d-none')) element.classList.remove('d-none')\n      else element.classList.add('d-none')\n    }\n  }\n\n  closeToggle(event) {\n    console.log(\"close toggle\")\n    event.preventDefault()\n\n    const { open, close } = event.params\n    const { checked } = event.target\n    const label = this.element.getElementsByTagName('label')[0]\n\n    label.innerHTML = checked ? open : close\n  }\n\n  disableOthers(event) {\n    console.log(\"disable other\")\n    event.preventDefault()\n\n    const elements = Array.from(document.querySelectorAll(`.${event.params.targetClass}`))\n    const ids = elements.map((e) => e.id)\n    const aux = ids.filter((id, index) => ids.indexOf(id) !== index)\n    const set = [...new Set(aux)]\n    const repeated = document.querySelectorAll(`#${set[0]}`)\n\n    if (repeated.length > 1) {\n      const last = repeated[repeated.length - 1]\n      const newId = `${event.params.targetClass}-${Date.now()}`\n      last.id = newId\n      last.nextElementSibling.children[0].setAttribute(\"for\", newId)\n    }\n\n    for (const element of elements) {\n      if (element.id !== event.target.id) {\n        if (event.type === \"change\") {\n          if (event.target.checked) {\n            element.checked = false\n            element.setAttribute(\"disabled\", \"disabled\")\n          }\n          else element.removeAttribute(\"disabled\")\n\n          if (element.id === event.target.id && element.hasAttribute(\"disabled\")) element.removeAttribute(\"disabled\")\n        }\n\n        if (event.type === \"click\" || event.type === \"update\") {\n          if (elements.some((e) => e.checked)) {\n            const checkedElement = elements.filter((e) => e.checked)[0]\n\n            if (checkedElement !== element && elements.some((e) => e.checked)) {\n              element.checked = false\n              element.setAttribute(\"disabled\", \"disabled\")\n            }\n          } else element.removeAttribute(\"disabled\")\n        }\n      }\n    }\n  }\n\n  toggleCheckbox(event) {\n    const label = document.querySelector(`label[for=\"${event.target.id}\"]`)\n\n    if (event.target.checked) label.classList.replace(\"btn-light\", \"btn-primary\")\n    else label.classList.replace(\"btn-primary\", \"btn-light\")\n  }\n\n  toggleBinary(event) {\n    event.preventDefault()\n    const link = event.currentTarget\n    const valueInput = document.getElementById(link.dataset.valueInput)\n    const next = link.dataset.state === \"1\" ? \"0\" : \"1\"\n\n    link.dataset.state = next\n    valueInput.value = next === \"1\" ? \"1\" : \"\"\n    link.classList.toggle(\"btn-primary\", next === \"1\")\n    link.classList.toggle(\"btn-light\", next === \"0\")\n  }\n\n  selectExclusiveSlider(event) {\n    const slider = event.currentTarget\n    const group = slider.dataset.group\n    const score = slider.value\n    const min = slider.min\n    const max = slider.dataset.maxValue || slider.max\n    const output = document.getElementById(slider.dataset.outputId)\n    if (output) output.textContent = score\n\n    const pct = (max === min) ? 0 : ((Number(score) - Number(min)) / (Number(max) - Number(min))) * 100\n    slider.style.setProperty(\"--udlp-fill-pct\", `${pct}%`)\n    slider.classList.toggle(\"udlp-slider-max\", score === max)\n    slider.classList.toggle(\"udlp-slider-active\", score !== min && score !== max)\n\n    document.querySelectorAll(`[data-group=\"${group}\"][data-score]`).forEach((input) => {\n      input.value = input.dataset.score === score ? \"1\" : \"\"\n    })\n  }\n\n  selectExclusive(event) {\n    event.preventDefault()\n    const link = event.currentTarget\n    const group = link.dataset.group\n    const valueInput = document.getElementById(link.dataset.valueInput)\n    const wasSelected = link.dataset.state === \"1\"\n\n    document.querySelectorAll(`[data-group=\"${group}\"]`).forEach((el) => {\n      el.dataset.state = \"0\"\n      el.classList.remove(\"btn-udlp-yellow\", \"text-primary\", \"fw-bold\")\n      el.classList.add(\"btn-outline-primary\")\n      const input = document.getElementById(el.dataset.valueInput)\n      if (input) input.value = \"\"\n    })\n\n    if (!wasSelected) {\n      link.dataset.state = \"1\"\n      link.classList.remove(\"btn-outline-primary\")\n      link.classList.add(\"btn-udlp-yellow\", \"text-primary\", \"fw-bold\")\n      valueInput.value = \"1\"\n    }\n  }\n\n  toggleTriState(event) {\n    event.preventDefault()\n    const link = event.currentTarget\n    const valueInput = document.getElementById(link.dataset.valueInput)\n    const current = parseInt(link.dataset.state || \"0\", 10)\n    const next = (current + 1) % 3\n\n    link.dataset.state = next\n    valueInput.value = next === 0 ? \"\" : next\n    link.classList.remove(\"btn-outline-primary\", \"btn-udlp-yellow\", \"btn-udlp-blue\")\n    link.classList.add(\n      next === 0 ? \"btn-outline-primary\" : next === 1 ? \"btn-udlp-yellow\" : \"btn-udlp-blue\"\n    )\n  }\n\n  togglePosition(event) {\n    this.toggleReportCheckbox(event.target, \"players_positions\", \"player-position\")\n  }\n\n  toggleTactic(event) {\n    this.toggleReportCheckbox(event.target, \"tactics\", \"tactic\")\n  }\n\n  togglePlayingStyle(event) {\n    this.toggleReportCheckbox(event.target, \"playing_styles\", \"playing-style\")\n  }\n\n  toggleDeffensivePlayingStyle(event) {\n    this.toggleReportCheckbox(event.target, \"playing_styles\", \"deffensive-playing-style\")\n  }\n\n  toggleAttackingPlayingStyle(event) {\n    this.toggleReportCheckbox(event.target, \"playing_styles\", \"attacking-playing-style\")\n  }\n\n  toggleReportCheckbox(checkbox, klass, type) {\n    const { positionId } = checkbox.dataset\n    const label = document.querySelector(`label[for=\"${checkbox.id}\"]`)\n    const text = label.querySelector(\"span[class*='text']\")\n    const main = document.getElementById(`report-${type}-${positionId}-main`)\n\n    if (checkbox.checked) {\n      // const selectedPositions = document.querySelectorAll(`input[name*=\"report[reports_${klass}_attributes]\"]:checked`)\n      const selectedPositions = document.querySelectorAll(`input[id*=\"${type}\"]:checked`)\n      const isFirst = selectedPositions.length === 1\n\n      if (isFirst) {\n        label.className = \"btn w-100 btn-secondary\"\n        if (text) text.className = \"text-primary fw-bold\"\n        main.value = \"true\"\n      } else {\n        label.className = \"btn w-100 btn-primary\"\n        if (text) text.className = \"text-secondary fw-bold\"\n        main.value = \"false\"\n      }\n    } else {\n      label.className = \"btn w-100 btn-light\"\n      if (text) text.className = \"text-dark fw-bold\"\n      main.value = \"false\"\n    }\n  }\n\n  async submit(event) {\n    event.preventDefault()\n\n    const { reportableUrl } = event.params\n    const { form, value } = event.target\n    const { action } = form\n    const url = new URL(action)\n    const { pathname } = url\n    const formData = new FormData(form)\n    const entries = Object.fromEntries(formData.entries())\n    const params = new URLSearchParams(Object.entries(entries).filter(([_, v]) => !!v))\n    const playerSelector = document.getElementById(\"report_reportable_id\")\n\n    clearTimeout(this.timeout)\n\n    this.timeout = setTimeout(async () => {\n      if (reportableUrl) {\n        const { ok } = await patch(`${reportableUrl}`, { responseKind: \"turbo-stream\", body: formData })\n        if (!ok) alert(\"Error\")\n      } else {\n        const target = `${pathname}${params.toString() ? \"?\" + params.toString() : \"\"}`\n        const { ok } = await get(target, { responseKind: \"turbo-stream\", formData })\n        if (!ok) alert(\"Error\")\n        // Sync the address bar so refresh / back / forward preserve the\n        // current filter set on whichever scoped path the form lives on\n        // (players_path, club_players_path, league_club_players_path\u2026).\n        if (ok && target !== `${window.location.pathname}${window.location.search}`) {\n          history.pushState({}, \"\", target)\n        }\n      }\n\n      if (playerSelector && playerSelector.tagName === \"select\") playerSelector.parentNode.classList.add(\"d-none\")\n    }, 200)\n  }\n\n  toggleCaret(event) {\n    console.log(\"toggle caret\")\n    event.preventDefault()\n\n    const { target } = event\n    if (!target) return\n\n    if (target.localName === \"span\") {\n      target.classList.toggle(\"bi-chevron-right\")\n      target.classList.toggle(\"bi-chevron-down\")\n    } else {\n      const span = target.parentNode.getElementsByTagName(\"span\")[0]\n      if (!span) return\n\n      span.classList.toggle(\"bi-chevron-right\")\n      span.classList.toggle(\"bi-chevron-down\")\n    }\n  }\n\n  async search(event) {\n    console.log(\"search\")\n    event.preventDefault()\n\n    const { action } = this.formTarget\n    const data = new FormData(this.formTarget)\n    const params = new URLSearchParams(Object.fromEntries(data.entries()))\n\n    clearTimeout(this.timeout)\n\n    this.timeout = setTimeout(async () => {\n      const { ok } = await get(`${action}&${params}`, { responseKind: \"turbo-stream\", data })\n      // history.pushState({ data_turbo_history: \"replace\" }, {}, `${action}&${params}`)\n      // this.formTarget.requestSubmit()\n    }, 200)\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Reloads the position-profile select with the profiles of the position the\n// scout marks as main in the report (the `report-player-position-<id>-main`\n// hidden field set by forms#togglePosition). The initial options are\n// server-rendered, so it only repopulates when the main position changes.\n//\n// Values:\n//   * byPosition: { \"<position_id>\": [{ id, code }, ...] }\n//   * main:       id of the server-rendered main position (\"\" when none).\nexport default class extends Controller {\n  static targets = [\"select\"]\n  static values = {\n    byPosition: Object,\n    main: String,\n  }\n\n  connect() {\n    this.boundHandle = this.handlePositionChange.bind(this)\n    document.addEventListener(\"change\", this.boundHandle)\n  }\n\n  disconnect() {\n    if (this.boundHandle) document.removeEventListener(\"change\", this.boundHandle)\n  }\n\n  handlePositionChange(event) {\n    const input = event.target\n    if (!input.matches('input[type=\"checkbox\"][id^=\"report-player-position-\"]')) return\n\n    const positionId = mainPositionId()\n    if (positionId === this.mainValue) return\n\n    this.mainValue = positionId\n    this.populate(this.byPositionValue[positionId] || [])\n  }\n\n  populate(profiles) {\n    const select = this.selectTarget\n    const data = [{ text: \"\", value: \"\" }].concat(\n      profiles.map((p) => ({ text: String(p.code), value: String(p.id) }))\n    )\n\n    const selectable = this.application.getControllerForElementAndIdentifier(select, \"selectable\")\n    if (selectable && selectable.select && typeof selectable.select.setData === \"function\") {\n      selectable.select.setData(data)\n    } else {\n      console.warn(\"[profile-loader] selectable.select.setData unavailable\", selectable)\n      select.innerHTML = data\n        .map((o) => `<option value=\"${o.value}\">${this.escape(o.text)}</option>`)\n        .join(\"\")\n    }\n  }\n\n  escape(s) {\n    const div = document.createElement(\"div\")\n    div.textContent = String(s)\n    return div.innerHTML\n  }\n}\n\n// The position whose `-main` hidden field forms#togglePosition set to \"true\"\n// (\"\" when no position is main). forms#togglePosition is bound on the\n// checkbox itself, so it has already run by the time the change event\n// bubbles up to the document listeners.\nexport function mainPositionId() {\n  const main = document.querySelector('input[id^=\"report-player-position-\"][id$=\"-main\"][value=\"true\"]')\n  return main ? main.id.match(/report-player-position-(\\d+)-main/)[1] : \"\"\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { mainPositionId } from \"./profile_loader_controller\"\n\n// Filters the Atributos items by the report's main position when one is\n// marked, otherwise by every position currently selected in the report's\n// position toggles.\n//\n// Item visibility rule: visible when wildcard (`data-wildcard=\"true\"`) OR\n// when any of its `data-position-ids` is in the active set.\n//\n// Values:\n//   * active: array of position ids (strings) currently driving the filter.\nexport default class extends Controller {\n  static targets = [\"item\", \"category\", \"goalkeeperTag\"]\n  static values = {\n    active: Array,\n  }\n\n  connect() {\n    // Always run the initial filter so category rows with no matching items\n    // (e.g. goalkeeper-flavoured ones when the active set is outfield-only)\n    // collapse on first paint.\n    this.applyFilter(this.activeValue)\n    this.boundHandle = this.handlePositionChange.bind(this)\n    document.addEventListener(\"change\", this.boundHandle)\n  }\n\n  disconnect() {\n    if (this.boundHandle) document.removeEventListener(\"change\", this.boundHandle)\n  }\n\n  handlePositionChange(event) {\n    const input = event.target\n    if (!input.matches('input[type=\"checkbox\"][id^=\"report-player-position-\"]')) return\n\n    const mainId = mainPositionId()\n    const active = mainId\n      ? [mainId]\n      : Array.from(\n          document.querySelectorAll('input[type=\"checkbox\"][id^=\"report-player-position-\"]:checked'),\n          (el) => String(el.dataset.positionId)\n        )\n    this.activeValue = active\n    this.applyFilter(active)\n  }\n\n  applyFilter(active) {\n    const activeSet = new Set(active)\n\n    this.itemTargets.forEach((el) => {\n      const isWildcard = el.dataset.wildcard === \"true\"\n      let positionIds = []\n      try {\n        positionIds = JSON.parse(el.dataset.positionIds || \"[]\")\n      } catch (_) {\n        positionIds = []\n      }\n      const visible = isWildcard || positionIds.some((id) => activeSet.has(String(id)))\n      el.classList.toggle(\"d-none\", !visible)\n    })\n\n    let playerVisible = false\n    let goalkeeperVisible = false\n\n    this.categoryTargets.forEach((row) => {\n      const hasVisibleItem = !!row.querySelector(\n        '[data-items-positions-target=\"item\"]:not(.d-none)'\n      )\n      row.classList.toggle(\"d-none\", !hasVisibleItem)\n      if (hasVisibleItem) {\n        if (row.dataset.referredTo === \"goalkeeper\") goalkeeperVisible = true\n        else if (row.dataset.referredTo === \"player\") playerVisible = true\n      }\n    })\n\n    // Show \"para portero\" only when player and goalkeeper categories are\n    // shown side-by-side; otherwise the bare category name is unambiguous.\n    const showTag = playerVisible && goalkeeperVisible\n    this.goalkeeperTagTargets.forEach((tag) => {\n      const row = tag.closest('[data-items-positions-target=\"category\"]')\n      if (row && row.dataset.referredTo === \"goalkeeper\") {\n        tag.classList.toggle(\"d-none\", !showTag)\n      }\n    })\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { get, post } from \"@rails/request.js\"\n\n// Connects to data-controller=\"matches\"\nexport default class extends Controller {\n  connect() {}\n\n  getLeagues() {\n    const { value, name, id} = this.element\n    const query = {\n      \"q[country_eq]\": value,\n      target_name: name.replace(/country/, \"league_id\"),\n      target_id: id.replace(/country/, \"league_id\"),\n      target_home_name: name.replace(/country/, \"home_id\"),\n      target_home_id: id.replace(/country/, \"home_id\"),\n      target_away_name: name.replace(/country/, \"away_id\"),\n      target_away_id: id.replace(/country/, \"away_id\")\n    }\n\n    get(\"/routes/elements\", {\n      responseKind: \"turbo-stream\",\n      query: query\n    })\n  }\n\n  getClubs() {\n    const { value, name, id} = this.element\n    const countryElement = document.querySelector(`#${id.replace(/league_id/, \"country\")}`)\n    let query = {\n      \"q[league_id_eq]\": value,\n      target_home_name: name.replace(/league_id/, \"home_id\"),\n      target_home_id: id.replace(/league_id/, \"home_id\"),\n      target_away_name: name.replace(/league_id/, \"away_id\"),\n      target_away_id: id.replace(/league_id/, \"away_id\")\n    }\n    if (!!countryElement.value) query[\"q[country_eq]\"] = countryElement.value\n\n    get(\"/routes/elements\", {\n      responseKind: \"turbo-stream\",\n      query: query\n    })\n  }\n}\n", "import { Controller as n } from \"@hotwired/stimulus\";\nclass r extends n {\n  add(t) {\n    t.preventDefault();\n    const e = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, new Date().getTime().toString());\n    this.targetTarget.insertAdjacentHTML(\"beforebegin\", e);\n  }\n  remove(t) {\n    t.preventDefault();\n    const e = t.target.closest(this.wrapperSelectorValue);\n    if (e.dataset.newRecord === \"true\")\n      e.remove();\n    else {\n      e.style.display = \"none\";\n      const a = e.querySelector(\"input[name*='_destroy']\");\n      a.value = \"1\";\n    }\n  }\n}\nr.targets = [\"target\", \"template\"];\nr.values = {\n  wrapperSelector: {\n    type: String,\n    default: \".nested-form-wrapper\"\n  }\n};\nexport {\n  r as default\n};\n", "import NestedForm from \"stimulus-rails-nested-form\"\n\n// Connects to data-controller=\"nested-form\"\nexport default class extends NestedForm {\n  connect() {\n    super.connect()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport {get} from \"@rails/request.js\";\n\n// Connects to data-controller=\"players\"\nexport default class extends Controller {\n  static targets = [\"player_form\"]\n  static values = {\n    match: Object,\n    matchId: Number,\n    report: Object,\n    reportId: Number\n  }\n\n  connect() {\n    console.log(\"Players controller\")\n  }\n\n  async getPlayer(event) {\n    const { value } = event.target\n    if (!!value) {\n      get(\n        `/routes/${this.matchValue.route_id}/matches/${this.matchValue.id}/reports/${this.reportIdValue}/players/${Number(value)}`,\n        {responseKind: \"turbo-stream\"}\n      )\n    }\n  }\n\n  getPositionProfiles(event) {\n    const { value, name, id} = this.element\n    const query = {\n      \"q[position_id_eq]\": value,\n      target_name: name.replace(/position_id/, \"profile_tokens\"),\n      target_id: id.replace(/position_id/, \"profile_tokens\")\n    }\n\n    get(\"/players/elements\", {\n      responseKind: \"turbo-stream\",\n      query: query\n    })\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { get } from \"@rails/request.js\";\n\n// Connects to data-controller=\"reports\"\nexport default class extends Controller {\n  static targets = [\"form\", \"body\", \"pagy\", \"sortRow\"]\n  static values = {\n    reportId: Number,\n  }\n\n  connect() {\n    if (this.hasBodyTarget) {\n      this.element.addEventListener(\"click\", this.onClick.bind(this), true)\n    }\n  }\n\n  getPositionsProfileStatement(event) {\n    const { value } = event.target\n\n    if (value) {\n      get(`/reports/${this.reportIdValue}/positions_profiles/${value}`, {\n        responseKind: \"turbo-stream\"\n      })\n    }\n  }\n\n  // Sortable header 3-click cycle (asc \u2192 desc \u2192 cleared). The filter row's\n  // selects submit via the shared `forms` controller (see\n  // forms_controller.js#submit) \u2014 same turbo-stream GET + pushState\n  // pattern, applied here too so both paths behave identically instead of\n  // this controller hand-rolling its own fetch/DOMParser swap.\n  async onClick(e) {\n    const link = e.target.closest(\"a[data-sortable-toggle-column-value]\")\n    if (!link) return\n    e.preventDefault()\n    e.stopPropagation()\n\n    let url\n    const column = link.dataset.sortableToggleColumnValue\n    const currentSort = new URLSearchParams(window.location.search).get(\"q[s]\")\n    if (column && currentSort === `${column} desc`) {\n      // 3rd click \u2014 clear the sort.\n      url = new URL(window.location.href)\n      url.searchParams.delete(\"q[s]\")\n    } else {\n      url = new URL(link.href)\n    }\n\n    const target = `${url.pathname}${url.search}`\n    const { ok } = await get(target, { responseKind: \"turbo-stream\" })\n    if (ok) {\n      history.pushState({}, \"\", target)\n    } else {\n      // Same failure feedback as forms_controller.js#submit, which\n      // handles the filter row's own submissions \u2014 keep both paths\n      // consistent instead of this one failing silently.\n      alert(\"Error\")\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport {get} from \"@rails/request.js\";\n\nexport default class extends Controller {\n  static targets = [\"conditionalField\", \"competitionSelect\", \"homeSelect\", \"awaySelect\"]\n\n  connect() {\n    console.log(\"Routes controller connected\")\n    this.toggleFields()\n  }\n\n  toggleFields(event) {\n    const { value } = this.competitionSelectTarget\n    let show = false\n\n    if (value) {\n      show = [2, 3].includes(parseInt(value))\n    }\n    \n    this.conditionalFieldTargets.forEach(\n      (field) => {\n        console.log({field})\n        show ? field.classList.remove(\"d-none\") : field.classList.add(\"d-none\")\n      }\n    )\n\n    // No event means connect(): keep the saved home/away selected\n    this.updateTeamSelectors(!event)\n  }\n\n  updateTeamSelectors(keepSelection = false) {\n    const select = this.competitionSelectTarget\n    const { options, selectedIndex } = select\n    const { dataset } = options[selectedIndex]\n    const { kindCd } = dataset\n\n    if (kindCd) {\n      this.updateTeamOptions(kindCd, keepSelection)\n    }\n\n    // this.updateTeamOptions(value)\n  }\n\n  async updateTeamOptions(kindCd, keepSelection = false) {\n    if (!kindCd) return\n\n    const home = this.element.querySelector(\"select[id*=home_id]\")\n    const away = this.element.querySelector(\"select[id*=away_id]\")\n\n    let query = {\n      target_home_name: home.name,\n      target_home_id: home.id,\n      target_away_name: away.name,\n      target_away_id: away.id\n    }\n\n    if (keepSelection) {\n      query.home_selected = home.value\n      query.away_selected = away.value\n    }\n\n    switch(parseInt(kindCd)) {\n      case 0:\n        query.type = \"club\"\n        break\n      case 1:\n        query.type = \"national-team\"\n        break\n      default:\n        break\n    }\n\n    get(\"/routes/teams\", {\n      responseKind: \"turbo-stream\",\n      query: query\n    })\n  }\n}\n", "export default class CssClasses {\n  public main: string\n  // Placeholder\n  public placeholder: string\n\n  // Values\n  public values: string\n  public single: string\n  public multiString: string\n  public max: string\n  public value: string\n  public valueText: string\n  public valueDelete: string\n  public valueOut: string\n\n  // Deselect\n  public deselect: string\n  public deselectPath: string // Not a class but whatever\n\n  // Arrow\n  public arrow: string\n  public arrowClose: string // Not a class but whatever\n  public arrowOpen: string // Not a class but whatever\n\n  // Content\n  public content: string\n  public contentOpen: string\n  public dirAbove: string\n  public dirBelow: string\n\n  // Search\n  public search: string\n  public searchHighlighter: string\n  public searching: string\n  public status: string\n  public addable: string\n  public addablePath: string // Not a class but whatever\n\n  // List optgroups/options\n  public list: string\n\n  // Optgroup\n  public optgroup: string\n  public optgroupLabel: string\n  public optgroupLabelText: string\n  public optgroupActions: string\n  public optgroupSelectAll: string // optgroup select all\n  public optgroupSelectAllBox: string // Not a class but whatever\n  public optgroupSelectAllCheck: string // Not a class but whatever\n  public optgroupClosable: string\n\n  // Option\n  public option: string\n  public optionDelete: string // Not a class but whatever\n  public highlighted: string\n\n  // Modal\n  public modalOverlay: string\n  public modalDialog: string\n  public modalTitle: string\n  public modalClose: string\n  public modalContent: string\n\n  // Misc\n  public mainOpen: string\n  public close: string\n  public selected: string\n  public error: string\n  public disabled: string\n  public hide: string\n\n  constructor(classes?: Partial<CssClasses>) {\n    if (!classes) {\n      classes = {}\n    }\n\n    let join = (a = '', b = '') => `${a} ${b}`.trim()\n\n    this.main = join('ss-main', classes.main)\n    this.placeholder = join('ss-placeholder', classes.placeholder)\n    this.values = join('ss-values', classes.values)\n    this.single = join('ss-single', classes.single)\n    this.multiString = join('ss-multi-string', classes.multiString)\n    this.max = join('ss-max', classes.max)\n    this.value = join('ss-value', classes.value)\n    this.valueText = join('ss-value-text', classes.valueText)\n    this.valueDelete = join('ss-value-delete', classes.valueDelete)\n    this.valueOut = join('ss-value-out', classes.valueOut)\n\n    this.deselect = join('ss-deselect', classes.deselect)\n    this.deselectPath = classes.deselectPath || 'M10,10 L90,90 M10,90 L90,10'\n    this.arrow = join('ss-arrow', classes.arrow)\n    this.arrowClose = classes.arrowClose || 'M10,30 L50,70 L90,30'\n    this.arrowOpen = classes.arrowOpen || 'M10,70 L50,30 L90,70'\n    this.content = join('ss-content', classes.content)\n    this.contentOpen = join('ss-open', classes.contentOpen)\n    this.dirAbove = join('ss-dir-above', classes.dirAbove)\n    this.dirBelow = join('ss-dir-below', classes.dirBelow)\n    this.search = join('ss-search', classes.search)\n    this.searchHighlighter = join(\n      'ss-search-highlight',\n      classes.searchHighlighter\n    )\n    this.searching = join('ss-searching', classes.searching)\n    this.status = join('ss-status', classes.status)\n    this.addable = join('ss-addable', classes.addable)\n    this.addablePath = classes.addablePath || 'M50,10 L50,90 M10,50 L90,50'\n    this.list = join('ss-list', classes.list)\n    this.optgroup = join('ss-optgroup', classes.optgroup)\n    this.optgroupLabel = join('ss-optgroup-label', classes.optgroupLabel)\n    this.optgroupLabelText = join(\n      'ss-optgroup-label-text',\n      classes.optgroupLabelText\n    )\n    this.optgroupActions = join('ss-optgroup-actions', classes.optgroupActions)\n    this.optgroupSelectAll = join('ss-selectall', classes.optgroupSelectAll)\n    this.optgroupSelectAllBox =\n      classes.optgroupSelectAllBox || 'M15,15 L85,15 L85,85 L15,85 Z'\n    this.optgroupSelectAllCheck =\n      classes.optgroupSelectAllCheck || 'M25,50 L42,68 L75,32'\n    this.optgroupClosable = join('ss-closable', classes.optgroupClosable)\n    this.option = join('ss-option', classes.option)\n    this.optionDelete = classes.optionDelete || 'M10,10 L90,90 M10,90 L90,10'\n    this.highlighted = join('ss-highlighted', classes.highlighted)\n    this.modalOverlay = join('ss-modal-overlay', classes.modalOverlay)\n    this.modalDialog = join('ss-modal-dialog', classes.modalDialog)\n    this.modalTitle = join('ss-modal-title', classes.modalTitle)\n    this.modalClose = join('ss-modal-close', classes.modalClose)\n    this.modalContent = join('ss-modal-content', classes.modalContent)\n    this.mainOpen = join('ss-open', classes.mainOpen)\n    this.close = join('ss-close', classes.close)\n    this.selected = join('ss-selected', classes.selected)\n    this.error = join('ss-error', classes.error)\n    this.disabled = join('ss-disabled', classes.disabled)\n    this.hide = join('ss-hide', classes.hide)\n  }\n\n  public getFirst(name: keyof Omit<CssClasses, 'getFirst'>): string {\n    return this[name].split(' ')[0]\n  }\n}\n", "/**\n * Animation timing helpers.\n *\n * CSS still runs the motion — these keep lifecycle and DOM cleanup aligned with\n * --ss-animation-timing so we are not guessing with hardcoded setTimeout values.\n */\n\n/** Matches default --ss-animation-timing in slimselect.scss */\nconst DEFAULT_DURATION_MS = 200\n\n/** Extra ms added to CSS duration for transitionend/animationend safety-net timeouts. */\nexport const ANIMATION_TIMEOUT_BUFFER_MS = 50\n\n/** .ss-content open/close transitions — wait for both before lifecycle continues. */\nexport const CONTENT_PANEL_TRANSITION_PROPERTIES = [\n  'transform',\n  'opacity'\n] as const\n\n/** Parse a CSS time value (e.g. \"0.2s\", \"200ms\") into milliseconds. */\nexport function parseAnimationDuration(\n  cssValue: string,\n  fallback = DEFAULT_DURATION_MS\n): number {\n  const trimmed = cssValue.trim()\n  if (!trimmed) {\n    return fallback\n  }\n\n  if (trimmed.endsWith('ms')) {\n    const ms = parseFloat(trimmed)\n    return Number.isNaN(ms) ? fallback : ms\n  }\n\n  if (trimmed.endsWith('s')) {\n    const seconds = parseFloat(trimmed)\n    return Number.isNaN(seconds) ? fallback : seconds * 1000\n  }\n\n  const numeric = parseFloat(trimmed)\n  return Number.isNaN(numeric) ? fallback : numeric\n}\n\n/** Read --ss-animation-timing from an element's computed styles. */\nexport function getAnimationDuration(\n  element: HTMLElement,\n  fallback = DEFAULT_DURATION_MS\n): number {\n  const computedStyle = getComputedStyle(element)\n  const cssValue = computedStyle\n    .getPropertyValue('--ss-animation-timing')\n    .trim()\n  return parseAnimationDuration(cssValue, fallback)\n}\n\n/**\n * Safety-net timeout for animation waits.\n * Derived from --ss-animation-timing (+ buffer). An explicit settings.timeoutDelay\n * is treated as a minimum — never shorter than the CSS-driven duration.\n */\nexport function getAnimationTimeout(\n  element: HTMLElement,\n  userTimeout?: number,\n  fallback = DEFAULT_DURATION_MS\n): number {\n  const fromCss =\n    getAnimationDuration(element, fallback) + ANIMATION_TIMEOUT_BUFFER_MS\n\n  if (userTimeout === undefined) {\n    return fromCss\n  }\n\n  return Math.max(fromCss, userTimeout)\n}\n\n/** Respect user OS accessibility preference and jsdom (no matchMedia). */\nexport function prefersReducedMotion(): boolean {\n  if (\n    typeof window === 'undefined' ||\n    typeof window.matchMedia !== 'function'\n  ) {\n    return false\n  }\n\n  return window.matchMedia('(prefers-reduced-motion: reduce)').matches\n}\n\nfunction normalizeTransitionProperties(\n  propertyNames?: string | readonly string[]\n): Set<string> | null {\n  if (propertyNames === undefined) {\n    return null\n  }\n\n  const list = Array.isArray(propertyNames) ? propertyNames : [propertyNames]\n  return new Set(list)\n}\n\n/**\n * Wait for CSS transition(s) to finish, with a timeout fallback.\n *\n * Pass a single property name to resolve on that transitionend, or an array to\n * wait until every listed property has fired (e.g. transform + opacity on .ss-content).\n * Optional AbortSignal cleans up listeners when lifecycle cancels a rapid toggle.\n */\nexport function waitForTransitionEnd(\n  element: HTMLElement,\n  propertyNames?: string | readonly string[],\n  timeoutMs = DEFAULT_DURATION_MS,\n  signal?: AbortSignal\n): Promise<void> {\n  if (prefersReducedMotion() || signal?.aborted) {\n    return Promise.resolve()\n  }\n\n  const pending = normalizeTransitionProperties(propertyNames)\n\n  return new Promise<void>((resolve) => {\n    let timer: ReturnType<typeof setTimeout> | null = null\n    let settled = false\n\n    const finish = () => {\n      if (settled) {\n        return\n      }\n      settled = true\n      element.removeEventListener('transitionend', onTransitionEnd)\n      signal?.removeEventListener('abort', onAbort)\n      if (timer) {\n        clearTimeout(timer)\n      }\n      resolve()\n    }\n\n    const onAbort = () => finish()\n\n    const onTransitionEnd = (event: TransitionEvent) => {\n      if (event.target !== element) {\n        return\n      }\n\n      if (pending) {\n        if (!pending.has(event.propertyName)) {\n          return\n        }\n        pending.delete(event.propertyName)\n        if (pending.size > 0) {\n          return\n        }\n      }\n\n      finish()\n    }\n\n    signal?.addEventListener('abort', onAbort, { once: true })\n    element.addEventListener('transitionend', onTransitionEnd)\n    timer = setTimeout(finish, timeoutMs)\n  })\n}\n\n/**\n * Wait for a CSS @keyframes animation to finish, with a timeout fallback.\n *\n * Used when removing multi-select value chips (.ss-value-out). jsdom does not\n * fire animationend, so the timeout wins in unit tests.\n */\nexport function waitForAnimationEnd(\n  element: HTMLElement,\n  animationName?: string,\n  timeoutMs = DEFAULT_DURATION_MS,\n  signal?: AbortSignal\n): Promise<void> {\n  if (prefersReducedMotion() || signal?.aborted) {\n    return Promise.resolve()\n  }\n\n  return new Promise<void>((resolve) => {\n    let timer: ReturnType<typeof setTimeout> | null = null\n    let settled = false\n\n    const finish = () => {\n      if (settled) {\n        return\n      }\n      settled = true\n      element.removeEventListener('animationend', onAnimationEnd)\n      signal?.removeEventListener('abort', onAbort)\n      if (timer) {\n        clearTimeout(timer)\n      }\n      resolve()\n    }\n\n    const onAbort = () => finish()\n\n    const onAnimationEnd = (event: AnimationEvent) => {\n      if (event.target !== element) {\n        return\n      }\n      if (animationName && event.animationName !== animationName) {\n        return\n      }\n      finish()\n    }\n\n    signal?.addEventListener('abort', onAbort, { once: true })\n    element.addEventListener('animationend', onAnimationEnd)\n    timer = setTimeout(finish, timeoutMs)\n  })\n}\n", "import { generateID } from './helpers'\n\nexport type ModalSetting = 'off' | 'on' | 'mobile'\n\nexport const MODAL_MOBILE_BREAKPOINT = 768\n\nexport default class Settings {\n  public id: string = '' // Primary ID for the select\n  public style: string = '' // Style attribute from the select element\n  public class: string[] = [] // Class attribute from the select element\n\n  // Dynamic settings\n  public isMultiple: boolean = false\n  public isOpen: boolean = false\n  public isFullOpen: boolean = false\n\n  // Fields set from constructor\n  public disabled: boolean\n  public alwaysOpen: boolean\n  public showSearch: boolean\n  public focusSearch: boolean\n  public keepSearch: boolean\n  public ariaLabel: string\n  public searchPlaceholder: string\n  public searchText: string\n  public searchingText: string\n  public resultsText: string\n  public deselectText: string\n  public removeText: string\n  public searchHighlight: boolean\n  public closeOnSelect: boolean\n  public contentLocation: HTMLElement | null\n  public contentPosition: 'relative' | 'absolute' | 'fixed'\n  public contentWidth: string\n  public openPosition: 'auto' | 'up' | 'down'\n  public placeholderText: string\n  public allowDeselect: boolean\n  public hideSelected: boolean\n  public multiString: boolean\n  public keepOrder: boolean\n  public showOptionTooltips: boolean\n  public minSelected: number\n  public maxSelected: number\n  public timeoutDelay: number\n  public maxValuesShown: number\n  public maxValuesMessage: string\n  public addableText: string\n  public selectAll: boolean\n  public selectAllText: string\n  public unselectAllText: string\n  public modal: ModalSetting\n  public modalTitle: string\n\n  constructor(settings?: Partial<Settings>) {\n    if (!settings) {\n      settings = {}\n    }\n\n    this.id = 'ss-' + generateID()\n    this.style = settings.style || ''\n    this.class = settings.class || []\n\n    this.disabled = settings.disabled !== undefined ? settings.disabled : false\n    this.alwaysOpen = settings.alwaysOpen !== undefined ? settings.alwaysOpen : false\n    this.showSearch = settings.showSearch !== undefined ? settings.showSearch : true\n    this.focusSearch =\n      settings.focusSearch !== undefined\n        ? settings.focusSearch\n        : typeof window === 'undefined' || window.innerWidth >= MODAL_MOBILE_BREAKPOINT\n    this.keepSearch = settings.keepSearch !== undefined ? settings.keepSearch : false\n    this.ariaLabel = settings.ariaLabel || 'Combobox'\n    this.searchPlaceholder = settings.searchPlaceholder || 'Search...'\n    this.searchText = settings.searchText || 'No Results'\n    this.searchingText = settings.searchingText || 'Searching...'\n    this.resultsText = settings.resultsText || '{count} results available'\n    this.deselectText = settings.deselectText || 'Clear'\n    this.removeText = settings.removeText || 'Remove'\n    this.searchHighlight = settings.searchHighlight !== undefined ? settings.searchHighlight : false\n    this.closeOnSelect = settings.closeOnSelect !== undefined ? settings.closeOnSelect : true\n    this.contentLocation = settings.contentLocation || document.body\n    this.contentPosition = settings.contentPosition || 'absolute'\n    this.contentWidth = settings.contentWidth || ''\n    this.openPosition = settings.openPosition || 'auto' // options: auto, up, down\n    this.placeholderText = settings.placeholderText !== undefined ? settings.placeholderText : 'Select Value'\n    this.allowDeselect = settings.allowDeselect !== undefined ? settings.allowDeselect : false\n    this.hideSelected = settings.hideSelected !== undefined ? settings.hideSelected : false\n    this.multiString = settings.multiString !== undefined ? settings.multiString : false\n    this.keepOrder = settings.keepOrder !== undefined ? settings.keepOrder : false\n    this.showOptionTooltips = settings.showOptionTooltips !== undefined ? settings.showOptionTooltips : false\n    this.minSelected = settings.minSelected || 0\n    this.maxSelected = settings.maxSelected || 1000\n    this.timeoutDelay = settings.timeoutDelay || 200 // Default until SlimSelect reads --ss-animation-timing\n    this.maxValuesShown = settings.maxValuesShown || 20\n    this.maxValuesMessage = settings.maxValuesMessage || '{number} selected'\n    this.addableText = settings.addableText || 'Press \"Enter\" to add {value}'\n    this.selectAll = settings.selectAll !== undefined ? settings.selectAll : false\n    this.selectAllText = settings.selectAllText || 'Select All'\n    this.unselectAllText = settings.unselectAllText || 'Unselect All'\n    this.modal = settings.modal || 'mobile'\n    this.modalTitle = settings.modalTitle || ''\n  }\n}\n", "import type { Optgroup, Option } from './store'\nimport { MODAL_MOBILE_BREAKPOINT, type ModalSetting } from './settings'\n\ntype DataItem = Partial<Option> | Partial<Optgroup>\n\n/** Copy option data attributes into a plain object (not a live DOMStringMap). */\nexport function copyOptionData(data?: { [key: string]: string } | DOMStringMap | null): { [key: string]: string } {\n  if (!data) {\n    return {}\n  }\n\n  const result: { [key: string]: string } = {}\n  for (const key of Object.keys(data)) {\n    const value = data[key]\n    if (value !== undefined) {\n      result[key] = value\n    }\n  }\n  return result\n}\n\n/** Label text only — excludes nested form controls (e.g. wrapped select options). */\nexport function getLabelElementText(label: HTMLLabelElement): string {\n  const clone = label.cloneNode(true) as HTMLLabelElement\n  clone.querySelectorAll('select, option, optgroup, textarea, input, button').forEach((el) => el.remove())\n\n  return clone.textContent?.replace(/\\s+/g, ' ').trim() || ''\n}\n\n/** Associated label text for a select, or its aria-label when no label is linked. */\nexport function getAssociatedLabelText(select: HTMLSelectElement): string {\n  if (select.labels && select.labels.length > 0) {\n    const texts = Array.from(select.labels).map(getLabelElementText).filter(Boolean)\n\n    if (texts.length > 0) {\n      return [...new Set(texts)].join(' ')\n    }\n  }\n\n  return select.getAttribute('aria-label')?.trim() || ''\n}\n\n// Generate an 8 character random string\nexport function generateID(): string {\n  return Math.random().toString(36).substring(2, 10)\n}\n\nexport function hasClassInTree(element: HTMLElement, className: string): HTMLElement | null {\n  function hasClass(e: HTMLElement, c: string) {\n    // If the element has the class return element\n    if (c && e && e.classList && e.classList.contains(c)) {\n      return e\n    }\n\n    // If the element has a dataset id of the class return element\n    if (c && e && e.dataset && e.dataset.id && e.dataset.id === className) {\n      return e\n    }\n\n    return null\n  }\n\n  function parentByClass(e: any, c: string): any {\n    if (!e || e === (document as any)) {\n      return null\n    } else if (hasClass(e, c)) {\n      return e\n    } else {\n      return parentByClass(e.parentNode, c)\n    }\n  }\n\n  return hasClass(element, className) || parentByClass(element, className)\n}\n\n// debounce will call the last requested function after the wait time\nexport function debounce<T extends (...args: any[]) => void>(func: T, wait = 50, immediate = false): () => void {\n  let timeout: any\n  return function (this: any, ...args: any[]): void {\n    const context = self\n    const later = () => {\n      timeout = null\n      if (!immediate) {\n        func.apply(context, args)\n      }\n    }\n    const callNow = immediate && !timeout\n    clearTimeout(timeout)\n    timeout = setTimeout(later, wait)\n    if (callNow) {\n      func.apply(context, args)\n    }\n  }\n}\n\nexport function isEqual(a: any, b: any): boolean {\n  return JSON.stringify(a) === JSON.stringify(b)\n}\n\n/** Compare selected id sets regardless of order (multi-select). */\nexport function selectedIdsEqual(a: string[], b: string[]): boolean {\n  if (a.length !== b.length) {\n    return false\n  }\n\n  const sortedA = [...a].sort()\n  const sortedB = [...b].sort()\n  return sortedA.every((id, i) => id === sortedB[i])\n}\n\nconst OPTION_FIELDS = [\n  'id',\n  'value',\n  'text',\n  'html',\n  'defaultSelected',\n  'selected',\n  'display',\n  'disabled',\n  'placeholder',\n  'class',\n  'style',\n  'mandatory'\n] as const\n\nfunction shallowRecordEqual(a: Record<string, string>, b: Record<string, string>): boolean {\n  const aKeys = Object.keys(a)\n  const bKeys = Object.keys(b)\n\n  if (aKeys.length !== bKeys.length) {\n    return false\n  }\n\n  for (const key of aKeys) {\n    if (a[key] !== b[key]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction normalizedOptionField(\n  option: Partial<Option>,\n  field: (typeof OPTION_FIELDS)[number]\n): string | boolean | Record<string, string> {\n  switch (field) {\n    case 'id':\n      return option.id || ''\n    case 'value':\n      return option.value === undefined ? option.text || '' : option.value || ''\n    case 'text':\n      return option.text || ''\n    case 'html':\n      return option.html || ''\n    case 'defaultSelected':\n      return option.defaultSelected ?? false\n    case 'selected':\n      return option.selected ?? false\n    case 'display':\n      return option.display ?? true\n    case 'disabled':\n      return option.disabled ?? false\n    case 'placeholder':\n      return option.placeholder ?? false\n    case 'class':\n      return option.class || ''\n    case 'style':\n      return option.style || ''\n    case 'mandatory':\n      return option.mandatory ?? false\n    default:\n      return option.data || {}\n  }\n}\n\nfunction isOptgroupItem(item: DataItem): item is Partial<Optgroup> {\n  return !!item && typeof item === 'object' && 'label' in item && 'options' in item\n}\n\nfunction optionStructureEqual(a: Partial<Option>, b: Partial<Option>): boolean {\n  for (const field of OPTION_FIELDS) {\n    const av = normalizedOptionField(a, field)\n    const bv = normalizedOptionField(b, field)\n\n    if (av !== bv) {\n      return false\n    }\n  }\n\n  return shallowRecordEqual(a.data || {}, b.data || {})\n}\n\nfunction optgroupStructureEqual(a: Partial<Optgroup>, b: Partial<Optgroup>): boolean {\n  const normalized = (optgroup: Partial<Optgroup>) => ({\n    id: optgroup.id || '',\n    label: optgroup.label || '',\n    selectAll: optgroup.selectAll ?? false,\n    closable: optgroup.closable || 'off'\n  })\n\n  const aNormalized = normalized(a)\n  const bNormalized = normalized(b)\n\n  if (\n    aNormalized.id !== bNormalized.id ||\n    aNormalized.label !== bNormalized.label ||\n    aNormalized.selectAll !== bNormalized.selectAll ||\n    aNormalized.closable !== bNormalized.closable\n  ) {\n    return false\n  }\n\n  const aOptions = a.options || []\n  const bOptions = b.options || []\n\n  if (aOptions.length !== bOptions.length) {\n    return false\n  }\n\n  for (let i = 0; i < aOptions.length; i++) {\n    if (!optionStructureEqual(aOptions[i], bOptions[i])) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/** Compare option/optgroup arrays without JSON.stringify. */\nexport function dataStructureEqual(a: DataItem[], b: DataItem[]): boolean {\n  if (a === b) {\n    return true\n  }\n\n  if (a.length !== b.length) {\n    return false\n  }\n\n  for (let i = 0; i < a.length; i++) {\n    const aItem = a[i]\n    const bItem = b[i]\n    const aIsOptgroup = isOptgroupItem(aItem)\n    const bIsOptgroup = isOptgroupItem(bItem)\n\n    if (aIsOptgroup !== bIsOptgroup) {\n      return false\n    }\n\n    if (aIsOptgroup) {\n      if (!optgroupStructureEqual(aItem, bItem)) {\n        return false\n      }\n      continue\n    }\n\n    if (!optionStructureEqual(aItem as Partial<Option>, bItem as Partial<Option>)) {\n      return false\n    }\n  }\n\n  return true\n}\n\nexport function kebabCase(str: string): string {\n  const result = str.replace(/[A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE]/g, (match) => '-' + match.toLowerCase())\n  return str[0] === str[0].toUpperCase() ? result.substring(1) : result\n}\n\nexport function shouldUseModalView(\n  modal: ModalSetting,\n  viewportWidth: number = typeof window !== 'undefined' ? window.innerWidth : MODAL_MOBILE_BREAKPOINT\n): boolean {\n  if (modal === 'on') {\n    return true\n  }\n  if (modal === 'mobile') {\n    return viewportWidth < MODAL_MOBILE_BREAKPOINT\n  }\n  return false\n}\n", "/**\n * Global window/document listeners extracted from SlimSelect.\n *\n * Keeps index.ts thinner and makes listener attach/detach testable in isolation.\n * Document click is separate from attach() so it only runs while dropdown is\n * fully open (wired via Lifecycle onOpenReady / onCloseReady).\n */\n\nimport { debounce, hasClassInTree } from './helpers'\n\nexport interface GlobalEventHandlers {\n  onDocumentClick: (e: Event) => void\n  onWindowResize: () => void\n  onWindowScroll: () => void\n  onVisibilityChange: () => void\n}\n\nexport default class GlobalEvents {\n  private attached = false\n\n  constructor(private handlers: GlobalEventHandlers) {}\n\n  /** Attach long-lived listeners for the SlimSelect instance lifetime. */\n  public attach(options: { listenScroll: boolean }): void {\n    if (this.attached) {\n      return\n    }\n\n    this.attached = true\n    window.addEventListener('resize', this.resizeHandler, false)\n\n    // Scroll listener only needed when openPosition is auto (reposition on scroll)\n    if (options.listenScroll) {\n      window.addEventListener('scroll', this.scrollHandler, false)\n    }\n\n    document.addEventListener('visibilitychange', this.visibilityHandler)\n  }\n\n  /** Attached after open animation completes — closes on outside click. */\n  public attachDocumentClick(): void {\n    document.addEventListener('click', this.handlers.onDocumentClick)\n  }\n\n  public detachDocumentClick(): void {\n    document.removeEventListener('click', this.handlers.onDocumentClick)\n  }\n\n  public detach(options: { listenScroll: boolean }): void {\n    if (!this.attached) {\n      return\n    }\n\n    this.attached = false\n    this.detachDocumentClick()\n    window.removeEventListener('resize', this.resizeHandler, false)\n\n    if (options.listenScroll) {\n      window.removeEventListener('scroll', this.scrollHandler, false)\n    }\n\n    document.removeEventListener('visibilitychange', this.visibilityHandler)\n  }\n\n  private resizeHandler = debounce(() => {\n    this.handlers.onWindowResize()\n  })\n\n  private scrollHandler = debounce(() => {\n    this.handlers.onWindowScroll()\n  })\n\n  private visibilityHandler = () => {\n    this.handlers.onVisibilityChange()\n  }\n}\n\nexport { hasClassInTree }\n", "/**\n * Open/close state machine for SlimSelect.\n *\n * Replaces scattered openTimeout/closeTimeout in index.ts with a single flow:\n *   closed → opening → open → closing → closed\n *\n * Maps to settings consumers expect:\n *   - isOpen: true during opening + open\n *   - isFullOpen: true only in open state (after animation / afterOpen)\n *\n * Lifecycle waits for render.waitForAnimation() before firing afterOpen/afterClose.\n * When no animation waiter is provided, falls back to settings.timeoutDelay.\n *\n * Close flow: beforeClose (veto) → onClose (sync DOM/settings) → animation → afterClose\n */\n\nimport type { CloseInfo } from './render'\n\nexport type LifecycleState = 'closed' | 'opening' | 'open' | 'closing'\n\nexport interface LifecycleHandlers {\n  beforeOpen?: () => void\n  afterOpen?: () => void\n  /** Return false to cancel close before any DOM changes. */\n  beforeClose?: (info: CloseInfo) => boolean | void\n  /** Sync close work — render, focus, settings. Runs after beforeClose approves. */\n  onClose?: (info: CloseInfo) => void\n  afterClose?: () => void\n  /** Fires when fully open — used to attach document click-outside listener. */\n  onOpenReady?: () => void\n  /** Fires when fully closed — used to detach document click-outside listener. */\n  onCloseReady?: () => void\n}\n\nexport interface LifecycleOptions {\n  /** Fallback when waitForAnimation is not provided (no CSS element yet). */\n  timeoutDelay: number\n  waitForAnimation?: (\n    phase: 'open' | 'close',\n    signal?: AbortSignal\n  ) => Promise<void>\n}\n\nexport default class Lifecycle {\n  public state: LifecycleState = 'closed'\n  private pendingTimer: ReturnType<typeof setTimeout> | null = null\n  /** Resolvers for in-flight waitForPhase promises — cancelled on rapid toggle. */\n  private waitResolvers: Array<() => void> = []\n  /** Incremented on cancelPending(); stale async completions check this before firing handlers. */\n  private generation = 0\n  private animationAbort: AbortController | null = null\n\n  constructor(\n    private handlers: LifecycleHandlers,\n    private options: LifecycleOptions\n  ) {}\n\n  public get isOpen(): boolean {\n    return this.state === 'opening' || this.state === 'open'\n  }\n\n  public get isFullOpen(): boolean {\n    return this.state === 'open'\n  }\n\n  public async requestOpen(): Promise<void> {\n    if (this.state === 'opening' || this.state === 'open') {\n      return\n    }\n\n    this.cancelPending()\n    const gen = ++this.generation\n\n    if (this.handlers.beforeOpen) {\n      this.handlers.beforeOpen()\n    }\n\n    this.state = 'opening'\n    await this.waitForPhase('open', gen)\n\n    // User closed before open animation finished (issue #397)\n    if (gen !== this.generation) {\n      if (this.state === 'opening') {\n        this.state = 'closed'\n      }\n      return\n    }\n\n    this.state = 'open'\n\n    if (this.handlers.afterOpen) {\n      this.handlers.afterOpen()\n    }\n\n    if (this.handlers.onOpenReady) {\n      this.handlers.onOpenReady()\n    }\n  }\n\n  public async requestClose(\n    info: CloseInfo = { source: 'api', selectionChanged: false }\n  ): Promise<boolean> {\n    if (this.state === 'closed' || this.state === 'closing') {\n      return false\n    }\n\n    if (this.handlers.beforeClose && this.handlers.beforeClose(info) === false) {\n      return false\n    }\n\n    this.cancelPending()\n    const gen = ++this.generation\n\n    if (this.handlers.onClose) {\n      this.handlers.onClose(info)\n    }\n\n    this.state = 'closing'\n    await this.waitForPhase('close', gen)\n\n    if (gen !== this.generation) {\n      return false\n    }\n\n    this.state = 'closed'\n\n    if (this.handlers.afterClose) {\n      this.handlers.afterClose()\n    }\n\n    if (this.handlers.onCloseReady) {\n      this.handlers.onCloseReady()\n    }\n\n    return true\n  }\n\n  /** Cancel timers and resolve waiting phases — called when open/close race each other. */\n  public cancelPending(): void {\n    this.generation++\n    this.animationAbort?.abort()\n    this.animationAbort = null\n    if (this.pendingTimer) {\n      clearTimeout(this.pendingTimer)\n      this.pendingTimer = null\n    }\n    const resolvers = this.waitResolvers.splice(0)\n    for (const resolve of resolvers) {\n      resolve()\n    }\n  }\n\n  public destroy(): void {\n    this.cancelPending()\n    this.state = 'closed'\n  }\n\n  /**\n   * Wait for the CSS animation to finish (or timeoutDelay when no waiter exists).\n   * cancelPending() resolves the wait early for rapid open/close toggles.\n   */\n  private waitForPhase(\n    phase: 'open' | 'close',\n    gen: number\n  ): Promise<void> {\n    return new Promise<void>((resolve) => {\n      let settled = false\n      const finish = () => {\n        if (settled) {\n          return\n        }\n        settled = true\n        const idx = this.waitResolvers.indexOf(finish)\n        if (idx !== -1) {\n          this.waitResolvers.splice(idx, 1)\n        }\n        resolve()\n      }\n\n      this.waitResolvers.push(finish)\n\n      if (this.options.waitForAnimation) {\n        const controller = new AbortController()\n        this.animationAbort = controller\n        void this.options\n          .waitForAnimation(phase, controller.signal)\n          .catch(() => undefined)\n          .finally(() => {\n            if (this.animationAbort === controller) {\n              this.animationAbort = null\n            }\n            finish()\n          })\n      } else {\n        this.pendingTimer = setTimeout(() => {\n          this.pendingTimer = null\n          finish()\n        }, this.options.timeoutDelay)\n      }\n    }).then(() => {\n      if (gen !== this.generation) {\n        return\n      }\n    })\n  }\n}\n", "import { copyOptionData, generateID } from './helpers'\n\nexport class Option {\n  id: string\n  value: string\n  text: string\n  html: string\n  defaultSelected: boolean\n  selected: boolean\n  display: boolean\n  disabled: boolean\n  placeholder: boolean\n  class: string\n  style: string\n  data: { [key: string]: string }\n  mandatory: boolean\n\n  constructor(option: Partial<Option>) {\n    this.id = !option.id || option.id === '' ? generateID() : option.id\n    this.value =\n      option.value === undefined ? option.text || '' : option.value || ''\n    this.text = option.text || ''\n    this.html = option.html || ''\n    this.defaultSelected =\n      option.defaultSelected !== undefined ? option.defaultSelected : false\n    this.selected = option.selected !== undefined ? option.selected : false\n    this.display = option.display !== undefined ? option.display : true\n    this.disabled = option.disabled !== undefined ? option.disabled : false\n    this.mandatory = option.mandatory !== undefined ? option.mandatory : false\n    this.placeholder =\n      option.placeholder !== undefined ? option.placeholder : false\n    this.class = option.class || ''\n    this.style = option.style || ''\n    this.data = copyOptionData(option.data)\n  }\n}\nexport class Optgroup {\n  public id: string\n  public label: string\n  public selectAll: boolean\n  public closable: 'off' | 'open' | 'close'\n  public options: Partial<Option>[]\n\n  constructor(optgroup: Partial<Optgroup>) {\n    this.id = !optgroup.id || optgroup.id === '' ? generateID() : optgroup.id\n    this.label = optgroup.label || ''\n    this.selectAll =\n      optgroup.selectAll === undefined ? false : optgroup.selectAll\n    this.closable = optgroup.closable || 'off'\n\n    // If options exist, loop through options and create new option class\n    // and set the options to the optgroup options field\n    this.options = []\n    if (optgroup.options) {\n      for (const o of optgroup.options) {\n        this.options.push(new Option(o))\n      }\n    }\n  }\n}\n\nexport default class Store {\n  private selectType: 'single' | 'multiple' = 'single'\n\n  // Main data set, never null\n  private data: (Option | Optgroup)[] = []\n  private selectedOrder: string[] = []\n  /** Baseline option list — restored when search is cleared (API results are temporary). */\n  private catalog: (Option | Optgroup)[] | null = null\n\n  constructor(\n    type: 'single' | 'multiple',\n    data: (Partial<Option> | Partial<Optgroup>)[]\n  ) {\n    this.selectType = type\n    this.setData(data)\n    this.snapshotCatalog()\n  }\n\n  // Validate DataArrayPartial\n  public validateDataArray(\n    data: (Partial<Option> | Partial<Optgroup>)[]\n  ): Error | null {\n    if (!Array.isArray(data)) {\n      return new Error('Data must be an array')\n    }\n\n    // Loop through each data object\n    for (let dataObj of data) {\n      if (!dataObj) continue\n\n      // Optgroup\n      if (dataObj instanceof Optgroup || 'label' in dataObj) {\n        if (!('label' in dataObj)) {\n          return new Error('Optgroup must have a label')\n        }\n\n        if ('options' in dataObj && dataObj.options) {\n          for (let option of dataObj.options) {\n            const validationError = this.validateOption(option)\n            if (validationError) {\n              return validationError\n            }\n          }\n        }\n      } else if (dataObj instanceof Option || 'text' in dataObj) {\n        const validationError = this.validateOption(dataObj)\n        if (validationError) {\n          return validationError\n        }\n      } else {\n        return new Error('Data object must be a valid optgroup or option')\n      }\n    }\n\n    return null\n  }\n\n  // Validate Option\n  public validateOption(option: Partial<Option>): Error | null {\n    if (!('text' in option)) {\n      return new Error('Option must have a text')\n    }\n\n    return null\n  }\n\n  public partialToFullData(\n    data: (Partial<Option> | Partial<Optgroup>)[]\n  ): (Option | Optgroup)[] {\n    let dataFinal: (Option | Optgroup)[] = []\n    data.forEach((dataObj) => {\n      if (!dataObj) return\n\n      // Optgroup\n      if (dataObj instanceof Optgroup || 'label' in dataObj) {\n        let optOptions: Option[] = []\n        if ('options' in dataObj && dataObj.options) {\n          dataObj.options.forEach((option: Partial<Option>) => {\n            optOptions.push(new Option(option))\n          })\n        }\n\n        if (optOptions.length > 0) {\n          dataFinal.push(new Optgroup(dataObj as Partial<Optgroup>))\n        }\n      }\n\n      // Option\n      if (dataObj instanceof Option || 'text' in dataObj) {\n        dataFinal.push(new Option(dataObj as Partial<Option>))\n      }\n    })\n\n    return dataFinal\n  }\n\n  /** Snapshot the current data as the catalog baseline (not called for API search results). */\n  public snapshotCatalog(): void {\n    this.catalog = this.cloneData(this.data)\n  }\n\n  /** Catalog baseline used when clearing search. */\n  public getCatalogData(): (Option | Optgroup)[] {\n    return this.cloneData(this.catalog ?? this.data)\n  }\n\n  private cloneData(data: (Option | Optgroup)[]): (Option | Optgroup)[] {\n    return data.map((item) => {\n      if (item instanceof Optgroup) {\n        return new Optgroup({\n          id: item.id,\n          label: item.label,\n          selectAll: item.selectAll,\n          closable: item.closable,\n          options: item.options.map((option) =>\n            new Option(option instanceof Option ? { ...option } : option)\n          )\n        })\n      }\n\n      return new Option({ ...(item as Option) })\n    })\n  }\n\n  private optionMatchesSelected(\n    candidate: Option,\n    selected: Option\n  ): boolean {\n    if (candidate.id === selected.id) {\n      return true\n    }\n\n    return (\n      selected.value !== '' &&\n      candidate.value !== '' &&\n      candidate.value === selected.value\n    )\n  }\n\n  private findOptionInData(\n    data: (Option | Optgroup)[],\n    selected: Option\n  ): Option | null {\n    for (const item of data) {\n      if (item instanceof Option) {\n        if (this.optionMatchesSelected(item, selected)) {\n          return item\n        }\n        continue\n      }\n\n      for (const option of item.options as Option[]) {\n        if (this.optionMatchesSelected(option, selected)) {\n          return option\n        }\n      }\n    }\n\n    return null\n  }\n\n  public setData(\n    data: (Partial<Option> | Partial<Optgroup>)[],\n    preserveSelected: boolean = false\n  ) {\n    // Convert new data to full data array\n    const newData = this.partialToFullData(data)\n\n    let selectedOptionsBeforeUpdate: Option[] = []\n\n    if (preserveSelected) {\n      // Get currently selected options before updating data\n      selectedOptionsBeforeUpdate = this.getSelectedOptions()\n\n      // Check which selected options are missing from new data\n      const missingSelected: Option[] = []\n      selectedOptionsBeforeUpdate.forEach((selectedOption) => {\n        if (!this.findOptionInData(newData, selectedOption)) {\n          missingSelected.push(selectedOption)\n        }\n      })\n\n      // Add missing selected options to the beginning of the data\n      this.data = [...missingSelected, ...newData]\n\n      const allowEmptySelection =\n        this.selectType === 'single' &&\n        selectedOptionsBeforeUpdate.length === 0\n      const selectedIds = selectedOptionsBeforeUpdate.map((selected) => {\n        const match = this.findOptionInData(this.data, selected)\n        return match ? match.id : selected.id\n      })\n\n      this.setSelectedBy('id', selectedIds, allowEmptySelection)\n    } else {\n      this.data = newData\n    }\n\n    // Run this.data through setSelected by value\n    // to set the selected property and clean any wrong selected\n    if (!preserveSelected && this.selectType === 'single') {\n      this.setSelectedBy('id', this.getSelected(), false)\n    }\n  }\n\n  // Get data will return all the data (cloned by default for public API safety)\n  public getData(clone = true): Option[] | Optgroup[] {\n    return this.filter(null, true, clone) as Option[] | Optgroup[]\n  }\n\n  // Get data options will return the data as a flat array of just options\n  public getDataOptions(clone = true): Option[] {\n    return this.filter(null, false, clone) as Option[]\n  }\n\n  public addOption(option: Partial<Option>, addToStart: boolean = false) {\n    if (addToStart) {\n      let data = [new Option(option)] as (Option | Optgroup)[]\n      this.setData(data.concat(this.getData()))\n    } else {\n      this.setData(this.getData().concat(new Option(option)))\n    }\n  }\n\n  // Pass in an array of id that will loop through\n  // each option and set the selected property to true\n  // but also clean selected by determining selectType\n  // When allowEmptySelection is true (e.g. after search with no prior selection), single select will not auto-select the first option\n  public setSelectedBy(\n    selectedType: 'id' | 'value',\n    selectedValues: string[],\n    allowEmptySelection: boolean = false\n  ) {\n    let firstOption: Partial<Option> | null = null\n    let hasSelected = false\n    const selectedObjects: Partial<Option>[] = []\n\n    for (let dataObj of this.data) {\n      // Optgroup\n      if (dataObj instanceof Optgroup) {\n        for (let option of dataObj.options as Partial<Option>[]) {\n          if (!firstOption) {\n            firstOption = option\n          }\n\n          let optionValue = option[selectedType] || ''\n          option.selected = hasSelected\n            ? false\n            : selectedValues.includes(optionValue)\n\n          // If the option is selected, set hasSelected to true\n          // for single based selects\n          if (option.selected) {\n            selectedObjects.push(option)\n\n            if (this.selectType === 'single') {\n              hasSelected = true\n            }\n          }\n        }\n      }\n\n      // Option\n      if (dataObj instanceof Option) {\n        if (!firstOption) {\n          firstOption = dataObj\n        }\n\n        dataObj.selected = hasSelected\n          ? false\n          : selectedValues.includes(dataObj[selectedType])\n\n        // If the option is selected, set hasSelected to true\n        // for single based selects\n        if (dataObj.selected) {\n          selectedObjects.push(dataObj)\n\n          if (this.selectType === 'single') {\n            hasSelected = true\n          }\n        }\n      }\n    }\n\n    // If no options are selected, select the first option (unless allowEmptySelection, e.g. after search with no selection)\n    if (\n      this.selectType === 'single' &&\n      firstOption &&\n      !hasSelected &&\n      !allowEmptySelection\n    ) {\n      firstOption.selected = true\n      selectedObjects.push(firstOption)\n    }\n\n    // Put together a list of selected ids in the order of the selected values\n    const selectedIds = selectedValues.map((value) => {\n      return (\n        selectedObjects.find((option) => option[selectedType] === value)?.id ||\n        ''\n      )\n    })\n\n    this.selectedOrder = selectedIds\n  }\n\n  public getSelected(): string[] {\n    return this.getSelectedOptions().map((option) => option.id)\n  }\n\n  public getSelectedValues(): string[] {\n    return this.getSelectedOptions().map((option) => option.value)\n  }\n\n  public getSelectedOptions(): Option[] {\n    const selected: Option[] = []\n\n    for (const dataObj of this.data) {\n      if (dataObj instanceof Optgroup) {\n        for (const option of dataObj.options as Option[]) {\n          if (option.selected) {\n            selected.push(option)\n          }\n        }\n      } else if (dataObj.selected) {\n        selected.push(dataObj)\n      }\n    }\n\n    return selected\n  }\n\n  public getOptgroupByID(id: string): Optgroup | null {\n    // Loop through each data object\n    // and if optgroup is found, return it\n    for (let dataObj of this.data) {\n      if (dataObj instanceof Optgroup && dataObj.id === id) {\n        return dataObj\n      }\n    }\n\n    return null\n  }\n\n  public getOptionByID(id: string): Option | null {\n    for (const dataObj of this.data) {\n      if (dataObj instanceof Optgroup) {\n        for (const option of dataObj.options as Option[]) {\n          if (option.id === id) {\n            return option\n          }\n        }\n      } else if (dataObj.id === id) {\n        return dataObj\n      }\n    }\n\n    return null\n  }\n\n  public getSelectType(): string {\n    return this.selectType\n  }\n\n  public getFirstOption(): Option | null {\n    let option: Option | null = null\n    for (let dataObj of this.data) {\n      if (dataObj instanceof Optgroup) {\n        option = dataObj.options[0] as Option\n      } else if (dataObj instanceof Option) {\n        option = dataObj\n      }\n\n      if (option) {\n        break\n      }\n    }\n    return option\n  }\n\n  // Take in search string and return filtered list of values\n  public search(\n    search: string,\n    searchFilter: (opt: Option, search: string) => boolean\n  ): (Option | Optgroup)[] {\n    search = search.trim()\n\n    // If search is empty, return all data\n    if (search === '') {\n      return this.getData(false)\n    }\n\n    // Run filter with search function (read-only view for render)\n    return this.filter((opt: Option): boolean => {\n      return searchFilter(opt, search)\n    }, true, false)\n  }\n\n  private createOptgroupView(\n    source: Optgroup,\n    options: Option[]\n  ): Optgroup {\n    const view = new Optgroup({\n      id: source.id,\n      label: source.label,\n      selectAll: source.selectAll,\n      closable: source.closable,\n      options: []\n    })\n    view.options = options\n    return view\n  }\n\n  // Filter takes in a function that will be used to filter the data\n  // This will also keep optgroups of sub options meet the filter requirements\n  public filter(\n    filter: { (opt: Option): boolean } | null,\n    includeOptgroup: boolean,\n    clone = true\n  ): (Option | Optgroup)[] {\n    const dataSearch: (Option | Optgroup)[] = []\n    this.data.forEach((dataObj: Option | Optgroup) => {\n      // Optgroup\n      if (dataObj instanceof Optgroup) {\n        let optOptions: Option[] = []\n        let options = dataObj.options as Option[]\n        options.forEach((option: Option) => {\n          if (!filter || filter(option as Option)) {\n            // If you dont want to include optgroups\n            // just push to the dataSearch array\n            if (!includeOptgroup) {\n              dataSearch.push(clone ? new Option(option) : option)\n            } else {\n              optOptions.push(clone ? new Option(option) : option)\n            }\n          }\n        })\n\n        // If we pushed any options to the optOptions array\n        // push the optgroup to the dataSearch array\n        if (optOptions.length > 0) {\n          if (clone) {\n            let optgroup = new Optgroup(dataObj)\n            optgroup.options = optOptions\n            dataSearch.push(optgroup)\n          } else {\n            dataSearch.push(this.createOptgroupView(dataObj, optOptions))\n          }\n        }\n      }\n\n      // Option\n      if (dataObj instanceof Option) {\n        if (!filter || filter(dataObj)) {\n          dataSearch.push(clone ? new Option(dataObj) : dataObj)\n        }\n      }\n    })\n\n    return dataSearch\n  }\n\n  // Take in an array of options and reoder them based upon the selected order\n  public selectedOrderOptions(options: Option[]): Option[] {\n    const newOrder: Option[] = []\n    this.selectedOrder.forEach((id) => {\n      const option = options.find((opt) => opt.id === id)\n      if (option) {\n        newOrder.push(option)\n      }\n    })\n\n    // add any remaining options that were not in the selected order\n    options.forEach((option) => {\n      let isIn = false\n      newOrder.forEach((selectedOption) => {\n        if (option.id === selectedOption.id) {\n          isIn = true\n\n          return\n        }\n      })\n\n      if (!isIn) {\n        newOrder.push(option)\n      }\n    })\n\n    return newOrder\n  }\n}\n", "import { debounce, shouldUseModalView } from './helpers'\nimport {\n  CONTENT_PANEL_TRANSITION_PROPERTIES,\n  getAnimationDuration,\n  getAnimationTimeout,\n  waitForAnimationEnd,\n  waitForTransitionEnd\n} from './animations'\nimport Settings from './settings'\nimport Store, { Optgroup, Option } from './store'\nimport CssClasses from './classes'\n\nexport type CloseSource = 'select' | 'deselect' | 'outside' | 'toggle' | 'escape' | 'tab' | 'modal' | 'api'\n\nexport interface CloseInfo {\n  source: CloseSource\n  option?: Option\n  selectionChanged: boolean\n}\n\nexport interface Callbacks {\n  open: () => void\n  close: (info?: CloseInfo) => void\n  addable?: (\n    value: string\n  ) => Promise<Partial<Option> | string> | Partial<Option> | string | false | undefined | null | Error\n  setSelected: (value: string | string[], runAfterChange: boolean) => void\n  addOption: (option: Option) => void\n  search: (search: string) => void\n  /** Internal reset that must not fire the consumer search event. */\n  clearSearch: () => void\n  beforeChange?: (newVal: Option[], oldVal: Option[]) => boolean | void\n  afterChange?: (newVal: Option[]) => void\n}\n\nexport interface Main {\n  main: HTMLDivElement\n  values: HTMLDivElement\n  deselect: {\n    main: HTMLDivElement\n    svg: SVGSVGElement\n    path: SVGPathElement\n  }\n  arrow: {\n    main: SVGSVGElement\n    path: SVGPathElement\n  }\n}\n\nexport interface Content {\n  main: HTMLDivElement\n  search: Search\n  status: HTMLDivElement\n  list: HTMLDivElement\n}\n\nexport interface Search {\n  main: HTMLDivElement\n  input: HTMLInputElement\n  selectAll?: HTMLDivElement\n  addable?: {\n    main: HTMLDivElement\n    svg: SVGSVGElement\n    path: SVGPathElement\n  }\n}\n\nexport interface ModalElements {\n  overlay: HTMLDivElement\n  dialog: HTMLDivElement\n  closeButton: HTMLButtonElement\n  title: HTMLDivElement | null\n}\n\nexport default class Render {\n  public settings: Settings\n  public store: Store\n  public callbacks: Callbacks\n\n  // Used to compute the range selection\n  private lastSelectedOption: Option | null\n  private lastRenderedOptions: Option[]\n  private optionsListIsFullData = false\n  private lastSearchFilterTerm = ''\n\n  // Timeout tracking for cleanup\n\n  // Elements\n  public main: Main\n  public content: Content\n\n  // Classes\n  public classes: CssClasses\n\n  private positionObserver: ResizeObserver | null = null\n  private positionObserverRaf = 0\n  private lastObservedContentHeight = -1\n  private overflowShiftRaf = 0\n\n  private modalElements: ModalElements | null = null\n  private modalSessionActive: boolean | null = null\n  private bodyScrollLocked = false\n  private savedBodyOverflow = ''\n\n  constructor(settings: Required<Settings>, classes: Required<CssClasses>, store: Store, callbacks: Callbacks) {\n    this.store = store\n    this.settings = settings\n    this.classes = classes\n    this.callbacks = callbacks\n    this.lastSelectedOption = null\n    this.lastRenderedOptions = []\n\n    this.main = this.mainDiv()\n    this.content = this.contentDiv()\n\n    // Add classes and styles to main/content\n    this.updateClassStyles()\n    this.updateAriaAttributes()\n\n    // Position content off-screen initially to prevent scrollbars\n    // This must be after updateClassStyles() since it removes all style attributes\n    // The main element isn't in the DOM yet, so getBoundingClientRect() would return zeros\n    // Once opened, moveContent() will position it correctly\n    if (this.settings.contentPosition !== 'relative') {\n      this.content.main.style.top = '-9999px'\n      this.content.main.style.left = '-9999px'\n      this.content.main.style.margin = '0'\n      this.content.main.style.width = 'auto'\n    }\n\n    // Add content to the content location settings\n    if (this.settings.contentLocation) {\n      this.settings.contentLocation.appendChild(this.content.main)\n    }\n\n    if (this.settings.modal !== 'off' && !this.settings.alwaysOpen) {\n      this.modalElements = this.createModalElements()\n      document.body.appendChild(this.modalElements.overlay)\n    }\n  }\n\n  // Helper method to add classes that may contain spaces\n  // Splits by spaces and adds each class individually to avoid DOMException\n  private requestClose(source: CloseSource, options?: { option?: Option; selectionChanged?: boolean }): void {\n    this.callbacks.close({\n      source,\n      option: options?.option,\n      selectionChanged: options?.selectionChanged ?? false\n    })\n  }\n\n  private selectionChanged(before: Option[], after: Option[]): boolean {\n    if (before.length !== after.length) {\n      return true\n    }\n\n    const beforeIds = before.map((o) => o.id).sort()\n    const afterIds = after.map((o) => o.id).sort()\n\n    return beforeIds.some((id, index) => id !== afterIds[index])\n  }\n\n  private closeOnSingleSelectReclick(storeOption: Option): void {\n    if (this.settings.closeOnSelect) {\n      this.requestClose('select', {\n        option: storeOption,\n        selectionChanged: false\n      })\n    }\n  }\n\n  public addClasses(element: HTMLElement | SVGElement, classValue: string): void {\n    if (!classValue || classValue.trim() === '') {\n      return\n    }\n    const classes = classValue.split(' ').filter((c) => c.trim() !== '')\n    for (const cls of classes) {\n      element.classList.add(cls.trim())\n    }\n  }\n\n  // Helper method to remove classes that may contain spaces\n  public removeClasses(element: HTMLElement | SVGElement, classValue: string): void {\n    if (!classValue || classValue.trim() === '') {\n      return\n    }\n    const classes = classValue.split(' ').filter((c) => c.trim() !== '')\n    for (const cls of classes) {\n      element.classList.remove(cls.trim())\n    }\n  }\n\n  // Remove disabled classes\n  public enable(): void {\n    // Remove disabled class\n    this.removeClasses(this.main.main, this.classes.disabled)\n    this.main.main.setAttribute('aria-disabled', 'false')\n\n    // Set search input to \"enabled\"\n    this.content.search.input.disabled = false\n  }\n\n  // Set disabled classes\n  public disable(): void {\n    // Add disabled class\n    this.addClasses(this.main.main, this.classes.disabled)\n    this.main.main.setAttribute('aria-disabled', 'true')\n\n    // Set search input to disabled\n    this.content.search.input.disabled = true\n  }\n\n  public open(): void {\n    this.main.arrow.path.setAttribute('d', this.classes.arrowOpen)\n    this.main.main.setAttribute('aria-expanded', 'true')\n\n    const useModal = this.resolveModalView()\n\n    if (!useModal) {\n      const isAbove = this.settings.openPosition === 'up'\n      const dirClass = isAbove ? this.classes.dirAbove : this.classes.dirBelow\n      this.addClasses(this.main.main, dirClass)\n      this.addClasses(this.content.main, dirClass)\n    }\n\n    // Add open class to content to trigger open animation\n    this.addClasses(this.content.main, this.classes.contentOpen)\n\n    // Make search visible to screen readers when opened\n    this.content.search.input.removeAttribute('aria-hidden')\n\n    if (useModal) {\n      this.showModal()\n    } else {\n      this.moveContent()\n    }\n\n    // Move to last selected option\n    const selectedOptions = this.store.getSelectedOptions()\n    if (selectedOptions.length) {\n      const selectedId = selectedOptions[selectedOptions.length - 1].id\n      const selectedOption = this.content.list.querySelector('[data-id=\"' + selectedId + '\"]') as HTMLElement\n      if (selectedOption) {\n        this.ensureElementInView(this.content.list, selectedOption)\n      }\n    }\n  }\n\n  public isModalViewActive(): boolean {\n    return this.modalSessionActive === true\n  }\n\n  private resolveModalView(): boolean {\n    if (this.settings.alwaysOpen || this.settings.modal === 'off' || !this.modalElements) {\n      return false\n    }\n\n    if (this.modalSessionActive === null) {\n      this.modalSessionActive = shouldUseModalView(this.settings.modal)\n    }\n\n    return this.modalSessionActive\n  }\n\n  private createModalElements(): ModalElements {\n    const overlay = document.createElement('div')\n    this.addClasses(overlay, this.classes.modalOverlay)\n    this.addClasses(overlay, this.classes.hide)\n    overlay.dataset.id = this.settings.id\n\n    const dialog = document.createElement('div')\n    this.addClasses(dialog, this.classes.modalDialog)\n    dialog.setAttribute('role', 'dialog')\n    dialog.setAttribute('aria-modal', 'true')\n\n    let title: HTMLDivElement | null = null\n    if (this.settings.modalTitle) {\n      title = document.createElement('div')\n      this.addClasses(title, this.classes.modalTitle)\n      title.id = `${this.settings.id}-modal-title`\n      title.textContent = this.settings.modalTitle\n      dialog.setAttribute('aria-labelledby', title.id)\n    } else {\n      dialog.setAttribute('aria-label', this.settings.ariaLabel)\n    }\n\n    const closeButton = document.createElement('button')\n    closeButton.type = 'button'\n    this.addClasses(closeButton, this.classes.modalClose)\n    closeButton.setAttribute('aria-label', 'Close')\n    closeButton.onclick = (e: Event) => {\n      e.stopPropagation()\n      this.requestClose('modal')\n    }\n\n    const closeSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n    closeSvg.setAttribute('viewBox', '0 0 100 100')\n    const closePath = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n    closePath.setAttribute('d', this.classes.deselectPath)\n    closeSvg.appendChild(closePath)\n    closeButton.appendChild(closeSvg)\n\n    overlay.onclick = (e: Event) => {\n      if (e.target === overlay) {\n        this.requestClose('modal')\n      }\n    }\n\n    if (title) {\n      dialog.appendChild(title)\n    }\n    overlay.appendChild(dialog)\n\n    return { overlay, dialog, closeButton, title }\n  }\n\n  private showModal(): void {\n    if (!this.modalElements) {\n      return\n    }\n\n    this.modalElements.dialog.appendChild(this.content.main)\n    this.addClasses(this.content.main, this.classes.modalContent)\n    this.content.main.appendChild(this.modalElements.closeButton)\n    this.content.main.style.top = ''\n    this.content.main.style.left = ''\n    this.content.main.style.margin = ''\n    this.content.main.style.width = ''\n\n    this.removeClasses(this.modalElements.overlay, this.classes.hide)\n    requestAnimationFrame(() => {\n      if (!this.modalElements) {\n        return\n      }\n      this.addClasses(this.modalElements.overlay, this.classes.contentOpen)\n    })\n\n    this.lockBodyScroll()\n  }\n\n  private lockBodyScroll(): void {\n    if (this.bodyScrollLocked) {\n      return\n    }\n\n    this.savedBodyOverflow = document.body.style.overflow\n    document.body.style.overflow = 'hidden'\n    this.bodyScrollLocked = true\n  }\n\n  private unlockBodyScroll(): void {\n    if (!this.bodyScrollLocked) {\n      return\n    }\n\n    document.body.style.overflow = this.savedBodyOverflow\n    this.bodyScrollLocked = false\n    this.savedBodyOverflow = ''\n  }\n\n  private restoreContentOffscreen(): void {\n    if (this.settings.contentLocation) {\n      this.settings.contentLocation.appendChild(this.content.main)\n    }\n\n    if (this.settings.contentPosition !== 'relative') {\n      this.content.main.style.top = '-9999px'\n      this.content.main.style.left = '-9999px'\n      this.content.main.style.margin = '0'\n      this.content.main.style.width = 'auto'\n    }\n  }\n\n  /** Tear down modal shell after close animation completes. */\n  public finalizeModalClose(): void {\n    if (!this.modalElements) {\n      return\n    }\n\n    if (this.content.main.parentElement !== this.modalElements.dialog) {\n      return\n    }\n\n    this.addClasses(this.modalElements.overlay, this.classes.hide)\n    this.removeClasses(this.modalElements.overlay, this.classes.contentOpen)\n    this.removeClasses(this.content.main, this.classes.modalContent)\n    this.modalElements.closeButton.remove()\n    this.restoreContentOffscreen()\n    this.unlockBodyScroll()\n  }\n\n  /** Used by Lifecycle — wait for .ss-content CSS transition before afterOpen/afterClose. */\n  public waitForAnimation(phase: 'open' | 'close', signal?: AbortSignal): Promise<void> {\n    const timeout = getAnimationTimeout(this.content.main, this.settings.timeoutDelay)\n    return waitForTransitionEnd(this.content.main, CONTENT_PANEL_TRANSITION_PROPERTIES, timeout, signal)\n  }\n\n  public close(): void {\n    this.main.main.setAttribute('aria-expanded', 'false')\n    this.main.arrow.path.setAttribute('d', this.classes.arrowClose)\n\n    const wasModal = this.modalSessionActive === true\n\n    // Remove open class from content to trigger close animation\n    // Direction on content persists for transform-origin during the panel animation\n    this.removeClasses(this.content.main, this.classes.contentOpen)\n\n    if (!wasModal) {\n      this.removeClasses(this.main.main, this.classes.dirAbove)\n      this.removeClasses(this.main.main, this.classes.dirBelow)\n    }\n\n    if (wasModal && this.modalElements) {\n      this.removeClasses(this.modalElements.overlay, this.classes.contentOpen)\n    }\n\n    this.modalSessionActive = null\n\n    // Hide search from screen readers when closed\n    this.content.search.input.setAttribute('aria-hidden', 'true')\n\n    // Clear active descendant when closed\n    this.main.main.removeAttribute('aria-activedescendant')\n    this.clearValueChipHighlight()\n  }\n\n  /** Remove open-direction classes after close animation (lifecycle afterClose). */\n  public clearDirectionClasses(): void {\n    this.removeClasses(this.main.main, this.classes.dirAbove)\n    this.removeClasses(this.main.main, this.classes.dirBelow)\n    this.removeClasses(this.content.main, this.classes.dirAbove)\n    this.removeClasses(this.content.main, this.classes.dirBelow)\n  }\n\n  public updateClassStyles(): void {\n    // Clear all classes and styles\n    this.main.main.className = ''\n    this.main.main.removeAttribute('style')\n    this.content.main.className = ''\n    this.content.main.removeAttribute('style')\n\n    // Make sure main/content has its base class\n    this.addClasses(this.main.main, this.classes.main)\n    this.addClasses(this.content.main, this.classes.content)\n\n    // Add styles\n    if (this.settings.style !== '') {\n      this.main.main.style.cssText = this.settings.style\n      this.content.main.style.cssText = this.settings.style\n    }\n\n    // Add classes from the native select to both main and content\n    if (this.settings.class.length) {\n      for (const c of this.settings.class) {\n        if (c.trim() !== '') {\n          this.main.main.classList.add(c.trim())\n          this.content.main.classList.add(c.trim())\n        }\n      }\n    }\n\n    // Misc classes\n    // Add content position class\n    if (this.settings.contentPosition === 'relative' || this.settings.contentPosition === 'fixed') {\n      this.content.main.classList.add('ss-' + this.settings.contentPosition)\n    }\n  }\n\n  /**\n   * Mirror the native select's title attribute onto the rendered control so\n   * browser tooltips keep working after the select is swapped for the div UI.\n   * Tooltips are inherited by descendants, so setting it on ss-main covers\n   * ss-values and ss-single as well.\n   */\n  public updateTitle(title: string | null): void {\n    if (title) {\n      this.main.main.setAttribute('title', title)\n    } else {\n      this.main.main.removeAttribute('title')\n    }\n  }\n\n  public updateAriaAttributes() {\n    const listboxId = this.content.list.id\n\n    // Main combobox\n    this.main.main.role = 'combobox'\n    this.main.main.setAttribute('aria-haspopup', 'listbox')\n    this.main.main.setAttribute('aria-controls', listboxId)\n    this.main.main.setAttribute('aria-expanded', 'false')\n\n    this.content.list.setAttribute('role', 'listbox')\n    this.content.list.setAttribute('aria-label', this.settings.ariaLabel + ' listbox')\n\n    // Add aria-multiselectable for multiple selects\n    if (this.settings.isMultiple) {\n      this.content.list.setAttribute('aria-multiselectable', 'true')\n    }\n\n    // Search input should also control the listbox\n    this.content.search.input.setAttribute('aria-controls', listboxId)\n  }\n\n  public mainDiv(): Main {\n    // Create main container\n    const main = document.createElement('div')\n\n    // Add id to data-id\n    main.dataset.id = this.settings.id\n    // main.id = this.settings.id+'-main' // Remove for now as it is not needed and add duplicate id errors\n\n    // Add label\n    main.setAttribute('aria-label', this.settings.ariaLabel)\n\n    // Set tabable to allow tabbing to the element\n    main.tabIndex = 0\n\n    // Deal with keyboard events on the main div\n    // This is to allow for normal selecting\n    // when you may not have a search bar\n    main.onkeydown = (e: KeyboardEvent): boolean => {\n      // Convert above if else statemets to switch\n      switch (e.key) {\n        case 'ArrowUp':\n        case 'ArrowDown':\n          this.callbacks.open()\n          e.key === 'ArrowDown' ? this.highlight('down') : this.highlight('up')\n          return false\n        case 'Tab':\n          this.requestClose('tab')\n          return true // Continue doing normal tabbing\n        case 'Enter':\n        case ' ':\n          this.callbacks.open()\n          const highlighted = this.content.list.querySelector(\n            '.' + this.classes.getFirst('highlighted')\n          ) as HTMLDivElement\n          if (highlighted) {\n            highlighted.click()\n          }\n          return false\n        case 'Escape':\n          this.requestClose('escape')\n          return false\n      }\n\n      // Check if they type a-z, A-Z and 0-9\n      if (e.key.length === 1) {\n        this.callbacks.open()\n      }\n\n      return true\n    }\n\n    // Add onclick for main div\n    main.onclick = (e: Event): void => {\n      // Dont do anything if disabled\n      if (this.settings.disabled) {\n        return\n      }\n\n      this.settings.isOpen ? this.requestClose('toggle') : this.callbacks.open()\n    }\n\n    // Add values\n    const values = document.createElement('div')\n    this.addClasses(values, this.classes.values)\n    main.appendChild(values)\n\n    // Add deselect\n    const deselect = document.createElement('div')\n    this.addClasses(deselect, this.classes.deselect)\n    deselect.setAttribute('role', 'button')\n    deselect.setAttribute('aria-label', this.settings.deselectText)\n    deselect.setAttribute('tabindex', '0')\n\n    // Check if deselect is to be shown or not\n    const selectedOptions = this.store?.getSelectedOptions()\n    if (\n      !this.settings.allowDeselect ||\n      (this.settings.isMultiple && selectedOptions && selectedOptions.length <= 0) ||\n      this.isAtMinSelected()\n    ) {\n      this.addClasses(deselect, this.classes.hide)\n    } else {\n      this.removeClasses(deselect, this.classes.hide)\n    }\n\n    // Add deselect onclick event\n    deselect.onclick = (e: Event) => {\n      e.stopPropagation()\n\n      // Dont do anything if disabled\n      if (this.settings.disabled) {\n        return\n      }\n\n      if (this.settings.isMultiple && this.isAtMinSelected()) {\n        return\n      }\n\n      // By Default we will delete\n      let shouldDelete = true\n      const before = this.store.getSelectedOptions()\n      let after = [] as Option[]\n      let newSelectedIds: string[] | string = ''\n\n      if (this.settings.isMultiple) {\n        const min = this.settings.minSelected\n        const currentIds = this.store.getSelected()\n\n        if (min > 0 && currentIds.length > min) {\n          newSelectedIds = this.getMinimumSelectionIds()\n          after = before.filter((o) => newSelectedIds.includes(o.id))\n        } else if (min <= 0) {\n          newSelectedIds = []\n        } else {\n          return\n        }\n      }\n\n      // Add beforeChange callback\n      if (this.callbacks.beforeChange) {\n        shouldDelete = this.callbacks.beforeChange(after, before) === true\n      }\n\n      if (shouldDelete) {\n        if (this.settings.isMultiple) {\n          this.callbacks.setSelected(newSelectedIds, false)\n          this.updateDeselectAll()\n        } else {\n          // Get first option and set it as selected\n          const firstOption = this.store.getFirstOption()\n          const id = firstOption ? firstOption.id : ''\n\n          this.callbacks.setSelected(id, false)\n        }\n\n        // Check if we need to close the dropdown\n        if (this.settings.closeOnSelect) {\n          this.requestClose('deselect', { selectionChanged: true })\n        }\n\n        // Run afterChange callback\n        if (this.callbacks.afterChange) {\n          this.callbacks.afterChange(this.store.getSelectedOptions())\n        }\n      }\n    }\n\n    deselect.onkeydown = (e: KeyboardEvent) => {\n      if (e.key === 'Enter' || e.key === ' ') {\n        e.preventDefault()\n        deselect.click()\n      }\n    }\n\n    // Add deselect svg\n    const deselectSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n    deselectSvg.setAttribute('viewBox', '0 0 100 100')\n    const deselectPath = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n    deselectPath.setAttribute('d', this.classes.deselectPath)\n    deselectSvg.appendChild(deselectPath)\n    deselect.appendChild(deselectSvg)\n    main.appendChild(deselect)\n\n    // Add arrow\n    const arrow = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n    this.addClasses(arrow, this.classes.arrow)\n    arrow.setAttribute('viewBox', '0 0 100 100')\n    const arrowPath = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n    arrowPath.setAttribute('d', this.classes.arrowClose)\n    if (this.settings.alwaysOpen) {\n      this.addClasses(arrow, this.classes.hide)\n    }\n    arrow.appendChild(arrowPath)\n    main.appendChild(arrow)\n\n    return {\n      main: main,\n      values: values,\n      deselect: {\n        main: deselect,\n        svg: deselectSvg,\n        path: deselectPath\n      },\n      arrow: {\n        main: arrow,\n        path: arrowPath\n      }\n    }\n  }\n\n  public mainFocus(eventType: string | null): void {\n    // Trigger focus but dont scroll to it\n    // Need for prevent refocus the element if event is not keyboard event.\n    // For example if event is mouse click or tachpad click this condition prevent refocus on element\n    // because click by mouse change focus position and not need return focus to element.\n    if (eventType !== 'click') {\n      this.main.main.focus({ preventScroll: true })\n    }\n  }\n\n  public placeholder(): HTMLDivElement {\n    // Figure out if there is a placeholder option\n    const placeholderOption = this.store.filter((o) => o.placeholder, false, false) as Option[]\n\n    // If there is a placeholder option use that\n    // If placeholder has an html value, use that\n    // If placeholder has a text, use that\n    // If nothing is set, use the placeholder text\n    let placeholderText = this.settings.placeholderText\n    if (placeholderOption.length) {\n      if (placeholderOption[0].html !== '') {\n        placeholderText = placeholderOption[0].html\n      } else if (placeholderOption[0].text !== '') {\n        placeholderText = placeholderOption[0].text\n      }\n    }\n\n    // Create placeholder div\n    const placeholder = document.createElement('div')\n    this.addClasses(placeholder, this.classes.placeholder)\n    placeholder.innerHTML = placeholderText\n    return placeholder\n  }\n\n  // Get selected values and append to multiSelected values container\n  // and remove those who shouldnt exist\n  public renderValues(): void {\n    // If single select set placeholder or selected value\n    if (!this.settings.isMultiple) {\n      this.renderSingleValue()\n      return\n    }\n\n    this.renderMultipleValues()\n\n    this.updateDeselectAll()\n  }\n\n  private renderSingleValue(): void {\n    const selected = this.store.filter(\n      (o: Option): boolean => {\n        return o.selected && !o.placeholder\n      },\n      false,\n      false\n    ) as Option[]\n    const selectedSingle = selected.length > 0 ? selected[0] : null\n\n    // If nothing is seleected use settings placeholder text\n    if (!selectedSingle) {\n      this.main.values.innerHTML = this.placeholder().outerHTML\n    } else {\n      // Create single value container\n      const singleValue = document.createElement('div')\n      this.addClasses(singleValue, this.classes.single)\n      if (selectedSingle.html) {\n        singleValue.innerHTML = selectedSingle.html\n      } else {\n        singleValue.innerText = selectedSingle.text\n      }\n\n      // If there is a selected value, set a single div\n      this.main.values.innerHTML = singleValue.outerHTML\n    }\n\n    // If allowDeselect is false or selected value is empty just hide deselect\n    if (!this.settings.allowDeselect || !selected.length) {\n      this.addClasses(this.main.deselect.main, this.classes.hide)\n    } else {\n      this.removeClasses(this.main.deselect.main, this.classes.hide)\n    }\n  }\n\n  private renderMultipleValues(): void {\n    // Get various pieces of data\n    let currentNodes = this.main.values.childNodes as NodeListOf<HTMLDivElement>\n    let selectedOptions = this.store.filter(\n      (opt: Option) => {\n        // Only grab options that are selected and display is true\n        return opt.selected && opt.display\n      },\n      false,\n      false\n    ) as Option[]\n\n    // If selectedOptions is empty set placeholder\n    if (selectedOptions.length === 0) {\n      this.main.values.innerHTML = this.placeholder().outerHTML\n      return\n    } else {\n      // If there is a placeholder, remove it\n      const placeholder = this.main.values.querySelector('.' + this.classes.getFirst('placeholder'))\n      if (placeholder) {\n        placeholder.remove()\n      }\n    }\n\n    // If multiString is enabled, render a single text element containing the\n    // selected values joined by commas instead of individual value pills.\n    // CSS truncates the text with an ellipsis when it exceeds the container width.\n    if (this.settings.multiString) {\n      let commaOptions = selectedOptions\n      if (this.settings.keepOrder) {\n        commaOptions = this.store.selectedOrderOptions(commaOptions)\n      }\n\n      const commaValue = document.createElement('div')\n      this.addClasses(commaValue, this.classes.multiString)\n      commaValue.textContent = commaOptions.map((o: Option) => o.text).join(', ')\n\n      if (this.settings.showOptionTooltips) {\n        commaValue.setAttribute('title', commaValue.textContent)\n      }\n\n      this.main.values.innerHTML = commaValue.outerHTML\n      return\n    }\n\n    // If selectedOptions is greater than maxItems, set maxValuesMessage\n    if (selectedOptions.length > this.settings.maxValuesShown) {\n      // Creating the element that shows the number of selected items\n      const singleValue = document.createElement('div')\n      this.addClasses(singleValue, this.classes.max)\n      singleValue.textContent = this.settings.maxValuesMessage.replace('{number}', selectedOptions.length.toString())\n\n      // If there is a selected value, set a single div\n      this.main.values.innerHTML = singleValue.outerHTML\n      return\n    } else {\n      // If there is a message, remove it\n      const maxValuesMessage = this.main.values.querySelector('.' + this.classes.getFirst('max'))\n      if (maxValuesMessage) {\n        maxValuesMessage.remove()\n      }\n    }\n\n    // Lets check for data selected order\n    if (this.settings.keepOrder) {\n      selectedOptions = this.store.selectedOrderOptions(selectedOptions)\n    }\n\n    // Loop through currentNodes and only include ones that are not in selectedIDs\n    let removeNodes: HTMLDivElement[] = []\n    for (let i = 0; i < currentNodes.length; i++) {\n      const node = currentNodes[i]\n      const id = node.getAttribute('data-id')\n      if (id) {\n        // Check if id is in selectedOptions\n        const found = selectedOptions.filter((opt: Option) => {\n          return opt.id === id\n        }, false)\n\n        // If not found, add to removeNodes\n        if (!found.length) {\n          removeNodes.push(node)\n        }\n      }\n    }\n\n    const animationDuration = getAnimationTimeout(this.content.main, this.settings.timeoutDelay)\n\n    // Loop through and remove\n    for (const n of removeNodes) {\n      this.addClasses(n, this.classes.valueOut)\n      void waitForAnimationEnd(n, 'ss-valueOut', animationDuration).then(() => {\n        if (this.main.values.hasChildNodes() && this.main.values.contains(n)) {\n          this.main.values.removeChild(n)\n        }\n      })\n    }\n\n    // Add values that dont currently exist\n    currentNodes = this.main.values.childNodes as NodeListOf<HTMLDivElement>\n    for (let d = 0; d < selectedOptions.length; d++) {\n      let shouldAdd = true\n      for (let i = 0; i < currentNodes.length; i++) {\n        if (selectedOptions[d].id === String(currentNodes[i].dataset.id)) {\n          shouldAdd = false\n        }\n      }\n\n      // If shouldAdd, insertAdjacentElement it to the values container in the order of the selectedOptions\n      if (shouldAdd) {\n        // If keepOrder is true, we will just append it to the end\n        if (this.settings.keepOrder) {\n          this.main.values.appendChild(this.multipleValue(selectedOptions[d]))\n        } else {\n          // else we will insert it in the order of the selectedOptions\n          if (currentNodes.length === 0) {\n            this.main.values.appendChild(this.multipleValue(selectedOptions[d]))\n          } else if (d === 0) {\n            this.main.values.insertBefore(this.multipleValue(selectedOptions[d]), currentNodes[d])\n          } else {\n            currentNodes[d - 1].insertAdjacentElement('afterend', this.multipleValue(selectedOptions[d]))\n          }\n        }\n      }\n    }\n\n    this.updateMultipleValueDeleteVisibility()\n  }\n\n  private isAtMinSelected(): boolean {\n    return (\n      this.settings.isMultiple &&\n      this.settings.minSelected > 0 &&\n      this.store.getSelectedOptions().length <= this.settings.minSelected\n    )\n  }\n\n  private getMinimumSelectionIds(): string[] {\n    let selected = this.store.getSelectedOptions()\n    if (this.settings.keepOrder) {\n      selected = this.store.selectedOrderOptions(selected)\n    }\n\n    return selected.slice(0, this.settings.minSelected).map((option) => option.id)\n  }\n\n  private getValueChips(): HTMLDivElement[] {\n    if (!this.settings.isMultiple || this.settings.multiString) {\n      return []\n    }\n\n    const chips = Array.from(\n      this.main.values.querySelectorAll('.' + this.classes.getFirst('value'))\n    ) as HTMLDivElement[]\n\n    return chips.filter((chip) => {\n      if (chip.classList.contains(this.classes.getFirst('valueOut'))) {\n        return false\n      }\n\n      const deleteButton = chip.querySelector('.' + this.classes.getFirst('valueDelete')) as HTMLElement | null\n\n      return !!deleteButton && !deleteButton.classList.contains(this.classes.getFirst('hide'))\n    })\n  }\n\n  private getHighlightedValueChip(): HTMLDivElement | null {\n    return this.getValueChips().find((chip) => chip.classList.contains(this.classes.getFirst('highlighted'))) ?? null\n  }\n\n  private clearValueChipHighlight(): void {\n    for (const chip of Array.from(\n      this.main.values.querySelectorAll('.' + this.classes.getFirst('value'))\n    ) as HTMLDivElement[]) {\n      this.removeClasses(chip, this.classes.highlighted)\n    }\n  }\n\n  private highlightValueChip(chip: HTMLDivElement | null): void {\n    this.clearValueChipHighlight()\n    if (chip) {\n      this.addClasses(chip, this.classes.highlighted)\n    }\n  }\n\n  /** Returns true when Left/Right were used to move among selected value chips. */\n  private navigateValueChips(dir: 'left' | 'right'): boolean {\n    const chips = this.getValueChips()\n    if (chips.length === 0) {\n      return false\n    }\n\n    const current = this.getHighlightedValueChip()\n    const index = current ? chips.indexOf(current) : -1\n\n    if (dir === 'left') {\n      if (index === -1) {\n        this.highlightValueChip(chips[chips.length - 1])\n      } else if (index > 0) {\n        this.highlightValueChip(chips[index - 1])\n      }\n      return true\n    }\n\n    if (index === -1) {\n      return false\n    }\n\n    if (index < chips.length - 1) {\n      this.highlightValueChip(chips[index + 1])\n    } else {\n      this.clearValueChipHighlight()\n    }\n\n    return true\n  }\n\n  /**\n   * Remove the highlighted chip, or the last chip when none is highlighted.\n   * Returns true when a delete was triggered.\n   */\n  private deleteValueChip(onlyHighlighted = false): boolean {\n    const chips = this.getValueChips()\n    if (chips.length === 0) {\n      return false\n    }\n\n    const current = this.getHighlightedValueChip()\n    if (onlyHighlighted && !current) {\n      return false\n    }\n\n    const target = current ?? chips[chips.length - 1]\n    const deleteButton = target.querySelector('.' + this.classes.getFirst('valueDelete')) as HTMLElement | null\n    if (!deleteButton) {\n      return false\n    }\n\n    const index = chips.indexOf(target)\n    const next = current ? (chips[index - 1] ?? chips[index + 1] ?? null) : null\n\n    deleteButton.click()\n\n    if (next && next !== target && this.main.values.contains(next)) {\n      this.highlightValueChip(next)\n    } else {\n      this.clearValueChipHighlight()\n    }\n\n    return true\n  }\n\n  private updateMultipleValueDeleteVisibility(): void {\n    if (!this.settings.isMultiple || this.settings.multiString) {\n      return\n    }\n\n    const canRemove = !this.isAtMinSelected()\n    const deleteButtons = this.main.values.querySelectorAll('.' + this.classes.getFirst('valueDelete'))\n\n    for (const deleteButton of deleteButtons) {\n      if (canRemove) {\n        this.removeClasses(deleteButton as HTMLElement, this.classes.hide)\n      } else {\n        this.addClasses(deleteButton as HTMLElement, this.classes.hide)\n      }\n    }\n  }\n\n  public multipleValue(option: Option): HTMLDivElement {\n    const value = document.createElement('div')\n    this.addClasses(value, this.classes.value)\n    value.dataset.id = option.id\n\n    const text = document.createElement('div')\n    this.addClasses(text, this.classes.valueText)\n    text.textContent = option.text // For multiple values always use text\n    value.appendChild(text)\n\n    // Only add deletion if the option is not mandatory\n    if (!option.mandatory) {\n      // Create delete div element\n      const deleteDiv = document.createElement('div')\n      this.addClasses(deleteDiv, this.classes.valueDelete)\n      deleteDiv.setAttribute('tabindex', '0') // Make the div focusable for tab navigation\n      deleteDiv.setAttribute('role', 'button')\n      deleteDiv.setAttribute('aria-label', `${this.settings.removeText} ${option.text}`)\n\n      if (this.isAtMinSelected()) {\n        this.addClasses(deleteDiv, this.classes.hide)\n      }\n\n      // Add delete onclick event\n      deleteDiv.onclick = (e: Event) => {\n        e.preventDefault()\n        e.stopPropagation()\n\n        // Dont do anything if disabled\n        if (this.settings.disabled) {\n          return\n        }\n\n        // By Default we will delete\n        let shouldDelete = true\n        const before = this.store.getSelectedOptions()\n        const after = before.filter((o) => {\n          return o.selected && o.id !== option.id\n        }, true)\n\n        // Check if minSelected is set and if after length so, return\n        if (this.settings.minSelected && after.length < this.settings.minSelected) {\n          return\n        }\n\n        // If there is a beforeDeselect function run it\n        if (this.callbacks.beforeChange) {\n          shouldDelete = this.callbacks.beforeChange(after, before) === true\n        }\n\n        if (shouldDelete) {\n          // Loop through after and append ids to a variable called selected\n          let selectedIds: string[] = []\n          for (const o of after) {\n            if (o instanceof Optgroup) {\n              for (const c of o.options) {\n                if (c.id) {\n                  selectedIds.push(c.id)\n                }\n              }\n            }\n\n            if (o instanceof Option) {\n              selectedIds.push(o.id)\n            }\n          }\n          this.callbacks.setSelected(selectedIds, false)\n\n          // Check if we need to close the dropdown\n          if (this.settings.closeOnSelect) {\n            this.requestClose('deselect', { selectionChanged: true })\n          }\n\n          // Run afterChange callback\n          if (this.callbacks.afterChange) {\n            this.callbacks.afterChange(after)\n          }\n\n          this.updateDeselectAll()\n          this.updateMultipleValueDeleteVisibility()\n        }\n      }\n\n      // Add delete svg\n      const deleteSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n      deleteSvg.setAttribute('viewBox', '0 0 100 100')\n      const deletePath = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n      deletePath.setAttribute('d', this.classes.optionDelete)\n      deleteSvg.appendChild(deletePath)\n      deleteDiv.appendChild(deleteSvg)\n\n      value.appendChild(deleteDiv)\n\n      // Add keydown event listener for keyboard navigation (Enter key)\n      deleteDiv.onkeydown = (e) => {\n        if (e.key === 'Enter') {\n          deleteDiv.click() // Trigger the click event when Enter is pressed\n        }\n      }\n    }\n\n    return value\n  }\n\n  public contentDiv(): Content {\n    const main = document.createElement('div')\n\n    // Add id to data-id\n    main.dataset.id = this.settings.id\n    // main.id = this.settings.id + '-content' // Remove for now as it is not needed and add duplicate id errors\n\n    // Add search\n    const search = this.searchDiv()\n    main.appendChild(search.main)\n\n    // Screen reader announcements for search result updates\n    const status = document.createElement('div')\n    this.addClasses(status, this.classes.status)\n    status.setAttribute('aria-live', 'polite')\n    status.setAttribute('aria-atomic', 'true')\n    status.setAttribute('role', 'status')\n    main.appendChild(status)\n\n    // Add list\n    const list = this.listDiv()\n    main.appendChild(list)\n\n    return {\n      main: main,\n      search: search,\n      status: status,\n      list: list\n    }\n  }\n\n  private announce(message: string): void {\n    if (!this.settings.showSearch) {\n      return\n    }\n\n    this.content.status.textContent = message\n  }\n\n  /**\n   * After list height changes (search, results, optgroup toggle), keep an\n   * already-open \"above\" panel attached. Does not re-run auto up/down so\n   * filtering cannot flip the list while the user is typing.\n   */\n  private repositionOpenContent(): void {\n    if (!this.settings.isOpen || this.isModalViewActive()) {\n      return\n    }\n\n    if (this.settings.contentPosition === 'relative') {\n      return\n    }\n\n    if (!this.content.main.classList.contains(this.classes.getFirst('dirAbove'))) {\n      return\n    }\n\n    this.moveContentAbove()\n  }\n\n  public moveContent(): void {\n    if (this.isModalViewActive()) {\n      return\n    }\n\n    if (this.settings.contentPosition === 'relative') {\n      this.moveContentBelow()\n      return\n    }\n\n    if (this.settings.openPosition === 'down') {\n      this.moveContentBelow()\n      return\n    } else if (this.settings.openPosition === 'up') {\n      this.moveContentAbove()\n      return\n    }\n\n    if (this.putContent() === 'up') {\n      this.moveContentAbove()\n    } else {\n      this.moveContentBelow()\n    }\n  }\n\n  /** Track trigger/content layout changes and reposition the dropdown panel. */\n  public startPositionTracking(): void {\n    if (this.settings.contentPosition !== 'absolute' || this.isModalViewActive()) {\n      return\n    }\n\n    this.stopPositionTracking()\n\n    if (typeof ResizeObserver === 'undefined') {\n      return\n    }\n\n    this.lastObservedContentHeight = -1\n    this.positionObserver = new ResizeObserver((entries) => {\n      if (!this.settings.isOpen) {\n        return\n      }\n\n      let contentHeightChanged = false\n      let layoutChanged = false\n\n      for (const entry of entries) {\n        if (entry.target === this.content.main) {\n          const height = entry.contentRect.height\n          if (height !== this.lastObservedContentHeight) {\n            this.lastObservedContentHeight = height\n            contentHeightChanged = true\n          }\n        } else {\n          layoutChanged = true\n        }\n      }\n\n      if (!contentHeightChanged && !layoutChanged) {\n        return\n      }\n\n      cancelAnimationFrame(this.positionObserverRaf)\n      this.positionObserverRaf = requestAnimationFrame(() => {\n        // Trigger/ancestor changes may need auto up/down. Content height\n        // changes should keep the current direction so search does not flip.\n        if (layoutChanged) {\n          this.moveContent()\n        } else {\n          this.repositionOpenContent()\n        }\n      })\n    })\n\n    this.observePositionTargets()\n  }\n\n  public stopPositionTracking(): void {\n    cancelAnimationFrame(this.positionObserverRaf)\n    this.positionObserver?.disconnect()\n    this.positionObserver = null\n    this.lastObservedContentHeight = -1\n    this.cancelOverflowShift()\n  }\n\n  private observePositionTargets(): void {\n    if (!this.positionObserver) {\n      return\n    }\n\n    const observed = new Set<Element>()\n    const observe = (el: Element | null): void => {\n      if (!el || observed.has(el)) {\n        return\n      }\n\n      observed.add(el)\n      this.positionObserver!.observe(el)\n    }\n\n    observe(this.main.main)\n    // Observe content height only (width-only overflow/position updates are ignored\n    // in the observer callback so we do not re-enter and jitter horizontally).\n    observe(this.content.main)\n\n    let parent: HTMLElement | null = this.main.main.parentElement\n    const stopAt = this.settings.contentLocation\n\n    for (let depth = 0; parent && depth < 8; depth++) {\n      observe(parent)\n      if (parent === stopAt) {\n        break\n      }\n      parent = parent.parentElement\n    }\n  }\n\n  public searchDiv(): Search {\n    const main = document.createElement('div')\n    const input = document.createElement('input')\n    const addable = document.createElement('div')\n    this.addClasses(main, this.classes.search)\n\n    // Setup search return object\n    const searchReturn: Search = {\n      main,\n      input\n    }\n\n    const showGlobalSelectAll = this.settings.selectAll && this.settings.isMultiple\n\n    // We still want the search to be tabable but not shown\n    if (!this.settings.showSearch) {\n      input.readOnly = true\n      // Keep the search row visible when global select all needs a place to live\n      if (showGlobalSelectAll) {\n        this.addClasses(input, this.classes.hide)\n      } else {\n        this.addClasses(main, this.classes.hide)\n      }\n    }\n\n    input.type = 'search'\n    input.id = `${this.settings.id}-search`\n    input.placeholder = this.settings.searchPlaceholder\n    input.tabIndex = -1\n    input.setAttribute('aria-label', this.settings.searchPlaceholder)\n    input.setAttribute('aria-autocomplete', 'list')\n    input.setAttribute('autocapitalize', 'off')\n    input.setAttribute('autocomplete', 'off')\n    input.setAttribute('autocorrect', 'off')\n    // Hide from screen readers by default (shown when opened)\n    input.setAttribute('aria-hidden', 'true')\n\n    const debouncedSearch = debounce(() => {\n      this.callbacks.search(input.value)\n    }, 100)\n\n    input.oninput = (e: Event) => {\n      if ((e.target as HTMLInputElement).value !== '') {\n        this.clearValueChipHighlight()\n      }\n      debouncedSearch()\n    }\n\n    // Deal with keyboard events on search input field\n    input.onkeydown = (e: KeyboardEvent): boolean => {\n      // Convert above if else statemets to switch\n      switch (e.key) {\n        case 'ArrowUp':\n        case 'ArrowDown':\n          this.clearValueChipHighlight()\n          e.key === 'ArrowDown' ? this.highlight('down') : this.highlight('up')\n          return false\n        case 'ArrowLeft':\n        case 'ArrowRight':\n          // Caret movement wins while the search field has text\n          if (input.value !== '') {\n            return true\n          }\n          if (this.navigateValueChips(e.key === 'ArrowLeft' ? 'left' : 'right')) {\n            e.preventDefault()\n            return false\n          }\n          return true\n        case 'Backspace':\n          if (input.value !== '') {\n            return true\n          }\n          if (this.deleteValueChip()) {\n            e.preventDefault()\n            return false\n          }\n          return true\n        case 'Delete':\n          if (input.value !== '' || !this.getHighlightedValueChip()) {\n            return true\n          }\n          if (this.deleteValueChip(true)) {\n            e.preventDefault()\n            return false\n          }\n          return true\n        case 'Tab':\n          // When tabbing close the dropdown\n          // which will also focus on main div\n          // and then continuing normal tabbing\n          this.requestClose('tab')\n          return true // Continue doing normal tabbing\n        case 'Escape':\n          this.requestClose('escape')\n          return false\n        case 'Enter':\n          // Check if there's a highlighted option first\n          const highlightedEnter = this.content.list.querySelector(\n            '.' + this.classes.getFirst('highlighted')\n          ) as HTMLDivElement\n          if (highlightedEnter) {\n            // If an option is highlighted, select it (even if addable is enabled)\n            highlightedEnter.click()\n            return false\n          } else if (this.callbacks.addable) {\n            // If no option is highlighted and addable is enabled, add new item\n            addable.click()\n            return false\n          }\n          return true\n      }\n\n      if (e.key.length === 1) {\n        this.clearValueChipHighlight()\n      }\n\n      return true // Allow normal typing\n    }\n\n    main.appendChild(input)\n\n    // Global select all sits next to the search input for a condensed height\n    if (showGlobalSelectAll) {\n      const selectAll = this.createSelectAllControl(() => this.toggleGlobalSelectAll())\n      main.appendChild(selectAll)\n      searchReturn.selectAll = selectAll\n    }\n\n    // If addable is enabled, add the addable div\n    if (this.callbacks.addable) {\n      // Add main class\n      this.addClasses(addable, this.classes.addable)\n\n      // Add svg icon\n      const plus = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n      plus.setAttribute('viewBox', '0 0 100 100')\n      const plusPath = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n      plusPath.setAttribute('d', this.classes.addablePath)\n      plus.appendChild(plusPath)\n      addable.appendChild(plus)\n\n      // Add click event to addable div\n      addable.onclick = (e: Event) => {\n        e.preventDefault()\n        e.stopPropagation()\n\n        // Do nothing if addable is not set\n        if (!this.callbacks.addable) {\n          return\n        }\n\n        // Grab input value\n        const inputValue = this.content.search.input.value.trim()\n        if (inputValue === '') {\n          this.content.search.input.focus()\n          return\n        }\n\n        // Run finish will be ran at the end of the addable function.\n        // Reason its in a function is so we can run it after the\n        // addable function is done for promise based addables\n        const runFinish = (oo: Partial<Option>) => {\n          let newOption = new Option(oo)\n\n          // Call addOption to add the new option\n          this.callbacks.addOption(newOption)\n\n          // set selected value for single and multiple\n          if (this.settings.isMultiple) {\n            let ids = this.store.getSelected()\n            ids.push(newOption.id)\n            this.callbacks.setSelected(ids, true)\n          } else {\n            this.callbacks.setSelected([newOption.id], true)\n          }\n\n          // Clear search (internal reset — must not fire the consumer search event)\n          this.callbacks.clearSearch()\n\n          // Close it only if closeOnSelect = true\n          if (this.settings.closeOnSelect) {\n            const animationDuration = getAnimationDuration(this.content.main)\n            setTimeout(() => {\n              this.requestClose('select', { selectionChanged: true })\n            }, animationDuration)\n          }\n        }\n\n        // Call addable callback\n        const addableValue = this.callbacks.addable(inputValue)\n\n        // If addableValue is false, undefined or null, do nothing\n        if (addableValue === false || addableValue === undefined || addableValue === null) {\n          return\n        }\n\n        // If addableValue is a promise, wait for it to resolve\n        if (addableValue instanceof Promise) {\n          addableValue.then((value) => {\n            if (typeof value === 'string') {\n              runFinish({\n                text: value,\n                value: value\n              })\n            } else if (addableValue instanceof Error) {\n              this.renderError(addableValue.message)\n            } else {\n              runFinish(value)\n            }\n          })\n        } else if (typeof addableValue === 'string') {\n          runFinish({\n            text: addableValue,\n            value: addableValue\n          })\n        } else if (addableValue instanceof Error) {\n          this.renderError(addableValue.message)\n        } else {\n          runFinish(addableValue)\n        }\n\n        return\n      }\n      main.appendChild(addable)\n\n      // Add the addable to the search return\n      searchReturn.addable = {\n        main: addable,\n        svg: plus,\n        path: plusPath\n      }\n    }\n\n    return searchReturn\n  }\n\n  public searchFocus(): void {\n    this.content.search.input.focus({ preventScroll: true })\n  }\n\n  public getOptions(notPlaceholder = false, notDisabled = false, notHidden = false): HTMLDivElement[] {\n    // Put together query string\n    let query = '.' + this.classes.getFirst('option')\n    if (notPlaceholder) {\n      query += ':not(.' + this.classes.getFirst('placeholder') + ')'\n    }\n    if (notDisabled) {\n      query += ':not(.' + this.classes.getFirst('disabled') + ')'\n    }\n    if (notHidden) {\n      query += ':not(.' + this.classes.getFirst('hide') + ')'\n    }\n\n    return Array.from(this.content.list.querySelectorAll(query))\n  }\n\n  // highlightUp is used to highlight the previous option in the list\n  public highlight(dir: 'up' | 'down'): void {\n    // Get full list of options in list\n    const options = this.getOptions(true, true, true)\n\n    // If there are no options, do nothing\n    if (options.length === 0) {\n      return\n    }\n\n    // If length is 1, highlight it\n    if (options.length === 1) {\n      // Check if option doesnt already have highlighted class\n      if (!options[0].classList.contains(this.classes.getFirst('highlighted'))) {\n        this.addClasses(options[0], this.classes.highlighted)\n        return\n      }\n    }\n\n    // Loop through options and see if there are no highlighted ones\n    let highlighted = false\n    for (const o of options) {\n      if (o.classList.contains(this.classes.getFirst('highlighted'))) {\n        highlighted = true\n      }\n    }\n\n    // If no highlighted, see if any are selected and if so highlight selected first one\n    if (!highlighted) {\n      for (const o of options) {\n        if (o.classList.contains(this.classes.getFirst('selected'))) {\n          this.addClasses(o, this.classes.highlighted)\n          break\n        }\n      }\n    }\n\n    // Loop through options and find the highlighted one\n    for (let i = 0; i < options.length; i++) {\n      // Found highlighted option\n      if (options[i].classList.contains(this.classes.getFirst('highlighted'))) {\n        const prevOption = options[i]\n        // Remove highlighted class from current one\n        this.removeClasses(prevOption, this.classes.highlighted)\n\n        // If previous option has parent classes ss-optgroup with ss-open then click it\n        const prevParent = prevOption.parentElement\n        if (prevParent && prevParent.classList.contains(this.classes.getFirst('mainOpen'))) {\n          const optgroupLabel = prevParent.querySelector('.' + this.classes.getFirst('optgroupLabel')) as HTMLDivElement\n          if (optgroupLabel) {\n            optgroupLabel.click()\n          }\n        }\n\n        // Highlight the next one\n        let selectOption =\n          options[dir === 'down' ? (i + 1 < options.length ? i + 1 : 0) : i - 1 >= 0 ? i - 1 : options.length - 1]\n        this.addClasses(selectOption, this.classes.highlighted)\n        this.ensureElementInView(this.content.list, selectOption)\n\n        // Update aria-activedescendant for screen readers\n        if (selectOption.id) {\n          this.main.main.setAttribute('aria-activedescendant', selectOption.id)\n        }\n\n        // If selected option has parent classes ss-optgroup with ss-close then click it\n        const selectParent = selectOption.parentElement\n        if (selectParent && selectParent.classList.contains(this.classes.getFirst('close'))) {\n          const optgroupLabel = selectParent.querySelector(\n            '.' + this.classes.getFirst('optgroupLabel')\n          ) as HTMLDivElement\n          if (optgroupLabel) {\n            optgroupLabel.click()\n          }\n        }\n\n        return\n      }\n    }\n\n    // If we get here, there is no highlighted option\n    // So we will highlight the first or last based upon direction\n    const firstHighlight = options[dir === 'down' ? 0 : options.length - 1]\n    this.addClasses(firstHighlight, this.classes.highlighted)\n\n    // Update aria-activedescendant for screen readers\n    if (firstHighlight.id) {\n      this.main.main.setAttribute('aria-activedescendant', firstHighlight.id)\n    }\n\n    // Scroll to highlighted one\n    this.ensureElementInView(this.content.list, firstHighlight)\n  }\n\n  // Create main container that options will reside\n  public listDiv(): HTMLDivElement {\n    const options = document.createElement('div')\n    this.addClasses(options, this.classes.list)\n\n    // Add id for ARIA controls reference\n    const listId = this.settings.id + '-list'\n    options.id = listId\n    options.dataset.id = listId\n\n    return options\n  }\n\n  public renderError(error: string) {\n    this.optionsListIsFullData = false\n    // Clear out innerHtml\n    this.content.list.innerHTML = ''\n\n    const errorDiv = document.createElement('div')\n    this.addClasses(errorDiv, this.classes.error)\n    errorDiv.textContent = error\n    this.content.list.appendChild(errorDiv)\n    this.repositionOpenContent()\n  }\n\n  public renderSearching() {\n    this.optionsListIsFullData = false\n    // Clear out innerHtml\n    this.content.list.innerHTML = ''\n\n    const searchingDiv = document.createElement('div')\n    this.addClasses(searchingDiv, this.classes.searching)\n    searchingDiv.textContent = this.settings.searchingText\n    this.content.list.appendChild(searchingDiv)\n    this.announce(this.settings.searchingText)\n    this.repositionOpenContent()\n  }\n\n  // Take in data and add options to\n  public renderOptions(data: (Option | Optgroup)[]): void {\n    this.lastSearchFilterTerm = ''\n    this.lastRenderedOptions = data\n      .map((o) => (o instanceof Option ? [o] : o.options.map((po) => new Option(po))))\n      .flat()\n\n    // Clear out innerHtml\n    this.content.list.innerHTML = ''\n\n    // If no results show no results text\n    if (data.length === 0) {\n      this.optionsListIsFullData = false\n      const noResults = document.createElement('div')\n      this.addClasses(noResults, this.classes.search)\n\n      //\n      if (this.callbacks.addable) {\n        const addableMessage = this.settings.addableText.replace('{value}', this.content.search.input.value)\n        noResults.innerHTML = addableMessage\n        this.announce(addableMessage)\n      } else {\n        noResults.innerHTML = this.settings.searchText\n        this.announce(this.settings.searchText)\n      }\n      this.content.list.appendChild(noResults)\n      this.repositionOpenContent()\n      return\n    }\n\n    // If settings has allowDeselect and isSingle, add empty placeholder in the event they want to deselect\n    if (this.settings.allowDeselect && !this.settings.isMultiple) {\n      // Check if store options have a placeholder\n      const placeholderOption = this.store.filter((o) => o.placeholder, false, false) as Option[]\n      if (!placeholderOption.length) {\n        this.store.addOption(\n          new Option({\n            text: '',\n            value: '',\n            selected: false,\n            placeholder: true\n          }),\n          true\n        )\n      }\n    }\n\n    // Append individual options to div container\n    const fragment = document.createDocumentFragment()\n    for (const d of data) {\n      // Create optgroup\n      if (d instanceof Optgroup) {\n        // Create optgroup\n        const optgroupEl = document.createElement('div')\n        this.addClasses(optgroupEl, this.classes.optgroup)\n\n        // Create label\n        const optgroupLabel = document.createElement('div')\n        this.addClasses(optgroupLabel, this.classes.optgroupLabel)\n        optgroupEl.appendChild(optgroupLabel)\n\n        // Create label text div element\n        const optgroupLabelText = document.createElement('div')\n        this.addClasses(optgroupLabelText, this.classes.optgroupLabelText)\n        optgroupLabelText.textContent = d.label\n        optgroupLabel.appendChild(optgroupLabelText)\n\n        // Create options container\n        const optgroupActions = document.createElement('div')\n        this.addClasses(optgroupActions, this.classes.optgroupActions)\n        optgroupLabel.appendChild(optgroupActions)\n\n        // If selectByGroup is true and isMultiple then add click event to label\n        if (this.settings.isMultiple && d.selectAll) {\n          // Create select all control with shared checkbox markup\n          const selectAll = this.createSelectAllControl(\n            () => {\n              // Get the store current selected values\n              const currentSelected = this.store.getSelected()\n              const allSelectedNow = this.isOptgroupAllSelected(d.options as Option[], new Set(currentSelected))\n\n              // If all selected, remove all options from selected\n              if (allSelectedNow) {\n                // Put together new list minus all options in this optgroup\n                const newSelected = currentSelected.filter((s) => {\n                  for (const o of d.options) {\n                    if (s === o.id) {\n                      return false\n                    }\n                  }\n\n                  return true\n                })\n\n                this.callbacks.setSelected(newSelected, true)\n                return\n              } else {\n                // Put together new list with all options in this optgroup\n                let optionIds = d.options.map((o) => o.id).filter((id) => id !== undefined)\n                const newSelected = currentSelected.concat(optionIds)\n\n                // Loop through options and if they don't exist in the store\n                // run addOption callback\n                for (const o of d.options) {\n                  if (o.id && !this.store.getOptionByID(o.id)) {\n                    this.callbacks.addOption(new Option(o))\n                  }\n                }\n\n                this.callbacks.setSelected(newSelected, true)\n                return\n              }\n            },\n            this.isOptgroupAllSelected(d.options as Option[])\n          )\n\n          // Append select all to label\n          optgroupActions.appendChild(selectAll)\n        }\n\n        // If optgroup has collapsable\n        if (d.closable !== 'off') {\n          // Create new div to hold a checkbox svg\n          const optgroupClosable = document.createElement('div')\n          this.addClasses(optgroupClosable, this.classes.optgroupClosable)\n\n          // Create svg arrow\n          const optgroupClosableSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n          optgroupClosableSvg.setAttribute('viewBox', '0 0 100 100')\n          this.addClasses(optgroupClosableSvg, this.classes.arrow)\n          optgroupClosable.appendChild(optgroupClosableSvg)\n\n          // Create new path for arrow\n          const optgroupClosableArrow = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n          optgroupClosableSvg.appendChild(optgroupClosableArrow)\n\n          // If any options are selected or someone is searching, set optgroup to open\n          if (d.options.some((o) => o.selected) || this.content.search.input.value.trim() !== '') {\n            this.addClasses(optgroupClosable, this.classes.mainOpen)\n            optgroupClosableArrow.setAttribute('d', this.classes.arrowOpen)\n          } else if (d.closable === 'open') {\n            this.addClasses(optgroupEl, this.classes.mainOpen)\n            optgroupClosableArrow.setAttribute('d', this.classes.arrowOpen)\n          } else if (d.closable === 'close') {\n            this.addClasses(optgroupEl, this.classes.close)\n            optgroupClosableArrow.setAttribute('d', this.classes.arrowClose)\n          }\n\n          // Add click event listener to close\n          optgroupLabel.addEventListener('click', (e: MouseEvent) => {\n            e.preventDefault()\n            e.stopPropagation()\n\n            const isOpen = this.isClosableOptgroupOpen(optgroupEl, optgroupClosable)\n\n            if (!isOpen) {\n              this.closeOtherClosableOptgroups(optgroupEl)\n              this.removeClasses(optgroupEl, this.classes.close)\n              this.removeClasses(optgroupClosable, this.classes.mainOpen)\n              this.addClasses(optgroupEl, this.classes.mainOpen)\n              optgroupClosableArrow.setAttribute('d', this.classes.arrowOpen)\n            } else {\n              this.removeClasses(optgroupEl, this.classes.mainOpen)\n              this.removeClasses(optgroupClosable, this.classes.mainOpen)\n              this.addClasses(optgroupEl, this.classes.close)\n              optgroupClosableArrow.setAttribute('d', this.classes.arrowClose)\n            }\n\n            this.repositionOpenContent()\n          })\n\n          // Append close to label\n          optgroupActions.appendChild(optgroupClosable)\n        }\n\n        // Add optgroup label\n        optgroupEl.appendChild(optgroupLabel)\n\n        // Loop through options\n        for (const option of d.options) {\n          optgroupEl.appendChild(this.option(new Option(option)))\n          fragment.appendChild(optgroupEl)\n        }\n      }\n\n      // Create option\n      if (d instanceof Option) {\n        fragment.appendChild(this.option(d as Option))\n      }\n    }\n\n    // Append fragment to list\n    this.content.list.appendChild(fragment)\n    this.setOptionsListFullData(data)\n    this.announce(this.settings.resultsText.replace('{count}', String(this.lastRenderedOptions.length)))\n    this.updateGlobalSelectAllState()\n    this.repositionOpenContent()\n  }\n\n  /** True when the list DOM contains every store option (local search can show/hide in place). */\n  public canFilterOptionsInPlace(): boolean {\n    if (!this.optionsListIsFullData) {\n      return false\n    }\n\n    return this.content.list.querySelector('.' + this.classes.getFirst('option')) !== null\n  }\n\n  public resetSearchFilterState(): void {\n    this.lastSearchFilterTerm = ''\n  }\n\n  /** Filter visible options by search without rebuilding the list. */\n  public filterOptionsInPlace(search: string, searchFilter: (opt: Option, search: string) => boolean): void {\n    const searchTrim = search.trim()\n    if (searchTrim === this.lastSearchFilterTerm) {\n      return\n    }\n    this.lastSearchFilterTerm = searchTrim\n\n    const visibleOptions: Option[] = []\n    const optionEls = this.content.list.querySelectorAll(\n      '.' + this.classes.getFirst('option')\n    ) as NodeListOf<HTMLDivElement>\n\n    for (const optionEl of optionEls) {\n      const id = optionEl.dataset.id\n      if (!id) {\n        continue\n      }\n\n      const storeOption = this.store.getOptionByID(id)\n      if (!storeOption) {\n        continue\n      }\n\n      const isPermanentlyHidden =\n        storeOption.placeholder || !storeOption.display || (storeOption.selected && this.settings.hideSelected)\n\n      const matchesSearch = searchFilter(storeOption, searchTrim)\n\n      if (isPermanentlyHidden || !matchesSearch) {\n        this.addClasses(optionEl, this.classes.hide)\n        this.removeClasses(optionEl, this.classes.highlighted)\n      } else {\n        this.removeClasses(optionEl, this.classes.hide)\n        this.setOptionElementContent(optionEl, storeOption, searchTrim)\n        visibleOptions.push(storeOption)\n      }\n\n      if (storeOption.selected) {\n        this.addClasses(optionEl, this.classes.selected)\n        optionEl.setAttribute('aria-selected', 'true')\n      } else {\n        this.removeClasses(optionEl, this.classes.selected)\n        optionEl.setAttribute('aria-selected', 'false')\n      }\n    }\n\n    this.lastRenderedOptions = visibleOptions\n    this.updateOptgroupVisibilityAfterSearch(searchTrim)\n\n    if (visibleOptions.length === 0) {\n      this.updateSearchResultsMessage(0, searchTrim)\n    } else {\n      this.removeListSearchMessage()\n      this.announce(this.settings.resultsText.replace('{count}', String(visibleOptions.length)))\n    }\n\n    this.updateOptgroupSelectAllStates()\n    this.updateGlobalSelectAllState()\n    this.repositionOpenContent()\n  }\n\n  private setOptionsListFullData(data: (Option | Optgroup)[]): void {\n    const storeOptions = this.store.getDataOptions(false)\n    const renderedOptions = data.map((o) => (o instanceof Option ? [o] : o.options.map((po) => new Option(po)))).flat()\n\n    if (renderedOptions.length !== storeOptions.length) {\n      this.optionsListIsFullData = false\n      return\n    }\n\n    const storeIds = new Set(storeOptions.map((o) => o.id))\n    this.optionsListIsFullData = renderedOptions.every((o) => storeIds.has(o.id))\n  }\n\n  private isClosableOptgroupOpen(optgroupEl: HTMLElement, optgroupClosable: HTMLElement): boolean {\n    if (optgroupEl.classList.contains(this.classes.getFirst('close'))) {\n      return false\n    }\n\n    return (\n      optgroupEl.classList.contains(this.classes.getFirst('mainOpen')) ||\n      optgroupClosable.classList.contains(this.classes.getFirst('mainOpen'))\n    )\n  }\n\n  private closeClosableOptgroup(optgroupEl: HTMLElement): void {\n    const closable = optgroupEl.querySelector('.' + this.classes.getFirst('optgroupClosable')) as HTMLElement | null\n    if (!closable) {\n      return\n    }\n\n    if (optgroupEl.classList.contains(this.classes.getFirst('close'))) {\n      return\n    }\n\n    this.removeClasses(optgroupEl, this.classes.mainOpen)\n    this.removeClasses(closable, this.classes.mainOpen)\n    this.addClasses(optgroupEl, this.classes.close)\n\n    const arrow = closable.querySelector('path')\n    if (arrow) {\n      arrow.setAttribute('d', this.classes.arrowClose)\n    }\n  }\n\n  private closeOtherClosableOptgroups(exceptOptgroupEl: HTMLElement): void {\n    const optgroups = this.content.list.querySelectorAll('.' + this.classes.getFirst('optgroup'))\n\n    for (const optgroupEl of optgroups) {\n      if (optgroupEl === exceptOptgroupEl) {\n        continue\n      }\n\n      this.closeClosableOptgroup(optgroupEl as HTMLElement)\n    }\n  }\n\n  private updateOptgroupVisibilityAfterSearch(searchTrim: string): void {\n    const optgroups = this.content.list.querySelectorAll('.' + this.classes.getFirst('optgroup'))\n\n    for (const optgroupEl of optgroups) {\n      const optionEls = optgroupEl.querySelectorAll('.' + this.classes.getFirst('option')) as NodeListOf<HTMLDivElement>\n\n      let hasVisibleOption = false\n      for (const optionEl of optionEls) {\n        if (!optionEl.classList.contains(this.classes.getFirst('hide'))) {\n          hasVisibleOption = true\n          break\n        }\n      }\n\n      if (!hasVisibleOption) {\n        this.addClasses(optgroupEl as HTMLDivElement, this.classes.hide)\n        continue\n      }\n\n      this.removeClasses(optgroupEl as HTMLDivElement, this.classes.hide)\n\n      if (searchTrim !== '') {\n        this.removeClasses(optgroupEl as HTMLDivElement, this.classes.close)\n        this.addClasses(optgroupEl as HTMLDivElement, this.classes.mainOpen)\n      }\n    }\n  }\n\n  private updateSearchResultsMessage(visibleCount: number, searchTrim: string): void {\n    this.removeListSearchMessage()\n\n    if (visibleCount > 0) {\n      return\n    }\n\n    const noResults = document.createElement('div')\n    this.addClasses(noResults, this.classes.search)\n\n    if (this.callbacks.addable) {\n      const addableMessage = this.settings.addableText.replace('{value}', searchTrim)\n      noResults.innerHTML = addableMessage\n      this.announce(addableMessage)\n    } else {\n      noResults.innerHTML = this.settings.searchText\n      this.announce(this.settings.searchText)\n    }\n\n    this.content.list.appendChild(noResults)\n  }\n\n  private removeListSearchMessage(): void {\n    const messages = this.content.list.querySelectorAll('.' + this.classes.getFirst('search'))\n    messages.forEach((message) => message.remove())\n  }\n\n  private setOptionElementContent(optionEl: HTMLDivElement, option: Option, search: string): void {\n    const searchTrim = search.trim()\n    if (this.settings.searchHighlight && searchTrim !== '') {\n      optionEl.innerHTML = this.highlightText(\n        option.html !== '' ? option.html : option.text,\n        searchTrim,\n        this.classes.searchHighlighter\n      )\n    } else if (option.html !== '') {\n      optionEl.innerHTML = option.html\n    } else {\n      optionEl.textContent = option.text\n    }\n\n    if (this.settings.showOptionTooltips && optionEl.textContent) {\n      optionEl.setAttribute('title', optionEl.textContent)\n    } else {\n      optionEl.removeAttribute('title')\n    }\n  }\n\n  /** True when option nodes exist in the list (selection can sync without re-searching). */\n  public hasRenderedOptions(): boolean {\n    return this.content.list.querySelector('.' + this.classes.getFirst('option')) !== null\n  }\n\n  /** True when the open list already has options and search is not filtering. */\n  public canUpdateOptionSelectionInPlace(): boolean {\n    if (this.content.search.input.value.trim() !== '') {\n      return false\n    }\n\n    return this.hasRenderedOptions()\n  }\n\n  /** Sync selected/hidden state on existing option nodes without rebuilding the list. */\n  public updateOptionSelection(): void {\n    const selectedIds = new Set(this.store.getSelected())\n    const optionEls = this.content.list.querySelectorAll(\n      '.' + this.classes.getFirst('option')\n    ) as NodeListOf<HTMLDivElement>\n\n    let lastSelectedEl: HTMLDivElement | null = null\n\n    for (const optionEl of optionEls) {\n      const id = optionEl.dataset.id\n      if (!id) {\n        continue\n      }\n\n      const storeOption = this.store.getOptionByID(id)\n      if (!storeOption) {\n        continue\n      }\n\n      const isSelected = selectedIds.has(id)\n\n      if (isSelected) {\n        this.addClasses(optionEl, this.classes.selected)\n        optionEl.setAttribute('aria-selected', 'true')\n        lastSelectedEl = optionEl\n      } else {\n        this.removeClasses(optionEl, this.classes.selected)\n        optionEl.setAttribute('aria-selected', 'false')\n      }\n\n      if (this.settings.hideSelected) {\n        if (isSelected) {\n          this.addClasses(optionEl, this.classes.hide)\n        } else {\n          this.removeClasses(optionEl, this.classes.hide)\n          if (!storeOption.display) {\n            this.addClasses(optionEl, this.classes.hide)\n          }\n        }\n      }\n    }\n\n    if (!this.settings.isMultiple && lastSelectedEl) {\n      this.main.main.setAttribute('aria-activedescendant', lastSelectedEl.id)\n    } else if (!this.settings.isMultiple && selectedIds.size === 0) {\n      this.main.main.removeAttribute('aria-activedescendant')\n    }\n\n    this.updateOptgroupSelectAllStates()\n    this.updateGlobalSelectAllState()\n    this.repositionOpenContent()\n  }\n\n  private createSelectAllControl(onClick: () => void, allSelected = false): HTMLDivElement {\n    const selectAll = document.createElement('div')\n    this.addClasses(selectAll, this.classes.optgroupSelectAll)\n    selectAll.setAttribute('role', 'checkbox')\n    selectAll.setAttribute('aria-checked', allSelected ? 'true' : 'false')\n    selectAll.setAttribute('aria-label', this.selectAllLabel(allSelected))\n    selectAll.tabIndex = -1\n\n    if (allSelected) {\n      this.addClasses(selectAll, this.classes.selected)\n    }\n\n    const selectAllLabel = document.createElement('span')\n    selectAllLabel.textContent = this.selectAllLabel(allSelected)\n    selectAll.appendChild(selectAllLabel)\n\n    const selectAllSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n    selectAllSvg.setAttribute('viewBox', '0 0 100 100')\n    selectAllSvg.setAttribute('aria-hidden', 'true')\n    selectAll.appendChild(selectAllSvg)\n\n    const selectAllBox = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n    selectAllBox.setAttribute('d', this.classes.optgroupSelectAllBox)\n    selectAllSvg.appendChild(selectAllBox)\n\n    const selectAllCheck = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n    selectAllCheck.setAttribute('d', this.classes.optgroupSelectAllCheck)\n    selectAllSvg.appendChild(selectAllCheck)\n\n    selectAll.addEventListener('click', (e: MouseEvent) => {\n      e.preventDefault()\n      e.stopPropagation()\n      onClick()\n    })\n\n    return selectAll\n  }\n\n  private getSelectableOptions(): Option[] {\n    return this.store.getDataOptions(false).filter((option) => {\n      return !option.disabled && !option.placeholder && option.display\n    })\n  }\n\n  private isGlobalAllSelected(selectedIds?: Set<string>): boolean {\n    const options = this.getSelectableOptions()\n    if (options.length === 0) {\n      return false\n    }\n\n    const selected = selectedIds || new Set(this.store.getSelected())\n    for (const option of options) {\n      if (!selected.has(option.id)) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  private toggleGlobalSelectAll(): void {\n    const selectable = this.getSelectableOptions()\n    const selectedIds = new Set(this.store.getSelected())\n\n    if (this.isGlobalAllSelected(selectedIds)) {\n      const selectableIds = new Set(selectable.map((option) => option.id))\n      const newSelected = this.store.getSelected().filter((id) => !selectableIds.has(id))\n      this.callbacks.setSelected(newSelected, true)\n      return\n    }\n\n    this.callbacks.setSelected(\n      selectable.map((option) => option.id),\n      true\n    )\n  }\n\n  private updateGlobalSelectAllState(): void {\n    const selectAll = this.content.search.selectAll\n    if (!selectAll || !this.settings.isMultiple || !this.settings.selectAll) {\n      return\n    }\n\n    const allSelected = this.isGlobalAllSelected()\n    if (allSelected) {\n      this.addClasses(selectAll, this.classes.selected)\n    } else {\n      this.removeClasses(selectAll, this.classes.selected)\n    }\n\n    selectAll.setAttribute('aria-checked', allSelected ? 'true' : 'false')\n    selectAll.setAttribute('aria-label', this.selectAllLabel(allSelected))\n\n    const selectAllLabel = selectAll.querySelector('span')\n    if (selectAllLabel) {\n      selectAllLabel.textContent = this.selectAllLabel(allSelected)\n    }\n  }\n\n  private updateOptgroupSelectAllStates(): void {\n    if (!this.settings.isMultiple) {\n      return\n    }\n\n    const selectedIds = new Set(this.store.getSelected())\n    const optgroups = this.content.list.querySelectorAll('.' + this.classes.getFirst('optgroup'))\n\n    for (const optgroupEl of optgroups) {\n      const selectAll = optgroupEl.querySelector(\n        '.' + this.classes.getFirst('optgroupSelectAll')\n      ) as HTMLDivElement | null\n\n      if (!selectAll) {\n        continue\n      }\n\n      const optionEls = optgroupEl.querySelectorAll('.' + this.classes.getFirst('option')) as NodeListOf<HTMLDivElement>\n\n      let allSelected = optionEls.length > 0\n      for (const optionEl of optionEls) {\n        const id = optionEl.dataset.id\n        if (!id || !selectedIds.has(id)) {\n          allSelected = false\n          break\n        }\n      }\n\n      if (allSelected) {\n        this.addClasses(selectAll, this.classes.selected)\n      } else {\n        this.removeClasses(selectAll, this.classes.selected)\n      }\n\n      selectAll.setAttribute('aria-checked', allSelected ? 'true' : 'false')\n      selectAll.setAttribute('aria-label', this.selectAllLabel(allSelected))\n\n      const selectAllLabel = selectAll.querySelector('span')\n      if (selectAllLabel) {\n        selectAllLabel.textContent = this.selectAllLabel(allSelected)\n      }\n    }\n  }\n\n  private selectAllLabel(allSelected: boolean): string {\n    return allSelected ? this.settings.unselectAllText : this.settings.selectAllText\n  }\n\n  private isOptgroupAllSelected(options: Option[], selectedIds?: Set<string>): boolean {\n    if (options.length === 0) {\n      return false\n    }\n\n    for (const option of options) {\n      const isSelected = selectedIds ? Boolean(option.id && selectedIds.has(option.id)) : option.selected\n\n      if (!isSelected) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  // Create option div element\n  public option(option: Option): HTMLDivElement {\n    // Add hidden placeholder\n    if (option.placeholder) {\n      const placeholder = document.createElement('div')\n      this.addClasses(placeholder, this.classes.option)\n      this.addClasses(placeholder, this.classes.hide)\n      return placeholder\n    }\n\n    // Create option\n    const optionEl = document.createElement('div')\n    optionEl.dataset.id = option.id // Dataset id for identifying an option\n    optionEl.id = this.settings.id + '-' + option.id // Unique ID for ARIA references\n    this.addClasses(optionEl, this.classes.option)\n    optionEl.setAttribute('role', 'option') // WCAG attribute\n    if (option.class) {\n      option.class.split(' ').forEach((dataClass: string) => {\n        optionEl.classList.add(dataClass)\n      })\n    }\n    if (option.style) {\n      optionEl.style.cssText = option.style\n    }\n\n    // Set option content\n    this.setOptionElementContent(optionEl, option, this.content.search.input.value)\n\n    // If option is disabled\n    if (!option.display) {\n      this.addClasses(optionEl, this.classes.hide)\n    }\n\n    // If allowed to deselect, null onclick and add disabled\n    if (option.disabled) {\n      this.addClasses(optionEl, this.classes.disabled)\n    }\n\n    // If option is selected and hideSelectedOption is true, hide it\n    if (option.selected && this.settings.hideSelected) {\n      this.addClasses(optionEl, this.classes.hide)\n    }\n\n    // If option is selected\n    if (option.selected) {\n      this.addClasses(optionEl, this.classes.selected)\n      optionEl.setAttribute('aria-selected', 'true')\n      this.main.main.setAttribute('aria-activedescendant', optionEl.id)\n    } else {\n      this.removeClasses(optionEl, this.classes.selected)\n      optionEl.setAttribute('aria-selected', 'false')\n    }\n\n    // Add click event listener\n    optionEl.addEventListener('click', (e: MouseEvent) => {\n      e.preventDefault()\n      e.stopPropagation()\n\n      // Setup variables\n      const selectedOptions = this.store.getSelected()\n      const element = e.currentTarget as HTMLDivElement\n      const elementID = String(element.dataset.id)\n      const storeOption = this.store.getOptionByID(elementID) ?? option\n      const isCurrentlySelected = selectedOptions.includes(elementID)\n      const isCmd = e.ctrlKey || e.metaKey // Cmd (Mac) or Ctrl (Windows/Linux)\n\n      // If the option is disabled, do nothing\n      if (option.disabled) {\n        return\n      }\n\n      // allowDeselect only applies to single-select mode\n      // In multi-select, you can always toggle options on/off\n      if (!this.settings.isMultiple && isCurrentlySelected && !this.settings.allowDeselect) {\n        this.closeOnSingleSelectReclick(storeOption)\n        return\n      }\n\n      // Prevent deselection of mandatory options\n      if (isCurrentlySelected && storeOption.mandatory) {\n        this.closeOnSingleSelectReclick(storeOption)\n        return\n      }\n\n      // Check limit and do nothing if limit is reached and the option is not selected\n      // Also check reverse for min limit and is selected (allow Cmd to bypass minSelected)\n      if (\n        (this.settings.isMultiple && this.settings.maxSelected <= selectedOptions.length && !isCurrentlySelected) ||\n        (this.settings.isMultiple &&\n          this.settings.minSelected >= selectedOptions.length &&\n          isCurrentlySelected &&\n          !isCmd)\n      ) {\n        return\n      }\n\n      // Setup variables\n      let shouldUpdate = false\n      const before = this.store.getSelectedOptions()\n      let after = [] as Option[]\n\n      // If multiple - mimic native browser multi-select behavior\n      if (this.settings.isMultiple) {\n        const isCurrentlySelected = before.some((o: Option) => o.id === elementID)\n        const isShift = e.shiftKey\n\n        // Shift+Click: Select range from last clicked to current\n        if (isShift && this.lastSelectedOption) {\n          const options = this.lastRenderedOptions\n          const lastIndex = options.findIndex((o: Option) => o.id === this.lastSelectedOption!.id)\n          const currentIndex = options.findIndex((o: Option) => o.id === option.id)\n\n          if (lastIndex >= 0 && currentIndex >= 0) {\n            const startIndex = Math.min(lastIndex, currentIndex)\n            const endIndex = Math.max(lastIndex, currentIndex)\n            const rangeOptions = options.slice(startIndex, endIndex + 1)\n\n            // Check if range would exceed maxSelected\n            const newSelections = rangeOptions.filter((opt) => !before.find((b) => b.id === opt.id))\n            if (before.length + newSelections.length <= this.settings.maxSelected) {\n              // Add range to existing selections\n              after = before.concat(newSelections)\n            } else {\n              // Range too large, keep existing selections\n              after = before\n            }\n          } else {\n            after = before\n          }\n        }\n        // Cmd/Ctrl+Click: Toggle selection without affecting others (keeps dropdown open)\n        else if (isCmd) {\n          if (isCurrentlySelected) {\n            // Deselect this option\n            after = before.filter((o: Option) => o.id !== elementID)\n          } else {\n            // Add this option to selection\n            after = before.concat(storeOption)\n          }\n          this.lastSelectedOption = storeOption\n        }\n        // Regular Click: Toggle this option (add/remove), will close dropdown\n        else {\n          if (isCurrentlySelected) {\n            // Deselect this option\n            after = before.filter((o: Option) => o.id !== elementID)\n          } else {\n            // Add this option to selection\n            after = before.concat(storeOption)\n          }\n          this.lastSelectedOption = storeOption\n        }\n      }\n\n      // If single\n      if (!this.settings.isMultiple) {\n        if (isCurrentlySelected) {\n          // If selected after would remove\n          after = []\n        } else {\n          // If not selected after would add\n          after = [storeOption]\n        }\n      }\n\n      // If no beforeOnChange is set automatically update at end\n      if (!this.callbacks.beforeChange) {\n        shouldUpdate = true\n      }\n\n      if (this.callbacks.beforeChange) {\n        // Check if beforeChange returns false\n        if (this.callbacks.beforeChange(after, before) === false) {\n          shouldUpdate = false\n        } else {\n          shouldUpdate = true\n        }\n      }\n\n      if (shouldUpdate) {\n        // Check if the option exists in the store\n        // if not run addOption callback\n        if (!this.store.getOptionByID(elementID)) {\n          this.callbacks.addOption(option)\n        }\n\n        // Get values from after and set as selected\n        this.callbacks.setSelected(\n          after.map((o: Option) => o.id),\n          false\n        )\n\n        // Close dropdown unless using modifier keys in multi-select\n        // (mimics native multi-select behavior where you can keep selecting)\n        const isModifierKey = e.ctrlKey || e.metaKey || e.shiftKey // Cmd/Ctrl or Shift\n        const shouldClose = this.settings.closeOnSelect && !(this.settings.isMultiple && isModifierKey)\n\n        if (shouldClose) {\n          this.requestClose('select', {\n            option: storeOption,\n            selectionChanged: this.selectionChanged(before, after)\n          })\n        }\n\n        // callback that the value has changed\n        if (this.callbacks.afterChange) {\n          this.callbacks.afterChange(after)\n        }\n      }\n    })\n\n    return optionEl\n  }\n\n  public destroy(): void {\n    this.stopPositionTracking()\n\n    if (this.modalElements) {\n      this.unlockBodyScroll()\n      if (this.content.main.parentElement === this.modalElements.dialog) {\n        this.restoreContentOffscreen()\n      }\n      this.modalElements.overlay.remove()\n      this.modalElements = null\n    } else if (this.bodyScrollLocked) {\n      this.unlockBodyScroll()\n    }\n\n    // Remove main\n    this.main.main.remove()\n\n    // Remove content\n    this.content.main.remove()\n\n    this.removeDetachedInstanceDom()\n  }\n\n  /** Remove any leftover main/content/modal nodes for this instance (e.g. on body). */\n  private removeDetachedInstanceDom(): void {\n    const id = this.settings.id\n    const mainClass = this.classes.getFirst('main')\n    const contentClass = this.classes.getFirst('content')\n    const modalClass = this.classes.getFirst('modalOverlay')\n\n    document.querySelectorAll<HTMLElement>(`[data-id=\"${id}\"]`).forEach((el) => {\n      if (\n        el.classList.contains(mainClass) ||\n        el.classList.contains(contentClass) ||\n        el.classList.contains(modalClass)\n      ) {\n        el.remove()\n      }\n    })\n  }\n\n  private highlightText(str: string, search: any, className: string) {\n    const searchTerm = search.trim()\n    if (searchTerm === '') {\n      return str\n    }\n\n    // Escape special regex characters in the search term to prevent regex injection\n    const escapedSearch = searchTerm.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n\n    // Create a temporary div to parse HTML and work with text nodes only\n    const tempDiv = document.createElement('div')\n    tempDiv.innerHTML = str\n\n    // Function to recursively process text nodes\n    const highlightTextNodes = (node: Node) => {\n      if (node.nodeType === Node.TEXT_NODE) {\n        const text = node.textContent || ''\n        const regex = new RegExp('(' + escapedSearch + ')', 'i')\n\n        if (regex.test(text)) {\n          // Create a temporary container for the highlighted content\n          const wrapper = document.createElement('span')\n          const parts = text.split(regex)\n\n          parts.forEach((part, index) => {\n            if (part && regex.test(part)) {\n              // This is the matched part - wrap it in mark\n              const mark = document.createElement('mark')\n              mark.className = className\n              mark.textContent = part\n              wrapper.appendChild(mark)\n            } else if (part) {\n              // This is not the matched part - keep as text\n              wrapper.appendChild(document.createTextNode(part))\n            }\n          })\n\n          // Replace the text node with the wrapper\n          node.parentNode?.replaceChild(wrapper, node)\n        }\n      } else if (node.nodeType === Node.ELEMENT_NODE) {\n        // Recursively process child nodes\n        Array.from(node.childNodes).forEach((child) => highlightTextNodes(child))\n      }\n    }\n\n    // Process all text nodes in the temporary div\n    Array.from(tempDiv.childNodes).forEach((node) => highlightTextNodes(node))\n\n    return tempDiv.innerHTML\n  }\n\n  private setContentDirection(direction: 'above' | 'below'): void {\n    const isAbove = direction === 'above'\n    const addClass = isAbove ? this.classes.dirAbove : this.classes.dirBelow\n    const removeClass = isAbove ? this.classes.dirBelow : this.classes.dirAbove\n\n    this.removeClasses(this.main.main, removeClass)\n    this.addClasses(this.main.main, addClass)\n    this.removeClasses(this.content.main, removeClass)\n    this.addClasses(this.content.main, addClass)\n\n    if (isAbove) {\n      const mainHeight = this.main.main.offsetHeight\n      const contentHeight = this.content.main.offsetHeight\n      this.content.main.style.margin = '-' + (mainHeight + contentHeight - 1) + 'px 0px 0px 0px'\n    } else {\n      this.content.main.style.margin = '-1px 0px 0px 0px'\n    }\n  }\n\n  private setContentPosition(): void {\n    const containerRect = this.main.main.getBoundingClientRect()\n\n    if (this.settings.contentPosition === 'relative') {\n      this.applyContentWidth(containerRect)\n      return\n    }\n\n    this.cancelOverflowShift()\n\n    let top: number\n    let left: number\n\n    if (this.settings.contentPosition === 'fixed') {\n      top = containerRect.top + containerRect.height\n      left = containerRect.left\n    } else {\n      top = containerRect.top + window.scrollY + containerRect.height\n      left = containerRect.left + window.scrollX\n    }\n\n    this.content.main.style.top = top + 'px'\n    this.content.main.style.left = left + 'px'\n\n    this.applyContentWidth(containerRect)\n\n    const knownWidth = this.getKnownContentWidth(containerRect)\n    if (knownWidth !== null) {\n      this.content.main.style.left = this.adjustLeftForOverflow(left, containerRect.left, knownWidth) + 'px'\n      return\n    }\n\n    // min/max/auto width needs one layout pass before measuring\n    this.overflowShiftRaf = requestAnimationFrame(() => {\n      this.overflowShiftRaf = 0\n      this.applyOverflowShiftFromMeasure()\n    })\n  }\n\n  private applyContentWidth(containerRect: DOMRect): void {\n    const cw = this.settings.contentWidth\n    this.content.main.style.width = ''\n    this.content.main.style.minWidth = ''\n    this.content.main.style.maxWidth = ''\n\n    if (!cw) {\n      if (this.settings.contentPosition !== 'relative') {\n        this.content.main.style.width = containerRect.width + 'px'\n      }\n      return\n    }\n\n    if (cw === 'auto') {\n      this.content.main.style.minWidth = containerRect.width + 'px'\n    } else if (cw.startsWith('>')) {\n      this.content.main.style.minWidth = cw.slice(1)\n    } else if (cw.startsWith('<')) {\n      this.content.main.style.maxWidth = cw.slice(1)\n    } else {\n      this.content.main.style.width = cw\n    }\n  }\n\n  private cancelOverflowShift(): void {\n    if (this.overflowShiftRaf) {\n      cancelAnimationFrame(this.overflowShiftRaf)\n      this.overflowShiftRaf = 0\n    }\n  }\n\n  /** Width in px when known before layout; null when width must be measured. */\n  private getKnownContentWidth(containerRect: DOMRect): number | null {\n    const cw = this.settings.contentWidth\n    if (!cw) {\n      return containerRect.width\n    }\n    if (cw.startsWith('>') || cw.startsWith('<') || cw.includes('%')) {\n      return null\n    }\n\n    const px = parseFloat(cw)\n    return Number.isNaN(px) ? null : px\n  }\n\n  private adjustLeftForOverflow(docLeft: number, viewportLeft: number, width: number): number {\n    const padding = 20\n    const contentRight = viewportLeft + width\n    if (contentRight <= window.innerWidth) {\n      return docLeft\n    }\n\n    const overflow = contentRight - (window.innerWidth - padding)\n    const newLeft = docLeft - overflow\n\n    if (this.settings.contentPosition === 'fixed') {\n      return Math.max(0, newLeft)\n    }\n    return Math.max(window.scrollX, newLeft)\n  }\n\n  private applyOverflowShiftFromMeasure(): void {\n    const contentRect = this.content.main.getBoundingClientRect()\n    const contentRight = contentRect.right\n    if (contentRight <= window.innerWidth) {\n      return\n    }\n\n    const padding = 20\n    const overflow = contentRight - (window.innerWidth - padding)\n    const currentLeft = parseFloat(this.content.main.style.left) || 0\n    const newLeft = currentLeft - overflow\n\n    if (this.settings.contentPosition === 'fixed') {\n      this.content.main.style.left = Math.max(0, newLeft) + 'px'\n    } else {\n      this.content.main.style.left = Math.max(window.scrollX, newLeft) + 'px'\n    }\n  }\n\n  public moveContentAbove(): void {\n    this.setContentDirection('above')\n    this.setContentPosition()\n  }\n\n  public moveContentBelow(): void {\n    this.setContentDirection('below')\n    this.setContentPosition()\n  }\n\n  public ensureElementInView(container: HTMLElement, element: HTMLElement): void {\n    const cTop = container.scrollTop + container.offsetTop\n    const cBottom = cTop + container.clientHeight\n    const eTop = element.offsetTop\n    const eBottom = eTop + element.clientHeight\n\n    if (eTop < cTop) {\n      container.scrollTop -= cTop - eTop\n    } else if (eBottom > cBottom) {\n      container.scrollTop += eBottom - cBottom\n    }\n  }\n\n  public putContent(): 'up' | 'down' {\n    const mainHeight = this.main.main.offsetHeight\n    const mainRect = this.main.main.getBoundingClientRect()\n    const contentHeight = this.content.main.offsetHeight\n    const spaceBelow = window.innerHeight - (mainRect.top + mainHeight)\n\n    if (spaceBelow <= contentHeight) {\n      if (mainRect.top > contentHeight) {\n        return 'up'\n      }\n      return 'down'\n    }\n\n    return 'down'\n  }\n\n  // Updates deselect based on item count and allowDeselect setting\n  public updateDeselectAll(): void {\n    if (!this.store || !this.settings) {\n      return\n    }\n    const selected = this.store.getSelectedOptions()\n    const hasSelectedItems = selected && selected.length > 0\n    const isMultiple = this.settings.isMultiple\n    const allowDeselect = this.settings.allowDeselect\n    const atMinSelected = this.isAtMinSelected()\n\n    const deselectButton = this.main.deselect.main\n    const hideClass = this.classes.hide\n\n    if (allowDeselect && !(isMultiple && !hasSelectedItems) && !atMinSelected) {\n      this.removeClasses(deselectButton, hideClass)\n    } else {\n      this.addClasses(deselectButton, hideClass)\n    }\n  }\n}\n", "/**\n * Pure classification of MutationObserver records on the native <select>.\n *\n * Select.observeCall() uses these flags to decide which sync path to run\n * (class/disabled vs full structure vs selection-only). Keeping this logic\n * separate makes it testable without spinning up a full SlimSelect instance.\n */\n\n/** What changed in a single observer callback batch (flags can all be true). */\nexport interface MutationFlags {\n  /** Native select class attribute changed — sync to render styles only. */\n  classChanged: boolean\n  /** Native select title attribute changed — sync the tooltip onto the rendered control. */\n  titleChanged: boolean\n  /** Native select disabled attribute changed — enable/disable SlimSelect. */\n  disabledChanged: boolean\n  /**\n   * Options or optgroups were added, removed, or had attributes edited.\n   * Triggers a full structure sync (store + native DOM + render).\n   */\n  optgroupOptionChanged: boolean\n  /**\n   * Selection may have changed without a separate `change` event yet.\n   * Used when a newly added <option> is already the select's value.\n   */\n  selectionChanged: boolean\n}\n\n/**\n * Scan a MutationObserver batch and return which kinds of updates are needed.\n *\n * The observer watches the <select> with subtree: true, so mutations can\n * target the select itself or any child <option> / <optgroup>.\n */\nexport function classifyMutations(\n  mutations: MutationRecord[],\n  select: HTMLSelectElement\n): MutationFlags {\n  const flags: MutationFlags = {\n    classChanged: false,\n    titleChanged: false,\n    disabledChanged: false,\n    optgroupOptionChanged: false,\n    selectionChanged: false\n  }\n\n  for (const m of mutations) {\n    // Mutations directly on the <select> element\n    if (m.target === select) {\n      if (m.attributeName === 'disabled') {\n        flags.disabledChanged = true\n      }\n\n      if (m.attributeName === 'class') {\n        flags.classChanged = true\n      }\n\n      if (m.attributeName === 'title') {\n        flags.titleChanged = true\n      }\n\n      if (m.type === 'childList') {\n        // Detect \"add option and it becomes selected\" in one DOM update\n        // (e.g. appendChild + select.value = 'x'). Without this, we'd only\n        // run structure sync and miss that selection also changed.\n        for (const n of Array.from(m.addedNodes)) {\n          if (\n            n.nodeName === 'OPTION' &&\n            (n as HTMLOptionElement).value === select.value\n          ) {\n            flags.selectionChanged = true\n            break\n          }\n        }\n\n        // Any childList on the select means options were added/removed/replaced\n        flags.optgroupOptionChanged = true\n      }\n    }\n\n    // Attribute edits on options (selected, text, data-*) or optgroup changes\n    // bubble up as mutations on child nodes, not on the select itself\n    if (m.target.nodeName === 'OPTGROUP' || m.target.nodeName === 'OPTION') {\n      flags.optgroupOptionChanged = true\n    }\n  }\n\n  return flags\n}\n", "import { copyOptionData, kebabCase, hasClassInTree, selectedIdsEqual } from './helpers'\nimport { classifyMutations } from './mutations'\nimport { Optgroup, Option } from './store'\n\nexport default class Select {\n  public select: HTMLSelectElement\n\n  // Mutation observer fields\n  public onValueChange?: (value: Option[]) => void\n  public onClassChange?: (classes: string[]) => void\n  public onTitleChange?: (title: string) => void\n  public onDisabledChange?: (disabled: boolean) => void\n  public onOptionsChange?: (data: (Option | Optgroup)[]) => void\n  public onLabelClick?: () => void\n\n  // Change observers\n  private listen: boolean = false\n  private observer: MutationObserver | null = null\n  private isUpdating: boolean = false\n  private pendingOptionsChange: (Option | Optgroup)[] | null = null\n\n  // Event handlers for preventing native select behavior (especially on iOS Safari)\n  private preventNativeSelect: ((e: Event) => void) | null = null\n  private preventNativeSelectMousedown: ((e: Event) => void) | null = null\n  private preventNativeSelectFocus: ((e: Event) => void) | null = null\n  private restoreAriaHiddenOnBlur: ((e: Event) => void) | null = null\n\n  constructor(select: HTMLSelectElement) {\n    this.select = select\n\n    this.valueChange = this.valueChange.bind(this)\n    // Add change event listener\n    this.select.addEventListener('change', this.valueChange, {\n      // allow bubbling of event\n      passive: true\n    })\n\n    // Initiate mutation observer\n    this.observer = new MutationObserver(this.observeCall.bind(this))\n\n    // Start listening for changes\n    this.changeListen(true)\n  }\n\n  public enable(): void {\n    this.select.disabled = false\n  }\n\n  public disable(): void {\n    this.select.disabled = true\n  }\n\n  public hideUI(): void {\n    this.select.tabIndex = -1\n    // Visually hide but keep focusable for form validation\n    // Use 1px dimensions so browser validation popup can display\n    this.select.style.position = 'absolute'\n    this.select.style.width = '1px'\n    this.select.style.height = '1px'\n    this.select.style.opacity = '0'\n    this.select.style.overflow = 'hidden'\n    this.select.style.pointerEvents = 'none'\n    // Remove any spacing or borders that could affect layout\n    this.select.style.margin = '0'\n    this.select.style.padding = '0'\n    this.select.style.borderWidth = '0'\n    // Clip to completely hide the 1px\n    this.select.style.clipPath = 'inset(50%)'\n    // Only apply aria-hidden if the select doesn't currently hold focus.\n    // Browsers (Chrome) block aria-hidden on a focused element and log a\n    // warning, since focus must not be hidden from assistive technology.\n    // If the select is focused right now, the blur handler below will\n    // apply aria-hidden once focus leaves the element.\n    if (document.activeElement !== this.select) {\n      this.select.setAttribute('aria-hidden', 'true')\n    }\n\n    // Prevent native select from opening when label is clicked (especially on iOS Safari)\n    // iOS Safari programmatically focuses/clicks the select when label is clicked,\n    // bypassing pointer-events: none, so we need to prevent these events\n    // Only add listeners if they haven't been added yet\n    if (!this.preventNativeSelect) {\n      this.preventNativeSelect = (e: Event) => {\n        e.preventDefault()\n        e.stopPropagation()\n        e.stopImmediatePropagation()\n      }\n\n      this.preventNativeSelectMousedown = (e: Event) => {\n        e.preventDefault()\n        e.stopPropagation()\n        e.stopImmediatePropagation()\n      }\n\n      this.preventNativeSelectFocus = (e: Event) => {\n        // Focus events are not cancelable, so the select may still end up\n        // focused (e.g. the browser focusing an invalid control during form\n        // validation, or a programmatic select.focus() call). Lift aria-hidden\n        // while the element holds focus so assistive technology isn't blocked\n        // from it; it gets restored by the blur handler.\n        this.select.removeAttribute('aria-hidden')\n        e.preventDefault()\n        e.stopPropagation()\n        e.stopImmediatePropagation()\n      }\n\n      // Re-apply aria-hidden once focus leaves the hidden select\n      this.restoreAriaHiddenOnBlur = () => {\n        this.select.setAttribute('aria-hidden', 'true')\n      }\n\n      // Add event listeners with capture phase to catch events before they reach the select\n      this.select.addEventListener('click', this.preventNativeSelect, {\n        capture: true,\n        passive: false\n      })\n      this.select.addEventListener('mousedown', this.preventNativeSelectMousedown, { capture: true, passive: false })\n      this.select.addEventListener('focus', this.preventNativeSelectFocus, {\n        capture: true,\n        passive: false\n      })\n      this.select.addEventListener('blur', this.restoreAriaHiddenOnBlur, {\n        capture: true,\n        passive: true\n      })\n    }\n  }\n\n  public showUI(): void {\n    this.select.removeAttribute('tabindex')\n    // Reset visual hiding styles\n    this.select.style.position = ''\n    this.select.style.width = ''\n    this.select.style.height = ''\n    this.select.style.opacity = ''\n    this.select.style.overflow = ''\n    this.select.style.pointerEvents = ''\n    this.select.style.margin = ''\n    this.select.style.padding = ''\n    this.select.style.borderWidth = ''\n    this.select.style.clipPath = ''\n    this.select.removeAttribute('aria-hidden')\n\n    // Remove event listeners that prevent native select behavior\n    if (this.preventNativeSelect) {\n      this.select.removeEventListener('click', this.preventNativeSelect, {\n        capture: true\n      })\n      this.preventNativeSelect = null\n    }\n    if (this.preventNativeSelectMousedown) {\n      this.select.removeEventListener('mousedown', this.preventNativeSelectMousedown, { capture: true })\n      this.preventNativeSelectMousedown = null\n    }\n    if (this.preventNativeSelectFocus) {\n      this.select.removeEventListener('focus', this.preventNativeSelectFocus, {\n        capture: true\n      })\n      this.preventNativeSelectFocus = null\n    }\n    if (this.restoreAriaHiddenOnBlur) {\n      this.select.removeEventListener('blur', this.restoreAriaHiddenOnBlur, {\n        capture: true\n      })\n      this.restoreAriaHiddenOnBlur = null\n    }\n  }\n\n  public changeListen(listen: boolean) {\n    this.listen = listen\n\n    // Start listening for changes\n    if (listen) {\n      if (this.observer) {\n        this.observer.observe(this.select, {\n          subtree: true, // subtree for optgroups options\n          childList: true, // children changes\n          attributes: true // attributes changes\n        })\n      }\n    }\n\n    // Stop listening for changes\n    if (!listen) {\n      if (this.observer) {\n        this.observer.disconnect()\n      }\n    }\n  }\n\n  // This function get triggers when the select value changes\n  // and will call the onValueChange function if it exists\n  public valueChange(ev: Event): boolean {\n    if (this.listen && this.onValueChange) {\n      this.onValueChange(this.getSelectedOptions())\n    }\n\n    // Allow bubbling back to other change event listeners\n    return true\n  }\n\n  private observeCall(mutations: MutationRecord[]): void {\n    // If we are not listening, do nothing.\n    if (!this.listen) {\n      return\n    }\n\n    // Pure classifier — separates class/disabled/structure/selection mutations\n    const {\n      classChanged,\n      titleChanged,\n      disabledChanged,\n      optgroupOptionChanged,\n      selectionChanged: initialSelectionChanged\n    } = classifyMutations(mutations, this.select)\n    let selectionChanged = initialSelectionChanged\n\n    // If class has changed then call the class change function\n    if (classChanged && this.onClassChange) {\n      this.onClassChange(this.select.className.split(' '))\n    }\n\n    // If title has changed then call the title change function\n    if (titleChanged && this.onTitleChange) {\n      this.onTitleChange(this.select.getAttribute('title') || '')\n    }\n\n    // If disabled has changed then call the disabled change function\n    if (disabledChanged && this.onDisabledChange) {\n      this.changeListen(false)\n      this.onDisabledChange(this.select.disabled)\n      this.changeListen(true)\n    }\n\n    // If optgroup or option has changed then call the select change function\n    if (optgroupOptionChanged) {\n      this.clearLeftoverHiddenDisplay(mutations)\n    }\n\n    if (optgroupOptionChanged && this.onOptionsChange) {\n      // If we're currently updating, queue this change to process after update completes\n      if (this.isUpdating) {\n        // Only queue if the select element actually has options (not empty from updateOptions clearing)\n        // Check the select element directly, not getData() which might return stale data\n        if (this.select.options.length > 0) {\n          const currentData = this.getData()\n          // Only queue if we have actual data\n          if (currentData.length > 0) {\n            this.pendingOptionsChange = currentData\n          }\n        }\n        if (selectionChanged) {\n          this.select.dispatchEvent(new Event('change'))\n        }\n        return\n      }\n\n      this.changeListen(false)\n      this.onOptionsChange(this.getData())\n      this.changeListen(true)\n\n      // Structure sync includes selection from getData(); skip redundant change event\n      selectionChanged = false\n    }\n\n    if (selectionChanged) {\n      this.select.dispatchEvent(new Event('change'))\n    }\n  }\n\n  // From the select element pull optgroup and options into data\n  public getData(): (Option | Optgroup)[] {\n    let data = []\n\n    // Loop through nodes and get data\n    const nodes = this.select.childNodes as any as HTMLOptGroupElement[] | HTMLOptionElement[]\n    for (const n of nodes) {\n      // Optgroup\n      if (n.nodeName === 'OPTGROUP') {\n        data.push(this.getDataFromOptgroup(n as HTMLOptGroupElement))\n      }\n\n      // Option\n      if (n.nodeName === 'OPTION') {\n        data.push(this.getDataFromOption(n as HTMLOptionElement))\n      }\n    }\n\n    return data\n  }\n\n  public getDataFromOptgroup(optgroup: HTMLOptGroupElement): Optgroup {\n    let data = {\n      id: optgroup.id,\n      label: optgroup.label,\n      selectAll: optgroup.dataset ? optgroup.dataset.selectall === 'true' : false,\n      closable: optgroup.dataset ? optgroup.dataset.closable : 'off',\n      options: []\n    } as Optgroup\n\n    const options = optgroup.childNodes as any as HTMLOptionElement[]\n    for (const o of options) {\n      if (o.nodeName === 'OPTION') {\n        data.options!.push(this.getDataFromOption(o as HTMLOptionElement))\n      }\n    }\n\n    return data\n  }\n\n  /**\n   * Clearing `hidden` must also drop leftover `style.display = none` from\n   * earlier rebuilds, or getDataFromOption still treats the option as hidden.\n   */\n  private clearLeftoverHiddenDisplay(mutations: MutationRecord[]): void {\n    for (const mutation of mutations) {\n      if (mutation.target.nodeName !== 'OPTION' || mutation.attributeName !== 'hidden') {\n        continue\n      }\n\n      const option = mutation.target as HTMLOptionElement\n      if (!option.hidden && option.style.display === 'none') {\n        option.style.display = ''\n      }\n    }\n  }\n\n  // From passed in option pull pieces of usable information\n  public getDataFromOption(option: HTMLOptionElement): Option {\n    // The hidden attribute is not guaranteed to set inline style.display.\n    // SlimSelect uses `display` to decide which options to show in the UI.\n    const isHidden = option.hidden || option.hasAttribute('hidden')\n\n    return {\n      id: option.id,\n      value: option.value,\n      text: option.text,\n      html: option.dataset && option.dataset.html ? option.dataset.html : '',\n      defaultSelected: option.defaultSelected,\n      selected: option.selected,\n      display: option.style.display !== 'none' && !isHidden,\n      disabled: option.disabled,\n      mandatory: option.dataset ? option.dataset.mandatory === 'true' : false,\n      placeholder: option.dataset.placeholder === 'true',\n      class: option.className,\n      style: option.style.cssText,\n      data: copyOptionData(option.dataset)\n    } as Option\n  }\n\n  public getSelectedOptions(): Option[] {\n    let options = []\n\n    // Loop through options and set selected\n    const opts = this.select.childNodes as any as (HTMLOptGroupElement | HTMLOptionElement)[]\n    for (const o of opts) {\n      if (o.nodeName === 'OPTGROUP') {\n        const optgroupOptions = o.childNodes as any as HTMLOptionElement[]\n        for (const oo of optgroupOptions) {\n          if (oo.nodeName === 'OPTION') {\n            const option = oo as HTMLOptionElement\n            if (option.selected) {\n              options.push(this.getDataFromOption(option))\n            }\n          }\n        }\n      }\n\n      if (o.nodeName === 'OPTION') {\n        const option = o as HTMLOptionElement\n        if (option.selected) {\n          options.push(this.getDataFromOption(option))\n        }\n      }\n    }\n\n    return options\n  }\n\n  public getSelectedValues(): string[] {\n    return this.getSelectedOptions().map((option) => option.value)\n  }\n\n  /** True when every value has a matching native <option> (empty list is vacuously true). */\n  public hasOptionValues(values: string[]): boolean {\n    if (values.length === 0) {\n      return true\n    }\n\n    const nativeValues = new Set(Array.from(this.select.options).map((option) => option.value))\n    return values.every((value) => nativeValues.has(value))\n  }\n\n  public setSelected(ids: string[]): void {\n    // Stop listening to changes\n    this.changeListen(false)\n\n    // Loop through options and set selected\n    const options = this.select.childNodes as any as (HTMLOptGroupElement | HTMLOptionElement)[]\n    for (const o of options) {\n      if (o.nodeName === 'OPTGROUP') {\n        const optgroup = o as HTMLOptGroupElement\n        const optgroupOptions = optgroup.childNodes as any as HTMLOptionElement[]\n        for (const oo of optgroupOptions) {\n          if (oo.nodeName === 'OPTION') {\n            const option = oo as HTMLOptionElement\n            option.selected = ids.includes(option.id)\n          }\n        }\n      }\n\n      if (o.nodeName === 'OPTION') {\n        const option = o as HTMLOptionElement\n        option.selected = ids.includes(option.id)\n      }\n    }\n\n    // Keep native value in sync for form validation and parent bindings\n    const selected = this.getSelectedOptions()\n    if (!this.select.multiple) {\n      this.select.value = selected.length === 1 ? selected[0].value : ''\n    }\n\n    // Fire native change listeners while observer is paused to avoid re-entrant sync\n    this.select.dispatchEvent(new Event('change', { bubbles: true }))\n\n    this.changeListen(true)\n  }\n\n  // Set selected options by value instead of id.\n  // SyncCoordinator uses this path — HTML option ids are often empty.\n  // This is useful when the id is not known\n  // and only the value is known\n  // but the value is not unique and can be duplicated\n  public setSelectedByValue(values: string[]): void {\n    // Stop listening to changes\n    this.changeListen(false)\n\n    // Loop through options and set selected\n    const options = this.select.childNodes as any as (HTMLOptGroupElement | HTMLOptionElement)[]\n    for (const o of options) {\n      if (o.nodeName === 'OPTGROUP') {\n        const optgroup = o as HTMLOptGroupElement\n        const optgroupOptions = optgroup.childNodes as any as HTMLOptionElement[]\n        for (const oo of optgroupOptions) {\n          if (oo.nodeName === 'OPTION') {\n            const option = oo as HTMLOptionElement\n            option.selected = values.includes(option.value)\n          }\n        }\n      }\n\n      if (o.nodeName === 'OPTION') {\n        const option = o as HTMLOptionElement\n        option.selected = values.includes(option.value)\n      }\n    }\n\n    const selected = this.getSelectedOptions()\n    if (!this.select.multiple) {\n      // Sync native value for form validation / Vue v-model\n      this.select.value = selected.length === 1 ? selected[0].value : ''\n    }\n\n    // Fire native change listeners while observer is paused to avoid re-entrant sync\n    this.select.dispatchEvent(new Event('change', { bubbles: true }))\n\n    this.changeListen(true)\n  }\n\n  public updateSelect(id?: string, style?: string, classes?: string[]): void {\n    // Stop listening to changes\n    this.changeListen(false)\n\n    // Update id, only if the id isnt already set\n    if (id) {\n      this.select.dataset.id = id\n    }\n\n    // Update style\n    if (style) {\n      this.select.style.cssText = style\n    }\n\n    // Update classes\n    if (classes) {\n      this.select.className = ''\n      classes.forEach((c) => {\n        if (c.trim() !== '') {\n          this.select.classList.add(c.trim())\n        }\n      })\n    }\n\n    // Start listening to changes\n    this.changeListen(true)\n  }\n\n  public updateOptions(data: (Option | Optgroup)[]): void {\n    // Don't update if data is empty (prevents clearing select when no data)\n    if (!data || data.length === 0) {\n      return\n    }\n\n    // Set updating flag FIRST to prevent mutation observer from processing during update\n    // This must be set before stopping listening so any queued mutations see the flag\n    this.isUpdating = true\n    this.pendingOptionsChange = null\n\n    // Stop listening to changes\n    this.changeListen(false)\n\n    // Option-list rebuilds (e.g. API search) must not fire change unless selection changes\n    const selectedBefore = this.getSelectedValues()\n\n    // Clear out select\n    this.select.innerHTML = ''\n\n    for (const d of data) {\n      if (d instanceof Optgroup) {\n        this.select.appendChild(this.createOptgroup(d))\n      }\n\n      if (d instanceof Option) {\n        this.select.appendChild(this.createOption(d))\n      }\n    }\n\n    // Only fire native change when the selected value(s) actually changed (#696)\n    if (!selectedIdsEqual(selectedBefore, this.getSelectedValues())) {\n      this.select.dispatchEvent(new Event('change', { bubbles: true }))\n    }\n\n    // Start listening to changes\n    this.changeListen(true)\n\n    // Clear updating flag\n    this.isUpdating = false\n\n    // Process any pending options change that was queued during the update\n    // Only process if it has data (don't process empty data from innerHTML clearing)\n    if (this.pendingOptionsChange !== null) {\n      const pending: (Option | Optgroup)[] = this.pendingOptionsChange\n      if (pending.length > 0 && this.onOptionsChange) {\n        this.pendingOptionsChange = null\n        // Process the queued change\n        this.changeListen(false)\n        this.onOptionsChange(pending)\n        this.changeListen(true)\n      } else {\n        // Clear pending if it was empty\n        this.pendingOptionsChange = null\n      }\n    }\n  }\n\n  public createOptgroup(optgroup: Optgroup): HTMLOptGroupElement {\n    const optgroupEl = document.createElement('optgroup')\n    optgroupEl.id = optgroup.id\n    optgroupEl.label = optgroup.label\n    if (optgroup.selectAll) {\n      optgroupEl.dataset.selectAll = 'true'\n    }\n    if (optgroup.closable !== 'off') {\n      optgroupEl.dataset.closable = optgroup.closable\n    }\n    if (optgroup.options) {\n      for (const option of optgroup.options) {\n        optgroupEl.appendChild(this.createOption(option as Option))\n      }\n    }\n    return optgroupEl\n  }\n\n  public createOption(info: Option): HTMLOptionElement {\n    const optionEl = document.createElement('option')\n    optionEl.id = info.id\n    optionEl.value = info.value\n    optionEl.textContent = info.text\n    if (info.html !== '') {\n      optionEl.setAttribute('data-html', info.html)\n    }\n    optionEl.defaultSelected = info.defaultSelected\n    optionEl.selected = info.selected // Explicitly set selected because defaultSelected: true sets selected to true\n    if (info.disabled) {\n      optionEl.disabled = true\n    }\n    if (!info.display) {\n      optionEl.hidden = true\n    } else {\n      optionEl.hidden = false\n    }\n    if (info.placeholder) {\n      optionEl.setAttribute('data-placeholder', 'true')\n    }\n    if (info.mandatory) {\n      optionEl.setAttribute('data-mandatory', 'true')\n    }\n    if (info.class) {\n      info.class.split(' ').forEach((optionClass: string) => {\n        optionEl.classList.add(optionClass)\n      })\n    }\n    if (info.data && typeof info.data === 'object') {\n      Object.keys(info.data).forEach((key) => {\n        optionEl.setAttribute('data-' + kebabCase(key), info.data[key])\n      })\n    }\n\n    return optionEl\n  }\n\n  // Find and handle labels associated with this select\n  public setupLabelHandlers(): void {\n    const labels: HTMLLabelElement[] = []\n\n    // Find labels that point to this select via 'for' attribute\n    const selectId = this.select.id\n    if (selectId) {\n      const labelsByFor = document.querySelectorAll<HTMLLabelElement>(`label[for=\"${selectId}\"]`)\n      labelsByFor.forEach((label) => labels.push(label))\n    }\n\n    // Find labels that wrap this select (label contains select)\n    let parent = this.select.parentElement\n    while (parent && parent !== document.body) {\n      if (parent.tagName === 'LABEL') {\n        labels.push(parent as HTMLLabelElement)\n        break\n      }\n      parent = parent.parentElement\n    }\n\n    // Remove duplicates\n    const uniqueLabels = Array.from(new Set(labels))\n\n    uniqueLabels.forEach((label) => {\n      // Skip if already handled\n      if ((label as any).__slimSelectLabelHandler) {\n        return\n      }\n\n      // Add click handler to label\n      const labelClickHandler = (e: MouseEvent) => {\n        const target = e.target as HTMLElement\n\n        // Check if click is on SlimSelect UI elements (main div or content)\n        const isSlimSelectElement = hasClassInTree(target, this.select.dataset.id!)\n\n        // Prevent default label behavior (focusing the select)\n        // This needs to happen for all clicks on the label or its children\n        // to prevent the browser from focusing the hidden select\n        e.preventDefault()\n        // e.stopPropagation() // dont stop propagation\n\n        // Only trigger the toggle if the click is NOT on SlimSelect elements\n        // This allows clicking label text/children to toggle, while wrapped SlimSelect handles its own clicks\n        if (!isSlimSelectElement && this.onLabelClick) {\n          this.onLabelClick()\n        }\n      }\n\n      // Store the handler on the label for cleanup later\n      ;(label as any).__slimSelectLabelHandler = labelClickHandler\n      label.addEventListener('click', labelClickHandler, {\n        capture: true,\n        passive: false\n      })\n    })\n  }\n\n  // Remove label handlers\n  public removeLabelHandlers(): void {\n    const labels: HTMLLabelElement[] = []\n\n    // Find labels that point to this select via 'for' attribute\n    const selectId = this.select.id\n    if (selectId) {\n      const labelsByFor = document.querySelectorAll<HTMLLabelElement>(`label[for=\"${selectId}\"]`)\n      labelsByFor.forEach((label) => labels.push(label))\n    }\n\n    // Find labels that wrap this select\n    let parent = this.select.parentElement\n    while (parent && parent !== document.body) {\n      if (parent.tagName === 'LABEL') {\n        labels.push(parent as HTMLLabelElement)\n        break\n      }\n      parent = parent.parentElement\n    }\n\n    // Remove duplicates\n    const uniqueLabels = Array.from(new Set(labels))\n\n    uniqueLabels.forEach((label) => {\n      const handler = (label as any).__slimSelectLabelHandler\n      if (handler) {\n        label.removeEventListener('click', handler, { capture: true })\n        delete (label as any).__slimSelectLabelHandler\n      }\n    })\n  }\n\n  public destroy() {\n    this.changeListen(false)\n\n    // Remove event change listener\n    this.select.removeEventListener('change', this.valueChange)\n\n    // Remove event listeners that prevent native select behavior\n    if (this.preventNativeSelect) {\n      this.select.removeEventListener('click', this.preventNativeSelect, {\n        capture: true\n      })\n      this.preventNativeSelect = null\n    }\n    if (this.preventNativeSelectMousedown) {\n      this.select.removeEventListener('mousedown', this.preventNativeSelectMousedown, { capture: true })\n      this.preventNativeSelectMousedown = null\n    }\n    if (this.preventNativeSelectFocus) {\n      this.select.removeEventListener('focus', this.preventNativeSelectFocus, {\n        capture: true\n      })\n      this.preventNativeSelectFocus = null\n    }\n    if (this.restoreAriaHiddenOnBlur) {\n      this.select.removeEventListener('blur', this.restoreAriaHiddenOnBlur, {\n        capture: true\n      })\n      this.restoreAriaHiddenOnBlur = null\n    }\n\n    // Disconnect observer and null\n    if (this.observer) {\n      this.observer.disconnect()\n      this.observer = null\n    }\n\n    // Remove label handlers\n    this.removeLabelHandlers()\n\n    // Remove dataset id from original select\n    delete this.select.dataset.id\n\n    // Show the original select\n    this.showUI()\n  }\n}\n", "/**\n * Central sync pipeline for SlimSelect.\n *\n * All paths that change store, native <select>, or custom UI should go through\n * SyncCoordinator instead of calling setData/setSelected directly. This gives us:\n *   - One place to batch/coalesce updates\n *   - Lightweight selection sync (no full native DOM rebuild)\n *   - No-op skips when nothing actually changed\n *\n * Wired from SlimSelect: native observer → enqueue(native), public API → enqueue(api),\n * render callbacks → enqueue(ui).\n */\n\nimport Render from './render'\nimport Select from './select'\nimport Store, { Optgroup, Option } from './store'\nimport { dataStructureEqual, selectedIdsEqual } from './helpers'\n\n/** Where a change originated — affects batching and render behavior. */\nexport type ChangeSource = 'native' | 'ui' | 'api'\n\nexport interface SyncEvents {\n  afterChange?: (newVal: Option[]) => void\n  error?: (err: Error) => void\n}\n\n/**\n * A single unit of work in the sync queue.\n * Structure = replace option list; selection = change selected only; addOption = append one.\n */\nexport type SyncChange =\n  | {\n      type: 'structure'\n      data: (Partial<Option> | Partial<Optgroup>)[]\n      source: ChangeSource\n      /** Keep current selection when replacing data (async search results). */\n      preserveSelection?: boolean\n      /** API search results — do not update the catalog baseline. */\n      isSearchResult?: boolean\n    }\n  | {\n      type: 'selection'\n      values: string | string[]\n      source: ChangeSource\n      /** false when Vue/parent is pushing modelValue down (avoid emit loop). */\n      runAfterChange?: boolean\n    }\n  | { type: 'addOption'; option: Partial<Option>; source: ChangeSource }\n\nexport interface SyncDeps {\n  select: Select\n  store: Store\n  render: Render\n  events: SyncEvents\n  search?: (value: string) => void\n  onError?: (err: Error) => void\n}\n\n/** Skip structure sync when incoming data matches what's already in the store. */\nexport function shouldSkipStructureUpdate(\n  store: Store,\n  data: (Partial<Option> | Partial<Optgroup>)[]\n): boolean {\n  return dataStructureEqual(store.getData(false), data)\n}\n\n/**\n * Resolve setSelected() arguments to option ids.\n * Accepts either ids or values for backward compatibility.\n */\nexport function resolveSelectedIds(\n  store: Store,\n  values: string | string[]\n): string[] {\n  const valueList = Array.isArray(values) ? values : [values]\n  const options = store.getDataOptions(false)\n  const ids: string[] = []\n\n  for (const value of valueList) {\n    if (options.find((option) => option.id == value)) {\n      ids.push(value)\n      continue\n    }\n\n    // Value may match multiple options (duplicate values) — select all matches\n    for (const option of options.filter((option) => option.value == value)) {\n      ids.push(option.id)\n    }\n  }\n\n  return ids\n}\n\nexport default class SyncCoordinator {\n  private queue: SyncChange[] = []\n  private flushScheduled = false\n  /** True while applyChange is running — prevents re-entrant flush loops. */\n  public isSyncing = false\n\n  constructor(private deps: SyncDeps) {}\n\n  public enqueue(change: SyncChange): void {\n    this.queue.push(change)\n\n    // Native mutations often arrive in bursts from MutationObserver; coalesce\n    // them in one microtask so we render once per frame.\n    if (change.source === 'native') {\n      if (!this.flushScheduled) {\n        this.flushScheduled = true\n        queueMicrotask(() => this.flush())\n      }\n      return\n    }\n\n    // API/UI (setData, setSelected, clicks) should feel instant to callers.\n    // If we're already inside flush(), defer until the current batch finishes.\n    if (!this.isSyncing) {\n      this.flush()\n    }\n  }\n\n  /** Process everything in the queue. Callable from tests for deterministic native sync. */\n  public flush(): void {\n    this.flushScheduled = false\n\n    if (this.queue.length === 0) {\n      return\n    }\n\n    const batch = this.coalesceBatch(this.queue)\n    this.queue = []\n\n    this.isSyncing = true\n    try {\n      for (const change of batch) {\n        this.applyChange(change)\n      }\n    } finally {\n      this.isSyncing = false\n      // Changes enqueued during applyChange (e.g. async search) run next\n      if (this.queue.length > 0) {\n        this.flush()\n      }\n    }\n  }\n\n  /**\n   * Collapse a batch into the minimum work needed.\n   * Structure sync already includes selection from getData(), so drop redundant\n   * selection changes in the same batch. When multiple structure updates arrive,\n   * only the last one wins.\n   */\n  private coalesceBatch(changes: SyncChange[]): SyncChange[] {\n    const hasStructure = changes.some((c) => c.type === 'structure')\n    const hasAddOption = changes.some((c) => c.type === 'addOption')\n\n    if (hasStructure || hasAddOption) {\n      const structureChanges = changes.filter(\n        (c) => c.type === 'structure' || c.type === 'addOption'\n      )\n      const lastStructure = structureChanges[structureChanges.length - 1]\n\n      if (lastStructure?.type === 'structure') {\n        return [lastStructure]\n      }\n\n      return structureChanges\n    }\n\n    const selectionChanges = changes.filter((c) => c.type === 'selection')\n    if (selectionChanges.length > 0) {\n      return [selectionChanges[selectionChanges.length - 1]]\n    }\n\n    return changes\n  }\n\n  private applyChange(change: SyncChange): void {\n    switch (change.type) {\n      case 'structure':\n        this.applyStructure(\n          change.data,\n          change.source,\n          change.preserveSelection,\n          change.isSearchResult\n        )\n        break\n      case 'selection':\n        this.applySelection(\n          change.values,\n          change.source,\n          change.runAfterChange !== false\n        )\n        break\n      case 'addOption':\n        this.applyAddOption(change.option)\n        break\n    }\n  }\n\n  /**\n   * Full sync: store → native <select> rebuild → render values + options.\n   * Used when the option list itself changes (setData, native DOM edits).\n   * API search results update store + UI only — native select stays form/selection state.\n   */\n  private applyStructure(\n    data: (Partial<Option> | Partial<Optgroup>)[],\n    _source: ChangeSource,\n    preserveSelection = false,\n    isSearchResult = false\n  ): void {\n    const { store, select, render, events } = this.deps\n\n    // API search always shows \"Searching...\" first — even when results match the\n    // current store, we must re-render the UI so that placeholder is cleared (#695).\n    // Search hits stay out of the native <select> (form options update on selection).\n    if (!isSearchResult && shouldSkipStructureUpdate(store, data)) {\n      return\n    }\n\n    const selected = store.getSelected()\n\n    const err = store.validateDataArray(data)\n    if (err) {\n      if (events.error) {\n        events.error(err)\n      } else if (this.deps.onError) {\n        this.deps.onError(err)\n      }\n      return\n    }\n\n    store.setData(data, preserveSelection)\n    const dataClean = store.getData(false)\n\n    if (!isSearchResult) {\n      store.snapshotCatalog()\n    }\n\n    // Ephemeral API search pages must not rewrite the native <select>\n    if (!isSearchResult) {\n      select.updateOptions(dataClean)\n    }\n\n    render.renderValues()\n    render.renderOptions(dataClean)\n\n    if (events.afterChange && !selectedIdsEqual(selected, store.getSelected())) {\n      events.afterChange(store.getSelectedOptions())\n    }\n  }\n\n  /**\n   * Sync native <select> to current selection (form truth).\n   * When selected options are missing from the native DOM (e.g. picked from API\n   * search results), rebuild from selected options only — never from search hits.\n   */\n  private syncNativeSelection(): void {\n    const { store, select } = this.deps\n    const selectedOptions = store.getSelectedOptions()\n    const selectedValues = store.getSelectedValues()\n\n    if (!select.hasOptionValues(selectedValues)) {\n      if (selectedOptions.length > 0) {\n        select.updateOptions(selectedOptions)\n        return\n      }\n\n      // Empty selection with no matching native options: prefer catalog placeholder\n      const placeholder = store\n        .getCatalogData()\n        .find(\n          (item): item is Option =>\n            item instanceof Option && item.placeholder === true\n        )\n      if (placeholder) {\n        select.updateOptions([new Option({ ...placeholder, selected: true })])\n        return\n      }\n    }\n\n    // Use values on the native DOM — HTML option ids may be empty while store uses generated ids\n    select.setSelectedByValue(selectedValues)\n  }\n\n  /**\n   * Lightweight selection sync: flip option.selected on native DOM only.\n   * Avoids select.updateOptions() (innerHTML rebuild) for selection-only changes\n   * when the options already exist on the native select.\n   */\n  private applySelection(\n    values: string | string[],\n    _source: ChangeSource,\n    runAfterChange: boolean\n  ): void {\n    const { store, select, render, events } = this.deps\n\n    const selected = store.getSelected()\n    const ids = resolveSelectedIds(store, values)\n\n    if (selectedIdsEqual(selected, ids)) {\n      return\n    }\n\n    store.setSelectedBy('id', ids)\n    this.syncNativeSelection()\n    render.renderValues()\n\n    const searchValue = render.content.search.input.value.trim()\n    if (searchValue !== '') {\n      if (render.hasRenderedOptions()) {\n        render.updateOptionSelection()\n      } else if (this.deps.search) {\n        this.deps.search(searchValue)\n      }\n    } else if (render.canUpdateOptionSelectionInPlace()) {\n      render.updateOptionSelection()\n    } else {\n      render.renderOptions(store.getData(false))\n    }\n\n    if (\n      runAfterChange &&\n      events.afterChange &&\n      !selectedIdsEqual(selected, store.getSelected())\n    ) {\n      events.afterChange(store.getSelectedOptions())\n    }\n  }\n\n  /** Append a single option then full-sync native + render (same as legacy addOption). */\n  private applyAddOption(option: Partial<Option>): void {\n    const { store, select, render, events } = this.deps\n    const selected = store.getSelected()\n    const searchValue = render.content.search.input.value.trim()\n    const isApiSearchOverlay = searchValue !== '' && !!this.deps.search\n    const optionValue = option.value ?? option.text ?? ''\n\n    const optionExists = (data: (Option | Optgroup)[]): boolean => {\n      for (const item of data) {\n        if (item instanceof Optgroup) {\n          if (\n            item.options.some((opt) => (opt.value ?? opt.text) === optionValue)\n          ) {\n            return true\n          }\n          continue\n        }\n\n        if ((item.value ?? item.text) === optionValue) {\n          return true\n        }\n      }\n\n      return false\n    }\n\n    if (!optionExists(store.getData(false))) {\n      if (isApiSearchOverlay) {\n        const baseline = store.getCatalogData()\n        if (!optionExists(baseline)) {\n          store.setData([...baseline, new Option(option)], true)\n        }\n        store.snapshotCatalog()\n      } else {\n        store.addOption(option)\n        store.snapshotCatalog()\n      }\n    }\n\n    const data = store.getData(false)\n\n    // During API search, native select is form truth (selected options), not search hits\n    if (isApiSearchOverlay) {\n      const selectedOptions = store.getSelectedOptions()\n      if (selectedOptions.length > 0) {\n        select.updateOptions(selectedOptions)\n      }\n    } else {\n      select.updateOptions(data)\n    }\n\n    render.renderValues()\n    render.renderOptions(data)\n\n    if (events.afterChange && !selectedIdsEqual(selected, store.getSelected())) {\n      events.afterChange(store.getSelectedOptions())\n    }\n  }\n}\n", "import CssClasses from './classes'\nimport { getAnimationTimeout } from './animations'\nimport GlobalEvents, { hasClassInTree } from './events'\nimport { debounce, getAssociatedLabelText } from './helpers'\nimport Lifecycle from './lifecycle'\nimport Render, { CloseInfo } from './render'\nimport Select from './select'\nimport Settings, { MODAL_MOBILE_BREAKPOINT } from './settings'\nimport Store, { Option, Optgroup } from './store'\nimport SyncCoordinator from './sync'\n\n// Export classes\nexport { Settings, Option, Optgroup, MODAL_MOBILE_BREAKPOINT }\nexport type { ModalSetting } from './settings'\n\n// Export interfaces from render\nexport type { Main, Content, Search, CloseInfo, CloseSource } from './render'\n\nexport interface Config {\n  select: string | Element\n  data?: (Partial<Option> | Partial<Optgroup>)[]\n  settings?: Partial<Settings>\n  cssClasses?: Partial<CssClasses>\n  events?: Events\n}\n\nexport interface Events {\n  search?: (\n    searchValue: string,\n    selected: Option[],\n    catalog?: (Option | Optgroup)[]\n  ) => Promise<(Partial<Option> | Partial<Optgroup>)[]> | (Partial<Option> | Partial<Optgroup>)[]\n  searchFilter?: (option: Option, search: string) => boolean\n  addable?: (\n    value: string\n  ) => Promise<Partial<Option> | string> | Partial<Option> | string | false | null | undefined | Error\n  beforeChange?: (newVal: Option[], oldVal: Option[]) => boolean | void\n  afterChange?: (newVal: Option[]) => void\n  beforeOpen?: () => void\n  afterOpen?: () => void\n  beforeClose?: (info: CloseInfo) => boolean | void\n  afterClose?: () => void\n  error?: (err: Error) => void\n}\n\nexport default class SlimSelect {\n  public selectEl: HTMLSelectElement\n\n  // Classes\n  public settings!: Settings\n  public cssClasses!: CssClasses\n  public select!: Select\n  public store!: Store\n  public render!: Render\n  public sync!: SyncCoordinator\n  public lifecycle!: Lifecycle\n  private globalEvents!: GlobalEvents\n  /** Invalidates in-flight API search responses when the query changes or clears. */\n  private searchGeneration = 0\n\n  // Events\n  public events = {\n    search: undefined,\n    searchFilter: (opt: Option, search: string) => {\n      return opt.text.toLowerCase().indexOf(search.toLowerCase()) !== -1\n    },\n    addable: undefined,\n    beforeChange: undefined,\n    afterChange: undefined,\n    beforeOpen: undefined,\n    afterOpen: undefined,\n    beforeClose: undefined,\n    afterClose: undefined\n  } as Events\n\n  constructor(config: Config) {\n    // Make sure you get the right element\n    this.selectEl = (\n      typeof config.select === 'string' ? document.querySelector(config.select) : config.select\n    ) as HTMLSelectElement\n    if (!this.selectEl) {\n      if (config.events && config.events.error) {\n        config.events.error(new Error('Could not find select element'))\n      }\n      return\n    }\n    if (this.selectEl.tagName !== 'SELECT') {\n      if (config.events && config.events.error) {\n        config.events.error(new Error('Element isnt of type select'))\n      }\n      return\n    }\n\n    // If select already has a slim select id on it lets destroy it first\n    if (this.selectEl.dataset.ssid) {\n      this.destroy()\n    }\n\n    // Set settings\n    this.settings = new Settings(config.settings)\n\n    // Allow data-selectall on the <select> when settings.selectAll is unset\n    if (config.settings?.selectAll === undefined && this.selectEl.dataset.selectall === 'true') {\n      this.settings.selectAll = true\n    }\n\n    // Set CSS classes\n    this.cssClasses = new CssClasses(config.cssClasses)\n\n    // Set events\n    const debounceEvents = ['beforeOpen', 'afterOpen', 'afterClose']\n    for (const key in config.events) {\n      // Check if key exists in events\n      if (!config.events.hasOwnProperty(key)) {\n        continue\n      }\n\n      // Check if key is in debounceEvents\n      if (debounceEvents.indexOf(key) !== -1) {\n        ;(this.events as { [key: string]: any })[key] = debounce((config.events as { [key: string]: any })[key], 100)\n      } else {\n        ;(this.events as { [key: string]: any })[key] = (config.events as { [key: string]: any })[key]\n      }\n    }\n\n    // Upate settings with type, style and classname\n    this.settings.disabled = config.settings?.disabled ? config.settings.disabled : this.selectEl.disabled\n    this.settings.isMultiple = this.selectEl.multiple\n    this.settings.style = this.selectEl.style.cssText\n    this.settings.class = this.selectEl.className.split(' ')\n\n    // Set select class\n    this.select = new Select(this.selectEl)\n    // Ensure the select has an id for label associations\n    if (!this.selectEl.id) {\n      this.selectEl.id = this.settings.id\n    }\n    this.select.updateSelect(this.settings.id, this.settings.style, this.settings.class)\n    this.select.hideUI() // Hide the original select element\n\n    this.select.onClassChange = (classes: string[]) => {\n      // Update settings with new class\n      this.settings.class = classes\n\n      // Run render updateClassStyles\n      this.render.updateClassStyles()\n    }\n    this.select.onTitleChange = (title: string) => {\n      // Keep the rendered control's tooltip in sync with the native select\n      this.render.updateTitle(title)\n    }\n    this.select.onDisabledChange = (disabled: boolean) => {\n      if (disabled) {\n        this.disable()\n      } else {\n        this.enable()\n      }\n    }\n\n    // Set up label click handler to toggle SlimSelect\n    // This allows clicking the label to open/close, matching the main div behavior\n    this.select.onLabelClick = () => {\n      if (!this.settings.disabled) {\n        this.settings.isOpen ? this.close({ source: 'toggle', selectionChanged: false }) : this.open()\n      }\n    }\n\n    // Set store class\n    const data = config.data ? config.data : this.select.getData()\n    this.store = new Store(this.settings.isMultiple ? 'multiple' : 'single', data)\n\n    // If data is passed update the original select element\n    if (config.data) {\n      this.select.updateOptions(this.store.getData())\n    }\n\n    // Set render renderCallbacks\n    const renderCallbacks = {\n      open: this.open.bind(this),\n      close: this.close.bind(this),\n      addable: this.events.addable ? this.events.addable : undefined,\n      // UI clicks route through SyncCoordinator (batched, avoids double updates)\n      setSelected: (values: string | string[], runAfterChange: boolean) => {\n        this.sync.enqueue({\n          type: 'selection',\n          values,\n          source: 'ui',\n          runAfterChange\n        })\n      },\n      addOption: (option: Partial<Option>) => {\n        this.sync.enqueue({\n          type: 'addOption',\n          option,\n          source: 'ui'\n        })\n      },\n      search: this.search.bind(this),\n      clearSearch: this.clearSearch.bind(this),\n      beforeChange: this.events.beforeChange,\n      afterChange: this.events.afterChange\n    }\n\n    // Setup render class\n    this.settings.modalTitle = config.settings?.modalTitle ?? getAssociatedLabelText(this.selectEl)\n\n    this.render = new Render(this.settings, this.cssClasses, this.store, renderCallbacks)\n\n    // Align JS timeout with --ss-animation-timing (CSS is source of truth)\n    this.settings.timeoutDelay = getAnimationTimeout(this.render.content.main, config.settings?.timeoutDelay)\n\n    // Single coordinator batches native + API + UI updates (see sync.ts)\n    this.sync = new SyncCoordinator({\n      select: this.select,\n      store: this.store,\n      render: this.render,\n      events: this.events,\n      search: this.search.bind(this)\n    })\n\n    this.select.onValueChange = (options: Option[]) => {\n      // Native <option> ids are often empty; store ids are generated at init\n      // and not written back unless updateOptions() runs. Prefer id, fall back\n      // to value so synthetic `select.value = x` + `change` still syncs.\n      this.sync.enqueue({\n        type: 'selection',\n        values: options.map((option) => option.id || option.value),\n        source: 'native'\n      })\n    }\n    this.select.onOptionsChange = (data: (Option | Optgroup)[]) => {\n      this.sync.enqueue({\n        type: 'structure',\n        data: data || [],\n        source: 'native'\n      })\n    }\n\n    // Open/close state machine — animation wait + outside-click attach timing\n    this.lifecycle = new Lifecycle(\n      {\n        beforeOpen: this.events.beforeOpen,\n        afterOpen: this.events.afterOpen,\n        beforeClose: (info) => this.events.beforeClose?.(info),\n        onClose: (info) => this.applyClose(info),\n        afterClose: () => {\n          this.render.clearDirectionClasses()\n          this.render.finalizeModalClose()\n          if (this.events.afterClose) {\n            this.events.afterClose()\n          }\n        },\n        onOpenReady: () => this.globalEvents.attachDocumentClick(),\n        onCloseReady: () => this.globalEvents.detachDocumentClick()\n      },\n      {\n        timeoutDelay: this.settings.timeoutDelay,\n        waitForAnimation: (phase, signal) => this.render.waitForAnimation(phase, signal)\n      }\n    )\n\n    // Resize/scroll/visibility listeners (document click via lifecycle onOpenReady)\n    this.globalEvents = new GlobalEvents({\n      onDocumentClick: this.documentClick.bind(this),\n      onWindowResize: () => {\n        if (!this.settings.isOpen && !this.settings.isFullOpen) {\n          return\n        }\n        this.render.moveContent()\n      },\n      onWindowScroll: () => {\n        if (!this.settings.isOpen && !this.settings.isFullOpen) {\n          return\n        }\n        this.render.moveContent()\n      },\n      onVisibilityChange: () => {\n        if (document.hidden) {\n          this.close({ source: 'api', selectionChanged: false })\n        }\n      }\n    })\n\n    this.render.renderValues()\n    this.render.renderOptions(this.store.getData(false))\n\n    // Add aria-label or aria-labelledby if exists\n    const selectAriaLabel = this.selectEl.getAttribute('aria-label')\n    const selectAriaLabelledBy = this.selectEl.getAttribute('aria-labelledby')\n\n    if (selectAriaLabel) {\n      this.render.main.main.setAttribute('aria-label', selectAriaLabel)\n    } else if (selectAriaLabelledBy) {\n      this.render.main.main.removeAttribute('aria-label')\n      this.render.main.main.setAttribute('aria-labelledby', selectAriaLabelledBy)\n    } else if (this.selectEl.labels && this.selectEl.labels.length > 0) {\n      const labelledByIds = Array.from(this.selectEl.labels).map((label, i) => {\n        if (!label.id) {\n          label.id = `${this.settings.id}-label-${i}`\n        }\n        return label.id\n      })\n      this.render.main.main.removeAttribute('aria-label')\n      this.render.main.main.setAttribute('aria-labelledby', labelledByIds.join(' '))\n    }\n\n    // Carry the native select's title attribute over to the rendered control so\n    // browser tooltips keep working (the original select is visually hidden)\n    this.render.updateTitle(this.selectEl.getAttribute('title'))\n\n    // Add render after original select element\n    if (this.selectEl.parentNode) {\n      this.selectEl.parentNode.insertBefore(this.render.main.main, this.selectEl.nextSibling)\n    }\n\n    this.globalEvents.attach({\n      listenScroll: this.settings.openPosition === 'auto'\n    })\n\n    // If disabled lets call it\n    if (this.settings.disabled) {\n      this.disable()\n    }\n\n    // If alwaysOpnen then open it\n    if (this.settings.alwaysOpen) {\n      this.open()\n    }\n\n    // Set up label handlers to open SlimSelect when label is clicked\n    this.select.setupLabelHandlers()\n\n    // Add SlimSelect to select element\n    ;(this.selectEl as any).slim = this\n  }\n\n  // Set to enabled and remove disabled classes\n  public enable(): void {\n    this.settings.disabled = false\n\n    this.select.enable()\n    this.render.enable()\n  }\n\n  // Set to disabled and add disabled classes\n  public disable(): void {\n    this.settings.disabled = true\n\n    this.select.disable()\n    this.render.disable()\n  }\n\n  public getData(): Option[] | Optgroup[] {\n    return this.store.getData()\n  }\n\n  public setData(data: (Partial<Option> | Partial<Optgroup>)[]): void {\n    // Batched structure sync — rebuilds native select, store, and option list\n    this.sync.enqueue({\n      type: 'structure',\n      data,\n      source: 'api'\n    })\n  }\n\n  public getSelected(): string[] {\n    let options = this.store.getSelectedOptions()\n    if (this.settings.keepOrder) {\n      options = this.store.selectedOrderOptions(options)\n    }\n    return options.map((option) => option.value)\n  }\n\n  // Will take in a string or array of strings and set the selected by either the id or value\n  public setSelected(values: string | string[], runAfterChange = true): void {\n    // Lightweight path — store + native + chips only (no full DOM rebuild)\n    this.sync.enqueue({\n      type: 'selection',\n      values,\n      source: 'api',\n      runAfterChange\n    })\n  }\n\n  public addOption(option: Partial<Option>): void {\n    this.sync.enqueue({\n      type: 'addOption',\n      option,\n      source: 'api'\n    })\n  }\n\n  public open(): void {\n    // Dont open if disabled\n    // Dont do anything if the content is already open\n    if (this.settings.disabled || this.settings.isOpen) {\n      return\n    }\n\n    // Cancel in-flight open/close animation wait (rapid toggle)\n    this.lifecycle.cancelPending()\n\n    // Tell render to open\n    this.render.open()\n\n    // Focus on input field only if search is enabled\n    if (this.settings.showSearch && this.settings.focusSearch) {\n      this.render.searchFocus()\n    }\n\n    this.settings.isOpen = true\n\n    // Sync isFullOpen/isOpen after CSS transition (or timeoutDelay fallback)\n    void this.lifecycle.requestOpen().then(() => {\n      // close() may have run before this async completion (e.g. closeOnSelect)\n      if (!this.settings.isOpen) {\n        return\n      }\n      this.settings.isFullOpen = this.lifecycle.isFullOpen\n      this.settings.isOpen = this.lifecycle.isOpen\n    })\n\n    // Reposition when trigger or ancestors resize (absolute content only)\n    if (this.settings.contentPosition === 'absolute' && !this.render.isModalViewActive()) {\n      this.render.startPositionTracking()\n    }\n\n    const searchValue = this.render.content.search.input.value.trim()\n    if (searchValue !== '') {\n      this.search(searchValue)\n    }\n  }\n\n  public close(info: CloseInfo = { source: 'api', selectionChanged: false }): void {\n    // Dont do anything if the content is already closed\n    // Dont do anything if alwaysOpen is true\n    if (!this.settings.isOpen || this.settings.alwaysOpen) {\n      return\n    }\n\n    void this.lifecycle.requestClose(info).then((closed) => {\n      if (!closed) {\n        return\n      }\n\n      // open() may have run before this async completion\n      if (this.settings.isOpen) {\n        return\n      }\n\n      this.settings.isOpen = this.lifecycle.isOpen\n      this.settings.isFullOpen = this.lifecycle.isFullOpen\n    })\n  }\n\n  /** Sync close — invoked by lifecycle after beforeClose approves. */\n  private applyClose(info: CloseInfo): void {\n    // Tell render to close\n    this.render.close()\n\n    // Clear search only if not empty and keepSearch is false\n    if (!this.settings.keepSearch && this.render.content.search.input.value !== '') {\n      this.sync.flush()\n      this.clearSearch() // Internal reset — must not fire the consumer search event\n    }\n\n    // If we arent tabbing focus back on the main element\n    const skipRefocus = info.source === 'outside' || info.source === 'toggle'\n    this.render.mainFocus(skipRefocus ? 'click' : null)\n\n    // Update settings\n    this.settings.isOpen = false\n    this.settings.isFullOpen = false\n\n    this.render.stopPositionTracking()\n  }\n\n  // Take in string value and search current options\n  public search(value: string): void {\n    const trimmed = value.trim()\n\n    if (trimmed === '') {\n      // Empty queries are forwarded to the consumer's search event, letting the\n      // callback decide what \"no search\" means (e.g. return the catalog baseline).\n      // Without a search event there is nothing to forward to, so local search\n      // resets to the catalog baseline via clearSearch() below.\n      this.render.content.search.input.value = ''\n    } else if (this.render.content.search.input.value !== value) {\n      // Sync programmatic search calls, but never strip spaces from user input\n      this.render.content.search.input.value = value\n    }\n\n    if (this.events.search) {\n      this.runApiSearch(trimmed)\n      return\n    }\n\n    if (trimmed === '') {\n      this.clearSearch()\n      return\n    }\n\n    this.runLocalSearch(trimmed)\n  }\n\n  /** Reset search state without invoking the consumer search event. */\n  private clearSearch(): void {\n    this.render.content.search.input.value = ''\n    this.searchGeneration++\n\n    if (!this.events.search && this.render.canFilterOptionsInPlace()) {\n      this.render.filterOptionsInPlace('', this.events.searchFilter!)\n      this.render.resetSearchFilterState()\n      return\n    }\n\n    this.render.resetSearchFilterState()\n    this.sync.enqueue({\n      type: 'structure',\n      data: this.store.getCatalogData(),\n      source: 'api',\n      preserveSelection: true\n    })\n  }\n\n  private runLocalSearch(value: string): void {\n    if (this.render.canFilterOptionsInPlace()) {\n      this.render.filterOptionsInPlace(value, this.events.searchFilter!)\n      return\n    }\n\n    const searchResults = this.store.search(value, this.events.searchFilter!)\n    this.render.renderOptions(searchResults)\n  }\n\n  private runApiSearch(value: string): void {\n    const generation = ++this.searchGeneration\n    this.render.renderSearching()\n\n    const searchResp = this.events.search!(value, this.store.getSelectedOptions(), this.store.getCatalogData())\n\n    const applyResults = (data: (Partial<Option> | Partial<Optgroup>)[]): void => {\n      if (generation !== this.searchGeneration) {\n        return\n      }\n      if (this.render.content.search.input.value.trim() !== value) {\n        return\n      }\n\n      this.sync.enqueue({\n        type: 'structure',\n        data,\n        source: 'api',\n        preserveSelection: true,\n        isSearchResult: true\n      })\n    }\n\n    if (searchResp instanceof Promise) {\n      searchResp.then(applyResults).catch((err: Error | string) => {\n        if (generation !== this.searchGeneration) {\n          return\n        }\n        this.render.renderError(typeof err === 'string' ? err : err.message)\n      })\n\n      return\n    }\n\n    if (Array.isArray(searchResp)) {\n      applyResults(searchResp)\n      return\n    }\n\n    this.render.renderError('Search event must return a promise or an array of data')\n  }\n\n  public destroy(): void {\n    this.lifecycle.destroy()\n\n    this.render.stopPositionTracking()\n\n    this.globalEvents.detach({\n      listenScroll: this.settings.openPosition === 'auto'\n    })\n\n    // Delete the store data\n    this.store.setData([])\n\n    // Remove the render\n    this.render.destroy()\n\n    // Show the original select element\n    this.select.destroy()\n\n    delete (this.selectEl as HTMLSelectElement & { slim?: SlimSelect }).slim\n  }\n\n  // Event listener for document click\n  private documentClick(e: Event): void {\n    // If the content is not open, there is no need to close it\n    if (!this.settings.isOpen) {\n      return\n    }\n\n    // Check if the click was on the content by looking at the parents\n    if (e.target && !hasClassInTree(e.target as HTMLElement, this.settings.id)) {\n      this.close({ source: 'outside', selectionChanged: false })\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport SlimSelect from \"slim-select\"\nimport { get, post } from \"@rails/request.js\"\n\n// Connects to data-controller=\"selectable\"\nexport default class extends Controller {\n  static values = {\n    allowDeselect: Boolean,\n    closeOnSelect: Boolean,\n    disabled: Boolean,\n    hideSelected: Boolean,\n    placeholder: String,\n    searchable: Boolean,\n    url: String,\n    minSearchLength: { type: Number, default: 3 },\n    addable: Boolean,\n    createUrl: String,\n  }\n\n  connect() {\n    const controller = this\n    let isSearching = false\n\n    const config = {\n      select: this.element,\n      settings: {\n        closeOnSelect: this.closeOnSelectValue || true,\n        searchText: 'Lo sentimos, no hay nada que ver aqu\u00ED.',\n        placeholderText: this.placeholderValue || 'Selecciona valor',\n        hideSelected: this.hideSelectedValue || true,\n        allowDeselect: this.allowDeselectValue || false,\n        disabled: this.disabledValue || false,\n      }\n    }\n\n    // searchable on its own just enables SlimSelect's built-in client-side\n    // search input. Only attach the server-side `events.search` callback\n    // when an explicit url is provided.\n    if (this.searchableValue) {\n      config.settings.showSearch = true\n    }\n\n    if (this.searchableValue && this.urlValue) {\n      config.events = {\n        search: async (search, currentData) => {\n          // Don't hit the network for 1-2 character queries \u2014 avoids firing\n          // a broad, mostly-useless remote search (and the resulting large\n          // result set) on every early keystroke.\n          if (search && search.length < controller.minSearchLengthValue) {\n            return []\n          }\n\n          isSearching = true\n\n          const form = controller.element.closest('form')\n          const formData = new FormData(form)\n          const ownName = controller.element.name\n          const entries = Object.fromEntries(formData.entries())\n          // Strip the field this select itself controls so the search isn't\n          // narrowed to \"the currently-selected player\" (q[id_eq]) and we\n          // get fresh matches for whatever the user is typing.\n          const params = new URLSearchParams(\n            Object.entries(entries).filter(([k, v]) => !!v && k !== ownName)\n          )\n\n          if (search) params.set('q[name_cont]', search)\n          try {\n            const response = await get(`${controller.urlValue}?${params}`, {responseKind: 'json'})\n            const {ok, json} = await response\n\n            if (await ok) {\n              const {data} = await json\n              const results = data.map((item) => ({text: item.name, value: String(item.id)}))\n              // Keep the currently-selected option in the new option set so\n              // setData doesn't drop it. If it disappears, SlimSelect would\n              // pick a different option and fire afterChange \u2014 which would\n              // cause a false \"user picked something\" submit during typing.\n              const selected = controller.element.value\n              if (selected && !results.find((r) => r.value === String(selected))) {\n                const opt = controller.element.querySelector(`option[value=\"${selected}\"]`)\n                if (opt) results.unshift({ text: opt.textContent, value: opt.value })\n              }\n              return results\n            }\n          } catch (error) {\n            return [{text: 'Lo sentimos, ocurri\u00F3 un error.'}]\n          }\n        },\n        // afterChange fires only when the user picks an option \u2014 not when\n        // setData rewrites the option list during search. We bubble a\n        // `selectable:select` event so forms can submit only on real picks.\n        afterChange: (newVal) => {\n          controller.element.dispatchEvent(new Event(\"selectable:select\", { bubbles: true }))\n        }\n      }\n    }\n\n    // addable lets the user type a value that isn't in the option list yet.\n    // We persist it server-side first (createUrl) so the option's value is\n    // a real record id \u2014 the select must never submit a made-up id.\n    if (this.addableValue && this.createUrlValue) {\n      config.events = config.events || {}\n      config.events.addable = async (value) => {\n        const name = value.trim()\n        if (!name) return false\n\n        try {\n          const response = await post(controller.createUrlValue, {\n            body: { name },\n            responseKind: 'json'\n          })\n          const { ok, json } = await response\n\n          if (await ok) {\n            const { id, name: text } = await json\n            return { value: String(id), text }\n          }\n        } catch (error) {\n          return false\n        }\n\n        return false\n      }\n    }\n\n    this.select = new SlimSelect(config)\n    this.updateDeselectVisibility()\n\n\n    // if (this.searchableValue) {\n    //   this.select.events.search = async (search, currentData) => {\n    //     const form = this.element.closest('form')\n    //     const formData = new FormData(form)\n    //     const entries = Object.fromEntries(formData.entries())\n    //     const params = new URLSearchParams(Object.entries(entries).filter(([_, v]) => !!v))\n    //\n    //     if (search) params.set('q[name_cont]', search)\n    //     try {\n    //       const response = await get(`${this.urlValue}?${params}`, { responseKind: 'json' })\n    //       const { ok, json } = await response\n    //\n    //       if (await ok) {\n    //         const { data } = await json\n    //         return data.map((item) => ({ text: item.name, value: item.id }))\n    //       }\n    //     } catch (error) {\n    //       return [{ text: 'Lo sentimos, ocurri\u00F3 un error.' }]\n    //     }\n    //   }\n    //\n    //   this.select.events.afterChange = async (newVal) => {\n    //     console.log({ newVal })\n    //     const form = this.element.closest('form')\n    //\n    //     if (newVal && newVal.length && newVal[0].value) {\n    //       if (form) form.requestSubmit()\n    //     }\n    //   }\n    // }\n  }\n\n  disconnect() {\n    this.select.destroy()\n  }\n\n  allowDeselection(event) {\n    event.stopImmediatePropagation()\n    this.updateDeselectVisibility()\n  }\n\n  // SlimSelect renders the \"x\" deselect element once based on `allowDeselect`.\n  // We keep that flag on, but hide the element when no value is selected so\n  // the x doesn't show on the blank/placeholder option.\n  updateDeselectVisibility() {\n    const hasValue = !!this.element.value\n    const deselect = this.select?.render?.main?.deselect?.main\n    if (deselect) deselect.classList.toggle(\"ss-hide\", !hasValue)\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"transfer-windows\" \u2014 shows/hides the\n// \"no windows yet\" message on the league form's nested transfer-windows\n// section. stimulus-rails-nested-form doesn't dispatch add/remove events,\n// so \"nested-form#add\"/\"nested-form#remove\" chain into \"transfer-windows#refresh\"\n// on the same data-action (see leagues/_form.html.haml and\n// leagues/_transfer_window_fields.html.haml).\nexport default class extends Controller {\n  static targets = [\"emptyMessage\"]\n\n  connect() {\n    this.refresh()\n  }\n\n  refresh() {\n    if (!this.hasEmptyMessageTarget) return\n\n    const hasVisibleWindow = Array.from(this.element.querySelectorAll(\".nested-form-wrapper\"))\n      .some((wrapper) => wrapper.style.display !== \"none\")\n\n    this.emptyMessageTarget.classList.toggle(\"d-none\", hasVisibleWindow)\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 DatepickerController from \"./datepicker_controller\"\napplication.register(\"datepicker\", DatepickerController)\n\nimport EmptyController from \"./empty_controller\"\napplication.register(\"empty\", EmptyController)\n\nimport FormsController from \"./forms_controller\"\napplication.register(\"forms\", FormsController)\n\nimport ItemsPositionsController from \"./items_positions_controller\"\napplication.register(\"items-positions\", ItemsPositionsController)\n\nimport MatchesController from \"./matches_controller\"\napplication.register(\"matches\", MatchesController)\n\nimport NestedFormController from \"./nested_form_controller\"\napplication.register(\"nested-form\", NestedFormController)\n\nimport PlayersController from \"./players_controller\"\napplication.register(\"players\", PlayersController)\n\nimport ProfileLoaderController from \"./profile_loader_controller\"\napplication.register(\"profile-loader\", ProfileLoaderController)\n\nimport ReportsController from \"./reports_controller\"\napplication.register(\"reports\", ReportsController)\n\nimport RoutesController from \"./routes_controller\"\napplication.register(\"routes\", RoutesController)\n\nimport SelectableController from \"./selectable_controller\"\napplication.register(\"selectable\", SelectableController)\n\nimport TransferWindowsController from \"./transfer_windows_controller\"\napplication.register(\"transfer-windows\", TransferWindowsController)\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map())\n    }\n\n    const instanceMap = elementMap.get(element)\n\n    // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n      return\n    }\n\n    instanceMap.set(key, instance)\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null\n    }\n\n    return null\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return\n    }\n\n    const instanceMap = elementMap.get(element)\n\n    instanceMap.delete(key)\n\n    // free up element references if there are no instances left for an element\n    if (instanceMap.size === 0) {\n      elementMap.delete(element)\n    }\n  }\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n  if (selector && window.CSS && window.CSS.escape) {\n    // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n    selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n  }\n\n  return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n  if (object === null || object === undefined) {\n    return `${object}`\n  }\n\n  return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID)\n  } while (document.getElementById(prefix))\n\n  return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0\n  }\n\n  // Get transition-duration of the element\n  let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n  const floatTransitionDuration = Number.parseFloat(transitionDuration)\n  const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n  // Return 0 if element or transition duration is not found\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0\n  }\n\n  // If multiple durations are defined, take the first\n  transitionDuration = transitionDuration.split(',')[0]\n  transitionDelay = transitionDelay.split(',')[0]\n\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n  if (!object || typeof object !== 'object') {\n    return false\n  }\n\n  if (typeof object.jquery !== 'undefined') {\n    object = object[0]\n  }\n\n  return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n  // it's a jQuery object or a node element\n  if (isElement(object)) {\n    return object.jquery ? object[0] : object\n  }\n\n  if (typeof object === 'string' && object.length > 0) {\n    return document.querySelector(parseSelector(object))\n  }\n\n  return null\n}\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false\n  }\n\n  const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n  // Handle `details` element as its content may falsie appear visible when it is closed\n  const closedDetails = element.closest('details:not([open])')\n\n  if (!closedDetails) {\n    return elementIsVisible\n  }\n\n  if (closedDetails !== element) {\n    const summary = element.closest('summary')\n    if (summary && summary.parentNode !== closedDetails) {\n      return false\n    }\n\n    if (summary === null) {\n      return false\n    }\n  }\n\n  return elementIsVisible\n}\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null\n  }\n\n  // Can find the shadow root otherwise it'll return the document\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode()\n    return root instanceof ShadowRoot ? root : null\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element\n  }\n\n  // when we don't find a shadow root\n  if (!element.parentNode) {\n    return null\n  }\n\n  return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n  element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n  if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return window.jQuery\n  }\n\n  return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        for (const callback of DOMContentLoadedCallbacks) {\n          callback()\n        }\n      })\n    }\n\n    DOMContentLoadedCallbacks.push(callback)\n  } else {\n    callback()\n  }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery()\n    /* istanbul ignore if */\n    if ($) {\n      const name = plugin.NAME\n      const JQUERY_NO_CONFLICT = $.fn[name]\n      $.fn[name] = plugin.jQueryInterface\n      $.fn[name].Constructor = plugin\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT\n        return plugin.jQueryInterface\n      }\n    }\n  })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n  return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback)\n    return\n  }\n\n  const durationPadding = 5\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n  let called = false\n\n  const handler = ({ target }) => {\n    if (target !== transitionElement) {\n      return\n    }\n\n    called = true\n    transitionElement.removeEventListener(TRANSITION_END, handler)\n    execute(callback)\n  }\n\n  transitionElement.addEventListener(TRANSITION_END, handler)\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement)\n    }\n  }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  const listLength = list.length\n  let index = list.indexOf(activeElement)\n\n  // if the element does not exist in the list return an element\n  // depending on the direction and if cycle is allowed\n  if (index === -1) {\n    return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n  }\n\n  index += shouldGetNext ? 1 : -1\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n  defineJQueryPlugin,\n  execute,\n  executeAfterTransition,\n  findShadowRoot,\n  getElement,\n  getjQuery,\n  getNextActiveElement,\n  getTransitionDurationFromElement,\n  getUID,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop,\n  onDOMContentLoaded,\n  parseSelector,\n  reflow,\n  triggerTransitionEnd,\n  toType\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n  'click',\n  'dblclick',\n  'mouseup',\n  'mousedown',\n  'contextmenu',\n  'mousewheel',\n  'DOMMouseScroll',\n  'mouseover',\n  'mouseout',\n  'mousemove',\n  'selectstart',\n  'selectend',\n  'keydown',\n  'keypress',\n  'keyup',\n  'orientationchange',\n  'touchstart',\n  'touchmove',\n  'touchend',\n  'touchcancel',\n  'pointerdown',\n  'pointermove',\n  'pointerup',\n  'pointerleave',\n  'pointercancel',\n  'gesturestart',\n  'gesturechange',\n  'gestureend',\n  'focus',\n  'blur',\n  'change',\n  'reset',\n  'select',\n  'submit',\n  'focusin',\n  'focusout',\n  'load',\n  'unload',\n  'beforeunload',\n  'resize',\n  'move',\n  'DOMContentLoaded',\n  'readystatechange',\n  'error',\n  'abort',\n  'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n  return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n  const uid = makeEventUid(element)\n\n  element.uidEvent = uid\n  eventRegistry[uid] = eventRegistry[uid] || {}\n\n  return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    hydrateObj(event, { delegateTarget: element })\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn)\n    }\n\n    return fn.apply(element, [event])\n  }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector)\n\n    for (let { target } = event; target && target !== this; target = target.parentNode) {\n      for (const domElement of domElements) {\n        if (domElement !== target) {\n          continue\n        }\n\n        hydrateObj(event, { delegateTarget: target })\n\n        if (handler.oneOff) {\n          EventHandler.off(element, event.type, selector, fn)\n        }\n\n        return fn.apply(target, [event])\n      }\n    }\n  }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n  return Object.values(events)\n    .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n  const isDelegated = typeof handler === 'string'\n  // TODO: tooltip passes `false` instead of selector, so we need to check\n  const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n  let typeEvent = getTypeEvent(originalTypeEvent)\n\n  if (!nativeEvents.has(typeEvent)) {\n    typeEvent = originalTypeEvent\n  }\n\n  return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return\n  }\n\n  let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n  // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n  if (originalTypeEvent in customEvents) {\n    const wrapFunction = fn => {\n      return function (event) {\n        if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n          return fn.call(this, event)\n        }\n      }\n    }\n\n    callable = wrapFunction(callable)\n  }\n\n  const events = getElementEvents(element)\n  const handlers = events[typeEvent] || (events[typeEvent] = {})\n  const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n  if (previousFunction) {\n    previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n    return\n  }\n\n  const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n  const fn = isDelegated ?\n    bootstrapDelegationHandler(element, handler, callable) :\n    bootstrapHandler(element, callable)\n\n  fn.delegationSelector = isDelegated ? handler : null\n  fn.callable = callable\n  fn.oneOff = oneOff\n  fn.uidEvent = uid\n  handlers[uid] = fn\n\n  element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n  if (!fn) {\n    return\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n  delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {}\n\n  for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n    if (handlerKey.includes(namespace)) {\n      removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n    }\n  }\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '')\n  return customEvents[event] || event\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, false)\n  },\n\n  one(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, true)\n  },\n\n  off(element, originalTypeEvent, handler, delegationFunction) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return\n    }\n\n    const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n    const inNamespace = typeEvent !== originalTypeEvent\n    const events = getElementEvents(element)\n    const storeElementEvent = events[typeEvent] || {}\n    const isNamespace = originalTypeEvent.startsWith('.')\n\n    if (typeof callable !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!Object.keys(storeElementEvent).length) {\n        return\n      }\n\n      removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n      return\n    }\n\n    if (isNamespace) {\n      for (const elementEvent of Object.keys(events)) {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n      }\n    }\n\n    for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n      }\n    }\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null\n    }\n\n    const $ = getjQuery()\n    const typeEvent = getTypeEvent(event)\n    const inNamespace = event !== typeEvent\n\n    let jQueryEvent = null\n    let bubbles = true\n    let nativeDispatch = true\n    let defaultPrevented = false\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args)\n\n      $(element).trigger(jQueryEvent)\n      bubbles = !jQueryEvent.isPropagationStopped()\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n      defaultPrevented = jQueryEvent.isDefaultPrevented()\n    }\n\n    const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)\n\n    if (defaultPrevented) {\n      evt.preventDefault()\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt)\n    }\n\n    if (evt.defaultPrevented && jQueryEvent) {\n      jQueryEvent.preventDefault()\n    }\n\n    return evt\n  }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n  for (const [key, value] of Object.entries(meta)) {\n    try {\n      obj[key] = value\n    } catch {\n      Object.defineProperty(obj, key, {\n        configurable: true,\n        get() {\n          return value\n        }\n      })\n    }\n  }\n\n  return obj\n}\n\nexport default EventHandler\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n  if (value === 'true') {\n    return true\n  }\n\n  if (value === 'false') {\n    return false\n  }\n\n  if (value === Number(value).toString()) {\n    return Number(value)\n  }\n\n  if (value === '' || value === 'null') {\n    return null\n  }\n\n  if (typeof value !== 'string') {\n    return value\n  }\n\n  try {\n    return JSON.parse(decodeURIComponent(value))\n  } catch {\n    return value\n  }\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {}\n    }\n\n    const attributes = {}\n    const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n    for (const key of bsKeys) {\n      let pureKey = key.replace(/^bs/, '')\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1)\n      attributes[pureKey] = normalizeData(element.dataset[key])\n    }\n\n    return attributes\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n  }\n}\n\nexport default Manipulator\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n  // Getters\n  static get Default() {\n    return {}\n  }\n\n  static get DefaultType() {\n    return {}\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!')\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  _configAfterMerge(config) {\n    return config\n  }\n\n  _mergeConfigObj(config, element) {\n    const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n    return {\n      ...this.constructor.Default,\n      ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n      ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n      ...(typeof config === 'object' ? config : {})\n    }\n  }\n\n  _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n    for (const [property, expectedTypes] of Object.entries(configTypes)) {\n      const value = config[property]\n      const valueType = isElement(value) ? 'element' : toType(value)\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(\n          `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n        )\n      }\n    }\n  }\n}\n\nexport default Config\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.8'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n  constructor(element, config) {\n    super()\n\n    element = getElement(element)\n    if (!element) {\n      return\n    }\n\n    this._element = element\n    this._config = this._getConfig(config)\n\n    Data.set(this._element, this.constructor.DATA_KEY, this)\n  }\n\n  // Public\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY)\n    EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n    for (const propertyName of Object.getOwnPropertyNames(this)) {\n      this[propertyName] = null\n    }\n  }\n\n  // Private\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated)\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config, this._element)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  // Static\n  static getInstance(element) {\n    return Data.get(getElement(element), this.DATA_KEY)\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n  }\n\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`\n  }\n\n  static eventName(name) {\n    return `${name}${this.EVENT_KEY}`\n  }\n}\n\nexport default BaseComponent\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target')\n\n  if (!selector || selector === '#') {\n    let hrefAttribute = element.getAttribute('href')\n\n    // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n    if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n      return null\n    }\n\n    // Just in case some CMS puts out a full URL with the anchor appended\n    if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n      hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n    }\n\n    selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n  }\n\n  return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null\n}\n\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector)\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector))\n  },\n\n  parents(element, selector) {\n    const parents = []\n    let ancestor = element.parentNode.closest(selector)\n\n    while (ancestor) {\n      parents.push(ancestor)\n      ancestor = ancestor.parentNode.closest(selector)\n    }\n\n    return parents\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous]\n      }\n\n      previous = previous.previousElementSibling\n    }\n\n    return []\n  },\n  // TODO: this is now unused; remove later along with prev()\n  next(element, selector) {\n    let next = element.nextElementSibling\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next]\n      }\n\n      next = next.nextElementSibling\n    }\n\n    return []\n  },\n\n  focusableChildren(element) {\n    const focusables = [\n      'a',\n      'button',\n      'input',\n      'textarea',\n      'select',\n      'details',\n      '[tabindex]',\n      '[contenteditable=\"true\"]'\n    ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n    return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n  },\n\n  getSelectorFromElement(element) {\n    const selector = getSelector(element)\n\n    if (selector) {\n      return SelectorEngine.findOne(selector) ? selector : null\n    }\n\n    return null\n  },\n\n  getElementFromSelector(element) {\n    const selector = getSelector(element)\n\n    return selector ? SelectorEngine.findOne(selector) : null\n  },\n\n  getMultipleElementsFromSelector(element) {\n    const selector = getSelector(element)\n\n    return selector ? SelectorEngine.find(selector) : []\n  }\n}\n\nexport default SelectorEngine\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isDisabled } from './index.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n  const clickEvent = `click.dismiss${component.EVENT_KEY}`\n  const name = component.NAME\n\n  EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault()\n    }\n\n    if (isDisabled(this)) {\n      return\n    }\n\n    const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n    const instance = component.getOrCreateInstance(target)\n\n    // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n    instance[method]()\n  })\n}\n\nexport {\n  enableDismissTrigger\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n    if (closeEvent.defaultPrevented) {\n      return\n    }\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n\n    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n    this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n  }\n\n  // Private\n  _destroyElement() {\n    this._element.remove()\n    EventHandler.trigger(this._element, EVENT_CLOSED)\n    this.dispose()\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](this)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this)\n\n      if (config === 'toggle') {\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n  event.preventDefault()\n\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n  const data = Button.getOrCreateInstance(button)\n\n  data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n  endCallback: null,\n  leftCallback: null,\n  rightCallback: null\n}\n\nconst DefaultType = {\n  endCallback: '(function|null)',\n  leftCallback: '(function|null)',\n  rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n  constructor(element, config) {\n    super()\n    this._element = element\n\n    if (!element || !Swipe.isSupported()) {\n      return\n    }\n\n    this._config = this._getConfig(config)\n    this._deltaX = 0\n    this._supportPointerEvents = Boolean(window.PointerEvent)\n    this._initEvents()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  dispose() {\n    EventHandler.off(this._element, EVENT_KEY)\n  }\n\n  // Private\n  _start(event) {\n    if (!this._supportPointerEvents) {\n      this._deltaX = event.touches[0].clientX\n\n      return\n    }\n\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX\n    }\n  }\n\n  _end(event) {\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX - this._deltaX\n    }\n\n    this._handleSwipe()\n    execute(this._config.endCallback)\n  }\n\n  _move(event) {\n    this._deltaX = event.touches && event.touches.length > 1 ?\n      0 :\n      event.touches[0].clientX - this._deltaX\n  }\n\n  _handleSwipe() {\n    const absDeltaX = Math.abs(this._deltaX)\n\n    if (absDeltaX <= SWIPE_THRESHOLD) {\n      return\n    }\n\n    const direction = absDeltaX / this._deltaX\n\n    this._deltaX = 0\n\n    if (!direction) {\n      return\n    }\n\n    execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n  }\n\n  _initEvents() {\n    if (this._supportPointerEvents) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n      EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n    }\n  }\n\n  _eventIsPointerPenTouch(event) {\n    return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n  }\n\n  // Static\n  static isSupported() {\n    return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n  }\n}\n\nexport default Swipe\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  getNextActiveElement,\n  isRTL,\n  isVisible,\n  reflow,\n  triggerTransitionEnd\n} from './util/index.js'\nimport Swipe from './util/swipe.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n  interval: 5000,\n  keyboard: true,\n  pause: 'hover',\n  ride: false,\n  touch: true,\n  wrap: true\n}\n\nconst DefaultType = {\n  interval: '(number|boolean)', // TODO:v6 remove boolean support\n  keyboard: 'boolean',\n  pause: '(string|boolean)',\n  ride: '(boolean|string)',\n  touch: 'boolean',\n  wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._interval = null\n    this._activeElement = null\n    this._isSliding = false\n    this.touchTimeout = null\n    this._swipeHelper = null\n\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n    this._addEventListeners()\n\n    if (this._config.ride === CLASS_NAME_CAROUSEL) {\n      this.cycle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  next() {\n    this._slide(ORDER_NEXT)\n  }\n\n  nextWhenVisible() {\n    // FIXME TODO use `document.visibilityState`\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next()\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV)\n  }\n\n  pause() {\n    if (this._isSliding) {\n      triggerTransitionEnd(this._element)\n    }\n\n    this._clearInterval()\n  }\n\n  cycle() {\n    this._clearInterval()\n    this._updateInterval()\n\n    this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n  }\n\n  _maybeEnableCycle() {\n    if (!this._config.ride) {\n      return\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n      return\n    }\n\n    this.cycle()\n  }\n\n  to(index) {\n    const items = this._getItems()\n    if (index > items.length - 1 || index < 0) {\n      return\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n      return\n    }\n\n    const activeIndex = this._getItemIndex(this._getActive())\n    if (activeIndex === index) {\n      return\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n    this._slide(order, items[index])\n  }\n\n  dispose() {\n    if (this._swipeHelper) {\n      this._swipeHelper.dispose()\n    }\n\n    super.dispose()\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    config.defaultInterval = config.interval\n    return config\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n    }\n\n    if (this._config.touch && Swipe.isSupported()) {\n      this._addTouchEventListeners()\n    }\n  }\n\n  _addTouchEventListeners() {\n    for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n      EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n    }\n\n    const endCallBack = () => {\n      if (this._config.pause !== 'hover') {\n        return\n      }\n\n      // If it's a touch-enabled device, mouseenter/leave are fired as\n      // part of the mouse compatibility events on first tap - the carousel\n      // would stop cycling until user tapped out of it;\n      // here, we listen for touchend, explicitly pause the carousel\n      // (as if it's the second time we tap on it, mouseenter compat event\n      // is NOT fired) and after a timeout (to allow for mouse compatibility\n      // events to fire) we explicitly restart cycling\n\n      this.pause()\n      if (this.touchTimeout) {\n        clearTimeout(this.touchTimeout)\n      }\n\n      this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n    }\n\n    const swipeConfig = {\n      leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n      rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n      endCallback: endCallBack\n    }\n\n    this._swipeHelper = new Swipe(this._element, swipeConfig)\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key]\n    if (direction) {\n      event.preventDefault()\n      this._slide(this._directionToOrder(direction))\n    }\n  }\n\n  _getItemIndex(element) {\n    return this._getItems().indexOf(element)\n  }\n\n  _setActiveIndicatorElement(index) {\n    if (!this._indicatorsElement) {\n      return\n    }\n\n    const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n    activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n    activeIndicator.removeAttribute('aria-current')\n\n    const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n    if (newActiveIndicator) {\n      newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n      newActiveIndicator.setAttribute('aria-current', 'true')\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || this._getActive()\n\n    if (!element) {\n      return\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n    this._config.interval = elementInterval || this._config.defaultInterval\n  }\n\n  _slide(order, element = null) {\n    if (this._isSliding) {\n      return\n    }\n\n    const activeElement = this._getActive()\n    const isNext = order === ORDER_NEXT\n    const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n    if (nextElement === activeElement) {\n      return\n    }\n\n    const nextElementIndex = this._getItemIndex(nextElement)\n\n    const triggerEvent = eventName => {\n      return EventHandler.trigger(this._element, eventName, {\n        relatedTarget: nextElement,\n        direction: this._orderToDirection(order),\n        from: this._getItemIndex(activeElement),\n        to: nextElementIndex\n      })\n    }\n\n    const slideEvent = triggerEvent(EVENT_SLIDE)\n\n    if (slideEvent.defaultPrevented) {\n      return\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      // TODO: change tests that use empty divs to avoid this check\n      return\n    }\n\n    const isCycling = Boolean(this._interval)\n    this.pause()\n\n    this._isSliding = true\n\n    this._setActiveIndicatorElement(nextElementIndex)\n    this._activeElement = nextElement\n\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n    nextElement.classList.add(orderClassName)\n\n    reflow(nextElement)\n\n    activeElement.classList.add(directionalClassName)\n    nextElement.classList.add(directionalClassName)\n\n    const completeCallBack = () => {\n      nextElement.classList.remove(directionalClassName, orderClassName)\n      nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n      activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n      this._isSliding = false\n\n      triggerEvent(EVENT_SLID)\n    }\n\n    this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n    if (isCycling) {\n      this.cycle()\n    }\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_SLIDE)\n  }\n\n  _getActive() {\n    return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n  }\n\n  _getItems() {\n    return SelectorEngine.find(SELECTOR_ITEM, this._element)\n  }\n\n  _clearInterval() {\n    if (this._interval) {\n      clearInterval(this._interval)\n      this._interval = null\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n  }\n\n  _orderToDirection(order) {\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Carousel.getOrCreateInstance(this, config)\n\n      if (typeof config === 'number') {\n        data.to(config)\n        return\n      }\n\n      if (typeof config === 'string') {\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n    return\n  }\n\n  event.preventDefault()\n\n  const carousel = Carousel.getOrCreateInstance(target)\n  const slideIndex = this.getAttribute('data-bs-slide-to')\n\n  if (slideIndex) {\n    carousel.to(slideIndex)\n    carousel._maybeEnableCycle()\n    return\n  }\n\n  if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n    carousel.next()\n    carousel._maybeEnableCycle()\n    return\n  }\n\n  carousel.prev()\n  carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n  for (const carousel of carousels) {\n    Carousel.getOrCreateInstance(carousel)\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  getElement,\n  reflow\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n  parent: null,\n  toggle: true\n}\n\nconst DefaultType = {\n  parent: '(null|element)',\n  toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._isTransitioning = false\n    this._triggerArray = []\n\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n    for (const elem of toggleList) {\n      const selector = SelectorEngine.getSelectorFromElement(elem)\n      const filterElement = SelectorEngine.find(selector)\n        .filter(foundElement => foundElement === this._element)\n\n      if (selector !== null && filterElement.length) {\n        this._triggerArray.push(elem)\n      }\n    }\n\n    this._initializeChildren()\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n    }\n\n    if (this._config.toggle) {\n      this.toggle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    if (this._isShown()) {\n      this.hide()\n    } else {\n      this.show()\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._isShown()) {\n      return\n    }\n\n    let activeChildren = []\n\n    // find active children\n    if (this._config.parent) {\n      activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n        .filter(element => element !== this._element)\n        .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n    }\n\n    if (activeChildren.length && activeChildren[0]._isTransitioning) {\n      return\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n    if (startEvent.defaultPrevented) {\n      return\n    }\n\n    for (const activeInstance of activeChildren) {\n      activeInstance.hide()\n    }\n\n    const dimension = this._getDimension()\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE)\n    this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n    this._element.style[dimension] = 0\n\n    this._addAriaAndCollapsedClass(this._triggerArray, true)\n    this._isTransitioning = true\n\n    const complete = () => {\n      this._isTransitioning = false\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING)\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n      this._element.style[dimension] = ''\n\n      EventHandler.trigger(this._element, EVENT_SHOWN)\n    }\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n    const scrollSize = `scroll${capitalizedDimension}`\n\n    this._queueCallback(complete, this._element, true)\n    this._element.style[dimension] = `${this._element[scrollSize]}px`\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._isShown()) {\n      return\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n    if (startEvent.defaultPrevented) {\n      return\n    }\n\n    const dimension = this._getDimension()\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n    reflow(this._element)\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING)\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n    for (const trigger of this._triggerArray) {\n      const element = SelectorEngine.getElementFromSelector(trigger)\n\n      if (element && !this._isShown(element)) {\n        this._addAriaAndCollapsedClass([trigger], false)\n      }\n    }\n\n    this._isTransitioning = true\n\n    const complete = () => {\n      this._isTransitioning = false\n      this._element.classList.remove(CLASS_NAME_COLLAPSING)\n      this._element.classList.add(CLASS_NAME_COLLAPSE)\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._element.style[dimension] = ''\n\n    this._queueCallback(complete, this._element, true)\n  }\n\n  // Private\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _configAfterMerge(config) {\n    config.toggle = Boolean(config.toggle) // Coerce string values\n    config.parent = getElement(config.parent)\n    return config\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n  }\n\n  _initializeChildren() {\n    if (!this._config.parent) {\n      return\n    }\n\n    const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n    for (const element of children) {\n      const selected = SelectorEngine.getElementFromSelector(element)\n\n      if (selected) {\n        this._addAriaAndCollapsedClass([element], this._isShown(selected))\n      }\n    }\n  }\n\n  _getFirstLevelChildren(selector) {\n    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n    // remove children if greater depth\n    return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n  }\n\n  _addAriaAndCollapsedClass(triggerArray, isOpen) {\n    if (!triggerArray.length) {\n      return\n    }\n\n    for (const element of triggerArray) {\n      element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n      element.setAttribute('aria-expanded', isOpen)\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    const _config = {}\n    if (typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false\n    }\n\n    return this.each(function () {\n      const data = Collapse.getOrCreateInstance(this, _config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n    event.preventDefault()\n  }\n\n  for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n    Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  execute,\n  getElement,\n  getNextActiveElement,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n  autoClose: true,\n  boundary: 'clippingParents',\n  display: 'dynamic',\n  offset: [0, 2],\n  popperConfig: null,\n  reference: 'toggle'\n}\n\nconst DefaultType = {\n  autoClose: '(boolean|string)',\n  boundary: '(string|element)',\n  display: 'string',\n  offset: '(array|string|function)',\n  popperConfig: '(null|object|function)',\n  reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._popper = null\n    this._parent = this._element.parentNode // dropdown wrapper\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n    this._inNavbar = this._detectNavbar()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    return this._isShown() ? this.hide() : this.show()\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._isShown()) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._createPopper()\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop)\n      }\n    }\n\n    this._element.focus()\n    this._element.setAttribute('aria-expanded', true)\n\n    this._menu.classList.add(CLASS_NAME_SHOW)\n    this._element.classList.add(CLASS_NAME_SHOW)\n    EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._isShown()) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n\n    this._completeHide(relatedTarget)\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    super.dispose()\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar()\n    if (this._popper) {\n      this._popper.update()\n    }\n  }\n\n  // Private\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop)\n      }\n    }\n\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW)\n    this._element.classList.remove(CLASS_NAME_SHOW)\n    this._element.setAttribute('aria-expanded', 'false')\n    Manipulator.removeDataAttribute(this._menu, 'popper')\n    EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n  }\n\n  _getConfig(config) {\n    config = super._getConfig(config)\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) &&\n      typeof config.reference.getBoundingClientRect !== 'function'\n    ) {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n    }\n\n    return config\n  }\n\n  _createPopper() {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org/docs/v2/)')\n    }\n\n    let referenceElement = this._element\n\n    if (this._config.reference === 'parent') {\n      referenceElement = this._parent\n    } else if (isElement(this._config.reference)) {\n      referenceElement = getElement(this._config.reference)\n    } else if (typeof this._config.reference === 'object') {\n      referenceElement = this._config.reference\n    }\n\n    const popperConfig = this._getPopperConfig()\n    this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n  }\n\n  _isShown() {\n    return this._menu.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._parent\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n      return PLACEMENT_TOPCENTER\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n      return PLACEMENT_BOTTOMCENTER\n    }\n\n    // We need to trim the value because custom properties can also include spaces\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n  }\n\n  _detectNavbar() {\n    return this._element.closest(SELECTOR_NAVBAR) !== null\n  }\n\n  _getOffset() {\n    const { offset } = this._config\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(value => Number.parseInt(value, 10))\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element)\n    }\n\n    return offset\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      },\n      {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }\n\n    // Disable Popper if we have a static display or Dropdown is in Navbar\n    if (this._inNavbar || this._config.display === 'static') {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'static') // TODO: v6 remove\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }]\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])\n    }\n  }\n\n  _selectMenuItem({ key, target }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n    if (!items.length) {\n      return\n    }\n\n    // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Dropdown.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n\n  static clearMenus(event) {\n    if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return\n    }\n\n    const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n    for (const toggle of openToggles) {\n      const context = Dropdown.getInstance(toggle)\n      if (!context || context._config.autoClose === false) {\n        continue\n      }\n\n      const composedPath = event.composedPath()\n      const isMenuTarget = composedPath.includes(context._menu)\n      if (\n        composedPath.includes(context._element) ||\n        (context._config.autoClose === 'inside' && !isMenuTarget) ||\n        (context._config.autoClose === 'outside' && isMenuTarget)\n      ) {\n        continue\n      }\n\n      // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n      if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n        continue\n      }\n\n      const relatedTarget = { relatedTarget: context._element }\n\n      if (event.type === 'click') {\n        relatedTarget.clickEvent = event\n      }\n\n      context._completeHide(relatedTarget)\n    }\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not an UP | DOWN | ESCAPE key => not a dropdown command\n    // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n    const isInput = /input|textarea/i.test(event.target.tagName)\n    const isEscapeEvent = event.key === ESCAPE_KEY\n    const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n    if (!isUpOrDownEvent && !isEscapeEvent) {\n      return\n    }\n\n    if (isInput && !isEscapeEvent) {\n      return\n    }\n\n    event.preventDefault()\n\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n      this :\n      (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n    const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n    if (isUpOrDownEvent) {\n      event.stopPropagation()\n      instance.show()\n      instance._selectMenuItem(event)\n      return\n    }\n\n    if (instance._isShown()) { // else is escape and we check if it is shown\n      event.stopPropagation()\n      instance.hide()\n      getToggleButton.focus()\n    }\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  event.preventDefault()\n  Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport {\n  execute, executeAfterTransition, getElement, reflow\n} from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n  className: 'modal-backdrop',\n  clickCallback: null,\n  isAnimated: false,\n  isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n  rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n  className: 'string',\n  clickCallback: '(function|null)',\n  isAnimated: 'boolean',\n  isVisible: 'boolean',\n  rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n    this._isAppended = false\n    this._element = null\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback)\n      return\n    }\n\n    this._append()\n\n    const element = this._getElement()\n    if (this._config.isAnimated) {\n      reflow(element)\n    }\n\n    element.classList.add(CLASS_NAME_SHOW)\n\n    this._emulateAnimation(() => {\n      execute(callback)\n    })\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback)\n      return\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n    this._emulateAnimation(() => {\n      this.dispose()\n      execute(callback)\n    })\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n    this._element.remove()\n    this._isAppended = false\n  }\n\n  // Private\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div')\n      backdrop.className = this._config.className\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE)\n      }\n\n      this._element = backdrop\n    }\n\n    return this._element\n  }\n\n  _configAfterMerge(config) {\n    // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n    config.rootElement = getElement(config.rootElement)\n    return config\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return\n    }\n\n    const element = this._getElement()\n    this._config.rootElement.append(element)\n\n    EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback)\n    })\n\n    this._isAppended = true\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n  }\n}\n\nexport default Backdrop\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n  autofocus: true,\n  trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n  autofocus: 'boolean',\n  trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n    this._isActive = false\n    this._lastTabNavDirection = null\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  activate() {\n    if (this._isActive) {\n      return\n    }\n\n    if (this._config.autofocus) {\n      this._config.trapElement.focus()\n    }\n\n    EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n    EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n    EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n    this._isActive = true\n  }\n\n  deactivate() {\n    if (!this._isActive) {\n      return\n    }\n\n    this._isActive = false\n    EventHandler.off(document, EVENT_KEY)\n  }\n\n  // Private\n  _handleFocusin(event) {\n    const { trapElement } = this._config\n\n    if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n      return\n    }\n\n    const elements = SelectorEngine.focusableChildren(trapElement)\n\n    if (elements.length === 0) {\n      trapElement.focus()\n    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n      elements[elements.length - 1].focus()\n    } else {\n      elements[0].focus()\n    }\n  }\n\n  _handleKeydown(event) {\n    if (event.key !== TAB_KEY) {\n      return\n    }\n\n    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n  }\n}\n\nexport default FocusTrap\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body\n  }\n\n  // Public\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth\n    return Math.abs(window.innerWidth - documentWidth)\n  }\n\n  hide() {\n    const width = this.getWidth()\n    this._disableOverFlow()\n    // give padding to element to balance the hidden scrollbar width\n    this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n    // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow')\n    this._resetElementAttributes(this._element, PROPERTY_PADDING)\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0\n  }\n\n  // Private\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow')\n    this._element.style.overflow = 'hidden'\n  }\n\n  _setElementAttributes(selector, styleProperty, callback) {\n    const scrollbarWidth = this.getWidth()\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return\n      }\n\n      this._saveInitialAttribute(element, styleProperty)\n      const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n      element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n    }\n\n    this._applyManipulationCallback(selector, manipulationCallBack)\n  }\n\n  _saveInitialAttribute(element, styleProperty) {\n    const actualValue = element.style.getPropertyValue(styleProperty)\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProperty, actualValue)\n    }\n  }\n\n  _resetElementAttributes(selector, styleProperty) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProperty)\n      // We only want to remove the property if the value is `null`; the value can also be zero\n      if (value === null) {\n        element.style.removeProperty(styleProperty)\n        return\n      }\n\n      Manipulator.removeDataAttribute(element, styleProperty)\n      element.style.setProperty(styleProperty, value)\n    }\n\n    this._applyManipulationCallback(selector, manipulationCallBack)\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector)\n      return\n    }\n\n    for (const sel of SelectorEngine.find(selector, this._element)) {\n      callBack(sel)\n    }\n  }\n}\n\nexport default ScrollBarHelper\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n  defineJQueryPlugin, isRTL, isVisible, reflow\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n  backdrop: true,\n  focus: true,\n  keyboard: true\n}\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  focus: 'boolean',\n  keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n    this._backdrop = this._initializeBackDrop()\n    this._focustrap = this._initializeFocusTrap()\n    this._isShown = false\n    this._isTransitioning = false\n    this._scrollBar = new ScrollBarHelper()\n\n    this._addEventListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n      relatedTarget\n    })\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = true\n    this._isTransitioning = true\n\n    this._scrollBar.hide()\n\n    document.body.classList.add(CLASS_NAME_OPEN)\n\n    this._adjustDialog()\n\n    this._backdrop.show(() => this._showElement(relatedTarget))\n  }\n\n  hide() {\n    if (!this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = false\n    this._isTransitioning = true\n    this._focustrap.deactivate()\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n\n    this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n  }\n\n  dispose() {\n    EventHandler.off(window, EVENT_KEY)\n    EventHandler.off(this._dialog, EVENT_KEY)\n\n    this._backdrop.dispose()\n    this._focustrap.deactivate()\n\n    super.dispose()\n  }\n\n  handleUpdate() {\n    this._adjustDialog()\n  }\n\n  // Private\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n      isAnimated: this._isAnimated()\n    })\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    })\n  }\n\n  _showElement(relatedTarget) {\n    // try to append dynamic modal\n    if (!document.body.contains(this._element)) {\n      document.body.append(this._element)\n    }\n\n    this._element.style.display = 'block'\n    this._element.removeAttribute('aria-hidden')\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n    this._element.scrollTop = 0\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n    if (modalBody) {\n      modalBody.scrollTop = 0\n    }\n\n    reflow(this._element)\n\n    this._element.classList.add(CLASS_NAME_SHOW)\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._focustrap.activate()\n      }\n\n      this._isTransitioning = false\n      EventHandler.trigger(this._element, EVENT_SHOWN, {\n        relatedTarget\n      })\n    }\n\n    this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (event.key !== ESCAPE_KEY) {\n        return\n      }\n\n      if (this._config.keyboard) {\n        this.hide()\n        return\n      }\n\n      this._triggerBackdropTransition()\n    })\n\n    EventHandler.on(window, EVENT_RESIZE, () => {\n      if (this._isShown && !this._isTransitioning) {\n        this._adjustDialog()\n      }\n    })\n\n    EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n      // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n      EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n        if (this._element !== event.target || this._element !== event2.target) {\n          return\n        }\n\n        if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition()\n          return\n        }\n\n        if (this._config.backdrop) {\n          this.hide()\n        }\n      })\n    })\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none'\n    this._element.setAttribute('aria-hidden', true)\n    this._element.removeAttribute('aria-modal')\n    this._element.removeAttribute('role')\n    this._isTransitioning = false\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN)\n      this._resetAdjustments()\n      this._scrollBar.reset()\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    })\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE)\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n    const initialOverflowY = this._element.style.overflowY\n    // return if the following background transition hasn't yet completed\n    if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n      return\n    }\n\n    if (!isModalOverflowing) {\n      this._element.style.overflowY = 'hidden'\n    }\n\n    this._element.classList.add(CLASS_NAME_STATIC)\n    this._queueCallback(() => {\n      this._element.classList.remove(CLASS_NAME_STATIC)\n      this._queueCallback(() => {\n        this._element.style.overflowY = initialOverflowY\n      }, this._dialog)\n    }, this._dialog)\n\n    this._element.focus()\n  }\n\n  /**\n   * The following methods are used to handle overflowing modals\n   */\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n    const scrollbarWidth = this._scrollBar.getWidth()\n    const isBodyOverflowing = scrollbarWidth > 0\n\n    if (isBodyOverflowing && !isModalOverflowing) {\n      const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n      this._element.style[property] = `${scrollbarWidth}px`\n    }\n\n    if (!isBodyOverflowing && isModalOverflowing) {\n      const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n      this._element.style[property] = `${scrollbarWidth}px`\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = ''\n    this._element.style.paddingRight = ''\n  }\n\n  // Static\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](relatedTarget)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  EventHandler.one(target, EVENT_SHOW, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN, () => {\n      if (isVisible(this)) {\n        this.focus()\n      }\n    })\n  })\n\n  // avoid conflict when clicking modal toggler while another one is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n  if (alreadyOpen) {\n    Modal.getInstance(alreadyOpen).hide()\n  }\n\n  const data = Modal.getOrCreateInstance(target)\n\n  data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n  defineJQueryPlugin,\n  isDisabled,\n  isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n}\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._isShown = false\n    this._backdrop = this._initializeBackDrop()\n    this._focustrap = this._initializeFocusTrap()\n    this._addEventListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = true\n    this._backdrop.show()\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide()\n    }\n\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n    this._element.classList.add(CLASS_NAME_SHOWING)\n\n    const completeCallBack = () => {\n      if (!this._config.scroll || this._config.backdrop) {\n        this._focustrap.activate()\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW)\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n    }\n\n    this._queueCallback(completeCallBack, this._element, true)\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    this._focustrap.deactivate()\n    this._element.blur()\n    this._isShown = false\n    this._element.classList.add(CLASS_NAME_HIDING)\n    this._backdrop.hide()\n\n    const completeCallback = () => {\n      this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n      this._element.removeAttribute('aria-modal')\n      this._element.removeAttribute('role')\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset()\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._queueCallback(completeCallback, this._element, true)\n  }\n\n  dispose() {\n    this._backdrop.dispose()\n    this._focustrap.deactivate()\n    super.dispose()\n  }\n\n  // Private\n  _initializeBackDrop() {\n    const clickCallback = () => {\n      if (this._config.backdrop === 'static') {\n        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n        return\n      }\n\n      this.hide()\n    }\n\n    // 'static' option will be translated to true, and booleans will keep their value\n    const isVisible = Boolean(this._config.backdrop)\n\n    return new Backdrop({\n      className: CLASS_NAME_BACKDROP,\n      isVisible,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: isVisible ? clickCallback : null\n    })\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    })\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (event.key !== ESCAPE_KEY) {\n        return\n      }\n\n      if (this._config.keyboard) {\n        this.hide()\n        return\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n    })\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](this)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  if (isDisabled(this)) {\n    return\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus()\n    }\n  })\n\n  // avoid conflict when clicking a toggler of an offcanvas, while another is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n  if (alreadyOpen && alreadyOpen !== target) {\n    Offcanvas.getInstance(alreadyOpen).hide()\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target)\n  data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n    Offcanvas.getOrCreateInstance(selector).show()\n  }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n  for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n    if (getComputedStyle(element).position !== 'fixed') {\n      Offcanvas.getOrCreateInstance(element).hide()\n    }\n  }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  dd: [],\n  div: [],\n  dl: [],\n  dt: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n}\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href'\n])\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n  const attributeName = attribute.nodeName.toLowerCase()\n\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue))\n    }\n\n    return true\n  }\n\n  // Check if a regular expression validates the attribute.\n  return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n    .some(regex => regex.test(attributeName))\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml\n  }\n\n  if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n    return sanitizeFunction(unsafeHtml)\n  }\n\n  const domParser = new window.DOMParser()\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n  for (const element of elements) {\n    const elementName = element.nodeName.toLowerCase()\n\n    if (!Object.keys(allowList).includes(elementName)) {\n      element.remove()\n      continue\n    }\n\n    const attributeList = [].concat(...element.attributes)\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n    for (const attribute of attributeList) {\n      if (!allowedAttribute(attribute, allowedAttributes)) {\n        element.removeAttribute(attribute.nodeName)\n      }\n    }\n  }\n\n  return createdDocument.body.innerHTML\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  content: {}, // { selector : text ,  selector2 : text2 , }\n  extraClass: '',\n  html: false,\n  sanitize: true,\n  sanitizeFn: null,\n  template: '<div></div>'\n}\n\nconst DefaultType = {\n  allowList: 'object',\n  content: 'object',\n  extraClass: '(string|function)',\n  html: 'boolean',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  template: 'string'\n}\n\nconst DefaultContentType = {\n  entry: '(string|element|function|null)',\n  selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  getContent() {\n    return Object.values(this._config.content)\n      .map(config => this._resolvePossibleFunction(config))\n      .filter(Boolean)\n  }\n\n  hasContent() {\n    return this.getContent().length > 0\n  }\n\n  changeContent(content) {\n    this._checkContent(content)\n    this._config.content = { ...this._config.content, ...content }\n    return this\n  }\n\n  toHtml() {\n    const templateWrapper = document.createElement('div')\n    templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n    for (const [selector, text] of Object.entries(this._config.content)) {\n      this._setContent(templateWrapper, text, selector)\n    }\n\n    const template = templateWrapper.children[0]\n    const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n    if (extraClass) {\n      template.classList.add(...extraClass.split(' '))\n    }\n\n    return template\n  }\n\n  // Private\n  _typeCheckConfig(config) {\n    super._typeCheckConfig(config)\n    this._checkContent(config.content)\n  }\n\n  _checkContent(arg) {\n    for (const [selector, content] of Object.entries(arg)) {\n      super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n    }\n  }\n\n  _setContent(template, content, selector) {\n    const templateElement = SelectorEngine.findOne(selector, template)\n\n    if (!templateElement) {\n      return\n    }\n\n    content = this._resolvePossibleFunction(content)\n\n    if (!content) {\n      templateElement.remove()\n      return\n    }\n\n    if (isElement(content)) {\n      this._putElementInTemplate(getElement(content), templateElement)\n      return\n    }\n\n    if (this._config.html) {\n      templateElement.innerHTML = this._maybeSanitize(content)\n      return\n    }\n\n    templateElement.textContent = content\n  }\n\n  _maybeSanitize(arg) {\n    return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [undefined, this])\n  }\n\n  _putElementInTemplate(element, templateElement) {\n    if (this._config.html) {\n      templateElement.innerHTML = ''\n      templateElement.append(element)\n      return\n    }\n\n    templateElement.textContent = element.textContent\n  }\n}\n\nexport default TemplateFactory\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport {\n  defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop\n} from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  animation: true,\n  boundary: 'clippingParents',\n  container: false,\n  customClass: '',\n  delay: 0,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  html: false,\n  offset: [0, 6],\n  placement: 'top',\n  popperConfig: null,\n  sanitize: true,\n  sanitizeFn: null,\n  selector: false,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' +\n            '<div class=\"tooltip-arrow\"></div>' +\n            '<div class=\"tooltip-inner\"></div>' +\n            '</div>',\n  title: '',\n  trigger: 'hover focus'\n}\n\nconst DefaultType = {\n  allowList: 'object',\n  animation: 'boolean',\n  boundary: '(string|element)',\n  container: '(string|element|boolean)',\n  customClass: '(string|function)',\n  delay: '(number|object)',\n  fallbackPlacements: 'array',\n  html: 'boolean',\n  offset: '(array|string|function)',\n  placement: '(string|function)',\n  popperConfig: '(null|object|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  selector: '(string|boolean)',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org/docs/v2/)')\n    }\n\n    super(element, config)\n\n    // Private\n    this._isEnabled = true\n    this._timeout = 0\n    this._isHovered = null\n    this._activeTrigger = {}\n    this._popper = null\n    this._templateFactory = null\n    this._newContent = null\n\n    // Protected\n    this.tip = null\n\n    this._setListeners()\n\n    if (!this._config.selector) {\n      this._fixTitle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  enable() {\n    this._isEnabled = true\n  }\n\n  disable() {\n    this._isEnabled = false\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled\n  }\n\n  toggle() {\n    if (!this._isEnabled) {\n      return\n    }\n\n    if (this._isShown()) {\n      this._leave()\n      return\n    }\n\n    this._enter()\n  }\n\n  dispose() {\n    clearTimeout(this._timeout)\n\n    EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n    if (this._element.getAttribute('data-bs-original-title')) {\n      this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n    }\n\n    this._disposePopper()\n    super.dispose()\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements')\n    }\n\n    if (!(this._isWithContent() && this._isEnabled)) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n    const shadowRoot = findShadowRoot(this._element)\n    const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return\n    }\n\n    // TODO: v6 remove this or make it optional\n    this._disposePopper()\n\n    const tip = this._getTipElement()\n\n    this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n    const { container } = this._config\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.append(tip)\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n    }\n\n    this._popper = this._createPopper(tip)\n\n    tip.classList.add(CLASS_NAME_SHOW)\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop)\n      }\n    }\n\n    const complete = () => {\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n      if (this._isHovered === false) {\n        this._leave()\n      }\n\n      this._isHovered = false\n    }\n\n    this._queueCallback(complete, this.tip, this._isAnimated())\n  }\n\n  hide() {\n    if (!this._isShown()) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const tip = this._getTipElement()\n    tip.classList.remove(CLASS_NAME_SHOW)\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop)\n      }\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false\n    this._activeTrigger[TRIGGER_FOCUS] = false\n    this._activeTrigger[TRIGGER_HOVER] = false\n    this._isHovered = null // it is a trick to support manual triggering\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return\n      }\n\n      if (!this._isHovered) {\n        this._disposePopper()\n      }\n\n      this._element.removeAttribute('aria-describedby')\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n    }\n\n    this._queueCallback(complete, this.tip, this._isAnimated())\n  }\n\n  update() {\n    if (this._popper) {\n      this._popper.update()\n    }\n  }\n\n  // Protected\n  _isWithContent() {\n    return Boolean(this._getTitle())\n  }\n\n  _getTipElement() {\n    if (!this.tip) {\n      this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n    }\n\n    return this.tip\n  }\n\n  _createTipElement(content) {\n    const tip = this._getTemplateFactory(content).toHtml()\n\n    // TODO: remove this check in v6\n    if (!tip) {\n      return null\n    }\n\n    tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n    // TODO: v6 the following can be achieved with CSS only\n    tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n    const tipId = getUID(this.constructor.NAME).toString()\n\n    tip.setAttribute('id', tipId)\n\n    if (this._isAnimated()) {\n      tip.classList.add(CLASS_NAME_FADE)\n    }\n\n    return tip\n  }\n\n  setContent(content) {\n    this._newContent = content\n    if (this._isShown()) {\n      this._disposePopper()\n      this.show()\n    }\n  }\n\n  _getTemplateFactory(content) {\n    if (this._templateFactory) {\n      this._templateFactory.changeContent(content)\n    } else {\n      this._templateFactory = new TemplateFactory({\n        ...this._config,\n        // the `content` var has to be after `this._config`\n        // to override config.content in case of popover\n        content,\n        extraClass: this._resolvePossibleFunction(this._config.customClass)\n      })\n    }\n\n    return this._templateFactory\n  }\n\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n    }\n  }\n\n  _getTitle() {\n    return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n  }\n\n  // Private\n  _initializeOnDelegatedTarget(event) {\n    return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n  }\n\n  _isAnimated() {\n    return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _isShown() {\n    return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _createPopper(tip) {\n    const placement = execute(this._config.placement, [this, tip, this._element])\n    const attachment = AttachmentMap[placement.toUpperCase()]\n    return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n  }\n\n  _getOffset() {\n    const { offset } = this._config\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(value => Number.parseInt(value, 10))\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element)\n    }\n\n    return offset\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [this._element, this._element])\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [\n        {\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        },\n        {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        },\n        {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        },\n        {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        },\n        {\n          name: 'preSetPlacement',\n          enabled: true,\n          phase: 'beforeMain',\n          fn: data => {\n            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n            this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n          }\n        }\n      ]\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])\n    }\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ')\n\n    for (const trigger of triggers) {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[TRIGGER_CLICK] = !(context._isShown() && context._activeTrigger[TRIGGER_CLICK])\n          context.toggle()\n        })\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ?\n          this.constructor.eventName(EVENT_MOUSEENTER) :\n          this.constructor.eventName(EVENT_FOCUSIN)\n        const eventOut = trigger === TRIGGER_HOVER ?\n          this.constructor.eventName(EVENT_MOUSELEAVE) :\n          this.constructor.eventName(EVENT_FOCUSOUT)\n\n        EventHandler.on(this._element, eventIn, this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n          context._enter()\n        })\n        EventHandler.on(this._element, eventOut, this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n            context._element.contains(event.relatedTarget)\n\n          context._leave()\n        })\n      }\n    }\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide()\n      }\n    }\n\n    EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title')\n\n    if (!title) {\n      return\n    }\n\n    if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n      this._element.setAttribute('aria-label', title)\n    }\n\n    this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n    this._element.removeAttribute('title')\n  }\n\n  _enter() {\n    if (this._isShown() || this._isHovered) {\n      this._isHovered = true\n      return\n    }\n\n    this._isHovered = true\n\n    this._setTimeout(() => {\n      if (this._isHovered) {\n        this.show()\n      }\n    }, this._config.delay.show)\n  }\n\n  _leave() {\n    if (this._isWithActiveTrigger()) {\n      return\n    }\n\n    this._isHovered = false\n\n    this._setTimeout(() => {\n      if (!this._isHovered) {\n        this.hide()\n      }\n    }, this._config.delay.hide)\n  }\n\n  _setTimeout(handler, timeout) {\n    clearTimeout(this._timeout)\n    this._timeout = setTimeout(handler, timeout)\n  }\n\n  _isWithActiveTrigger() {\n    return Object.values(this._activeTrigger).includes(true)\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n    for (const dataAttribute of Object.keys(dataAttributes)) {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n        delete dataAttributes[dataAttribute]\n      }\n    }\n\n    config = {\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    }\n    config = this._mergeConfigObj(config)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  _configAfterMerge(config) {\n    config.container = config.container === false ? document.body : getElement(config.container)\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      }\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString()\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString()\n    }\n\n    return config\n  }\n\n  _getDelegateConfig() {\n    const config = {}\n\n    for (const [key, value] of Object.entries(this._config)) {\n      if (this.constructor.Default[key] !== value) {\n        config[key] = value\n      }\n    }\n\n    config.selector = false\n    config.trigger = 'manual'\n\n    // In the future can be replaced with:\n    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n    // `Object.fromEntries(keysWithDifferentValues)`\n    return config\n  }\n\n  _disposePopper() {\n    if (this._popper) {\n      this._popper.destroy()\n      this._popper = null\n    }\n\n    if (this.tip) {\n      this.tip.remove()\n      this.tip = null\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n  ...Tooltip.Default,\n  content: '',\n  offset: [0, 8],\n  placement: 'right',\n  template: '<div class=\"popover\" role=\"tooltip\">' +\n    '<div class=\"popover-arrow\"></div>' +\n    '<h3 class=\"popover-header\"></h3>' +\n    '<div class=\"popover-body\"></div>' +\n    '</div>',\n  trigger: 'click'\n}\n\nconst DefaultType = {\n  ...Tooltip.DefaultType,\n  content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Overrides\n  _isWithContent() {\n    return this._getTitle() || this._getContent()\n  }\n\n  // Private\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TITLE]: this._getTitle(),\n      [SELECTOR_CONTENT]: this._getContent()\n    }\n  }\n\n  _getContent() {\n    return this._resolvePossibleFunction(this._config.content)\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin, getElement, isDisabled, isVisible\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n  offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: '0px 0px -25%',\n  smoothScroll: false,\n  target: null,\n  threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n  offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: 'string',\n  smoothScroll: 'boolean',\n  target: 'element',\n  threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    // this._element is the observablesContainer and config.target the menu links wrapper\n    this._targetLinks = new Map()\n    this._observableSections = new Map()\n    this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n    this._activeTarget = null\n    this._observer = null\n    this._previousScrollData = {\n      visibleEntryTop: 0,\n      parentScrollTop: 0\n    }\n    this.refresh() // initialize\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  refresh() {\n    this._initializeTargetsAndObservables()\n    this._maybeEnableSmoothScroll()\n\n    if (this._observer) {\n      this._observer.disconnect()\n    } else {\n      this._observer = this._getNewObserver()\n    }\n\n    for (const section of this._observableSections.values()) {\n      this._observer.observe(section)\n    }\n  }\n\n  dispose() {\n    this._observer.disconnect()\n    super.dispose()\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n    config.target = getElement(config.target) || document.body\n\n    // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n    config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n    if (typeof config.threshold === 'string') {\n      config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n    }\n\n    return config\n  }\n\n  _maybeEnableSmoothScroll() {\n    if (!this._config.smoothScroll) {\n      return\n    }\n\n    // unregister any previous listeners\n    EventHandler.off(this._config.target, EVENT_CLICK)\n\n    EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n      const observableSection = this._observableSections.get(event.target.hash)\n      if (observableSection) {\n        event.preventDefault()\n        const root = this._rootElement || window\n        const height = observableSection.offsetTop - this._element.offsetTop\n        if (root.scrollTo) {\n          root.scrollTo({ top: height, behavior: 'smooth' })\n          return\n        }\n\n        // Chrome 60 doesn't support `scrollTo`\n        root.scrollTop = height\n      }\n    })\n  }\n\n  _getNewObserver() {\n    const options = {\n      root: this._rootElement,\n      threshold: this._config.threshold,\n      rootMargin: this._config.rootMargin\n    }\n\n    return new IntersectionObserver(entries => this._observerCallback(entries), options)\n  }\n\n  // The logic of selection\n  _observerCallback(entries) {\n    const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n    const activate = entry => {\n      this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n      this._process(targetElement(entry))\n    }\n\n    const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n    const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n    this._previousScrollData.parentScrollTop = parentScrollTop\n\n    for (const entry of entries) {\n      if (!entry.isIntersecting) {\n        this._activeTarget = null\n        this._clearActiveClass(targetElement(entry))\n\n        continue\n      }\n\n      const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n      // if we are scrolling down, pick the bigger offsetTop\n      if (userScrollsDown && entryIsLowerThanPrevious) {\n        activate(entry)\n        // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n        if (!parentScrollTop) {\n          return\n        }\n\n        continue\n      }\n\n      // if we are scrolling up, pick the smallest offsetTop\n      if (!userScrollsDown && !entryIsLowerThanPrevious) {\n        activate(entry)\n      }\n    }\n  }\n\n  _initializeTargetsAndObservables() {\n    this._targetLinks = new Map()\n    this._observableSections = new Map()\n\n    const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n    for (const anchor of targetLinks) {\n      // ensure that the anchor has an id and is not disabled\n      if (!anchor.hash || isDisabled(anchor)) {\n        continue\n      }\n\n      const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element)\n\n      // ensure that the observableSection exists & is visible\n      if (isVisible(observableSection)) {\n        this._targetLinks.set(decodeURI(anchor.hash), anchor)\n        this._observableSections.set(anchor.hash, observableSection)\n      }\n    }\n  }\n\n  _process(target) {\n    if (this._activeTarget === target) {\n      return\n    }\n\n    this._clearActiveClass(this._config.target)\n    this._activeTarget = target\n    target.classList.add(CLASS_NAME_ACTIVE)\n    this._activateParents(target)\n\n    EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n  }\n\n  _activateParents(target) {\n    // Activate dropdown parents\n    if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n        .classList.add(CLASS_NAME_ACTIVE)\n      return\n    }\n\n    for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n      // Set triggered links parents as active\n      // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n      for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n        item.classList.add(CLASS_NAME_ACTIVE)\n      }\n    }\n  }\n\n  _clearActiveClass(parent) {\n    parent.classList.remove(CLASS_NAME_ACTIVE)\n\n    const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n    for (const node of activeNodes) {\n      node.classList.remove(CLASS_NAME_ACTIVE)\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n    ScrollSpy.getOrCreateInstance(spy)\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst HOME_KEY = 'Home'\nconst END_KEY = 'End'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n  constructor(element) {\n    super(element)\n    this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n    if (!this._parent) {\n      return\n      // TODO: should throw exception in v6\n      // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n    }\n\n    // Set up initial aria attributes\n    this._setInitialAttributes(this._parent, this._getChildren())\n\n    EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show() { // Shows this elem and deactivate the active sibling if exists\n    const innerElem = this._element\n    if (this._elemIsActive(innerElem)) {\n      return\n    }\n\n    // Search for active tab on same parent to deactivate it\n    const active = this._getActiveElem()\n\n    const hideEvent = active ?\n      EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n      null\n\n    const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n    if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n      return\n    }\n\n    this._deactivate(active, innerElem)\n    this._activate(innerElem, active)\n  }\n\n  // Private\n  _activate(element, relatedElem) {\n    if (!element) {\n      return\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE)\n\n    this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.add(CLASS_NAME_SHOW)\n        return\n      }\n\n      element.removeAttribute('tabindex')\n      element.setAttribute('aria-selected', true)\n      this._toggleDropDown(element, true)\n      EventHandler.trigger(element, EVENT_SHOWN, {\n        relatedTarget: relatedElem\n      })\n    }\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _deactivate(element, relatedElem) {\n    if (!element) {\n      return\n    }\n\n    element.classList.remove(CLASS_NAME_ACTIVE)\n    element.blur()\n\n    this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.remove(CLASS_NAME_SHOW)\n        return\n      }\n\n      element.setAttribute('aria-selected', false)\n      element.setAttribute('tabindex', '-1')\n      this._toggleDropDown(element, false)\n      EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n    }\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _keydown(event) {\n    if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key))) {\n      return\n    }\n\n    event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n    event.preventDefault()\n\n    const children = this._getChildren().filter(element => !isDisabled(element))\n    let nextActiveElement\n\n    if ([HOME_KEY, END_KEY].includes(event.key)) {\n      nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1]\n    } else {\n      const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n      nextActiveElement = getNextActiveElement(children, event.target, isNext, true)\n    }\n\n    if (nextActiveElement) {\n      nextActiveElement.focus({ preventScroll: true })\n      Tab.getOrCreateInstance(nextActiveElement).show()\n    }\n  }\n\n  _getChildren() { // collection of inner elements\n    return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n  }\n\n  _getActiveElem() {\n    return this._getChildren().find(child => this._elemIsActive(child)) || null\n  }\n\n  _setInitialAttributes(parent, children) {\n    this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n    for (const child of children) {\n      this._setInitialAttributesOnChild(child)\n    }\n  }\n\n  _setInitialAttributesOnChild(child) {\n    child = this._getInnerElement(child)\n    const isActive = this._elemIsActive(child)\n    const outerElem = this._getOuterElement(child)\n    child.setAttribute('aria-selected', isActive)\n\n    if (outerElem !== child) {\n      this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n    }\n\n    if (!isActive) {\n      child.setAttribute('tabindex', '-1')\n    }\n\n    this._setAttributeIfNotExists(child, 'role', 'tab')\n\n    // set attributes to the related panel too\n    this._setInitialAttributesOnTargetPanel(child)\n  }\n\n  _setInitialAttributesOnTargetPanel(child) {\n    const target = SelectorEngine.getElementFromSelector(child)\n\n    if (!target) {\n      return\n    }\n\n    this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n    if (child.id) {\n      this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`)\n    }\n  }\n\n  _toggleDropDown(element, open) {\n    const outerElem = this._getOuterElement(element)\n    if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n      return\n    }\n\n    const toggle = (selector, className) => {\n      const element = SelectorEngine.findOne(selector, outerElem)\n      if (element) {\n        element.classList.toggle(className, open)\n      }\n    }\n\n    toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n    toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n    outerElem.setAttribute('aria-expanded', open)\n  }\n\n  _setAttributeIfNotExists(element, attribute, value) {\n    if (!element.hasAttribute(attribute)) {\n      element.setAttribute(attribute, value)\n    }\n  }\n\n  _elemIsActive(elem) {\n    return elem.classList.contains(CLASS_NAME_ACTIVE)\n  }\n\n  // Try to get the inner element (usually the .nav-link)\n  _getInnerElement(elem) {\n    return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n  }\n\n  // Try to get the outer element (usually the .nav-item)\n  _getOuterElement(elem) {\n    return elem.closest(SELECTOR_OUTER) || elem\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  if (isDisabled(this)) {\n    return\n  }\n\n  Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n    Tab.getOrCreateInstance(element)\n  }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin, reflow } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n}\n\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._timeout = null\n    this._hasMouseInteraction = false\n    this._hasKeyboardInteraction = false\n    this._setListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._clearTimeout()\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE)\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      EventHandler.trigger(this._element, EVENT_SHOWN)\n\n      this._maybeScheduleHide()\n    }\n\n    this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n    reflow(this._element)\n    this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n    this._queueCallback(complete, this._element, this._config.animation)\n  }\n\n  hide() {\n    if (!this.isShown()) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n      this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOWING)\n    this._queueCallback(complete, this._element, this._config.animation)\n  }\n\n  dispose() {\n    this._clearTimeout()\n\n    if (this.isShown()) {\n      this._element.classList.remove(CLASS_NAME_SHOW)\n    }\n\n    super.dispose()\n  }\n\n  isShown() {\n    return this._element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  // Private\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide()\n    }, this._config.delay)\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout': {\n        this._hasMouseInteraction = isInteracting\n        break\n      }\n\n      case 'focusin':\n      case 'focusout': {\n        this._hasKeyboardInteraction = isInteracting\n        break\n      }\n\n      default: {\n        break\n      }\n    }\n\n    if (isInteracting) {\n      this._clearTimeout()\n      return\n    }\n\n    const nextElement = event.relatedTarget\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return\n    }\n\n    this._maybeScheduleHide()\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout)\n    this._timeout = null\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config](this)\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n", "// Entry point for the build script in your package.json\nimport \"@hotwired/turbo-rails\"\nimport \"trix\"\nimport \"@rails/actiontext\"\n\nimport \"./controllers\"\n\n// import \"@popperjs/core\"\n\nimport \"bootstrap\"\n\nimport * as bootstrap from \"bootstrap\"\nwindow.bootstrap = bootstrap\n"],
  "mappings": "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",
  "names": ["consumer", "error", "consumer", "s", "consumer", "s", "subscription", "a", "start", "name", "style", "x", "y", "getComputedStyle", "getComputedStyle", "window", "min", "max", "v", "popperOffsets", "min", "max", "offset", "effect", "toPaddingObject", "x", "y", "popper", "getComputedStyle", "effect", "window", "fn", "hash", "x", "y", "x", "y", "getComputedStyle", "getComputedStyle", "clippingParents", "getComputedStyle", "reference", "start", "popperOffsets", "offset", "placements", "placement", "a", "b", "placements", "placement", "i", "start", "_loop", "_i", "checks", "offset", "x", "y", "popperOffsets", "offset", "min", "max", "start", "debounce", "fn", "merged", "defaultModifiers", "defaultOptions", "createPopper", "reference", "popper", "options", "m", "fn", "debounce", "destroy", "state", "effect", "noopFn", "createPopper", "defaultModifiers", "createPopper", "createPopper", "start", "i", "_", "fn", "submitter", "config", "location", "left", "right", "error", "toCacheKey", "cookie", "id", "x", "y", "ctx", "morphChildren", "findBestMatch", "e", "morphNode", "createMorphContext", "normalizeElement", "normalizeParent", "session", "visit", "recentRequests", "Turbo", "document", "c", "createConsumer", "m", "x", "submitter", "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", "dompurify", "ADD_ATTR", "SAFE_FOR_XML", "RETURN_DOM", "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", "createEvent", "bubbles", "cancelable", "initEvent", "triggerEvent", "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", "attachment", "attachmentCaption", "attachmentCaptionEditor", "attachmentMetadata", "attachmentMetadataContainer", "attachmentName", "attachmentProgress", "attachmentSize", "attachmentToolbar", "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", "entries", "setPrototypeOf", "isFrozen", "getOwnPropertyDescriptor", "freeze", "seal", "create", "construct", "Reflect", "x", "func", "thisArg", "Func", "_len2", "_key2", "arrayForEach", "unapply", "arrayLastIndexOf", "lastIndexOf", "arrayPop", "pop", "arrayPush", "arraySplice", "arrayIsArray", "stringToLowerCase", "stringToString", "stringMatch", "stringReplace", "stringIndexOf", "indexOf", "stringTrim", "numberToString", "Number", "booleanToString", "Boolean", "bigintToString", "BigInt", "symbolToString", "Symbol", "objectHasOwnProperty", "hasOwnProperty", "objectToString", "regExpTest", "typeErrorCreate", "TypeError", "_len4", "_key4", "lastIndex", "_len3", "_key3", "addToSet", "set", "transformCaseFunc", "l", "lcElement", "cleanArray", "clone", "newObject", "property", "lookupGetter", "desc", "t", "e", "i", "n", "r", "o", "s", "c", "u", "h", "d", "g", "m", "p", "f", "v", "A", "y", "C", "E", "S", "R", "T", "k", "w", "D", "L", "N", "I", "O", "F", "P", "M", "B", "_", "j", "W", "U", "V", "z", "H", "q", "J", "K", "G", "X", "Y", "$", "Z", "Q", "tt", "et", "it", "nt", "rt", "ot", "st", "at", "lt", "ct", "ut", "ht", "dt", "gt", "mt", "pt", "ft", "bt", "vt", "At", "yt", "xt", "Ct", "Et", "St", "Rt", "Tt", "kt", "wt", "Dt", "Lt", "Nt", "It", "_unused", "Ot", "Ft", "Pt", "Mt", "Bt", "_t", "jt", "Wt", "Ut", "Vt", "qt", "zt", "Ht", "Jt", "Kt", "valueAsRecord", "valueToString", "stringified", "DOMPurify", "addHook", "attrName", "keepAttr", "forceKeepAttr", "DEFAULT_ALLOWED_ATTRIBUTES", "DEFAULT_FORBIDDEN_PROTOCOLS", "DEFAULT_FORBIDDEN_ELEMENTS", "HTMLSanitizer", "sanitizedElement", "sanitize", "sanitizedHtml", "getHTML", "outerHTML", "innerHTML", "sanitizer", "allowedAttributes", "forbiddenProtocols", "forbiddenElements", "purifyOptions", "createBodyElementForHTML", "sanitizeElements", "normalizeListElementNesting", "purifyConfig", "assign", "setConfig", "getBody", "walker", "nodesToRemove", "nextNode", "currentNode", "elementIsRemovable", "sanitizeElement", "hasAttribute", "protocol", "removeAttribute", "_ref", "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", "isValidAttribute", "_config$attachments$t", "findProgressElement", "_this$findElement", "attachmentDidChangeUploadProgress", "div", "PreviewableAttachmentView", "previewDelegate", "image", "src", "refresh", "updateAttributesForImage", "getURL", "previewURL", "getPreviewURL", "serializedAttributes", "width", "getWidth", "height", "getHeight", "alt", "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", "endsWithWhitespace", "previousPiece", "BlockView", "block", "createComment", "_getBlockConfig", "getLastAttribute", "textView", "shouldAddExtraNewlineElement", "isRTL", "getBlockBreakPosition", "DocumentView", "render", "sync", "elementStore", "setDocument", "shadowElement", "getBlocks", "isSynced", "elementsHaveEqualHTML", "documentFragment", "lastChild", "fragment", "createDocumentFragmentForSync", "didSync", "findStoredElements", "createDocumentFragment", "storedElement", "replaceChild", "otherElement", "ignoreSpaces", "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", "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", "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", "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", "_this$delegate23", "_this$delegate24", "_this$delegate25", "_this$responder26", "shift", "_this$delegate26", "_this$responder27", "_this$responder28", "_this$responder29", "_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", "setCustomValidity", "checkValidity", "isSafeAttribute", "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", "editorElements", "_this$ownerDocument", "nodeList", "makeEditable", "toggleAttribute", "configureContentEditable", "disableObjectResizing", "setDefaultParagraphSeparator", "_document$queryComman", "_document", "queryCommandSupported", "execCommand", "_document$queryComman2", "_document2", "cursorTargetStyles", "_internals", "WeakMap", "_formDisabled", "_validate", "WeakSet", "ElementInternalsDelegate", "_classPrivateFieldInitSpec", "writable", "_classPrivateFieldSet", "attachInternals", "_classPrivateMethodGet", "_validate2", "disconnectedCallback", "_classPrivateFieldGet", "labels", "required", "validity", "validationMessage", "formDisabledCallback", "reportValidity", "customValidationMessage", "valueMissing", "customError", "setValidity", "_focusHandler", "_resetBubbled", "_clickBubbled", "LegacyDelegate", "contains", "label", "texts", "_classPrivateFieldGet2", "console", "warn", "_delegate", "TrixEditorElement", "willCreateInput", "formAssociated", "inputElement", "localName", "toolbarId", "internalToolbar", "_this$ownerDocument2", "_this$editorControlle", "editorController", "defaultValue", "_this$editor", "attributeChangedCallback", "newValue", "isConnected", "reconnect", "inputId", "nextElementSibling", "_this$editorControlle2", "removeInternalToolbar", "_this$internalToolbar", "formResetCallback", "Trix", "VERSION", "version", "core", "models", "controllers", "observers", "customElements", "define", "x", "k", "a", "b", "c", "d", "s", "i", "n", "lo", "hi", "j", "to", "end", "hex", "SparkMD5", "hash", "start", "error", "event", "left", "right", "application", "error", "_", "e", "match", "oldValue", "left", "right", "_", "error", "constructor", "extend", "a", "b", "application", "element", "c", "n", "k", "v", "read", "write", "error", "n", "s", "v", "Unit", "dt", "start", "end", "DefaultFormatLocalization", "i", "_", "d", "left", "right", "x", "p", "p2", "m", "a", "b", "B", "y", "M", "e", "template", "o", "defaultOptions", "t", "k", "config", "ActionTypes", "div", "top", "bottom", "reflow", "SecondDisplay", "createPopper", "max", "arrow", "icon", "$", "li", "e", "m", "s", "FetchResponse", "cookie", "FetchRequest", "error", "fetch", "FetchResponse", "_", "FetchRequest", "FetchRequest", "id", "i", "e", "min", "max", "main", "_", "v", "p", "o", "s", "main", "_", "id", "id", "r", "t", "e", "a", "r", "id", "e", "e", "t", "n", "r", "i", "a", "o", "s", "c", "l", "d", "e", "h", "f", "t", "n", "r", "p", "m", "g", "_", "i", "a", "o", "s", "v", "y", "b", "x", "S", "C", "w", "T", "E", "D", "O", "k", "A", "j", "M", "N", "c", "l", "u", "P", "F", "I", "L", "R", "z", "config", "k", "v", "r", "error", "id", "z", "elementMap", "Map", "set", "element", "key", "instance", "has", "instanceMap", "get", "size", "console", "error", "Array", "from", "keys", "remove", "delete", "MAX_UID", "MILLISECONDS_MULTIPLIER", "TRANSITION_END", "parseSelector", "selector", "window", "CSS", "escape", "replace", "match", "id", "toType", "object", "undefined", "Object", "prototype", "toString", "call", "toLowerCase", "getUID", "prefix", "Math", "floor", "random", "document", "getElementById", "getTransitionDurationFromElement", "transitionDuration", "transitionDelay", "getComputedStyle", "floatTransitionDuration", "Number", "parseFloat", "floatTransitionDelay", "split", "triggerTransitionEnd", "dispatchEvent", "Event", "isElement", "jquery", "nodeType", "getElement", "length", "querySelector", "isVisible", "getClientRects", "elementIsVisible", "getPropertyValue", "closedDetails", "closest", "summary", "parentNode", "isDisabled", "Node", "ELEMENT_NODE", "classList", "contains", "disabled", "hasAttribute", "getAttribute", "findShadowRoot", "documentElement", "attachShadow", "getRootNode", "root", "ShadowRoot", "noop", "reflow", "offsetHeight", "getjQuery", "jQuery", "body", "DOMContentLoadedCallbacks", "onDOMContentLoaded", "callback", "readyState", "addEventListener", "push", "isRTL", "dir", "defineJQueryPlugin", "plugin", "$", "name", "NAME", "JQUERY_NO_CONFLICT", "fn", "jQueryInterface", "Constructor", "noConflict", "execute", "possibleCallback", "args", "defaultValue", "executeAfterTransition", "transitionElement", "waitForTransition", "durationPadding", "emulatedDuration", "called", "handler", "target", "removeEventListener", "setTimeout", "getNextActiveElement", "list", "activeElement", "shouldGetNext", "isCycleAllowed", "listLength", "index", "indexOf", "max", "min", "namespaceRegex", "stripNameRegex", "stripUidRegex", "eventRegistry", "uidEvent", "customEvents", "mouseenter", "mouseleave", "nativeEvents", "Set", "makeEventUid", "uid", "getElementEvents", "bootstrapHandler", "event", "hydrateObj", "delegateTarget", "oneOff", "EventHandler", "off", "type", "apply", "bootstrapDelegationHandler", "domElements", "querySelectorAll", "domElement", "findHandler", "events", "callable", "delegationSelector", "values", "find", "normalizeParameters", "originalTypeEvent", "delegationFunction", "isDelegated", "typeEvent", "getTypeEvent", "addHandler", "wrapFunction", "relatedTarget", "handlers", "previousFunction", "removeHandler", "Boolean", "removeNamespacedHandlers", "namespace", "storeElementEvent", "handlerKey", "entries", "includes", "on", "one", "inNamespace", "isNamespace", "startsWith", "elementEvent", "slice", "keyHandlers", "trigger", "jQueryEvent", "bubbles", "nativeDispatch", "defaultPrevented", "isPropagationStopped", "isImmediatePropagationStopped", "isDefaultPrevented", "evt", "cancelable", "preventDefault", "obj", "meta", "value", "_unused", "defineProperty", "configurable", "normalizeData", "JSON", "parse", "decodeURIComponent", "normalizeDataKey", "chr", "Manipulator", "setDataAttribute", "setAttribute", "removeDataAttribute", "removeAttribute", "getDataAttributes", "attributes", "bsKeys", "dataset", "filter", "pureKey", "charAt", "getDataAttribute", "Config", "Default", "DefaultType", "Error", "_getConfig", "config", "_mergeConfigObj", "_configAfterMerge", "_typeCheckConfig", "jsonConfig", "constructor", "configTypes", "property", "expectedTypes", "valueType", "RegExp", "test", "TypeError", "toUpperCase", "VERSION", "BaseComponent", "_element", "_config", "Data", "DATA_KEY", "dispose", "EVENT_KEY", "propertyName", "getOwnPropertyNames", "_queueCallback", "isAnimated", "getInstance", "getOrCreateInstance", "eventName", "getSelector", "hrefAttribute", "trim", "map", "sel", "join", "SelectorEngine", "concat", "Element", "findOne", "children", "child", "matches", "parents", "ancestor", "prev", "previous", "previousElementSibling", "next", "nextElementSibling", "focusableChildren", "focusables", "el", "getSelectorFromElement", "getElementFromSelector", "getMultipleElementsFromSelector", "enableDismissTrigger", "component", "method", "clickEvent", "tagName", "EVENT_CLOSE", "EVENT_CLOSED", "CLASS_NAME_FADE", "CLASS_NAME_SHOW", "Alert", "close", "closeEvent", "_destroyElement", "each", "data", "DATA_API_KEY", "CLASS_NAME_ACTIVE", "SELECTOR_DATA_TOGGLE", "EVENT_CLICK_DATA_API", "Button", "toggle", "button", "EVENT_TOUCHSTART", "EVENT_TOUCHMOVE", "EVENT_TOUCHEND", "EVENT_POINTERDOWN", "EVENT_POINTERUP", "POINTER_TYPE_TOUCH", "POINTER_TYPE_PEN", "CLASS_NAME_POINTER_EVENT", "SWIPE_THRESHOLD", "endCallback", "leftCallback", "rightCallback", "Swipe", "isSupported", "_deltaX", "_supportPointerEvents", "PointerEvent", "_initEvents", "_start", "touches", "clientX", "_eventIsPointerPenTouch", "_end", "_handleSwipe", "_move", "absDeltaX", "abs", "direction", "add", "pointerType", "navigator", "maxTouchPoints", "ARROW_LEFT_KEY", "ARROW_RIGHT_KEY", "TOUCHEVENT_COMPAT_WAIT", "ORDER_NEXT", "ORDER_PREV", "DIRECTION_LEFT", "DIRECTION_RIGHT", "EVENT_SLIDE", "EVENT_SLID", "EVENT_KEYDOWN", "EVENT_MOUSEENTER", "EVENT_MOUSELEAVE", "EVENT_DRAG_START", "EVENT_LOAD_DATA_API", "CLASS_NAME_CAROUSEL", "CLASS_NAME_SLIDE", "CLASS_NAME_END", "CLASS_NAME_START", "CLASS_NAME_NEXT", "CLASS_NAME_PREV", "SELECTOR_ACTIVE", "SELECTOR_ITEM", "SELECTOR_ACTIVE_ITEM", "SELECTOR_ITEM_IMG", "SELECTOR_INDICATORS", "SELECTOR_DATA_SLIDE", "SELECTOR_DATA_RIDE", "KEY_TO_DIRECTION", "interval", "keyboard", "pause", "ride", "touch", "wrap", "Carousel", "_interval", "_activeElement", "_isSliding", "touchTimeout", "_swipeHelper", "_indicatorsElement", "_addEventListeners", "cycle", "_slide", "nextWhenVisible", "hidden", "_clearInterval", "_updateInterval", "setInterval", "_maybeEnableCycle", "to", "items", "_getItems", "activeIndex", "_getItemIndex", "_getActive", "order", "defaultInterval", "_keydown", "_addTouchEventListeners", "img", "endCallBack", "clearTimeout", "swipeConfig", "_directionToOrder", "_setActiveIndicatorElement", "activeIndicator", "newActiveIndicator", "elementInterval", "parseInt", "isNext", "nextElement", "nextElementIndex", "triggerEvent", "_orderToDirection", "slideEvent", "isCycling", "directionalClassName", "orderClassName", "completeCallBack", "_isAnimated", "clearInterval", "carousel", "slideIndex", "carousels", "EVENT_SHOW", "EVENT_SHOWN", "EVENT_HIDE", "EVENT_HIDDEN", "CLASS_NAME_COLLAPSE", "CLASS_NAME_COLLAPSING", "CLASS_NAME_COLLAPSED", "CLASS_NAME_DEEPER_CHILDREN", "CLASS_NAME_HORIZONTAL", "WIDTH", "HEIGHT", "SELECTOR_ACTIVES", "parent", "Collapse", "_isTransitioning", "_triggerArray", "toggleList", "elem", "filterElement", "foundElement", "_initializeChildren", "_addAriaAndCollapsedClass", "_isShown", "hide", "show", "activeChildren", "_getFirstLevelChildren", "startEvent", "activeInstance", "dimension", "_getDimension", "style", "complete", "capitalizedDimension", "scrollSize", "getBoundingClientRect", "selected", "triggerArray", "isOpen", "ESCAPE_KEY", "TAB_KEY", "ARROW_UP_KEY", "ARROW_DOWN_KEY", "RIGHT_MOUSE_BUTTON", "EVENT_KEYDOWN_DATA_API", "EVENT_KEYUP_DATA_API", "CLASS_NAME_DROPUP", "CLASS_NAME_DROPEND", "CLASS_NAME_DROPSTART", "CLASS_NAME_DROPUP_CENTER", "CLASS_NAME_DROPDOWN_CENTER", "SELECTOR_DATA_TOGGLE_SHOWN", "SELECTOR_MENU", "SELECTOR_NAVBAR", "SELECTOR_NAVBAR_NAV", "SELECTOR_VISIBLE_ITEMS", "PLACEMENT_TOP", "PLACEMENT_TOPEND", "PLACEMENT_BOTTOM", "PLACEMENT_BOTTOMEND", "PLACEMENT_RIGHT", "PLACEMENT_LEFT", "PLACEMENT_TOPCENTER", "PLACEMENT_BOTTOMCENTER", "autoClose", "boundary", "display", "offset", "popperConfig", "reference", "Dropdown", "_popper", "_parent", "_menu", "_inNavbar", "_detectNavbar", "showEvent", "_createPopper", "focus", "_completeHide", "destroy", "update", "hideEvent", "Popper", "referenceElement", "_getPopperConfig", "createPopper", "_getPlacement", "parentDropdown", "isEnd", "_getOffset", "popperData", "defaultBsPopperConfig", "placement", "modifiers", "options", "enabled", "_selectMenuItem", "clearMenus", "openToggles", "context", "composedPath", "isMenuTarget", "dataApiKeydownHandler", "isInput", "isEscapeEvent", "isUpOrDownEvent", "getToggleButton", "stopPropagation", "EVENT_MOUSEDOWN", "className", "clickCallback", "rootElement", "Backdrop", "_isAppended", "_append", "_getElement", "_emulateAnimation", "backdrop", "createElement", "append", "EVENT_FOCUSIN", "EVENT_KEYDOWN_TAB", "TAB_NAV_FORWARD", "TAB_NAV_BACKWARD", "autofocus", "trapElement", "FocusTrap", "_isActive", "_lastTabNavDirection", "activate", "_handleFocusin", "_handleKeydown", "deactivate", "elements", "shiftKey", "SELECTOR_FIXED_CONTENT", "SELECTOR_STICKY_CONTENT", "PROPERTY_PADDING", "PROPERTY_MARGIN", "ScrollBarHelper", "getWidth", "documentWidth", "clientWidth", "innerWidth", "width", "_disableOverFlow", "_setElementAttributes", "calculatedValue", "reset", "_resetElementAttributes", "isOverflowing", "_saveInitialAttribute", "overflow", "styleProperty", "scrollbarWidth", "manipulationCallBack", "setProperty", "_applyManipulationCallback", "actualValue", "removeProperty", "callBack", "EVENT_HIDE_PREVENTED", "EVENT_RESIZE", "EVENT_CLICK_DISMISS", "EVENT_MOUSEDOWN_DISMISS", "EVENT_KEYDOWN_DISMISS", "CLASS_NAME_OPEN", "CLASS_NAME_STATIC", "OPEN_SELECTOR", "SELECTOR_DIALOG", "SELECTOR_MODAL_BODY", "Modal", "_dialog", "_backdrop", "_initializeBackDrop", "_focustrap", "_initializeFocusTrap", "_scrollBar", "_adjustDialog", "_showElement", "_hideModal", "handleUpdate", "scrollTop", "modalBody", "transitionComplete", "_triggerBackdropTransition", "event2", "_resetAdjustments", "isModalOverflowing", "scrollHeight", "clientHeight", "initialOverflowY", "overflowY", "isBodyOverflowing", "paddingLeft", "paddingRight", "alreadyOpen", "CLASS_NAME_SHOWING", "CLASS_NAME_HIDING", "CLASS_NAME_BACKDROP", "scroll", "Offcanvas", "blur", "completeCallback", "position", "ARIA_ATTRIBUTE_PATTERN", "DefaultAllowlist", "a", "area", "b", "br", "col", "code", "dd", "div", "dl", "dt", "em", "hr", "h1", "h2", "h3", "h4", "h5", "h6", "i", "li", "ol", "p", "pre", "s", "small", "span", "sub", "sup", "strong", "u", "ul", "uriAttributes", "SAFE_URL_PATTERN", "allowedAttribute", "attribute", "allowedAttributeList", "attributeName", "nodeName", "nodeValue", "attributeRegex", "some", "regex", "sanitizeHtml", "unsafeHtml", "allowList", "sanitizeFunction", "domParser", "DOMParser", "createdDocument", "parseFromString", "elementName", "attributeList", "allowedAttributes", "innerHTML", "content", "extraClass", "html", "sanitize", "sanitizeFn", "template", "DefaultContentType", "entry", "TemplateFactory", "getContent", "_resolvePossibleFunction", "hasContent", "changeContent", "_checkContent", "toHtml", "templateWrapper", "_maybeSanitize", "text", "_setContent", "arg", "templateElement", "_putElementInTemplate", "textContent", "DISALLOWED_ATTRIBUTES", "CLASS_NAME_MODAL", "SELECTOR_TOOLTIP_INNER", "SELECTOR_MODAL", "EVENT_MODAL_HIDE", "TRIGGER_HOVER", "TRIGGER_FOCUS", "TRIGGER_CLICK", "TRIGGER_MANUAL", "EVENT_INSERTED", "EVENT_CLICK", "EVENT_FOCUSOUT", "AttachmentMap", "AUTO", "TOP", "RIGHT", "BOTTOM", "LEFT", "animation", "container", "customClass", "delay", "fallbackPlacements", "title", "Tooltip", "_isEnabled", "_timeout", "_isHovered", "_activeTrigger", "_templateFactory", "_newContent", "tip", "_setListeners", "_fixTitle", "enable", "disable", "toggleEnabled", "_leave", "_enter", "_hideModalHandler", "_disposePopper", "_isWithContent", "shadowRoot", "isInTheDom", "ownerDocument", "_getTipElement", "_isWithActiveTrigger", "_getTitle", "_createTipElement", "_getContentForTemplate", "_getTemplateFactory", "tipId", "setContent", "_initializeOnDelegatedTarget", "_getDelegateConfig", "attachment", "phase", "state", "triggers", "eventIn", "eventOut", "_setTimeout", "timeout", "dataAttributes", "dataAttribute", "SELECTOR_TITLE", "SELECTOR_CONTENT", "Popover", "_getContent", "EVENT_ACTIVATE", "CLASS_NAME_DROPDOWN_ITEM", "SELECTOR_DATA_SPY", "SELECTOR_TARGET_LINKS", "SELECTOR_NAV_LIST_GROUP", "SELECTOR_NAV_LINKS", "SELECTOR_NAV_ITEMS", "SELECTOR_LIST_ITEMS", "SELECTOR_LINK_ITEMS", "SELECTOR_DROPDOWN", "SELECTOR_DROPDOWN_TOGGLE", "rootMargin", "smoothScroll", "threshold", "ScrollSpy", "_targetLinks", "_observableSections", "_rootElement", "_activeTarget", "_observer", "_previousScrollData", "visibleEntryTop", "parentScrollTop", "refresh", "_initializeTargetsAndObservables", "_maybeEnableSmoothScroll", "disconnect", "_getNewObserver", "section", "observe", "observableSection", "hash", "height", "offsetTop", "scrollTo", "top", "behavior", "IntersectionObserver", "_observerCallback", "targetElement", "_process", "userScrollsDown", "isIntersecting", "_clearActiveClass", "entryIsLowerThanPrevious", "targetLinks", "anchor", "decodeURI", "_activateParents", "listGroup", "item", "activeNodes", "node", "spy", "HOME_KEY", "END_KEY", "CLASS_DROPDOWN", "SELECTOR_DROPDOWN_MENU", "NOT_SELECTOR_DROPDOWN_TOGGLE", "SELECTOR_TAB_PANEL", "SELECTOR_OUTER", "SELECTOR_INNER", "SELECTOR_INNER_ELEM", "SELECTOR_DATA_TOGGLE_ACTIVE", "Tab", "_setInitialAttributes", "_getChildren", "innerElem", "_elemIsActive", "active", "_getActiveElem", "_deactivate", "_activate", "relatedElem", "_toggleDropDown", "nextActiveElement", "preventScroll", "_setAttributeIfNotExists", "_setInitialAttributesOnChild", "_getInnerElement", "isActive", "outerElem", "_getOuterElement", "_setInitialAttributesOnTargetPanel", "open", "EVENT_MOUSEOVER", "EVENT_MOUSEOUT", "CLASS_NAME_HIDE", "autohide", "Toast", "_hasMouseInteraction", "_hasKeyboardInteraction", "_clearTimeout", "_maybeScheduleHide", "isShown", "_onInteraction", "isInteracting"]
}
